From a79064ce99ad1342658a9391fca6d945df7974bb Mon Sep 17 00:00:00 2001 From: Andy Green Date: Mon, 22 Oct 2012 12:29:57 +0100 Subject: [PATCH] add context construction option to skip server hostname lookup Signed-off-by: Andy Green --- lib/libwebsockets.c | 54 ++++++++++++++++++++++++++-------------------- lib/libwebsockets.h | 1 + libwebsockets-api-doc.html | 3 +++ 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c index ca41b04..9912aa5 100644 --- a/lib/libwebsockets.c +++ b/lib/libwebsockets.c @@ -2596,34 +2596,42 @@ libwebsocket_create_context(int port, const char *interf, context->ssl_client_ctx = NULL; openssl_websocket_private_data_index = 0; #endif - /* find canonical hostname */ - hostname[(sizeof hostname) - 1] = '\0'; - memset(&sa, 0, sizeof(sa)); - sa.sa_family = AF_INET; - sa.sa_data[(sizeof sa.sa_data) - 1] = '\0'; - gethostname(hostname, (sizeof hostname) - 1); + if (options & LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME) { - n = 0; + strcpy(context->canonical_hostname, "unknown"); - if (strlen(hostname) < sizeof(sa.sa_data) - 1) { - strcpy(sa.sa_data, hostname); -// fprintf(stderr, "my host name is %s\n", sa.sa_data); - n = getnameinfo(&sa, sizeof(sa), hostname, - (sizeof hostname) - 1, NULL, 0, 0); - } + } else { - if (!n) { - strncpy(context->canonical_hostname, hostname, - sizeof context->canonical_hostname - 1); - context->canonical_hostname[ - sizeof context->canonical_hostname - 1] = '\0'; - } else - strncpy(context->canonical_hostname, hostname, - sizeof context->canonical_hostname - 1); + /* find canonical hostname */ + + hostname[(sizeof hostname) - 1] = '\0'; + memset(&sa, 0, sizeof(sa)); + sa.sa_family = AF_INET; + sa.sa_data[(sizeof sa.sa_data) - 1] = '\0'; + gethostname(hostname, (sizeof hostname) - 1); + + n = 0; + + if (strlen(hostname) < sizeof(sa.sa_data) - 1) { + strcpy(sa.sa_data, hostname); + // fprintf(stderr, "my host name is %s\n", sa.sa_data); + n = getnameinfo(&sa, sizeof(sa), hostname, + (sizeof hostname) - 1, NULL, 0, 0); + } -// fprintf(stderr, "context->canonical_hostname = %s\n", -// context->canonical_hostname); + if (!n) { + strncpy(context->canonical_hostname, hostname, + sizeof context->canonical_hostname - 1); + context->canonical_hostname[ + sizeof context->canonical_hostname - 1] = '\0'; + } else + strncpy(context->canonical_hostname, hostname, + sizeof context->canonical_hostname - 1); + + // fprintf(stderr, "context->canonical_hostname = %s\n", + // context->canonical_hostname); + } /* split the proxy ads:port if given */ diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h index 719b3cb..d0e96af 100644 --- a/lib/libwebsockets.h +++ b/lib/libwebsockets.h @@ -65,6 +65,7 @@ typedef int ssize_t; enum libwebsocket_context_options { LWS_SERVER_OPTION_DEFEAT_CLIENT_MASK = 1, LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT = 2, + LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME = 4, }; enum libwebsocket_callback_reasons { diff --git a/libwebsockets-api-doc.html b/libwebsockets-api-doc.html index 789871b..e908d14 100644 --- a/libwebsockets-api-doc.html +++ b/libwebsockets-api-doc.html @@ -258,6 +258,9 @@ else ignored
user id to change to after setting listen socket, or -1.
options
0, or LWS_SERVER_OPTION_DEFEAT_CLIENT_MASK +
user +
optional user pointer that can be recovered via the context +pointer using libwebsocket_context_user

Description

-- 2.7.4