8 #ifdef CONTIKI_TARGET_NETSIM
16 #include <sys/types.h>
17 #include <sys/socket.h>
18 #include <netinet/in.h>
19 #include <arpa/inet.h>
23 #include "contiki-net.h"
27 #include "coap-common.h"
32 #define PRINTF(...) printf(__VA_ARGS__)
33 #define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15])
34 #define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5])
37 #define PRINT6ADDR(addr)
38 #define PRINTLLADDR(addr)
41 void init_packet(coap_packet_t* packet)
45 packet->option_count = 0;
48 packet->options =
NULL;
52 packet->query_len = 0;
53 packet->payload =
NULL;
54 packet->payload_len = 0;
57 int serialize_packet(coap_packet_t* packet, uint8_t* buffer)
60 header_option_t* option =
NULL;
61 uint16_t option_delta = 0;
63 buffer[0] = (packet->ver) << COAP_HEADER_VERSION_POSITION;
64 buffer[0] |= (packet->type) << COAP_HEADER_TYPE_POSITION;
65 buffer[0] |= packet->option_count;
66 buffer[1] = packet->code;
75 PRINTF(
"serialize option_count %u\n", packet->option_count);
78 for (option = packet->options ; option ; option = option->next){
79 uint16_t delta = option->option - option_delta;
81 PRINTF(
"WARNING: Delta==Zero\n");
83 buffer[index] = (delta) << COAP_HEADER_OPTION_DELTA_POSITION;
85 PRINTF(
"option %u len %u option diff %u option_value addr %x option addr %x next option addr %x", option->option, option->len, option->option - option_delta, (
unsigned int) option->value, (
unsigned int)option, (
unsigned int)option->next);
88 for ( ; i < option->len ; i++ ){
89 PRINTF(
" (%u)", option->value[i]);
93 if (option->len < 0xF){
94 buffer[index] |= option->len;
97 buffer[index] |= (0xF);
98 buffer[index + 1] = option->len - (0xF);
102 memcpy((
char*)&buffer[index], option->value, option->len);
103 index += option->len;
104 option_delta = option->option;
108 memcpy(&buffer[index], packet->payload, packet->payload_len);
109 index += packet->payload_len;
#define NULL
The null pointer.
CCIF uint16_t uip_htons(uint16_t val)
Convert a 16-bit quantity from host byte order to network byte order.