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;
}
+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)
{
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 {
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,
#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