@@ -209,6 +209,23 @@ static void zjs_copy_sockaddr(struct sockaddr *dst, struct sockaddr *src,
209
209
}
210
210
}
211
211
212
+ static void * zjs_get_inaddr (struct sockaddr * addr )
213
+ {
214
+ // requires: addr is a pointer to a valid sockaddr_in or sockaddr_in6 struct
215
+ // effects: returns a void pointer to the in_addr or in6_addr within
216
+ if (addr -> sa_family == AF_INET ) {
217
+ struct sockaddr_in * addr4 = (struct sockaddr_in * )addr ;
218
+ return & addr4 -> sin_addr ;
219
+ }
220
+ else if (addr -> sa_family == AF_INET6 ) {
221
+ struct sockaddr_in6 * addr6 = (struct sockaddr_in6 * )addr ;
222
+ return & addr6 -> sin6_addr ;
223
+ }
224
+ else {
225
+ ZJS_ASSERT (false, "invalid sockaddr struct" );
226
+ }
227
+ }
228
+
212
229
static int match_timer (sock_handle_t * sock , struct k_timer * timer )
213
230
{
214
231
FTRACE ("sock = %p, timer = %p\n" , sock , timer );
@@ -820,14 +837,15 @@ static void add_socket_connection(jerry_value_t socket,
820
837
}
821
838
822
839
sa_family_t family = net_context_get_family (new );
823
- char remote_ip [64 ];
824
- net_addr_ntop (family , ( const void * ) remote , remote_ip , 64 );
840
+ char remote_ip [INET6_ADDRSTRLEN ];
841
+ net_addr_ntop (family , zjs_get_inaddr ( remote ) , remote_ip , INET6_ADDRSTRLEN );
825
842
826
843
zjs_obj_add_string (socket , "remoteAddress" , remote_ip );
827
844
zjs_obj_add_number (socket , "remotePort" , server_h -> port );
828
845
829
- char local_ip [64 ];
830
- net_addr_ntop (family , (const void * )& server_h -> local , local_ip , 64 );
846
+ char local_ip [INET6_ADDRSTRLEN ];
847
+ net_addr_ntop (family , zjs_get_inaddr (& server_h -> local ), local_ip ,
848
+ INET6_ADDRSTRLEN );
831
849
832
850
zjs_obj_add_string (socket , "localAddress" , local_ip );
833
851
zjs_obj_add_number (socket , "localPort" , server_h -> port );
@@ -940,15 +958,9 @@ static ZJS_DECL_FUNC(server_address)
940
958
sa_family_t family = net_context_get_family (server_h -> server_ctx );
941
959
char ipstr [INET6_ADDRSTRLEN ];
942
960
943
- if (family == AF_INET6 ) {
944
- zjs_obj_add_string (info , "family" , "IPv6" );
945
- struct sockaddr_in6 * addr6 = (struct sockaddr_in6 * )& server_h -> local ;
946
- net_addr_ntop (family , & addr6 -> sin6_addr , ipstr , INET6_ADDRSTRLEN );
947
- } else {
948
- zjs_obj_add_string (info , "family" , "IPv4" );
949
- struct sockaddr_in * addr = (struct sockaddr_in * )& server_h -> local ;
950
- net_addr_ntop (family , & addr -> sin_addr , ipstr , INET6_ADDRSTRLEN );
951
- }
961
+ zjs_obj_add_string (info , "family" , family == AF_INET6 ? "IPv6" : "IPv4" );
962
+ net_addr_ntop (family , zjs_get_inaddr (& server_h -> local ), ipstr ,
963
+ INET6_ADDRSTRLEN );
952
964
953
965
zjs_obj_add_string (info , "address" , ipstr );
954
966
return info ;
@@ -1384,7 +1396,7 @@ static ZJS_DECL_FUNC(net_is_ip)
1384
1396
if (!jerry_value_is_string (argv [0 ]) || argc < 1 ) {
1385
1397
return jerry_create_number (0 );
1386
1398
}
1387
- jerry_size_t size = 64 ;
1399
+ jerry_size_t size = INET6_ADDRSTRLEN ;
1388
1400
char ip [size ];
1389
1401
zjs_copy_jstring (argv [0 ], ip , & size );
1390
1402
if (!size ) {
0 commit comments