1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

Subject: Support to IPv6 on Windows

This commit is contained in:
Leonardo Maccari Rufino 2017-05-30 18:31:06 -03:00 committed by Andy Green
parent a4f88d543e
commit 2ce39fe26c
4 changed files with 27 additions and 13 deletions

View file

@ -326,19 +326,14 @@ if (LWS_WITH_SQLITE3)
endif()
# FIXME: This must be runtime-only option.
# The base dir where the test-apps look for the SSL certs.
set(LWS_OPENSSL_CLIENT_CERTS ../share CACHE PATH "Server SSL certificate directory")
if (WIN32)
set(LWS_OPENSSL_CLIENT_CERTS . CACHE PATH "Client SSL certificate directory")
if (LWS_IPV6)
set(LWS_IPV6 OFF)
message(WARNING "IPv6 does not currently work on Windows!")
endif()
if (LWS_UNIX_SOCK)
if (LWS_UNIX_SOCK)
set(LWS_UNIX_SOCK OFF)
message(WARNING "Windows does not support UNIX domain sockets")
message(WARNING "Windows does not support UNIX domain sockets")
endif()
else()
set(LWS_OPENSSL_CLIENT_CERTS /etc/pki/tls/certs/ CACHE PATH "Client SSL certificate directory")

View file

@ -121,6 +121,8 @@ lws_client_connect_2(struct lws *wsi)
memcpy(&server_addr6.sin6_addr,
&((struct sockaddr_in6 *)result->ai_addr)->sin6_addr,
sizeof(struct in6_addr));
server_addr6.sin6_scope_id = ((struct sockaddr_in6 *)result->ai_addr)->sin6_scope_id;
server_addr6.sin6_flowinfo = ((struct sockaddr_in6 *)result->ai_addr)->sin6_flowinfo;
break;
default:
lwsl_err("Unknown address family\n");

View file

@ -1878,10 +1878,10 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
#endif
struct sockaddr_in serv_addr4;
#ifndef LWS_PLAT_OPTEE
socklen_t len = sizeof(struct sockaddr);
socklen_t len = sizeof(struct sockaddr_storage);
#endif
int n;
struct sockaddr_in sin;
struct sockaddr_storage sin;
struct sockaddr *v;
#ifdef LWS_USE_UNIX_SOCK
@ -1913,6 +1913,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
return -1;
}
#ifndef WIN32
if (iface) {
struct ifaddrs *addrs, *addr;
char ip[NI_MAXHOST];
@ -1944,6 +1945,7 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
}
freeifaddrs(addrs);
}
#endif
serv_addr6.sin6_family = AF_INET6;
serv_addr6.sin6_port = htons(port);
@ -1986,7 +1988,13 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,
lwsl_warn("getsockname: %s\n", strerror(LWS_ERRNO));
else
#endif
port = ntohs(sin.sin_port);
#if defined(LWS_USE_IPV6)
port = (sin.ss_family == AF_INET6) ?
ntohs(((struct sockaddr_in6 *) &sin)->sin6_port) :
ntohs(((struct sockaddr_in *) &sin)->sin_port);
#else
port = ntohs(((struct sockaddr_in *) &sin)->sin_port);
#endif
#endif
return port;

View file

@ -2009,7 +2009,7 @@ lws_server_socket_service(struct lws_context *context, struct lws *wsi,
lws_sock_file_fd_type fd;
int opts = LWS_ADOPT_SOCKET | LWS_ADOPT_ALLOW_SSL;
#if LWS_POSIX
struct sockaddr_in cli_addr;
struct sockaddr_storage cli_addr;
socklen_t clilen;
#endif
int n, len;
@ -2295,8 +2295,17 @@ try_pollout:
lws_plat_set_socket_options(wsi->vhost, accept_fd);
lwsl_debug("accepted new conn port %u on fd=%d\n",
ntohs(cli_addr.sin_port), accept_fd);
#if defined(LWS_USE_IPV6)
lwsl_debug("accepted new conn port %u on fd=%d\n",
((cli_addr.ss_family == AF_INET6) ?
ntohs(((struct sockaddr_in6 *) &cli_addr)->sin6_port) :
ntohs(((struct sockaddr_in *) &cli_addr)->sin_port)),
accept_fd);
#else
lwsl_debug("accepted new conn port %u on fd=%d\n",
ntohs(((struct sockaddr_in *) &cli_addr)->sin_port),
accept_fd);
#endif
#else
/* not very beautiful... */