82
82
struct observe_node {
83
83
sys_snode_t node ;
84
84
struct net_app_ctx * net_app_ctx ;
85
- struct sockaddr addr ;
86
85
struct lwm2m_obj_path path ;
87
86
u8_t token [8 ];
88
87
s64_t event_timestamp ;
@@ -180,19 +179,17 @@ int lwm2m_notify_observer_path(struct lwm2m_obj_path *path)
180
179
}
181
180
182
181
static int engine_add_observer (struct net_app_ctx * app_ctx ,
183
- struct sockaddr * addr ,
184
182
const u8_t * token , u8_t tkl ,
185
183
struct lwm2m_obj_path * path ,
186
184
u16_t format )
187
185
{
188
186
struct lwm2m_engine_obj_inst * obj_inst = NULL ;
189
187
struct observe_node * obs ;
188
+ struct sockaddr * addr ;
190
189
int i ;
191
190
192
- if (!addr ) {
193
- SYS_LOG_ERR ("sockaddr is required" );
194
- return - EINVAL ;
195
- }
191
+ /* remote addr */
192
+ addr = & app_ctx -> default_ctx -> remote ;
196
193
197
194
/* check if object exists */
198
195
if (!get_engine_obj (path -> obj_id )) {
@@ -229,7 +226,7 @@ static int engine_add_observer(struct net_app_ctx *app_ctx,
229
226
230
227
/* make sure this observer doesn't exist already */
231
228
SYS_SLIST_FOR_EACH_CONTAINER (& engine_observer_list , obs , node ) {
232
- if (memcmp ( & obs -> addr , addr , sizeof ( addr )) == 0 &&
229
+ if (obs -> net_app_ctx == app_ctx &&
233
230
memcmp (& obs -> path , path , sizeof (* path )) == 0 ) {
234
231
/* quietly update the token information */
235
232
memcpy (obs -> token , token , tkl );
@@ -259,7 +256,6 @@ static int engine_add_observer(struct net_app_ctx *app_ctx,
259
256
/* copy the values and add it to the list */
260
257
observe_node_data [i ].used = true;
261
258
observe_node_data [i ].net_app_ctx = app_ctx ;
262
- memcpy (& observe_node_data [i ].addr , addr , sizeof (* addr ));
263
259
memcpy (& observe_node_data [i ].path , path , sizeof (* path ));
264
260
memcpy (observe_node_data [i ].token , token , tkl );
265
261
observe_node_data [i ].tkl = tkl ;
@@ -624,8 +620,7 @@ int lwm2m_init_message(struct net_app_ctx *app_ctx, struct zoap_packet *zpkt,
624
620
}
625
621
626
622
struct zoap_pending * lwm2m_init_message_pending (struct lwm2m_ctx * client_ctx ,
627
- struct zoap_packet * zpkt ,
628
- struct sockaddr * addr )
623
+ struct zoap_packet * zpkt )
629
624
{
630
625
struct zoap_pending * pending = NULL ;
631
626
int ret ;
@@ -638,7 +633,8 @@ struct zoap_pending *lwm2m_init_message_pending(struct lwm2m_ctx *client_ctx,
638
633
return NULL ;
639
634
}
640
635
641
- ret = zoap_pending_init (pending , zpkt , addr );
636
+ ret = zoap_pending_init (pending , zpkt ,
637
+ & client_ctx -> net_app_ctx .default_ctx -> remote );
642
638
if (ret < 0 ) {
643
639
SYS_LOG_ERR ("Unable to initialize a pending "
644
640
"retransmission (err:%d)." , ret );
@@ -1999,8 +1995,7 @@ static int get_observe_option(const struct zoap_packet *zpkt)
1999
1995
2000
1996
static int handle_request (struct net_app_ctx * app_ctx ,
2001
1997
struct zoap_packet * request ,
2002
- struct zoap_packet * response ,
2003
- struct sockaddr * from_addr )
1998
+ struct zoap_packet * response )
2004
1999
{
2005
2000
int r ;
2006
2001
u8_t code ;
@@ -2142,7 +2137,7 @@ static int handle_request(struct net_app_ctx *app_ctx,
2142
2137
r );
2143
2138
}
2144
2139
2145
- r = engine_add_observer (app_ctx , from_addr ,
2140
+ r = engine_add_observer (app_ctx ,
2146
2141
token , tkl , & path ,
2147
2142
accept );
2148
2143
if (r < 0 ) {
@@ -2231,19 +2226,17 @@ static int handle_request(struct net_app_ctx *app_ctx,
2231
2226
return r ;
2232
2227
}
2233
2228
2234
- int lwm2m_udp_sendto (struct net_app_ctx * app_ctx , struct net_pkt * pkt ,
2235
- const struct sockaddr * dst_addr )
2229
+ int lwm2m_udp_sendto (struct net_app_ctx * app_ctx , struct net_pkt * pkt )
2236
2230
{
2237
- return net_app_send_pkt (app_ctx , pkt , dst_addr , NET_SOCKADDR_MAX_SIZE ,
2238
- K_NO_WAIT , NULL );
2231
+ return net_app_send_pkt (app_ctx , pkt , & app_ctx -> default_ctx -> remote ,
2232
+ NET_SOCKADDR_MAX_SIZE , K_NO_WAIT , NULL );
2239
2233
}
2240
2234
2241
2235
void lwm2m_udp_receive (struct lwm2m_ctx * client_ctx , struct net_pkt * pkt ,
2242
2236
bool handle_separate_response ,
2243
2237
int (* udp_request_handler )(struct net_app_ctx * app_ctx ,
2244
2238
struct zoap_packet * ,
2245
- struct zoap_packet * ,
2246
- struct sockaddr * ))
2239
+ struct zoap_packet * ))
2247
2240
{
2248
2241
struct net_udp_hdr hdr , * udp_hdr ;
2249
2242
struct zoap_pending * pending ;
@@ -2332,13 +2325,12 @@ void lwm2m_udp_receive(struct lwm2m_ctx *client_ctx, struct net_pkt *pkt,
2332
2325
* The "response" here is actually a new request
2333
2326
*/
2334
2327
r = udp_request_handler (& client_ctx -> net_app_ctx ,
2335
- & response , & response2 ,
2336
- & from_addr );
2328
+ & response , & response2 );
2337
2329
if (r < 0 ) {
2338
2330
SYS_LOG_ERR ("Request handler error: %d" , r );
2339
2331
} else {
2340
2332
r = lwm2m_udp_sendto (& client_ctx -> net_app_ctx ,
2341
- pkt2 , & from_addr );
2333
+ pkt2 );
2342
2334
if (r < 0 ) {
2343
2335
SYS_LOG_ERR ("Err sending response: %d" ,
2344
2336
r );
@@ -2397,7 +2389,7 @@ static void retransmit_request(struct k_work *work)
2397
2389
}
2398
2390
2399
2391
r = lwm2m_udp_sendto (& client_ctx -> net_app_ctx ,
2400
- pending -> pkt , & pending -> addr );
2392
+ pending -> pkt );
2401
2393
if (r < 0 ) {
2402
2394
return ;
2403
2395
}
@@ -2479,7 +2471,8 @@ static int generate_notify_message(struct observe_node *obs,
2479
2471
obs -> path .res_id ,
2480
2472
obs -> path .level ,
2481
2473
sprint_token (obs -> token , obs -> tkl ),
2482
- lwm2m_sprint_ip_addr (& obs -> addr ),
2474
+ lwm2m_sprint_ip_addr (
2475
+ & obs -> net_app_ctx -> default_ctx -> remote ),
2483
2476
k_uptime_get ());
2484
2477
2485
2478
obj_inst = get_engine_obj_inst (obs -> path .obj_id ,
@@ -2530,8 +2523,7 @@ static int generate_notify_message(struct observe_node *obs,
2530
2523
goto cleanup ;
2531
2524
}
2532
2525
2533
- pending = lwm2m_init_message_pending (client_ctx , out .out_zpkt ,
2534
- & obs -> addr );
2526
+ pending = lwm2m_init_message_pending (client_ctx , out .out_zpkt );
2535
2527
if (!pending ) {
2536
2528
ret = - ENOMEM ;
2537
2529
goto cleanup ;
@@ -2548,7 +2540,7 @@ static int generate_notify_message(struct observe_node *obs,
2548
2540
zoap_reply_init (reply , & request );
2549
2541
reply -> reply = notify_message_reply_cb ;
2550
2542
2551
- ret = lwm2m_udp_sendto (obs -> net_app_ctx , pkt , & obs -> addr );
2543
+ ret = lwm2m_udp_sendto (obs -> net_app_ctx , pkt );
2552
2544
if (ret < 0 ) {
2553
2545
SYS_LOG_ERR ("Error sending LWM2M packet (err:%d)." , ret );
2554
2546
goto cleanup ;
0 commit comments