void separate_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { /* * Example allows only one open separate response. * For multiple, the application must manage the list of stores. */ if (separate_active) { coap_separate_reject(); } else { separate_active = 1; /* Take over and skip response by engine. */ coap_separate_accept(request, &separate_store->request_metadata); /* Be aware to respect the Block2 option, which is also stored in the coap_separate_t. */ /* * At the moment, only the minimal information is stored in the store (client address, port, token, MID, type, and Block2). * Extend the store, if the application requires additional information from this handler. * buffer is an example field for custom information. */ snprintf(separate_store->buffer, sizeof(separate_store->buffer), "StoredInfo"); } }
void separate_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) { coap_packet_t *const coap_req = (coap_packet_t *) request; PRINTF("/separate "); if (separate_active) { PRINTF("REJECTED "); coap_separate_reject(); } else { PRINTF("STORED "); separate_active = 1; /* Take over and skip response by engine. */ coap_separate_accept(request, &separate_store->request_metadata); /* Be aware to respect the Block2 option, which is also stored in the coap_separate_t. */ snprintf(separate_store->buffer, MAX_PLUGFEST_PAYLOAD, "Type: %u\nCode: %u\nMID: %u", coap_req->type, coap_req->code, coap_req->mid); } PRINTF("(%s %u)\n", coap_req->type==COAP_TYPE_CON?"CON":"NON", coap_req->mid); }