26
26
#include <sys/socket.h>
27
27
#include <sys/types.h>
28
28
29
+ static lwm2m_connection_t * connectionList = NULL ;
30
+
29
31
static int find_and_bind_to_address (struct addrinfo * res ) {
30
32
int s = -1 ;
31
33
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) {
80
82
lwm2m_connection_t * lwm2m_connection_find (lwm2m_connection_t * connList , struct sockaddr_storage * addr , size_t addrLen ) {
81
83
lwm2m_connection_t * connP ;
82
84
83
- connP = connList ;
85
+ connP = connectionList ;
84
86
while (connP != NULL ) {
85
87
if ((connP -> addrLen == addrLen ) && (memcmp (& (connP -> addr ), addr , addrLen ) == 0 )) { // NOSONAR
86
88
return connP ;
@@ -100,7 +102,9 @@ lwm2m_connection_t *lwm2m_connection_new_incoming(lwm2m_connection_t *connList,
100
102
connP -> sock = sock ;
101
103
memcpy (& (connP -> addr ), addr , addrLen );
102
104
connP -> addrLen = addrLen ;
103
- connP -> next = connList ;
105
+ connP -> next = connectionList ;
106
+
107
+ connectionList = connP ;
104
108
}
105
109
106
110
return connP ;
@@ -139,10 +143,10 @@ void lwm2m_connection_free(lwm2m_connection_t *connList) {
139
143
while (connList != NULL ) {
140
144
lwm2m_connection_t * nextP ;
141
145
142
- nextP = connList -> next ;
143
- lwm2m_free (connList );
146
+ nextP = connectionList -> next ;
147
+ lwm2m_free (connectionList );
144
148
145
- connList = nextP ;
149
+ connectionList = nextP ;
146
150
}
147
151
}
148
152
@@ -214,4 +218,25 @@ bool lwm2m_session_is_equal(void *session1, void *session2, void *userData) {
214
218
return (session1 == session2 );
215
219
}
216
220
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