37
37
#include " ns_trace.h"
38
38
#define TRACE_GROUP " nsif"
39
39
40
- #define NSIF_DEEP_TRACE
40
+ // #define NSIF_DEEP_TRACE
41
41
#ifdef NSIF_DEEP_TRACE
42
42
#define TRACE_DEEP tr_debug
43
43
#else
44
- #define TRACE_DEP (...)
44
+ #define TRACE_DEEP (...)
45
45
#endif
46
46
47
47
#define NS_INTERFACE_SOCKETS_MAX 16 // same as NanoStack SOCKET_MAX
@@ -160,6 +160,7 @@ static int8_t find_interface_by_address(const uint8_t target_addr[16])
160
160
161
161
static int8_t nanostack_interface_id_parse (const char * interface_name)
162
162
{
163
+ int namelen;
163
164
int8_t interface_id = -1 ;
164
165
165
166
TRACE_DEEP (" nanostack_interface_id_parse() %s" , interface_name ? interface_name : " null" );
@@ -169,20 +170,20 @@ static int8_t nanostack_interface_id_parse(const char* interface_name)
169
170
}
170
171
171
172
// parse interface ID from the interface_name
172
- if (strlen (interface_name) < 4 ) {
173
+ namelen = strlen (interface_name);
174
+ if (namelen < 4 || namelen > 5 ) {
173
175
return -1 ;
174
176
}
175
177
176
- interface_id = atoi (&interface_name[3 ]);
177
- if (interface_id < 0 ) {
178
- return -1 ;
178
+ if ((strncmp (" MES" , interface_name, 3 ) == 0 ) && isdigit (interface_name[3 ])) {
179
+ interface_id = atoi (&interface_name[3 ]);
179
180
}
180
181
181
182
TRACE_DEEP (" parsed interfaceID = %d" , interface_id);
182
183
return interface_id;
183
184
}
184
185
185
- static int8_t nanostack_dns_query_result_check (const char *domain_name, SocketAddress *address, const char *interface_name)
186
+ static int nanostack_dns_query_result_check (const char *domain_name, SocketAddress *address, const char *interface_name)
186
187
{
187
188
uint8_t dns_query_addr[16 ] = {0 };
188
189
int8_t interface_id, ns_query_result;
@@ -597,9 +598,14 @@ nsapi_error_t Nanostack::gethostbyname(const char *name, SocketAddress *address,
597
598
return NSAPI_ERROR_OK;
598
599
}
599
600
601
+ // Nanostack is IPv6 stack
602
+ if (version == NSAPI_UNSPEC) {
603
+ version = NSAPI_IPv6;
604
+ }
605
+
600
606
// try nanostack DNS cache, if not found then fallback to dns query
601
607
if (nanostack_dns_query_result_check (name, address, interface_name) == 0 ) {
602
- return 0 ;
608
+ return NSAPI_ERROR_OK ;
603
609
}
604
610
605
611
return nsapi_dns_query (this , name, address, interface_name, version);
@@ -622,6 +628,11 @@ nsapi_value_or_error_t Nanostack::gethostbyname_async(const char *name, hostbyna
622
628
return NSAPI_ERROR_OK;
623
629
}
624
630
631
+ // Nanostack is IPv6 stack
632
+ if (version == NSAPI_UNSPEC) {
633
+ version = NSAPI_IPv6;
634
+ }
635
+
625
636
// try nanostack DNS cache, if not found then fallback to dns query
626
637
if (nanostack_dns_query_result_check (name, &address, interface_name) == 0 ) {
627
638
// hit found, return result immediately
0 commit comments