diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index d1d95807..ad081ec1 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -344,6 +344,20 @@ just_kill_connection: lws_free_wsi(wsi); } +#if LWS_POSIX +LWS_VISIBLE int +interface_to_sa(struct lws_context *context, const char *ifname, struct sockaddr_in *addr, size_t addrlen) +{ + int ipv6 = 0; +#ifdef LWS_USE_IPV6 + ipv6 = LWS_IPV6_ENABLED(context); +#endif + (void)context; + + return lws_interface_to_sa(ipv6, ifname, addr, addrlen); +} +#endif + LWS_VISIBLE int lws_get_addresses(struct lws_context *context, void *ads, char *name, int name_len, char *rip, int rip_len) diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 6daae786..b1debc1c 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -1378,6 +1378,9 @@ lws_service(struct lws_context *context, int timeout_ms); LWS_VISIBLE LWS_EXTERN void lws_cancel_service(struct lws_context *context); +LWS_VISIBLE LWS_EXTERN int +lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen); + LWS_VISIBLE LWS_EXTERN const unsigned char * lws_token_to_string(enum lws_token_indexes token); diff --git a/lib/lws-plat-unix.c b/lib/lws-plat-unix.c index 3b82d919..a0e4f868 100644 --- a/lib/lws-plat-unix.c +++ b/lib/lws-plat-unix.c @@ -343,8 +343,7 @@ lws_plat_context_late_destroy(struct lws_context *context) /* cast a struct sockaddr_in6 * into addr for ipv6 */ LWS_VISIBLE int -interface_to_sa(struct lws_context *context, - const char *ifname, struct sockaddr_in *addr, size_t addrlen) +lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { int rc = -1; @@ -367,7 +366,7 @@ interface_to_sa(struct lws_context *context, switch (ifc->ifa_addr->sa_family) { case AF_INET: #ifdef LWS_USE_IPV6 - if (LWS_IPV6_ENABLED(context)) { + if (ipv6) { /* map IPv4 to IPv6 */ bzero((char *)&addr6->sin6_addr, sizeof(struct in6_addr)); diff --git a/lib/lws-plat-win.c b/lib/lws-plat-win.c index 988460a4..7e793104 100644 --- a/lib/lws-plat-win.c +++ b/lib/lws-plat-win.c @@ -308,8 +308,8 @@ lws_plat_context_late_destroy(struct lws_context *context) WSACleanup(); } -LWS_VISIBLE int -interface_to_sa(struct lws_context *context, +LWS_VISIBLE LWS_EXTERN int +lws_interface_to_sa(int ipv6, const char *ifname, struct sockaddr_in *addr, size_t addrlen) { long long address = inet_addr(ifname);