@@ -26,6 +26,7 @@ static otSrpClientAutoStartCallback auto_start_cb;
26
26
static void * auto_start_ctx ;
27
27
static otSrpClientCallback client_cb ;
28
28
static void * client_ctx ;
29
+ static otSockAddr decoded_server_sockaddr ;
29
30
30
31
static void clear_host (void )
31
32
{
@@ -74,22 +75,109 @@ static void calc_txt_space(const otDnsTxtEntry *txt, uint8_t num, size_t *out_cb
74
75
* out_cbor_size = cbor_size ;
75
76
}
76
77
78
+ const char * otSrpClientItemStateToString (otSrpClientItemState state )
79
+ {
80
+ switch (state ) {
81
+ case OT_SRP_CLIENT_ITEM_STATE_TO_ADD :
82
+ return "ToAdd" ;
83
+ case OT_SRP_CLIENT_ITEM_STATE_ADDING :
84
+ return "Adding" ;
85
+ case OT_SRP_CLIENT_ITEM_STATE_TO_REFRESH :
86
+ return "ToRefresh" ;
87
+ case OT_SRP_CLIENT_ITEM_STATE_REFRESHING :
88
+ return "Refreshing" ;
89
+ case OT_SRP_CLIENT_ITEM_STATE_TO_REMOVE :
90
+ return "ToRemove" ;
91
+ case OT_SRP_CLIENT_ITEM_STATE_REMOVING :
92
+ return "Removing" ;
93
+ case OT_SRP_CLIENT_ITEM_STATE_REGISTERED :
94
+ return "Registered" ;
95
+ case OT_SRP_CLIENT_ITEM_STATE_REMOVED :
96
+ return "Removed" ;
97
+ };
98
+
99
+ return "Unknown" ;
100
+ }
101
+
102
+ otError otSrpClientStart (otInstance * aInstance , const otSockAddr * aServerSockAddr )
103
+ {
104
+ otError error ;
105
+ struct nrf_rpc_cbor_ctx ctx ;
106
+
107
+ ARG_UNUSED (aInstance );
108
+
109
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , OT_IP6_ADDRESS_SIZE + sizeof (uint16_t ) + 2 );
110
+
111
+ ot_rpc_encode_sockaddr (& ctx , aServerSockAddr );
112
+
113
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_START , & ctx ,
114
+ ot_rpc_decode_error , & error );
115
+
116
+ return error ;
117
+ }
118
+
119
+ void otSrpClientStop (otInstance * aInstance )
120
+ {
121
+ struct nrf_rpc_cbor_ctx ctx ;
122
+
123
+ ARG_UNUSED (aInstance );
124
+
125
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
126
+
127
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_STOP , & ctx ,
128
+ nrf_rpc_rsp_decode_void , NULL );
129
+ }
130
+
131
+ bool otSrpClientIsRunning (otInstance * aInstance )
132
+ {
133
+ struct nrf_rpc_cbor_ctx ctx ;
134
+ bool running ;
135
+
136
+ ARG_UNUSED (aInstance );
137
+
138
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
139
+
140
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_IS_RUNNING , & ctx ,
141
+ nrf_rpc_rsp_decode_bool , & running );
142
+
143
+ return running ;
144
+ }
145
+
146
+ const otSockAddr * otSrpClientGetServerAddress (otInstance * aInstance )
147
+ {
148
+ struct nrf_rpc_cbor_ctx ctx ;
149
+
150
+ ARG_UNUSED (aInstance );
151
+
152
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
153
+
154
+ nrf_rpc_cbor_cmd_rsp_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_GET_SERVER_ADDRESS , & ctx );
155
+
156
+ ot_rpc_decode_sockaddr (& ctx , & decoded_server_sockaddr );
157
+
158
+ nrf_rpc_cbor_decoding_done (& ot_group , & ctx );
159
+
160
+ return & decoded_server_sockaddr ;
161
+ }
162
+
77
163
otError otSrpClientAddService (otInstance * aInstance , otSrpClientService * aService )
78
164
{
79
165
struct nrf_rpc_cbor_ctx ctx ;
80
166
size_t num_subtypes ;
81
167
size_t subtypes_size ;
82
168
size_t txt_size ;
83
169
size_t cbor_buffer_size ;
170
+ size_t name_len = strlen (aService -> mName );
171
+ size_t instance_len = strlen (aService -> mInstanceName );
84
172
otError error ;
85
173
86
174
ARG_UNUSED (aInstance );
87
175
calc_subtypes_space (aService -> mSubTypeLabels , & num_subtypes , & subtypes_size );
88
176
calc_txt_space (aService -> mTxtEntries , aService -> mNumTxtEntries , & txt_size );
89
177
90
178
cbor_buffer_size = 1 + sizeof (uintptr_t ); /* Service pointer */
91
- cbor_buffer_size += 2 + strlen ( aService -> mName ) ;
92
- cbor_buffer_size += 2 + strlen ( aService -> mInstanceName ) ;
179
+ cbor_buffer_size += 2 + name_len ;
180
+ cbor_buffer_size += 2 + instance_len ;
93
181
cbor_buffer_size += 1 + subtypes_size ; /* Array of service subtypes */
94
182
cbor_buffer_size += 1 + txt_size ; /* Map of TXT entries */
95
183
cbor_buffer_size += 1 + sizeof (aService -> mPort );
@@ -100,8 +188,15 @@ otError otSrpClientAddService(otInstance *aInstance, otSrpClientService *aServic
100
188
101
189
NRF_RPC_CBOR_ALLOC (& ot_group , ctx , cbor_buffer_size );
102
190
nrf_rpc_encode_uint (& ctx , (uintptr_t )aService );
103
- nrf_rpc_encode_str (& ctx , aService -> mName , -1 );
104
- nrf_rpc_encode_str (& ctx , aService -> mInstanceName , -1 );
191
+ nrf_rpc_encode_uint (& ctx , num_subtypes );
192
+ nrf_rpc_encode_uint (& ctx , aService -> mNumTxtEntries );
193
+ nrf_rpc_encode_uint (& ctx , name_len + instance_len + 2 );
194
+ nrf_rpc_encode_uint (& ctx , subtypes_size );
195
+ nrf_rpc_encode_uint (& ctx , txt_size );
196
+
197
+ nrf_rpc_encode_str (& ctx , aService -> mName , name_len );
198
+ nrf_rpc_encode_str (& ctx , aService -> mInstanceName , instance_len );
199
+
105
200
zcbor_list_start_encode (ctx .zs , num_subtypes );
106
201
107
202
for (const char * const * subtype = aService -> mSubTypeLabels ; * subtype != NULL ; ++ subtype ) {
@@ -207,6 +302,36 @@ otError otSrpClientEnableAutoHostAddress(otInstance *aInstance)
207
302
return error ;
208
303
}
209
304
305
+ otError otSrpClientSetHostAddresses (otInstance * aInstance , const otIp6Address * aIp6Addresses ,
306
+ uint8_t aNumAddresses )
307
+ {
308
+ struct nrf_rpc_cbor_ctx ctx ;
309
+ otError error ;
310
+
311
+ ARG_UNUSED (aInstance );
312
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 5 + aNumAddresses * (OT_IP6_ADDRESS_SIZE + 1 ));
313
+
314
+ nrf_rpc_encode_uint (& ctx , aNumAddresses );
315
+
316
+ zcbor_list_start_encode (ctx .zs , aNumAddresses );
317
+
318
+ for (int i = 0 ; i < aNumAddresses ; ++ i ) {
319
+ nrf_rpc_encode_buffer (& ctx , & aIp6Addresses [i ], OT_IP6_ADDRESS_SIZE );
320
+ }
321
+
322
+ zcbor_list_end_encode (ctx .zs , aNumAddresses );
323
+
324
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_SET_HOST_ADDRESSES , & ctx ,
325
+ ot_rpc_decode_error , & error );
326
+
327
+ if (error == OT_ERROR_NONE ) {
328
+ host_info .mAutoAddress = false;
329
+ }
330
+
331
+ return error ;
332
+ }
333
+
334
+
210
335
void otSrpClientEnableAutoStartMode (otInstance * aInstance , otSrpClientAutoStartCallback aCallback ,
211
336
void * aContext )
212
337
{
@@ -293,6 +418,50 @@ otError otSrpClientSetHostName(otInstance *aInstance, const char *aName)
293
418
return error ;
294
419
}
295
420
421
+ const otSrpClientService * otSrpClientGetServices (otInstance * aInstance )
422
+ {
423
+ ARG_UNUSED (aInstance );
424
+
425
+ return services ;
426
+ }
427
+
428
+ const otSrpClientHostInfo * otSrpClientGetHostInfo (otInstance * aInstance )
429
+ {
430
+ ARG_UNUSED (aInstance );
431
+
432
+ return & host_info ;
433
+ }
434
+
435
+ bool otSrpClientIsAutoStartModeEnabled (otInstance * aInstance )
436
+ {
437
+ struct nrf_rpc_cbor_ctx ctx ;
438
+ bool enabled ;
439
+
440
+ ARG_UNUSED (aInstance );
441
+
442
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
443
+
444
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_IS_AUTO_START_MODE_ENABLED , & ctx ,
445
+ nrf_rpc_rsp_decode_bool , & enabled );
446
+
447
+ return enabled ;
448
+ }
449
+
450
+ uint32_t otSrpClientGetKeyLeaseInterval (otInstance * aInstance )
451
+ {
452
+ struct nrf_rpc_cbor_ctx ctx ;
453
+ uint32_t key_lease_int ;
454
+
455
+ ARG_UNUSED (aInstance );
456
+
457
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
458
+
459
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_GET_KEY_LEASE_INTERVAL , & ctx ,
460
+ nrf_rpc_rsp_decode_u32 , & key_lease_int );
461
+
462
+ return key_lease_int ;
463
+ }
464
+
296
465
void otSrpClientSetKeyLeaseInterval (otInstance * aInstance , uint32_t aInterval )
297
466
{
298
467
struct nrf_rpc_cbor_ctx ctx ;
@@ -305,6 +474,21 @@ void otSrpClientSetKeyLeaseInterval(otInstance *aInstance, uint32_t aInterval)
305
474
nrf_rpc_rsp_decode_void , NULL );
306
475
}
307
476
477
+ uint32_t otSrpClientGetLeaseInterval (otInstance * aInstance )
478
+ {
479
+ struct nrf_rpc_cbor_ctx ctx ;
480
+ uint32_t lease_int ;
481
+
482
+ ARG_UNUSED (aInstance );
483
+
484
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
485
+
486
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_GET_LEASE_INTERVAL , & ctx ,
487
+ nrf_rpc_rsp_decode_u32 , & lease_int );
488
+
489
+ return lease_int ;
490
+ }
491
+
308
492
void otSrpClientSetLeaseInterval (otInstance * aInstance , uint32_t aInterval )
309
493
{
310
494
struct nrf_rpc_cbor_ctx ctx ;
@@ -329,6 +513,21 @@ void otSrpClientSetTtl(otInstance *aInstance, uint32_t aTtl)
329
513
nrf_rpc_rsp_decode_void , NULL );
330
514
}
331
515
516
+ uint32_t otSrpClientGetTtl (otInstance * aInstance )
517
+ {
518
+ struct nrf_rpc_cbor_ctx ctx ;
519
+ uint32_t ttl ;
520
+
521
+ ARG_UNUSED (aInstance );
522
+
523
+ NRF_RPC_CBOR_ALLOC (& ot_group , ctx , 0 );
524
+
525
+ nrf_rpc_cbor_cmd_no_err (& ot_group , OT_RPC_CMD_SRP_CLIENT_GET_TTL , & ctx ,
526
+ nrf_rpc_rsp_decode_u32 , & ttl );
527
+
528
+ return ttl ;
529
+ }
530
+
332
531
static void ot_rpc_cmd_srp_client_cb (const struct nrf_rpc_group * group ,
333
532
struct nrf_rpc_cbor_ctx * ctx , void * handler_data )
334
533
{
0 commit comments