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

change context creation params to struct

*** This patch changes an API all apps use ***

Context creation parameters are getting a bit out of control, this
patch creates a struct to contain them.

All the test apps are updated accordingly.

Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
Andy Green 2013-02-09 14:01:09 +08:00
parent 0480f6420c
commit 1b26527e72
9 changed files with 225 additions and 174 deletions

View file

@ -14,6 +14,13 @@ User api additions
User api changes
----------------
- libwebsocket_create_context() has changed from taking a ton of parameters
to just taking a pointer to a struct containing the parameters. The
struct lws_context_creation_info is in libwebsockets.h, the members
are in the same order as when they were parameters to the call
previously. The test apps are all updated accordingly so you can
see example code there.
- Header tokens are now deleted after the websocket connection is
established. Not just the header data is saved, but the pointer and
length array is also removed from (union) scope saving several hundred

View file

@ -1443,31 +1443,9 @@ int user_callback_handle_rxflow(callback_function callback_function,
/**
* libwebsocket_create_context() - Create the websocket handler
* @port: Port to listen on... you can use 0 to suppress listening on
* any port, that's what you want if you are not running a
* websocket server at all but just using it as a client
* @interf: NULL to bind the listen socket to all interfaces, or the
* interface name, eg, "eth2"
* @protocols: Array of structures listing supported protocols and a protocol-
* specific callback for each one. The list is ended with an
* entry that has a NULL callback pointer.
* It's not const because we write the owning_server member
* @extensions: NULL or array of libwebsocket_extension structs listing the
* extensions this context supports. If you configured with
* --without-extensions, you should give NULL here.
* @ssl_cert_filepath: If libwebsockets was compiled to use ssl, and you want
* to listen using SSL, set to the filepath to fetch the
* server cert from, otherwise NULL for unencrypted
* @ssl_private_key_filepath: filepath to private key if wanting SSL mode,
* else ignored
* @ssl_ca_filepath: CA certificate filepath or NULL
* @gid: group id to change to after setting listen socket, or -1.
* @uid: 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
* @info: pointer to struct with parameters
*
* This function creates the listening socket and takes care
* This function creates the listening socket (if serving) and takes care
* of all initialization in one step.
*
* After initialization, it returns a struct libwebsocket_context * that
@ -1494,14 +1472,7 @@ int user_callback_handle_rxflow(callback_function callback_function,
*/
struct libwebsocket_context *
libwebsocket_create_context(int port, const char *interf,
struct libwebsocket_protocols *protocols,
struct libwebsocket_extension *extensions,
const char *ssl_cert_filepath,
const char *ssl_private_key_filepath,
const char *ssl_ca_filepath,
int gid, int uid, unsigned int options,
void *user)
libwebsocket_create_context(struct lws_context_creation_info *info)
{
int n;
struct libwebsocket_context *context = NULL;
@ -1513,6 +1484,7 @@ libwebsocket_create_context(int port, const char *interf,
#endif
#ifndef LWS_NO_EXTENSIONS
int m;
struct libwebsocket_extension *ext;
#endif
#ifdef LWS_OPENSSL_SUPPORT
@ -1587,11 +1559,11 @@ libwebsocket_create_context(int port, const char *interf,
#endif
context->listen_service_extraseen = 0;
context->protocols = protocols;
context->listen_port = port;
context->protocols = info->protocols;
context->listen_port = info->port;
context->http_proxy_port = 0;
context->http_proxy_address[0] = '\0';
context->options = options;
context->options = info->options;
/* to reduce this allocation, */
context->max_fds = getdtablesize();
lwsl_notice(" max fd tracked: %u\n", context->max_fds);
@ -1616,10 +1588,10 @@ libwebsocket_create_context(int port, const char *interf,
context->fds_count = 0;
#ifndef LWS_NO_EXTENSIONS
context->extensions = extensions;
context->extensions = info->extensions;
#endif
context->last_timeout_check_s = 0;
context->user_space = user;
context->user_space = info->user;
#ifdef WIN32
context->fd_random = 0;
@ -1642,7 +1614,7 @@ libwebsocket_create_context(int port, const char *interf,
strcpy(context->canonical_hostname, "unknown");
#ifndef LWS_NO_SERVER
if (!(options & LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME)) {
if (!(info->options & LWS_SERVER_OPTION_SKIP_SERVER_CANONICAL_NAME)) {
struct sockaddr sa;
char hostname[1024] = "";
@ -1699,11 +1671,11 @@ libwebsocket_create_context(int port, const char *interf,
}
#ifndef LWS_NO_SERVER
if (port) {
if (info->port) {
#ifdef LWS_OPENSSL_SUPPORT
context->use_ssl = ssl_cert_filepath != NULL &&
ssl_private_key_filepath != NULL;
context->use_ssl = info->ssl_cert_filepath != NULL &&
info->ssl_private_key_filepath != NULL;
#ifdef USE_CYASSL
lwsl_notice(" Compiled with CYASSL support\n");
#else
@ -1775,7 +1747,7 @@ libwebsocket_create_context(int port, const char *interf,
/* client context */
if (port == CONTEXT_PORT_NO_LISTEN) {
if (info->port == CONTEXT_PORT_NO_LISTEN) {
method = (SSL_METHOD *)SSLv23_client_method();
if (!method) {
lwsl_err("problem creating ssl method: %s\n",
@ -1797,7 +1769,7 @@ libwebsocket_create_context(int port, const char *interf,
SSL_CTX_set_cipher_list(context->ssl_client_ctx, CIPHERS_LIST_STRING);
/* openssl init for cert verification (for client sockets) */
if (!ssl_ca_filepath) {
if (!info->ssl_ca_filepath) {
if (!SSL_CTX_load_verify_locations(
context->ssl_client_ctx, NULL,
LWS_OPENSSL_CLIENT_CERTS))
@ -1808,12 +1780,12 @@ libwebsocket_create_context(int port, const char *interf,
LWS_OPENSSL_CLIENT_CERTS);
} else
if (!SSL_CTX_load_verify_locations(
context->ssl_client_ctx, ssl_ca_filepath,
context->ssl_client_ctx, info->ssl_ca_filepath,
NULL))
lwsl_err(
"Unable to load SSL Client certs "
"file from %s -- client ssl isn't "
"going to work", ssl_ca_filepath);
"going to work", info->ssl_ca_filepath);
/*
* callback allowing user code to load extra verification certs
@ -1828,7 +1800,7 @@ libwebsocket_create_context(int port, const char *interf,
/* as a server, are we requiring clients to identify themselves? */
if (options & LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT) {
if (info->options & LWS_SERVER_OPTION_REQUIRE_VALID_OPENSSL_CLIENT_CERT) {
/* absolutely require the client cert */
@ -1852,18 +1824,19 @@ libwebsocket_create_context(int port, const char *interf,
/* set the local certificate from CertFile */
n = SSL_CTX_use_certificate_chain_file(context->ssl_ctx,
ssl_cert_filepath);
info->ssl_cert_filepath);
if (n != 1) {
lwsl_err("problem getting cert '%s': %s\n",
ssl_cert_filepath,
info->ssl_cert_filepath,
ERR_error_string(ERR_get_error(), ssl_err_buf));
goto bail;
}
/* set the private key from KeyFile */
if (SSL_CTX_use_PrivateKey_file(context->ssl_ctx,
ssl_private_key_filepath, SSL_FILETYPE_PEM) != 1) {
info->ssl_private_key_filepath,
SSL_FILETYPE_PEM) != 1) {
lwsl_err("ssl problem getting key '%s': %s\n",
ssl_private_key_filepath,
info->ssl_private_key_filepath,
ERR_error_string(ERR_get_error(), ssl_err_buf));
goto bail;
}
@ -1885,7 +1858,7 @@ libwebsocket_create_context(int port, const char *interf,
#ifndef LWS_NO_SERVER
/* set up our external listening socket we serve on */
if (port) {
if (info->port) {
extern int interface_to_sa(const char *ifname, struct sockaddr_in *addr, size_t addrlen);
int sockfd;
@ -1918,18 +1891,18 @@ libwebsocket_create_context(int port, const char *interf,
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
if (interf == NULL)
if (info->interface == NULL)
serv_addr.sin_addr.s_addr = INADDR_ANY;
else
interface_to_sa(interf, &serv_addr,
interface_to_sa(info->interface, &serv_addr,
sizeof(serv_addr));
serv_addr.sin_port = htons(port);
serv_addr.sin_port = htons(info->port);
n = bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr));
if (n < 0) {
lwsl_err("ERROR on binding to port %d (%d %d)\n",
port, n, errno);
info->port, n, errno);
close(sockfd);
goto bail;
}
@ -1954,7 +1927,7 @@ libwebsocket_create_context(int port, const char *interf,
context->listen_service_fd = sockfd;
listen(sockfd, LWS_SOMAXCONN);
lwsl_notice(" Listening on port %d\n", port);
lwsl_notice(" Listening on port %d\n", info->port);
}
#endif
@ -1965,25 +1938,26 @@ libwebsocket_create_context(int port, const char *interf,
*/
#ifdef WIN32
#else
if (gid != -1)
if (setgid(gid))
if (info->gid != -1)
if (setgid(info->gid))
lwsl_warn("setgid: %s\n", strerror(errno));
if (uid != -1)
if (setuid(uid))
if (info->uid != -1)
if (setuid(info->uid))
lwsl_warn("setuid: %s\n", strerror(errno));
#endif
/* initialize supported protocols */
for (context->count_protocols = 0;
protocols[context->count_protocols].callback;
info->protocols[context->count_protocols].callback;
context->count_protocols++) {
lwsl_parser(" Protocol: %s\n",
protocols[context->count_protocols].name);
info->protocols[context->count_protocols].name);
protocols[context->count_protocols].owning_server = context;
protocols[context->count_protocols].protocol_index =
info->protocols[context->count_protocols].owning_server =
context;
info->protocols[context->count_protocols].protocol_index =
context->count_protocols;
}
@ -1994,17 +1968,18 @@ libwebsocket_create_context(int port, const char *interf,
*/
m = LWS_EXT_CALLBACK_CLIENT_CONTEXT_CONSTRUCT;
if (port)
if (info->port)
m = LWS_EXT_CALLBACK_SERVER_CONTEXT_CONSTRUCT;
if (extensions) {
while (extensions->callback) {
lwsl_ext(" Extension: %s\n", extensions->name);
extensions->callback(context, extensions, NULL,
if (info->extensions) {
ext = info->extensions;
while (ext->callback) {
lwsl_ext(" Extension: %s\n", ext->name);
ext->callback(context, ext, NULL,
(enum libwebsocket_extension_callback_reasons)m,
NULL, NULL, 0);
extensions++;
}
ext++;
}
}
#endif
return context;

View file

@ -716,6 +716,48 @@ struct libwebsocket_extension {
};
#endif
/**
* struct lws_context_creation_info: parameters to create context with
*
* @port: Port to listen on... you can use 0 to suppress listening on
* any port, that's what you want if you are not running a
* websocket server at all but just using it as a client
* @interface: NULL to bind the listen socket to all interfaces, or the
* interface name, eg, "eth2"
* @protocols: Array of structures listing supported protocols and a protocol-
* specific callback for each one. The list is ended with an
* entry that has a NULL callback pointer.
* It's not const because we write the owning_server member
* @extensions: NULL or array of libwebsocket_extension structs listing the
* extensions this context supports. If you configured with
* --without-extensions, you should give NULL here.
* @ssl_cert_filepath: If libwebsockets was compiled to use ssl, and you want
* to listen using SSL, set to the filepath to fetch the
* server cert from, otherwise NULL for unencrypted
* @ssl_private_key_filepath: filepath to private key if wanting SSL mode,
* else ignored
* @ssl_ca_filepath: CA certificate filepath or NULL
* @gid: group id to change to after setting listen socket, or -1.
* @uid: 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
*/
struct lws_context_creation_info {
int port;
const char *interface;
struct libwebsocket_protocols *protocols;
struct libwebsocket_extension *extensions;
const char *ssl_cert_filepath;
const char *ssl_private_key_filepath;
const char *ssl_ca_filepath;
int gid;
int uid;
unsigned int options;
void *user;
};
LWS_EXTERN
void lws_set_log_level(int level, void (*log_emit_function)(int level, const char *line));
@ -723,14 +765,7 @@ LWS_EXTERN void
lwsl_emit_syslog(int level, const char *line);
LWS_EXTERN struct libwebsocket_context *
libwebsocket_create_context(int port, const char * interf,
struct libwebsocket_protocols *protocols,
struct libwebsocket_extension *extensions,
const char *ssl_cert_filepath,
const char *ssl_private_key_filepath,
const char *ssl_ca_filepath,
int gid, int uid,
unsigned int options, void *user);
libwebsocket_create_context(struct lws_context_creation_info *info);
LWS_EXTERN void
libwebsocket_context_destroy(struct libwebsocket_context *context);

View file

@ -344,57 +344,15 @@ has been created.
<h2>libwebsocket_create_context - Create the websocket handler</h2>
<i>struct libwebsocket_context *</i>
<b>libwebsocket_create_context</b>
(<i>int</i> <b>port</b>,
<i>const char *</i> <b>interf</b>,
<i>struct libwebsocket_protocols *</i> <b>protocols</b>,
<i>struct libwebsocket_extension *</i> <b>extensions</b>,
<i>const char *</i> <b>ssl_cert_filepath</b>,
<i>const char *</i> <b>ssl_private_key_filepath</b>,
<i>const char *</i> <b>ssl_ca_filepath</b>,
<i>int</i> <b>gid</b>,
<i>int</i> <b>uid</b>,
<i>unsigned int</i> <b>options</b>,
<i>void *</i> <b>user</b>)
(<i>struct lws_context_creation_info *</i> <b>info</b>)
<h3>Arguments</h3>
<dl>
<dt><b>port</b>
<dd>Port to listen on... you can use 0 to suppress listening on
any port, that's what you want if you are not running a
websocket server at all but just using it as a client
<dt><b>interf</b>
<dd>NULL to bind the listen socket to all interfaces, or the
interface name, eg, "eth2"
<dt><b>protocols</b>
<dd>Array of structures listing supported protocols and a protocol-
specific callback for each one. The list is ended with an
entry that has a NULL callback pointer.
It's not const because we write the owning_server member
<dt><b>extensions</b>
<dd>NULL or array of libwebsocket_extension structs listing the
extensions this context supports. If you configured with
--without-extensions, you should give NULL here.
<dt><b>ssl_cert_filepath</b>
<dd>If libwebsockets was compiled to use ssl, and you want
to listen using SSL, set to the filepath to fetch the
server cert from, otherwise NULL for unencrypted
<dt><b>ssl_private_key_filepath</b>
<dd>filepath to private key if wanting SSL mode,
else ignored
<dt><b>ssl_ca_filepath</b>
<dd>CA certificate filepath or NULL
<dt><b>gid</b>
<dd>group id to change to after setting listen socket, or -1.
<dt><b>uid</b>
<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
<dt><b>info</b>
<dd>pointer to struct with parameters
</dl>
<h3>Description</h3>
<blockquote>
This function creates the listening socket and takes care
This function creates the listening socket (if serving) and takes care
of all initialization in one step.
<p>
After initialization, it returns a struct libwebsocket_context * that
@ -997,3 +955,55 @@ is per-context, so it can track stuff across
all sessions, etc, if it wants
</dl>
<hr>
<h2>struct lws_context_creation_info - </h2>
<b>struct lws_context_creation_info</b> {<br>
&nbsp; &nbsp; <i>int</i> <b>port</b>;<br>
&nbsp; &nbsp; <i>const char *</i> <b>interface</b>;<br>
&nbsp; &nbsp; <i>struct libwebsocket_protocols *</i> <b>protocols</b>;<br>
&nbsp; &nbsp; <i>struct libwebsocket_extension *</i> <b>extensions</b>;<br>
&nbsp; &nbsp; <i>const char *</i> <b>ssl_cert_filepath</b>;<br>
&nbsp; &nbsp; <i>const char *</i> <b>ssl_private_key_filepath</b>;<br>
&nbsp; &nbsp; <i>const char *</i> <b>ssl_ca_filepath</b>;<br>
&nbsp; &nbsp; <i>int</i> <b>gid</b>;<br>
&nbsp; &nbsp; <i>int</i> <b>uid</b>;<br>
&nbsp; &nbsp; <i>unsigned int</i> <b>options</b>;<br>
&nbsp; &nbsp; <i>void *</i> <b>user</b>;<br>
};<br>
<h3>Members</h3>
<dl>
<dt><b>port</b>
<dd>Port to listen on... you can use 0 to suppress listening on
any port, that's what you want if you are not running a
websocket server at all but just using it as a client
<dt><b>interface</b>
<dd>NULL to bind the listen socket to all interfaces, or the
interface name, eg, "eth2"
<dt><b>protocols</b>
<dd>Array of structures listing supported protocols and a protocol-
specific callback for each one. The list is ended with an
entry that has a NULL callback pointer.
It's not const because we write the owning_server member
<dt><b>extensions</b>
<dd>NULL or array of libwebsocket_extension structs listing the
extensions this context supports. If you configured with
--without-extensions, you should give NULL here.
<dt><b>ssl_cert_filepath</b>
<dd>If libwebsockets was compiled to use ssl, and you want
to listen using SSL, set to the filepath to fetch the
server cert from, otherwise NULL for unencrypted
<dt><b>ssl_private_key_filepath</b>
<dd>filepath to private key if wanting SSL mode,
else ignored
<dt><b>ssl_ca_filepath</b>
<dd>CA certificate filepath or NULL
<dt><b>gid</b>
<dd>group id to change to after setting listen socket, or -1.
<dt><b>uid</b>
<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>
<hr>

View file

@ -201,6 +201,9 @@ int main(int argc, char **argv)
int ietf_version = -1; /* latest */
int mirror_lifetime = 0;
int longlived = 0;
struct lws_context_creation_info info;
memset(&info, 0, sizeof info);
fprintf(stderr, "libwebsockets test client\n"
"(C) Copyright 2010-2013 Andy Green <andy@warmcat.com> "
@ -253,14 +256,15 @@ int main(int argc, char **argv)
* For this client-only demo, we tell it to not listen on any port.
*/
context = libwebsocket_create_context(CONTEXT_PORT_NO_LISTEN, NULL,
protocols,
info.port = CONTEXT_PORT_NO_LISTEN;
info.protocols = protocols;
#ifndef LWS_NO_EXTENSIONS
libwebsocket_internal_extensions,
#else
NULL,
info.extensions = libwebsocket_internal_extensions;
#endif
NULL, NULL, NULL, -1, -1, 0, NULL);
info.gid = -1;
info.uid = -1;
context = libwebsocket_create_context(&info);
if (context == NULL) {
fprintf(stderr, "Creating libwebsocket context failed\n");
return 1;

View file

@ -147,10 +147,6 @@ static struct option options[] = {
int main(int argc, char **argv)
{
int n = 0;
const char *cert_path =
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
const char *key_path =
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
int port = 7681;
int use_ssl = 0;
struct libwebsocket_context *context;
@ -160,6 +156,7 @@ int main(int argc, char **argv)
int syslog_options = LOG_PID | LOG_PERROR;
int client = 0;
int listen_port;
struct lws_context_creation_info info;
#ifndef LWS_NO_CLIENT
char address[256];
int rate_us = 250000;
@ -172,6 +169,8 @@ int main(int argc, char **argv)
int daemonize = 0;
#endif
memset(&info, 0, sizeof info);
#ifndef LWS_NO_CLIENT
lwsl_notice("Built to support client operations\n");
#endif
@ -254,9 +253,6 @@ int main(int argc, char **argv)
lwsl_notice("libwebsockets echo test - "
"(C) Copyright 2010-2013 Andy Green <andy@warmcat.com> - "
"licensed under LGPL2.1\n");
if (!use_ssl || client)
cert_path = key_path = NULL;
#ifndef LWS_NO_CLIENT
if (client) {
lwsl_notice("Running in client mode\n");
@ -272,13 +268,22 @@ int main(int argc, char **argv)
#ifndef LWS_NO_CLIENT
}
#endif
context = libwebsocket_create_context(listen_port, interface, protocols,
info.port = listen_port;
info.interface = interface;
info.protocols = protocols;
#ifndef LWS_NO_EXTENSIONS
libwebsocket_internal_extensions,
#else
NULL,
info.extensions = libwebsocket_internal_extensions;
#endif
cert_path, key_path, NULL, -1, -1, opts, NULL);
if (use_ssl && !client) {
info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
}
info.gid = -1;
info.uid = -1;
info.options = opts;
context = libwebsocket_create_context(&info);
if (context == NULL) {
lwsl_err("libwebsocket init failed\n");

View file

@ -239,10 +239,6 @@ static struct option options[] = {
int main(int argc, char **argv)
{
int n = 0;
const char *cert_path =
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
const char *key_path =
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
int port = 7681;
int use_ssl = 0;
struct libwebsocket_context *context;
@ -252,6 +248,9 @@ int main(int argc, char **argv)
struct libwebsocket *wsi;
const char *address;
int server_port = port;
struct lws_context_creation_info info;
memset(&info, 0, sizeof info);
fprintf(stderr, "libwebsockets test fraggle\n"
"(C) Copyright 2010-2013 Andy Green <andy@warmcat.com> "
@ -298,16 +297,21 @@ int main(int argc, char **argv)
}
}
if (!use_ssl)
cert_path = key_path = NULL;
context = libwebsocket_create_context(server_port, interface, protocols,
info.port = server_port;
info.interface = interface;
info.protocols = protocols;
#ifndef LWS_NO_EXTENSIONS
libwebsocket_internal_extensions,
#else
NULL,
info.extensions = libwebsocket_internal_extensions;
#endif
cert_path, key_path, NULL, -1, -1, opts, NULL);
if (use_ssl) {
info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
}
info.gid = -1;
info.uid = -1;
info.options = opts;
context = libwebsocket_create_context(&info);
if (context == NULL) {
fprintf(stderr, "libwebsocket init failed\n");
return -1;

View file

@ -333,6 +333,9 @@ int main(int argc, char **argv)
unsigned long oldus = 0;
unsigned long l;
int ietf_version = -1;
struct lws_context_creation_info info;
memset(&info, 0, sizeof info);
if (argc < 2)
goto usage;
@ -412,14 +415,15 @@ int main(int argc, char **argv)
screen_width = w.ws_col;
#endif
context = libwebsocket_create_context(CONTEXT_PORT_NO_LISTEN, NULL,
protocols,
info.port = CONTEXT_PORT_NO_LISTEN;
info.protocols = protocols;
#ifndef LWS_NO_EXTENSIONS
libwebsocket_internal_extensions,
#else
NULL,
info.extensions = libwebsocket_internal_extensions;
#endif
NULL, NULL, NULL, -1, -1, 0, NULL);
info.gid = -1;
info.uid = -1;
context = libwebsocket_create_context(&info);
if (context == NULL) {
fprintf(stderr, "Creating libwebsocket context failed\n");
return 1;

View file

@ -492,11 +492,6 @@ static struct option options[] = {
int main(int argc, char **argv)
{
int n = 0;
const char *cert_path =
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
const char *key_path =
LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
int port = 7681;
int use_ssl = 0;
struct libwebsocket_context *context;
int opts = 0;
@ -506,12 +501,16 @@ int main(int argc, char **argv)
int syslog_options = LOG_PID | LOG_PERROR;
#endif
unsigned int oldus = 0;
struct lws_context_creation_info info;
int debug_level = 7;
#ifndef LWS_NO_DAEMONIZE
int daemonize = 0;
#endif
memset(&info, 0, sizeof info);
info.port = 7681;
while (n >= 0) {
n = getopt_long(argc, argv, "ci:hsp:d:D", options, NULL);
if (n < 0)
@ -532,7 +531,7 @@ int main(int argc, char **argv)
use_ssl = 1;
break;
case 'p':
port = atoi(optarg);
info.port = atoi(optarg);
break;
case 'i':
strncpy(interface_name, optarg, sizeof interface_name);
@ -579,8 +578,6 @@ int main(int argc, char **argv)
lwsl_notice("libwebsockets test server - "
"(C) Copyright 2010-2013 Andy Green <andy@warmcat.com> - "
"licensed under LGPL2.1\n");
if (!use_ssl)
cert_path = key_path = NULL;
#ifdef EXTERNAL_POLL
max_poll_elements = getdtablesize();
pollfds = malloc(max_poll_elements * sizeof (struct pollfd));
@ -591,13 +588,23 @@ int main(int argc, char **argv)
}
#endif
context = libwebsocket_create_context(port, interface, protocols,
info.interface = interface;
info.protocols = protocols;
#ifndef LWS_NO_EXTENSIONS
libwebsocket_internal_extensions,
#else
NULL,
info.extensions = libwebsocket_internal_extensions;
#endif
cert_path, key_path, NULL, -1, -1, opts, NULL);
if (!use_ssl) {
info.ssl_cert_filepath = NULL;
info.ssl_private_key_filepath = NULL;
} else {
info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
}
info.gid = -1;
info.uid = -1;
info.options = opts;
context = libwebsocket_create_context(&info);
if (context == NULL) {
lwsl_err("libwebsocket init failed\n");
return -1;