add context construction option to skip server hostname lookup
Signed-off-by: Andy Green <andy.green@linaro.org>
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index ca41b04..9912aa5 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -2596,35 +2596,43 @@
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 {
+
+ /* 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);
+ }
+
+ 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);
}
- 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 */
p = getenv("http_proxy");
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 @@
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 @@
<dd>user id to change to after setting listen socket, or -1.
<dt><b>options</b>
<dd>0, or LWS_SERVER_OPTION_DEFEAT_CLIENT_MASK
+<dt><b>user</b>
+<dd>optional user pointer that can be recovered via the context
+pointer using libwebsocket_context_user
</dl>
<h3>Description</h3>
<blockquote>