From a51fa3b77d78e83679eddf20ade11b1ba451c0a1 Mon Sep 17 00:00:00 2001 From: Jon Shallow Date: Mon, 17 Feb 2025 09:23:32 +0000 Subject: [PATCH] Server Keepalive: Timeout sessions observing Unknown or Proxy resources In general, the Unknown or Proxy resources should not be set as observable. --- src/coap_session.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/coap_session.c b/src/coap_session.c index 986bbec8c2..a1bd5eb7aa 100644 --- a/src/coap_session.c +++ b/src/coap_session.c @@ -604,18 +604,32 @@ coap_session_free(coap_session_t *session) { #if COAP_SERVER_SUPPORT void coap_session_server_keepalive_failed(coap_session_t *session) { + int i; + coap_session_reference_lkd(session); coap_handle_event_lkd(session->context, COAP_EVENT_KEEPALIVE_FAILURE, session); coap_cancel_all_messages(session->context, session, NULL); RESOURCES_ITER(session->context->resources, r) { - int i; - /* In case code is broken somewhere */ for (i = 0; i < 1000; i++) { if (!coap_delete_observer(r, session, NULL)) break; } } + if (session->context->unknown_resource) { + /* In case code is broken somewhere */ + for (i = 0; i < 1000; i++) { + if (!coap_delete_observer(session->context->unknown_resource, session, NULL)) + break; + } + } + if (session->context->proxy_uri_resource) { + /* In case code is broken somewhere */ + for (i = 0; i < 1000; i++) { + if (!coap_delete_observer(session->context->proxy_uri_resource, session, NULL)) + break; + } + } while (session->delayqueue) { coap_queue_t *q = session->delayqueue;