Skip to content

Commit 79fff4d

Browse files
mlaschLukasWoodtli
authored andcommitted
server: Make client context available in de-registration callback
Remove the client context from server only after calling the monitoring callback when handling a de-registration. A as result, the client information is still available in the server context during the callback. Signed-off-by: Marc Lasch <[email protected]>
1 parent aae2467 commit 79fff4d

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

core/registration.c

+16-14
Original file line numberDiff line numberDiff line change
@@ -2018,12 +2018,17 @@ uint8_t registration_handleRequest(lwm2m_context_t * contextP,
20182018
if (!LWM2M_URI_IS_SET_OBJECT(uriP)) return COAP_400_BAD_REQUEST;
20192019
if (LWM2M_URI_IS_SET_INSTANCE(uriP)) return COAP_400_BAD_REQUEST;
20202020

2021-
contextP->clientList = (lwm2m_client_t *)LWM2M_LIST_RM(contextP->clientList, uriP->objectId, &clientP);
2022-
if (clientP == NULL) return COAP_400_BAD_REQUEST;
2023-
if (contextP->monitorCallback != NULL)
2024-
{
2025-
contextP->monitorCallback(contextP, clientP->internalID, NULL, COAP_202_DELETED, NULL, LWM2M_CONTENT_TEXT, NULL, 0, contextP->monitorUserData);
2021+
clientP = (lwm2m_client_t *)LWM2M_LIST_FIND(contextP->clientList, uriP->objectId);
2022+
2023+
if (clientP == NULL) {
2024+
return COAP_400_BAD_REQUEST;
20262025
}
2026+
2027+
if (contextP->monitorCallback != NULL) {
2028+
contextP->monitorCallback(contextP, clientP->internalID, NULL, COAP_202_DELETED, NULL, LWM2M_CONTENT_TEXT,
2029+
NULL, 0, contextP->monitorUserData);
2030+
}
2031+
contextP->clientList = (lwm2m_client_t *)LWM2M_LIST_RM(contextP->clientList, clientP->internalID, NULL);
20272032
registration_freeClient(contextP, clientP);
20282033
result = COAP_202_DELETED;
20292034
}
@@ -2137,17 +2142,14 @@ void registration_step(lwm2m_context_t * contextP,
21372142
{
21382143
lwm2m_client_t * nextP = clientP->next;
21392144

2140-
if (clientP->endOfLife <= currentTime)
2141-
{
2142-
contextP->clientList = (lwm2m_client_t *)LWM2M_LIST_RM(contextP->clientList, clientP->internalID, NULL);
2143-
if (contextP->monitorCallback != NULL)
2144-
{
2145-
contextP->monitorCallback(contextP, clientP->internalID, NULL, COAP_202_DELETED, NULL, LWM2M_CONTENT_TEXT, NULL, 0, contextP->monitorUserData);
2145+
if (clientP->endOfLife <= currentTime) {
2146+
if (contextP->monitorCallback != NULL) {
2147+
contextP->monitorCallback(contextP, clientP->internalID, NULL, COAP_202_DELETED, NULL,
2148+
LWM2M_CONTENT_TEXT, NULL, 0, contextP->monitorUserData);
21462149
}
2150+
contextP->clientList = (lwm2m_client_t *)LWM2M_LIST_RM(contextP->clientList, clientP->internalID, NULL);
21472151
registration_freeClient(contextP, clientP);
2148-
}
2149-
else
2150-
{
2152+
} else {
21512153
time_t interval;
21522154

21532155
interval = clientP->endOfLife - currentTime;

examples/server/lwm2mserver.c

+4-9
Original file line numberDiff line numberDiff line change
@@ -953,19 +953,17 @@ static void prv_cancel_client(lwm2m_context_t *lwm2mH,
953953
static void prv_monitor_callback(lwm2m_context_t *lwm2mH, uint16_t clientID, lwm2m_uri_t *uriP, int status,
954954
block_info_t *block_info, lwm2m_media_type_t format, uint8_t *data, size_t dataLength,
955955
void *userData) {
956-
lwm2m_client_t * targetP;
956+
lwm2m_client_t *clientP;
957957

958958
/* unused parameter */
959959
(void)userData;
960960

961+
clientP = (lwm2m_client_t *)LWM2M_LIST_FIND(lwm2mH->clientList, clientID);
962+
961963
switch (status)
962964
{
963965
case COAP_201_CREATED:
964966
fprintf(stdout, "\r\nNew client #%d registered.\r\n", clientID);
965-
966-
targetP = (lwm2m_client_t *)lwm2m_list_find((lwm2m_list_t *)lwm2mH->clientList, clientID);
967-
968-
prv_dump_client(targetP);
969967
break;
970968

971969
case COAP_202_DELETED:
@@ -974,16 +972,13 @@ static void prv_monitor_callback(lwm2m_context_t *lwm2mH, uint16_t clientID, lwm
974972

975973
case COAP_204_CHANGED:
976974
fprintf(stdout, "\r\nClient #%d updated.\r\n", clientID);
977-
978-
targetP = (lwm2m_client_t *)lwm2m_list_find((lwm2m_list_t *)lwm2mH->clientList, clientID);
979-
980-
prv_dump_client(targetP);
981975
break;
982976

983977
default:
984978
fprintf(stdout, "\r\nMonitor callback called with an unknown status: %d.\r\n", status);
985979
break;
986980
}
981+
prv_dump_client(clientP);
987982

988983
fprintf(stdout, "\r\n> ");
989984
fflush(stdout);

0 commit comments

Comments
 (0)