3737#include " ns_trace.h"
3838#define TRACE_GROUP " nsif"
3939
40- #define NSIF_DEEP_TRACE
40+ // #define NSIF_DEEP_TRACE
4141#ifdef NSIF_DEEP_TRACE
4242#define TRACE_DEEP tr_debug
4343#else
44- #define TRACE_DEP (...)
44+ #define TRACE_DEEP (...)
4545#endif
4646
4747#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])
160160
161161static int8_t nanostack_interface_id_parse (const char * interface_name)
162162{
163+ int namelen;
163164 int8_t interface_id = -1 ;
164165
165166 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)
169170 }
170171
171172 // parse interface ID from the interface_name
172- if (strlen (interface_name) < 4 ) {
173+ namelen = strlen (interface_name);
174+ if (namelen < 4 || namelen > 5 ) {
173175 return -1 ;
174176 }
175177
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 ]);
179180 }
180181
181182 TRACE_DEEP (" parsed interfaceID = %d" , interface_id);
182183 return interface_id;
183184}
184185
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)
186187{
187188 uint8_t dns_query_addr[16 ] = {0 };
188189 int8_t interface_id, ns_query_result;
@@ -597,9 +598,14 @@ nsapi_error_t Nanostack::gethostbyname(const char *name, SocketAddress *address,
597598 return NSAPI_ERROR_OK;
598599 }
599600
601+ // Nanostack is IPv6 stack
602+ if (version == NSAPI_UNSPEC) {
603+ version = NSAPI_IPv6;
604+ }
605+
600606 // try nanostack DNS cache, if not found then fallback to dns query
601607 if (nanostack_dns_query_result_check (name, address, interface_name) == 0 ) {
602- return 0 ;
608+ return NSAPI_ERROR_OK ;
603609 }
604610
605611 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
622628 return NSAPI_ERROR_OK;
623629 }
624630
631+ // Nanostack is IPv6 stack
632+ if (version == NSAPI_UNSPEC) {
633+ version = NSAPI_IPv6;
634+ }
635+
625636 // try nanostack DNS cache, if not found then fallback to dns query
626637 if (nanostack_dns_query_result_check (name, &address, interface_name) == 0 ) {
627638 // hit found, return result immediately
0 commit comments