Index: example/index.html
===================================================================
--- example/index.html (nonexistent)
+++ example/index.html (revision 10438)
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+ WebSockets test
+
+
+
+
Index: example/libwebsockets-websocket.c
===================================================================
--- example/libwebsockets-websocket.c (nonexistent)
+++ example/libwebsockets-websocket.c (revision 10438)
@@ -0,0 +1,118 @@
+#include
+#include
+#include
+
+
+static int callback_http(struct lws *wsi,
+ enum lws_callback_reasons reason, void *user,
+ void *in, size_t len)
+{
+ return 0;
+}
+
+
+
+static int callback_dumb_increment(struct lws *wsi,
+ enum lws_callback_reasons reason,
+ void *user, void *in, size_t len)
+{
+ switch (reason) {
+ case LWS_CALLBACK_ESTABLISHED: // just log message that someone is connecting
+ printf("connection established\n");
+ break;
+ case LWS_CALLBACK_RECEIVE: { // the funny part
+ // create a buffer to hold our response
+ // it has to have some pre and post padding. You don't need to care
+ // what comes there, lwss will do everything for you. For more info see
+ // http://git.warmcat.com/cgi-bin/cgit/lwss/tree/lib/lwss.h#n597
+ unsigned char *buf = (unsigned char*) malloc(LWS_SEND_BUFFER_PRE_PADDING + len +
+ LWS_SEND_BUFFER_POST_PADDING);
+
+ int i;
+
+ // pointer to `void *in` holds the incomming request
+ // we're just going to put it in reverse order and put it in `buf` with
+ // correct offset. `len` holds length of the request.
+ for (i=0; i < len; i++) {
+ buf[LWS_SEND_BUFFER_PRE_PADDING + (len - 1) - i ] = ((char *) in)[i];
+ }
+
+ // log what we recieved and what we're going to send as a response.
+ // that disco syntax `%.*s` is used to print just a part of our buffer
+ // http://stackoverflow.com/questions/5189071/print-part-of-char-array
+ printf("received data: %s, replying: %.*s\n", (char *) in, (int) len,
+ buf + LWS_SEND_BUFFER_PRE_PADDING);
+
+ // send response
+ // just notice that we have to tell where exactly our response starts. That's
+ // why there's `buf[LWS_SEND_BUFFER_PRE_PADDING]` and how long it is.
+ // we know that our response has the same length as request because
+ // it's the same message in reverse order.
+ lws_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], len, LWS_WRITE_TEXT);
+
+ // release memory back into the wild
+ free(buf);
+ break;
+ }
+ case LWS_CALLBACK_CLOSED:
+ printf("connection closed\n");
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+
+
+static struct lws_protocols protocols[] = {
+ /* first protocol must always be HTTP handler */
+ {
+ "http-only", // name
+ callback_http, // callback
+ 0 // per_session_data_size
+ },
+ {
+ "dumb-increment-protocol", // protocol name - very important!
+ callback_dumb_increment, // callback
+ 0 // we don't use any per session data
+ },
+ {
+ NULL, NULL, 0 /* End of list */
+ }
+};
+
+int main(void) {
+ // server url will be http://localhost:9000
+ int port = 9000;
+ struct lws_context *context;
+ struct lws_context_creation_info context_info =
+ {
+ .port = port, .iface = NULL, .protocols = protocols, .extensions = NULL,
+ .ssl_cert_filepath = NULL, .ssl_private_key_filepath = NULL, .ssl_ca_filepath = NULL,
+ .gid = -1, .uid = -1, .options = 0, NULL, .ka_time = 0, .ka_probes = 0, .ka_interval = 0
+ };
+ // create lws context representing this server
+ context = lws_create_context(&context_info);
+
+ if (context == NULL) {
+ fprintf(stderr, "lws init failed\n");
+ return -1;
+ }
+
+ printf("starting server...\n");
+
+ // infinite loop, to end this server send SIGTERM. (CTRL+C)
+ while (1) {
+ lws_service(context, 50);
+ // lws_service will process all waiting events with their
+ // callback functions and then wait 50 ms.
+ // (this is a single threaded webserver and this will keep our server
+ // from generating load while there are not requests to process)
+ }
+
+ lws_context_destroy(context);
+
+ return 0;
+}
Index: example/makefile
===================================================================
--- example/makefile (nonexistent)
+++ example/makefile (revision 10438)
@@ -0,0 +1,2 @@
+test: libwebsockets-websocket.c
+ gcc libwebsockets-websocket.c -lwebsockets -o $@