47 #define PRINTF(...) printf(__VA_ARGS__)
48 #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])
49 #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])
52 #define PRINT6ADDR(addr)
53 #define PRINTLLADDR(addr)
82 const uint8_t *payload = 0;
83 int pay_len = REST.get_request_payload(request, &payload);
85 if(!pay_len || !payload) {
86 erbium_status_code = REST.status.BAD_REQUEST;
87 coap_error_message =
"NoPayload";
91 coap_packet_t *packet = (coap_packet_t *)request;
93 if(packet->block1_offset + pay_len > max_len) {
94 erbium_status_code = REST.status.REQUEST_ENTITY_TOO_LARGE;
95 coap_error_message =
"Message to big";
100 memcpy(target + packet->block1_offset, payload, pay_len);
101 *len = packet->block1_offset + pay_len;
104 if(IS_OPTION(packet, COAP_OPTION_BLOCK1)) {
105 PRINTF(
"Blockwise: block 1 request: Num: %u, More: %u, Size: %u, Offset: %u\n",
109 packet->block1_offset);
111 coap_set_header_block1(response, packet->block1_num, packet->block1_more, packet->block1_size);
112 if(packet->block1_more) {
113 coap_set_status_code(response, CONTINUE_2_31);
CoAP module for block 1 handling
uint16_t len
Length of the data that was previously sent.
An implementation of the Constrained Application Protocol (RFC).
int coap_block1_handler(void *request, void *response, uint8_t *target, size_t *len, size_t max_len)
Block 1 support within a coap-ressource.