test server use syslog logging 43/2943/1
authorAndy Green <andy.green@linaro.org>
Sat, 19 Jan 2013 03:32:18 +0000 (11:32 +0800)
committerKevron Rees <kevron_m_rees@linux.intel.com>
Thu, 7 Mar 2013 21:01:27 +0000 (13:01 -0800)
Signed-off-by: Andy Green <andy.green@linaro.org>
README-test-server
lib/libwebsockets.c
libwebsockets-api-doc.html
test-server/test-server.c

index 4f1cbdc..1091c53 100644 (file)
@@ -175,6 +175,8 @@ It will fetch a script in the form of test.html, and then run the
 script in there on the browser to open a websocket connection.
 Incrementing numbers should appear in the browser display.
 
+By default the test server logs to both stderr and syslog.
+
 Using SSL on the server side
 ----------------------------
 
index 6113f9b..5825677 100644 (file)
@@ -49,8 +49,9 @@ int openssl_websocket_private_data_index;
 #endif
 
 static int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE;
-static void lwsl_emit_stderr(const char *line);
-static void (*lwsl_emit)(const char *line) = lwsl_emit_stderr;
+static void lwsl_emit_stderr(int level, const char *line);
+static void (*lwsl_emit)(int level, const char *line) = lwsl_emit_stderr;
+
 static const char *log_level_names[] = {
        "ERR",
        "WARN",
@@ -2156,7 +2157,6 @@ static void lwsl_emit_stderr(int level, const char *line)
 {
        char buf[300];
        struct timeval tv;
-       int pos = 0;
        int n;
 
        gettimeofday(&tv, NULL);
@@ -2164,7 +2164,7 @@ static void lwsl_emit_stderr(int level, const char *line)
        buf[0] = '\0';
        for (n = 0; n < LLL_COUNT; n++)
                if (level == (1 << n)) {
-                       pos = sprintf(buf, "[%ld:%04d] %s: ", tv.tv_sec,
+                       sprintf(buf, "[%ld:%04d] %s: ", tv.tv_sec,
                                        (int)(tv.tv_usec / 100), log_level_names[n]);
                        break;
                }
@@ -2220,7 +2220,7 @@ void _lws_log(int filter, const char *format, ...)
  *     emission on stderr.
  */
 
-void lws_set_log_level(int level, void (*log_emit_function)(const char *line))
+void lws_set_log_level(int level, void (*log_emit_function)(int level, const char *line))
 {
        log_level = level;
        if (log_emit_function)
index 6acd4f3..fcd92cd 100644 (file)
@@ -371,7 +371,7 @@ fail it.  Otherwise 0 return == wsi seems consistent.
 <i>void</i>
 <b>lws_set_log_level</b>
 (<i>int</i> <b>level</b>,
-<i>void (*</i><b>log_emit_function</b>) <i>(const char *line)</i>)
+<i>void (*</i><b>log_emit_function</b>) <i>(int level, const char *line)</i>)
 <h3>Arguments</h3>
 <dl>
 <dt><b>level</b>
index 9487d80..87cc351 100644 (file)
@@ -26,6 +26,7 @@
 #include <string.h>
 #include <sys/time.h>
 #include <assert.h>
+#include <syslog.h>
 
 #include "../lib/libwebsockets.h"
 
@@ -95,8 +96,10 @@ static int callback_http(struct libwebsocket_context *context,
                enum libwebsocket_callback_reasons reason, void *user,
                                                           void *in, size_t len)
 {
+#if 0
        char client_name[128];
        char client_ip[128];
+#endif
        char buf[256];
        int n;
 #ifdef EXTERNAL_POLL
@@ -114,7 +117,7 @@ static int callback_http(struct libwebsocket_context *context,
                sprintf(buf, LOCAL_RESOURCE_PATH"%s", whitelist[n].urlpath);
 
                if (libwebsockets_serve_http_file(context, wsi, buf, whitelist[n].mimetype))
-                       fprintf(stderr, "Failed to send HTTP file\n");
+                       lwsl_err("Failed to send HTTP file\n");
 
                /*
                 * notice that the sending of the file completes asynchronously,
@@ -125,7 +128,7 @@ static int callback_http(struct libwebsocket_context *context,
                break;
 
        case LWS_CALLBACK_HTTP_FILE_COMPLETION:
-//             fprintf(stderr, "LWS_CALLBACK_HTTP_FILE_COMPLETION seen\n");
+//             lwsl_info("LWS_CALLBACK_HTTP_FILE_COMPLETION seen\n");
                /* kill the connection after we sent one file */
                return 1;
 
@@ -138,13 +141,13 @@ static int callback_http(struct libwebsocket_context *context,
         */
 
        case LWS_CALLBACK_FILTER_NETWORK_CONNECTION:
-
+#if 0
                libwebsockets_get_peer_addresses((int)(long)user, client_name,
                             sizeof(client_name), client_ip, sizeof(client_ip));
 
-//             fprintf(stderr, "Received network connect from %s (%s)\n",
-//                                                     client_name, client_ip);
-
+               fprintf(stderr, "Received network connect from %s (%s)\n",
+                                                       client_name, client_ip);
+#endif
                /* if we returned non-zero from here, we kill the connection */
                break;
 
@@ -157,7 +160,7 @@ static int callback_http(struct libwebsocket_context *context,
        case LWS_CALLBACK_ADD_POLL_FD:
 
                if (count_pollfds >= MAX_POLL_ELEMENTS) {
-                       fprintf(stderr, "LWS_CALLBACK_ADD_POLL_FD: too many sockets to track\n");
+                       lwsl_err("LWS_CALLBACK_ADD_POLL_FD: too many sockets to track\n");
                        return 1;
                }
 
@@ -266,7 +269,7 @@ callback_dumb_increment(struct libwebsocket_context *context,
        switch (reason) {
 
        case LWS_CALLBACK_ESTABLISHED:
-               fprintf(stderr, "callback_dumb_increment: "
+               lwsl_info("callback_dumb_increment: "
                                                 "LWS_CALLBACK_ESTABLISHED\n");
                pss->number = 0;
                break;
@@ -281,18 +284,18 @@ callback_dumb_increment(struct libwebsocket_context *context,
                n = sprintf((char *)p, "%d", pss->number++);
                n = libwebsocket_write(wsi, p, n, LWS_WRITE_TEXT);
                if (n < 0) {
-                       fprintf(stderr, "ERROR %d writing to socket\n", n);
+                       lwsl_err("ERROR %d writing to socket\n", n);
                        return 1;
                }
                if (close_testing && pss->number == 50) {
-                       fprintf(stderr, "close tesing limit, closing\n");
+                       lwsl_info("close tesing limit, closing\n");
                        libwebsocket_close_and_free_session(context, wsi,
                                                       LWS_CLOSE_STATUS_NORMAL);
                }
                break;
 
        case LWS_CALLBACK_RECEIVE:
-               fprintf(stderr, "rx %d\n", (int)len);
+//             fprintf(stderr, "rx %d\n", (int)len);
                if (len < 6)
                        break;
                if (strcmp(in, "reset\n") == 0)
@@ -349,7 +352,7 @@ callback_lws_mirror(struct libwebsocket_context *context,
        switch (reason) {
 
        case LWS_CALLBACK_ESTABLISHED:
-               fprintf(stderr, "callback_lws_mirror: "
+               lwsl_info("callback_lws_mirror: "
                                                 "LWS_CALLBACK_ESTABLISHED\n");
                pss->ringbuffer_tail = ringbuffer_head;
                pss->wsi = wsi;
@@ -366,7 +369,7 @@ callback_lws_mirror(struct libwebsocket_context *context,
                                   ringbuffer[pss->ringbuffer_tail].len,
                                                                LWS_WRITE_TEXT);
                        if (n < 0) {
-                               fprintf(stderr, "ERROR %d writing to socket\n", n);
+                               lwsl_err("ERROR %d writing to socket\n", n);
                                return 1;
                        }
 
@@ -382,7 +385,7 @@ callback_lws_mirror(struct libwebsocket_context *context,
                                num_wsi_choked = 0;
                        }
 
-//                     fprintf(stderr, "tx fifo %d\n", (ringbuffer_head - pss->ringbuffer_tail) & (MAX_MESSAGE_QUEUE - 1));
+//                     lwsl_debug("tx fifo %d\n", (ringbuffer_head - pss->ringbuffer_tail) & (MAX_MESSAGE_QUEUE - 1));
 
                        libwebsocket_callback_on_writable(context, wsi);
 
@@ -392,14 +395,14 @@ callback_lws_mirror(struct libwebsocket_context *context,
        case LWS_CALLBACK_BROADCAST:
                n = libwebsocket_write(wsi, in, len, LWS_WRITE_TEXT);
                if (n < 0)
-                       fprintf(stderr, "mirror write failed\n");
+                       lwsl_err("mirror write failed\n");
                break;
 
        case LWS_CALLBACK_RECEIVE:
 
                if (((ringbuffer_head - pss->ringbuffer_tail) &
                                  (MAX_MESSAGE_QUEUE - 1)) == (MAX_MESSAGE_QUEUE - 1)) {
-                       fprintf(stderr, "dropping!\n");
+                       lwsl_err("dropping!\n");
                        goto choke;
                }
 
@@ -427,7 +430,7 @@ choke:
                        wsi_choked[num_wsi_choked++] = wsi;
                }
 
-//             fprintf(stderr, "rx fifo %d\n", (ringbuffer_head - pss->ringbuffer_tail) & (MAX_MESSAGE_QUEUE - 1));
+//             lwsl_debug("rx fifo %d\n", (ringbuffer_head - pss->ringbuffer_tail) & (MAX_MESSAGE_QUEUE - 1));
 done:
                libwebsocket_callback_on_writable_all_protocol(
                                               libwebsockets_get_protocol(wsi));
@@ -506,10 +509,7 @@ int main(int argc, char **argv)
 #ifdef LWS_NO_FORK
        unsigned int oldus = 0;
 #endif
-
-       fprintf(stderr, "libwebsockets test server\n"
-                       "(C) Copyright 2010-2013 Andy Green <andy@warmcat.com> "
-                                                   "licensed under LGPL2.1\n");
+       int debug_level = 7;
 
        while (n >= 0) {
                n = getopt_long(argc, argv, "ci:khsp:d:", options, NULL);
@@ -517,7 +517,7 @@ int main(int argc, char **argv)
                        continue;
                switch (n) {
                case 'd':
-                       lws_set_log_level(atoi(optarg), NULL);
+                       debug_level = atoi(optarg);
                        break;
                case 's':
                        use_ssl = 1;
@@ -547,6 +547,16 @@ int main(int argc, char **argv)
                }
        }
 
+       setlogmask(LOG_UPTO (LOG_NOTICE));
+       openlog("lwsts", LOG_PID | LOG_PERROR, LOG_DAEMON);
+
+       /* tell the library what debug level to emit and to send it to syslog */
+       lws_set_log_level(debug_level, lwsl_emit_syslog);
+
+       lwsl_notice("libwebsockets test server\n"
+                       "(C) Copyright 2010-2013 Andy Green <andy@warmcat.com> "
+                                                   "licensed under LGPL2.1\n");
+
        if (!use_ssl)
                cert_path = key_path = NULL;
 
@@ -554,7 +564,7 @@ int main(int argc, char **argv)
                                libwebsocket_internal_extensions,
                                cert_path, key_path, NULL, -1, -1, opts, NULL);
        if (context == NULL) {
-               fprintf(stderr, "libwebsocket init failed\n");
+               lwsl_err("libwebsocket init failed\n");
                return -1;
        }
 
@@ -566,7 +576,7 @@ int main(int argc, char **argv)
         * This example shows how to work with no forked service loop
         */
 
-       fprintf(stderr, " Using no-fork service loop\n");
+       lwsl_info(" Using no-fork service loop\n");
 
        n = 0;
        while (n >= 0) {
@@ -638,7 +648,7 @@ int main(int argc, char **argv)
         * This example shows how to work with the forked websocket service loop
         */
 
-       fprintf(stderr, " Using forked service loop\n");
+       lwsl_info(" Using forked service loop\n");
 
        /*
         * This forks the websocket service action into a subprocess so we
@@ -647,7 +657,7 @@ int main(int argc, char **argv)
 
        n = libwebsockets_fork_service_loop(context);
        if (n < 0) {
-               fprintf(stderr, "Unable to fork service loop %d\n", n);
+               lwsl_err("Unable to fork service loop %d\n", n);
                return 1;
        }
 
@@ -679,5 +689,9 @@ done:
 
        libwebsocket_context_destroy(context);
 
+       lwsl_notice("libwebsockets-test-server exited cleanly\n");
+
+       closelog();
+
        return 0;
 }