From 3ca0e592183839f339d47723ca51be1ca2bbc7ec Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 24 Feb 2012 08:22:37 +0100 Subject: Fix potential segafult in dump_handshake_info. Modularise code a bit. Modularise the code a bit. --- src/muniad.cc | 124 ++++------------------------------------------------------ 1 file changed, 7 insertions(+), 117 deletions(-) (limited to 'src/muniad.cc') diff --git a/src/muniad.cc b/src/muniad.cc index 0277099..8181f68 100644 --- a/src/muniad.cc +++ b/src/muniad.cc @@ -35,79 +35,13 @@ #include +#include "http.h" +#include "task.h" + #define LWS_NO_FORK static int close_testing; -/* - * This demo server shows how to use libwebsockets for one or more - * websocket protocols in the same server - * - * It defines the following websocket protocols: - * lws-mirror-protocol: copies any received packet to every connection also - * using this protocol, including the sender - */ - -enum demo_protocols { - /* always first */ - PROTOCOL_HTTP = 0, - PROTOCOL_LWS_MIRROR, - /* always last */ - DEMO_PROTOCOL_COUNT -}; - -#define LOCAL_RESOURCE_PATH "." - -/* this protocol server (always the first one) just knows how to do HTTP */ - -static int callback_http(struct libwebsocket_context * context, - struct libwebsocket *wsi, - enum libwebsocket_callback_reasons reason, void *user, - void *in, size_t len) -{ - char client_name[128]; - char client_ip[128]; - - switch (reason) { - case LWS_CALLBACK_HTTP: - fprintf(stderr, "serving HTTP URI %s\n", (char *)in); - -// add favicon later - if(in && strcmp((const char *)in, "/favicon.ico") == 0) { - if(libwebsockets_serve_http_file(wsi, LOCAL_RESOURCE_PATH"/favicon.ico", "image/x-icon")) - fprintf(stderr, "Failed to send favicon\n"); - break; - } - - - /* send the script... when it runs it'll start websockets */ -// if (libwebsockets_serve_http_file(wsi, LOCAL_RESOURCE_PATH"/test.html", "text/html")) - if (libwebsockets_serve_http_file(wsi, LOCAL_RESOURCE_PATH"/munia.html", "text/html")) - fprintf(stderr, "Failed to send HTTP file\n"); - break; - - /* - * callback for confirming to continue with client IP appear in - * protocol 0 callback since no websocket protocol has been agreed - * yet. You can just ignore this if you won't filter on client IP - * since the default uhandled callback return is 0 meaning let the - * connection continue. - */ - - case LWS_CALLBACK_FILTER_NETWORK_CONNECTION: - 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); - /* if we returned non-zero from here, we kill the connection */ - break; - - default: - break; - } - - return 0; -} - - /* * this is just an example of parsing handshake headers, you don't need this * in your code unless you will filter allowing connections by the header @@ -145,8 +79,10 @@ static void dump_handshake_info(struct lws_tokens *lwst) }; for (n = 0; n < WSI_TOKEN_COUNT; n++) { - if (lwst[n].token == NULL) continue; - fprintf(stderr, " %s = %s\n", token_names[n], lwst[n].token); + if (lwst[n].token == NULL || lwst[n].token_len == 0) continue; + fprintf(stderr, " %s = ", token_names[n]); + if(fwrite(lwst[n].token, 1, lwst[n].token_len, stderr)) {} + fprintf(stderr, "\n"); } } @@ -165,53 +101,7 @@ struct a_message { size_t len; }; -#include -#include - -typedef int boxid_t; -class Box { -public: - Box(std::string data) {} - Box() {} - - boxid_t id; - std::string title; - std::string description; - int x, y; -}; - -std::map boxes; - -/* -Protocol: - -Server -> client: - update [id] [title] [description]; - move [id] [x] [y]; - add [id] [title] [description] [x] [y]; - del [id] - -Client -> server: - update [id] [title] [description]; - move [id] [x] [y]; - add [title] [description] [x] [y]; - del [id] - -title and description are " encapsulated utf-8 string with " escaped with a backslash. -x and y are integers as strings -id are an integer as a string - */ - -struct task { - int x, y; - int id; - std::string title; - std::string desc; -}; typedef std::list ClientList; -typedef std::list TaskList; - -static TaskList tasklist; static struct a_message ringbuffer[MAX_MESSAGE_QUEUE]; static int ringbuffer_head; -- cgit v1.2.3