common: added websocket transport setopt interface.
authorKrisztian Litkey <kli@iki.fi>
Sat, 26 Jan 2013 11:30:27 +0000 (13:30 +0200)
committerKrisztian Litkey <kli@iki.fi>
Tue, 29 Jan 2013 15:54:02 +0000 (17:54 +0200)
src/common/wsck-transport.c
src/common/wsck-transport.h

index 03ce5bc..19c10ea 100644 (file)
@@ -61,6 +61,7 @@ typedef struct {
     MRP_TRANSPORT_PUBLIC_FIELDS;         /* common transport fields */
     wsl_ctx_t *ctx;                      /* websocket context */
     wsl_sck_t *sck;                      /* websocket instance */
+    int        send_mode;                /* websocket send mode */
 } wsck_t;
 
 
@@ -130,6 +131,28 @@ static void wsck_close(mrp_transport_t *mt)
 }
 
 
+static int wsck_setopt(mrp_transport_t *mt, const char *opt, const void *val)
+{
+    wsck_t *t = (wsck_t *)mt;
+
+    if (!strcmp(opt, MRP_WSCK_OPT_SENDMODE) && val != NULL) {
+        if (!strcmp(val, "binary"))
+            t->send_mode = WSL_SEND_BINARY;
+        else if (!strcmp(val, "text"))
+            t->send_mode = WSL_SEND_TEXT;
+        else
+            return FALSE;
+
+        if (t->sck != NULL)
+            return wsl_set_sendmode(t->sck, t->send_mode);
+        else
+            return TRUE;
+    }
+
+    return FALSE;
+}
+
+
 static int wsck_bind(mrp_transport_t *mt, mrp_sockaddr_t *addr,
                      socklen_t addrlen)
 {
@@ -205,6 +228,10 @@ static int wsck_accept(mrp_transport_t *mt, mrp_transport_t *mlt)
     if (t->sck != NULL) {
         mrp_debug("accepted websocket connection %p", mlt);
 
+        /* default to mode inherited from listening transport */
+        t->send_mode = lt->send_mode;
+        wsl_set_sendmode(t->sck, t->send_mode);
+
         return TRUE;
     }
     else {
@@ -624,7 +651,7 @@ static int check_cb(wsl_sck_t *sck, void *user_data, void *proto_data)
 
 
 MRP_REGISTER_TRANSPORT(wsck, WSCKP, wsck_t, wsck_resolve,
-                       wsck_open, wsck_createfrom, wsck_close,
+                       wsck_open, wsck_createfrom, wsck_close, wsck_setopt,
                        wsck_bind, wsck_listen, wsck_accept,
                        wsck_connect, wsck_disconnect,
                        wsck_send, NULL,
index b5890b7..86f4982 100644 (file)
@@ -23,6 +23,14 @@ typedef struct {
 #define MRP_WSCK_DEFPROTO "murphy"
 #define MRP_WSCK_PROTOLEN (MRP_SOCKADDR_SIZE - sizeof(_mrp_wsckaddr_base_t))
 
+/*
+ * websocket transport options and value
+ */
+
+#define MRP_WSCK_OPT_SENDMODE     "send-mode" /* sendmode option name */
+#define MRP_WSCK_SENDMODE_TEXT    "text"      /* sendmode text option */
+#define MRP_WSCK_SENDMODE_BINARY  "binary"    /* sendmode blob option */
+
 
 /*
  * websocket transport address