summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2012-02-24 08:22:37 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2012-02-24 08:22:37 +0100
commit3ca0e592183839f339d47723ca51be1ca2bbc7ec (patch)
tree9a98615b68280210e0753d55fea2ce0e86347fc4 /src
parentcce86546822ebbd4d2f1fb4f9944c9f8f7d5532f (diff)
Fix potential segafult in dump_handshake_info. Modularise code a bit. Modularise the code a bit.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am8
-rw-r--r--src/http.cc86
-rw-r--r--src/http.h43
-rw-r--r--src/muniad.cc124
-rw-r--r--src/task.cc30
-rw-r--r--src/task.h64
6 files changed, 236 insertions, 119 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index ec4ada4..b7ded17 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,9 +7,13 @@ muniad_LDADD = $(LIBWEBSOCKETS_LIBS)
muniad_CXXFLAGS = $(LIBWEBSOCKETS_CFLAGS)
muniad_SOURCES = \
- muniad.cc
+ muniad.cc \
+ http.cc \
+ task.cc
-EXTRA_DIST =
+EXTRA_DIST = \
+ http.h \
+ task.h
################
# Test Section #
diff --git a/src/http.cc b/src/http.cc
new file mode 100644
index 0000000..3dff64e
--- /dev/null
+++ b/src/http.cc
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * http.cc
+ *
+ * Fri Feb 24 07:58:48 CET 2012
+ * Copyright 2012 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of Munia.
+ *
+ * Munia is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Munia is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Munia; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "http.h"
+
+#include <stdio.h>
+#include <string.h>
+
+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"/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;
+}
diff --git a/src/http.h b/src/http.h
new file mode 100644
index 0000000..0b619dc
--- /dev/null
+++ b/src/http.h
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * http.h
+ *
+ * Fri Feb 24 07:58:48 CET 2012
+ * Copyright 2012 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of Munia.
+ *
+ * Munia is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Munia is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Munia; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#ifndef __MUNIA_HTTP_H__
+#define __MUNIA_HTTP_H__
+
+#include <stdlib.h>
+
+#include <libwebsockets.h>
+
+#define LOCAL_RESOURCE_PATH "."
+
+/* this protocol server (always the first one) just knows how to do HTTP */
+int callback_http(struct libwebsocket_context * context,
+ struct libwebsocket *wsi,
+ enum libwebsocket_callback_reasons reason, void *user,
+ void *in, size_t len);
+
+#endif/*__MUNIA_HTTP_H__*/
diff --git a/src/muniad.cc b/src/muniad.cc
index 0277099..8181f68 100644
--- a/src/muniad.cc
+++ b/src/muniad.cc
@@ -35,80 +35,14 @@
#include <libwebsockets.h>
+#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
* content
@@ -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 <string>
-#include <map>
-
-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<boxid_t, Box> 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<struct libwebsocket*> ClientList;
-typedef std::list<struct task> TaskList;
-
-static TaskList tasklist;
static struct a_message ringbuffer[MAX_MESSAGE_QUEUE];
static int ringbuffer_head;
diff --git a/src/task.cc b/src/task.cc
new file mode 100644
index 0000000..0b948c5
--- /dev/null
+++ b/src/task.cc
@@ -0,0 +1,30 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * task.cc
+ *
+ * Fri Feb 24 08:16:30 CET 2012
+ * Copyright 2012 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of Munia.
+ *
+ * Munia is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Munia is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Munia; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "task.h"
+
+TaskList tasklist;
diff --git a/src/task.h b/src/task.h
new file mode 100644
index 0000000..ffe93d7
--- /dev/null
+++ b/src/task.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set et sw=2 ts=2: */
+/***************************************************************************
+ * task.h
+ *
+ * Fri Feb 24 08:16:29 CET 2012
+ * Copyright 2012 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of Munia.
+ *
+ * Munia is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Munia is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Munia; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#ifndef __MUNIA_TASK_H__
+#define __MUNIA_TASK_H__
+
+#include <list>
+#include <string>
+
+/*
+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<struct task> TaskList;
+extern TaskList tasklist;
+
+#endif/*__MUNIA_TASK_H__*/