From 68995878e10c7a1e9d17cff69a740c42b18d5d0d Mon Sep 17 00:00:00 2001 From: Krisztian Litkey Date: Sat, 26 Jan 2013 13:30:27 +0200 Subject: [PATCH] common: added websocket transport setopt interface. --- src/common/wsck-transport.c | 29 ++++++++++++++++++++++++++++- src/common/wsck-transport.h | 8 ++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/common/wsck-transport.c b/src/common/wsck-transport.c index 03ce5bc..19c10ea 100644 --- a/src/common/wsck-transport.c +++ b/src/common/wsck-transport.c @@ -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, diff --git a/src/common/wsck-transport.h b/src/common/wsck-transport.h index b5890b7..86f4982 100644 --- a/src/common/wsck-transport.h +++ b/src/common/wsck-transport.h @@ -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 -- 2.7.4