Skip to content

Commit 29435ee

Browse files
committed
examples: Update connection handling
Add function for removing connection.
1 parent b4114e2 commit 29435ee

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

transport/tinydtls/connection.c

+24
Original file line numberDiff line numberDiff line change
@@ -564,3 +564,27 @@ uint8_t lwm2m_buffer_send(void *sessionH, uint8_t *buffer, size_t length, void *
564564
}
565565

566566
bool lwm2m_session_is_equal(void *session1, void *session2, void *userData) { return (session1 == session2); }
567+
568+
void lwm2m_session_remove(void *sessionH) {
569+
lwm2m_dtls_connection_t *connP = (lwm2m_dtls_connection_t *)sessionH;
570+
dtls_app_context_t *appContext = (dtls_app_context_t *)connP->dtlsContext;
571+
lwm2m_dtls_connection_t *connIter;
572+
573+
connIter = appContext->connList;
574+
575+
if (connIter == NULL) {
576+
return;
577+
}
578+
if (connIter == sessionH) {
579+
/* First element */
580+
free(sessionH);
581+
appContext->connList = NULL;
582+
return;
583+
}
584+
585+
while (connIter->next != connP)
586+
;
587+
connIter->next = connP->next;
588+
589+
free(connP);
590+
}

transport/udp/connection.c

+31-6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#include <sys/socket.h>
2727
#include <sys/types.h>
2828

29+
static lwm2m_connection_t *connectionList = NULL;
30+
2931
static int find_and_bind_to_address(struct addrinfo *res) {
3032
int s = -1;
3133
for (struct addrinfo *p = res; p != NULL && s == -1; p = p->ai_next) {
@@ -80,7 +82,7 @@ int lwm2m_create_socket(const char *portStr, int addressFamily) {
8082
lwm2m_connection_t *lwm2m_connection_find(lwm2m_connection_t *connList, struct sockaddr_storage *addr, size_t addrLen) {
8183
lwm2m_connection_t *connP;
8284

83-
connP = connList;
85+
connP = connectionList;
8486
while (connP != NULL) {
8587
if ((connP->addrLen == addrLen) && (memcmp(&(connP->addr), addr, addrLen) == 0)) { // NOSONAR
8688
return connP;
@@ -100,7 +102,9 @@ lwm2m_connection_t *lwm2m_connection_new_incoming(lwm2m_connection_t *connList,
100102
connP->sock = sock;
101103
memcpy(&(connP->addr), addr, addrLen);
102104
connP->addrLen = addrLen;
103-
connP->next = connList;
105+
connP->next = connectionList;
106+
107+
connectionList = connP;
104108
}
105109

106110
return connP;
@@ -139,10 +143,10 @@ void lwm2m_connection_free(lwm2m_connection_t *connList) {
139143
while (connList != NULL) {
140144
lwm2m_connection_t *nextP;
141145

142-
nextP = connList->next;
143-
lwm2m_free(connList);
146+
nextP = connectionList->next;
147+
lwm2m_free(connectionList);
144148

145-
connList = nextP;
149+
connectionList = nextP;
146150
}
147151
}
148152

@@ -214,4 +218,25 @@ bool lwm2m_session_is_equal(void *session1, void *session2, void *userData) {
214218
return (session1 == session2);
215219
}
216220

217-
void lwm2m_session_remove(void *session_h) { (void)session_h; /* unused */ }
221+
void lwm2m_session_remove(void *sessionH) {
222+
lwm2m_connection_t *connP = (lwm2m_connection_t *)sessionH;
223+
lwm2m_connection_t *connIter;
224+
225+
connIter = connectionList;
226+
227+
if (connIter == NULL) {
228+
return;
229+
}
230+
if (connIter == sessionH) {
231+
/* First element */
232+
free(sessionH);
233+
connectionList = NULL;
234+
return;
235+
}
236+
237+
while (connIter->next != connP)
238+
;
239+
connIter->next = connP->next;
240+
241+
free(connP);
242+
}

0 commit comments

Comments
 (0)