Allow setting the resource path via command line.
It is awfully limiting when you have to set the resource path at compile time.
Instead also allow setting it via the --resource_path command line option.
diff --git a/test-server/test-server.c b/test-server/test-server.c
index 7ee4375..e019b2b 100644
--- a/test-server/test-server.c
+++ b/test-server/test-server.c
@@ -88,6 +88,7 @@
#define LOCAL_RESOURCE_PATH INSTALL_DATADIR"/libwebsockets-test-server"
+char *resource_path = LOCAL_RESOURCE_PATH;
/*
* We take a strict whitelist approach to stop ../ attacks
@@ -137,15 +138,17 @@
/* check for the "send a big file by hand" example case */
if (!strcmp((const char *)in, "/leaf.jpg")) {
+ char leaf_path[1024];
+ snprintf(leaf_path, sizeof(leaf_path), "%s/leaf.jpg", resource_path);
/* well, let's demonstrate how to send the hard way */
p = buffer;
#ifdef WIN32
- pss->fd = open(LOCAL_RESOURCE_PATH"/leaf.jpg", O_RDONLY | _O_BINARY);
+ pss->fd = open(leaf_path, O_RDONLY | _O_BINARY);
#else
- pss->fd = open(LOCAL_RESOURCE_PATH"/leaf.jpg", O_RDONLY);
+ pss->fd = open(leaf_path, O_RDONLY);
#endif
if (pss->fd < 0)
@@ -193,7 +196,7 @@
if (in && strcmp((const char *)in, whitelist[n].urlpath) == 0)
break;
- sprintf(buf, LOCAL_RESOURCE_PATH"%s", whitelist[n].urlpath);
+ sprintf(buf, "%s%s", resource_path, whitelist[n].urlpath);
if (libwebsockets_serve_http_file(context, wsi, buf, whitelist[n].mimetype))
return -1; /* through completion or error, close the socket */
@@ -608,11 +611,14 @@
#ifndef LWS_NO_DAEMONIZE
{ "daemonize", no_argument, NULL, 'D' },
#endif
+ { "resource_path", required_argument, NULL, 'r' },
{ NULL, 0, 0, 0 }
};
int main(int argc, char **argv)
{
+ char cert_path[1024];
+ char key_path[1024];
int n = 0;
int use_ssl = 0;
struct libwebsocket_context *context;
@@ -634,7 +640,7 @@
info.port = 7681;
while (n >= 0) {
- n = getopt_long(argc, argv, "ci:hsp:d:D", options, NULL);
+ n = getopt_long(argc, argv, "ci:hsp:d:Dr:", options, NULL);
if (n < 0)
continue;
switch (n) {
@@ -666,10 +672,15 @@
"client after 50 dumb increments"
"and suppresses lws_mirror spam\n");
break;
+ case 'r':
+ resource_path = optarg;
+ printf("Setting resource path to \"%s\"\n", resource_path);
+ break;
case 'h':
fprintf(stderr, "Usage: test-server "
"[--port=<p>] [--ssl] "
- "[-d <log bitfield>]\n");
+ "[-d <log bitfield>] "
+ "[--resource_path <path>]\n");
exit(1);
}
}
@@ -719,8 +730,11 @@
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";
+ snprintf(cert_path, sizeof(cert_path), "%s/libwebsockets-test-server.pem", resource_path);
+ snprintf(key_path, sizeof(cert_path), "%s/libwebsockets-test-server.key.pem", resource_path);
+
+ info.ssl_cert_filepath = cert_path;
+ info.ssl_private_key_filepath = key_path;
}
info.gid = -1;
info.uid = -1;