diff --git a/os/net/app-layer/coap/coap-observe.c b/os/net/app-layer/coap/coap-observe.c index ac336fbd8..676c4d1b3 100644 --- a/os/net/app-layer/coap/coap-observe.c +++ b/os/net/app-layer/coap/coap-observe.c @@ -259,16 +259,18 @@ coap_notify_observers_sub(coap_resource_t *resource, const char *subpath) /* prepare response */ notification->mid = transaction->mid; + int32_t new_offset = 0; + /* Either old style get_handler or the full handler */ if(coap_call_handlers(request, notification, transaction->message + COAP_MAX_HEADER_SIZE, COAP_MAX_CHUNK_SIZE, - NULL) > 0) { + &new_offset) > 0) { LOG_DBG("Notification on new handlers\n"); } else { if(resource != NULL) { resource->get_handler(request, notification, transaction->message + COAP_MAX_HEADER_SIZE, - COAP_MAX_CHUNK_SIZE, NULL); + COAP_MAX_CHUNK_SIZE, &new_offset); } else { /* What to do here? */ notification->code = BAD_REQUEST_4_00; @@ -282,6 +284,17 @@ coap_notify_observers_sub(coap_resource_t *resource, const char *subpath) } coap_set_token(notification, obs->token, obs->token_len); + if(new_offset != 0) { + coap_set_header_block2(notification, + 0, + new_offset != -1, + COAP_MAX_BLOCK_SIZE); + coap_set_payload(notification, + notification->payload, + MIN(notification->payload_len, + COAP_MAX_BLOCK_SIZE)); + } + transaction->message_len = coap_serialize_message(notification, transaction->message);