48 #define PRINTF(...) printf(__VA_ARGS__)
49 #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])
50 #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])
53 #define PRINT6ADDR(addr)
54 #define PRINTLLADDR(addr)
72 erbium_status_code = SERVICE_UNAVAILABLE_5_03;
73 coap_error_message =
"AlreadyInUse";
90 coap_packet_t *
const coap_req = (coap_packet_t *)request;
91 coap_transaction_t *
const t = coap_get_transaction_by_mid(coap_req->mid);
93 PRINTF(
"Separate ACCEPT: /%.*s MID %u\n", coap_req->uri_path_len,
94 coap_req->uri_path, coap_req->mid);
97 if(coap_req->type == COAP_TYPE_CON) {
101 coap_init_message(ack, COAP_TYPE_ACK, 0, coap_req->mid);
103 coap_send_message(&
UIP_IP_BUF->srcipaddr, UIP_UDP_BUF->srcport,
110 separate_store->port = t->port;
113 separate_store->type =
114 coap_req->type == COAP_TYPE_CON ? COAP_TYPE_CON : COAP_TYPE_NON;
115 separate_store->mid = coap_get_mid();
117 memcpy(separate_store->token, coap_req->token, coap_req->token_len);
118 separate_store->token_len = coap_req->token_len;
120 separate_store->block1_num = coap_req->block1_num;
121 separate_store->block1_size = coap_req->block1_size;
123 separate_store->block2_num = coap_req->block2_num;
124 separate_store->block2_size = coap_req->block2_size > 0 ? MIN(COAP_MAX_BLOCK_SIZE, coap_req->block2_size) : COAP_MAX_BLOCK_SIZE;
127 erbium_status_code = MANUAL_RESPONSE;
129 PRINTF(
"ERROR: Response transaction for separate request not found!\n");
130 erbium_status_code = INTERNAL_SERVER_ERROR_5_00;
135 coap_separate_resume(
void *response, coap_separate_t *separate_store,
138 coap_init_message(response, separate_store->type, code,
139 separate_store->mid);
140 if(separate_store->token_len) {
141 coap_set_token(response, separate_store->token,
142 separate_store->token_len);
144 if(separate_store->block1_size) {
145 coap_set_header_block1(response, separate_store->block1_num,
146 0, separate_store->block1_size);
Default definitions of C compiler quirk work-arounds.
uip_appdata
Pointer to the application data in the packet buffer.
CoAP module for reliable transport
#define uip_ipaddr_copy(dest, src)
Copy an IP address from one place to another.
#define UIP_IP_BUF
Pointer to IP header.
void coap_separate_reject()
Reject a request that would require a separate response with an error message.
CoAP module for separate responses.
void coap_separate_accept(void *request, coap_separate_t *separate_store)
Initiate a separate response with an empty ACK.