diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-11-15 17:47:54 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-11-15 17:47:54 -0800 |
| commit | 249932f3a208260f6b9c99d778b22d51cfabe87b (patch) | |
| tree | 4fd4826127e9c225d5232c39d4ae1db89b539689 /src/supplemental | |
| parent | eb328da56c3fc7167b536dcb206df0abb0f4a9b9 (diff) | |
| download | nng-249932f3a208260f6b9c99d778b22d51cfabe87b.tar.gz nng-249932f3a208260f6b9c99d778b22d51cfabe87b.tar.bz2 nng-249932f3a208260f6b9c99d778b22d51cfabe87b.zip | |
fixes #1071 tran_chkopt can be cleaned up
This is a sweeping cleanup of the transport logic around options,
and also harmonizes the names used when setting or getting options.
Additionally, legacy methods are now moved into a separate file and
can be elided via CMake or a preprocessor define.
Fundamentally, the ability to set to transport options via the socket
is deprecated; there are numerous problems with this and my earlier
approaches to deal with this have been somewhat misguided. Further
these approaches will not work with future protocol work that is
planned (were some options need to be negotiated with peers at the
time of connection establishment.)
Documentation has been updated to reflect this. The test suites still
make rather broad use of the older APIs, and will be converted later.
Diffstat (limited to 'src/supplemental')
| -rw-r--r-- | src/supplemental/http/http_api.h | 10 | ||||
| -rw-r--r-- | src/supplemental/http/http_client.c | 12 | ||||
| -rw-r--r-- | src/supplemental/http/http_conn.c | 4 | ||||
| -rw-r--r-- | src/supplemental/http/http_public.c | 16 | ||||
| -rw-r--r-- | src/supplemental/http/http_server.c | 12 | ||||
| -rw-r--r-- | src/supplemental/tcp/tcp.c | 58 | ||||
| -rw-r--r-- | src/supplemental/tls/tls_api.h | 1 | ||||
| -rw-r--r-- | src/supplemental/tls/tls_common.c | 119 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket.c | 111 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket.h | 3 |
10 files changed, 87 insertions, 259 deletions
diff --git a/src/supplemental/http/http_api.h b/src/supplemental/http/http_api.h index 1305b5a0..33947abf 100644 --- a/src/supplemental/http/http_api.h +++ b/src/supplemental/http/http_api.h @@ -205,9 +205,9 @@ extern int nni_http_server_set_tls(nni_http_server *, struct nng_tls_config *); extern int nni_http_server_get_tls( nni_http_server *, struct nng_tls_config **); -extern int nni_http_server_setx( +extern int nni_http_server_set( nni_http_server *, const char *, const void *, size_t, nni_type); -extern int nni_http_server_getx( +extern int nni_http_server_get( nni_http_server *, const char *, void *, size_t *, nni_type); // nni_http_server_start starts listening on the supplied port. @@ -359,9 +359,9 @@ extern int nni_http_client_set_tls(nni_http_client *, struct nng_tls_config *); extern int nni_http_client_get_tls( nni_http_client *, struct nng_tls_config **); -extern int nni_http_client_setx( - nni_http_client *, const char *, const void *, size_t, nni_type); -extern int nni_http_client_getx( +extern int nni_http_client_set( + nni_http_client *, const char *, const void *buf, size_t, nni_type); +extern int nni_http_client_get( nni_http_client *, const char *, void *, size_t *, nni_type); extern void nni_http_client_connect(nni_http_client *, nni_aio *); diff --git a/src/supplemental/http/http_client.c b/src/supplemental/http/http_client.c index 68f0f61c..c420e1ff 100644 --- a/src/supplemental/http/http_client.c +++ b/src/supplemental/http/http_client.c @@ -142,7 +142,7 @@ int nni_http_client_set_tls(nni_http_client *c, nng_tls_config *tls) { int rv; - rv = nni_stream_dialer_setx(c->dialer, NNG_OPT_TLS_CONFIG, &tls, + rv = nni_stream_dialer_set(c->dialer, NNG_OPT_TLS_CONFIG, &tls, sizeof(tls), NNI_TYPE_POINTER); return (rv); } @@ -152,24 +152,24 @@ nni_http_client_get_tls(nni_http_client *c, nng_tls_config **tlsp) { size_t sz = sizeof(*tlsp); int rv; - rv = nni_stream_dialer_getx( + rv = nni_stream_dialer_get( c->dialer, NNG_OPT_TLS_CONFIG, tlsp, &sz, NNI_TYPE_POINTER); return (rv); } int -nni_http_client_setx(nni_http_client *c, const char *name, const void *buf, +nni_http_client_set(nni_http_client *c, const char *name, const void *buf, size_t sz, nni_type t) { // We have no local options, but we just pass them straight through. - return (nni_stream_dialer_setx(c->dialer, name, buf, sz, t)); + return (nni_stream_dialer_set(c->dialer, name, buf, sz, t)); } int -nni_http_client_getx( +nni_http_client_get( nni_http_client *c, const char *name, void *buf, size_t *szp, nni_type t) { - return (nni_stream_dialer_getx(c->dialer, name, buf, szp, t)); + return (nni_stream_dialer_get(c->dialer, name, buf, szp, t)); } static void diff --git a/src/supplemental/http/http_conn.c b/src/supplemental/http/http_conn.c index 4b0c81c0..646a3067 100644 --- a/src/supplemental/http/http_conn.c +++ b/src/supplemental/http/http_conn.c @@ -656,7 +656,7 @@ nni_http_conn_getopt( if (conn->closed) { rv = NNG_ECLOSED; } else { - rv = nni_stream_getx(conn->sock, name, buf, szp, t); + rv = nni_stream_get(conn->sock, name, buf, szp, t); } nni_mtx_unlock(&conn->mtx); return (rv); @@ -671,7 +671,7 @@ nni_http_conn_setopt(nni_http_conn *conn, const char *name, const void *buf, if (conn->closed) { rv = NNG_ECLOSED; } else { - rv = nni_stream_setx(conn->sock, name, buf, sz, t); + rv = nni_stream_set(conn->sock, name, buf, sz, t); } nni_mtx_unlock(&conn->mtx); return (rv); diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c index 60ca2693..7900aa7f 100644 --- a/src/supplemental/http/http_public.c +++ b/src/supplemental/http/http_public.c @@ -779,29 +779,29 @@ nng_http_server_set_tls(nng_http_server *srv, struct nng_tls_config *cfg) } int -nng_http_server_get_tls(nng_http_server *srv, struct nng_tls_config **cfgp) +nng_http_server_get_tls(nng_http_server *srv, struct nng_tls_config **cfg) { #if defined(NNG_SUPP_HTTP) && defined(NNG_SUPP_TLS) - return (nni_http_server_get_tls(srv, cfgp)); + return (nni_http_server_get_tls(srv, cfg)); #else NNI_ARG_UNUSED(srv); - NNI_ARG_UNUSED(cfgp); + NNI_ARG_UNUSED(cfg); return (NNG_ENOTSUP); #endif } int -nng_http_server_get_addr(nng_http_server *srv, nng_sockaddr *addrp) +nng_http_server_get_addr(nng_http_server *srv, nng_sockaddr *addr) { #ifdef NNG_SUPP_HTTP size_t size = sizeof(nng_sockaddr); - if (srv == NULL || addrp == NULL) + if (srv == NULL || addr == NULL) return NNG_EINVAL; - return (nni_http_server_getx( - srv, NNG_OPT_LOCADDR, addrp, &size, NNI_TYPE_SOCKADDR)); + return (nni_http_server_get( + srv, NNG_OPT_LOCADDR, addr, &size, NNI_TYPE_SOCKADDR)); #else NNI_ARG_UNUSED(srv); - NNI_ARG_UNUSED(addrp); + NNI_ARG_UNUSED(addr); return (NNG_ENOTSUP); #endif } diff --git a/src/supplemental/http/http_server.c b/src/supplemental/http/http_server.c index d43dd888..46f2ce8a 100644 --- a/src/supplemental/http/http_server.c +++ b/src/supplemental/http/http_server.c @@ -1869,7 +1869,7 @@ int nni_http_server_set_tls(nni_http_server *s, nng_tls_config *tls) { int rv; - rv = nni_stream_listener_setx(s->listener, NNG_OPT_TLS_CONFIG, &tls, + rv = nni_stream_listener_set(s->listener, NNG_OPT_TLS_CONFIG, &tls, sizeof(tls), NNI_TYPE_POINTER); return (rv); } @@ -1879,24 +1879,24 @@ nni_http_server_get_tls(nni_http_server *s, nng_tls_config **tlsp) { size_t sz = sizeof(*tlsp); int rv; - rv = nni_stream_listener_getx( + rv = nni_stream_listener_get( s->listener, NNG_OPT_TLS_CONFIG, tlsp, &sz, NNI_TYPE_POINTER); return (rv); } int -nni_http_server_setx(nni_http_server *s, const char *name, const void *buf, +nni_http_server_set(nni_http_server *s, const char *name, const void *buf, size_t sz, nni_type t) { // We have no local options, but we just pass them straight through. - return (nni_stream_listener_setx(s->listener, name, buf, sz, t)); + return (nni_stream_listener_set(s->listener, name, buf, sz, t)); } int -nni_http_server_getx( +nni_http_server_get( nni_http_server *s, const char *name, void *buf, size_t *szp, nni_type t) { - return (nni_stream_listener_getx(s->listener, name, buf, szp, t)); + return (nni_stream_listener_get(s->listener, name, buf, szp, t)); } void diff --git a/src/supplemental/tcp/tcp.c b/src/supplemental/tcp/tcp.c index cde79051..2b1bd987 100644 --- a/src/supplemental/tcp/tcp.c +++ b/src/supplemental/tcp/tcp.c @@ -186,19 +186,19 @@ tcp_dialer_dial(void *arg, nng_aio *aio) } static int -tcp_dialer_getx( +tcp_dialer_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { tcp_dialer *d = arg; - return (nni_tcp_dialer_getopt(d->d, name, buf, szp, t)); + return (nni_tcp_dialer_get(d->d, name, buf, szp, t)); } static int -tcp_dialer_setx( +tcp_dialer_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { tcp_dialer *d = arg; - return (nni_tcp_dialer_setopt(d->d, name, buf, sz, t)); + return (nni_tcp_dialer_set(d->d, name, buf, sz, t)); } static int @@ -224,8 +224,8 @@ tcp_dialer_alloc(tcp_dialer **dp) d->ops.sd_close = tcp_dialer_close; d->ops.sd_free = tcp_dialer_free; d->ops.sd_dial = tcp_dialer_dial; - d->ops.sd_getx = tcp_dialer_getx; - d->ops.sd_setx = tcp_dialer_setx; + d->ops.sd_get = tcp_dialer_get; + d->ops.sd_set = tcp_dialer_set; *dp = d; return (0); @@ -320,7 +320,7 @@ tcp_listener_get_port(void *arg, void *buf, size_t *szp, nni_type t) uint8_t * paddr; sz = sizeof(sa); - rv = nni_tcp_listener_getopt( + rv = nni_tcp_listener_get( l->l, NNG_OPT_LOCADDR, &sa, &sz, NNI_TYPE_SOCKADDR); if (rv != 0) { return (rv); @@ -349,22 +349,22 @@ tcp_listener_get_port(void *arg, void *buf, size_t *szp, nni_type t) } static int -tcp_listener_getx( +tcp_listener_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { tcp_listener *l = arg; if (strcmp(name, NNG_OPT_TCP_BOUND_PORT) == 0) { return (tcp_listener_get_port(l, buf, szp, t)); } - return (nni_tcp_listener_getopt(l->l, name, buf, szp, t)); + return (nni_tcp_listener_get(l->l, name, buf, szp, t)); } static int -tcp_listener_setx( +tcp_listener_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { tcp_listener *l = arg; - return (nni_tcp_listener_setopt(l->l, name, buf, sz, t)); + return (nni_tcp_listener_set(l->l, name, buf, sz, t)); } static int @@ -386,8 +386,8 @@ tcp_listener_alloc_addr(nng_stream_listener **lp, const nng_sockaddr *sa) l->ops.sl_close = tcp_listener_close; l->ops.sl_listen = tcp_listener_listen; l->ops.sl_accept = tcp_listener_accept; - l->ops.sl_getx = tcp_listener_getx; - l->ops.sl_setx = tcp_listener_setx; + l->ops.sl_get = tcp_listener_get; + l->ops.sl_set = tcp_listener_set; *lp = (void *) l; return (0); @@ -434,35 +434,3 @@ nni_tcp_listener_alloc(nng_stream_listener **lp, const nng_url *url) return (tcp_listener_alloc_addr(lp, &sa)); } - -static int -tcp_check_bool(const void *val, size_t sz, nni_type t) -{ - return (nni_copyin_bool(NULL, val, sz, t)); -} - -static const nni_chkoption tcp_chkopts[] = { - { - .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_check = tcp_check_bool, - }, - { - .o_name = NNG_OPT_TCP_NODELAY, - .o_check = tcp_check_bool, - }, - { - .o_name = NNG_OPT_TCP_BOUND_PORT, - }, - { - .o_name = NNG_OPT_LOCADDR, - }, - { - .o_name = NULL, - }, -}; - -int -nni_tcp_checkopt(const char *name, const void *data, size_t sz, nni_type t) -{ - return (nni_chkopt(tcp_chkopts, name, data, sz, t)); -} diff --git a/src/supplemental/tls/tls_api.h b/src/supplemental/tls/tls_api.h index 642b9072..0c3e3155 100644 --- a/src/supplemental/tls/tls_api.h +++ b/src/supplemental/tls/tls_api.h @@ -18,6 +18,5 @@ // object. All fields will be zeroed. extern int nni_tls_dialer_alloc(nng_stream_dialer **, const nng_url *); extern int nni_tls_listener_alloc(nng_stream_listener **, const nng_url *); -extern int nni_tls_checkopt(const char *, const void *, size_t, nni_type); #endif // NNG_SUPPLEMENTAL_TLS_TLS_API_H diff --git a/src/supplemental/tls/tls_common.c b/src/supplemental/tls/tls_common.c index 243ac20e..e23fb4d8 100644 --- a/src/supplemental/tls/tls_common.c +++ b/src/supplemental/tls/tls_common.c @@ -188,13 +188,18 @@ tls_dialer_dial(void *arg, nng_aio *aio) static int tls_check_string(const void *v, size_t sz, nni_opt_type t) { - if ((t != NNI_TYPE_OPAQUE) && (t != NNI_TYPE_STRING)) { + switch (t) { + case NNI_TYPE_OPAQUE: + if (nni_strnlen(v, sz) >= sz) { + return (NNG_EINVAL); + } + return (0); + case NNI_TYPE_STRING: + // Caller is assumed to pass a good string. + return (0); + default: return (NNG_EBADTYPE); } - if (nni_strnlen(v, sz) >= sz) { - return (NNG_EINVAL); - } - return (0); } static int @@ -326,13 +331,13 @@ static const nni_option tls_dialer_opts[] = { }; static int -tls_dialer_getx( +tls_dialer_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { tls_dialer *d = arg; int rv; - rv = nni_stream_dialer_getx(d->d, name, buf, szp, t); + rv = nni_stream_dialer_get(d->d, name, buf, szp, t); if (rv == NNG_ENOTSUP) { rv = nni_getopt(tls_dialer_opts, name, d, buf, szp, t); } @@ -340,13 +345,13 @@ tls_dialer_getx( } static int -tls_dialer_setx( +tls_dialer_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { tls_dialer *d = arg; int rv; - rv = nni_stream_dialer_setx(d->d, name, buf, sz, t); + rv = nni_stream_dialer_set(d->d, name, buf, sz, t); if (rv == NNG_ENOTSUP) { rv = nni_setopt(tls_dialer_opts, name, d, buf, sz, t); } @@ -391,8 +396,8 @@ nni_tls_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) d->ops.sd_close = tls_dialer_close; d->ops.sd_free = tls_dialer_free; d->ops.sd_dial = tls_dialer_dial; - d->ops.sd_getx = tls_dialer_getx; - d->ops.sd_setx = tls_dialer_setx; + d->ops.sd_get = tls_dialer_get; + d->ops.sd_set = tls_dialer_set; *dp = (void *) d; return (rv); } @@ -586,13 +591,13 @@ static const nni_option tls_listener_opts[] = { }; static int -tls_listener_getx( +tls_listener_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { int rv; tls_listener *l = arg; - rv = nni_stream_listener_getx(l->l, name, buf, szp, t); + rv = nni_stream_listener_get(l->l, name, buf, szp, t); if (rv == NNG_ENOTSUP) { rv = nni_getopt(tls_listener_opts, name, l, buf, szp, t); } @@ -600,13 +605,13 @@ tls_listener_getx( } static int -tls_listener_setx( +tls_listener_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { int rv; tls_listener *l = arg; - rv = nni_stream_listener_setx(l->l, name, buf, sz, t); + rv = nni_stream_listener_set(l->l, name, buf, sz, t); if (rv == NNG_ENOTSUP) { rv = nni_setopt(tls_listener_opts, name, l, buf, sz, t); } @@ -649,80 +654,12 @@ nni_tls_listener_alloc(nng_stream_listener **lp, const nng_url *url) l->ops.sl_close = tls_listener_close; l->ops.sl_accept = tls_listener_accept; l->ops.sl_listen = tls_listener_listen; - l->ops.sl_getx = tls_listener_getx; - l->ops.sl_setx = tls_listener_setx; + l->ops.sl_get = tls_listener_get; + l->ops.sl_set = tls_listener_set; *lp = (void *) l; return (0); } -// The following checks exist for socket configuration, when we need to -// configure an option on a socket before any transport is configured -// underneath. - -static int -tls_check_config(const void *buf, size_t sz, nni_type t) -{ - int rv; - nng_tls_config *cfg; - - if ((rv = nni_copyin_ptr((void **) &cfg, buf, sz, t)) != 0) { - return (rv); - } - if (cfg == NULL) { - return (NNG_EINVAL); - } - return (0); -} - -static int -tls_check_auth_mode(const void *buf, size_t sz, nni_type t) -{ - int mode; - int rv; - - rv = nni_copyin_int(&mode, buf, sz, NNG_TLS_AUTH_MODE_NONE, - NNG_TLS_AUTH_MODE_REQUIRED, t); - return (rv); -} - -static const nni_chkoption tls_check_opts[] = { - { - .o_name = NNG_OPT_TLS_CONFIG, - .o_check = tls_check_config, - }, - { - .o_name = NNG_OPT_TLS_SERVER_NAME, - .o_check = tls_check_string, - }, - { - .o_name = NNG_OPT_TLS_CA_FILE, - .o_check = tls_check_string, - }, - { - .o_name = NNG_OPT_TLS_CERT_KEY_FILE, - .o_check = tls_check_string, - }, - { - .o_name = NNG_OPT_TLS_AUTH_MODE, - .o_check = tls_check_auth_mode, - }, - { - .o_name = NULL, - }, -}; - -int -nni_tls_checkopt(const char *name, const void *data, size_t sz, nni_type t) -{ - int rv; - - rv = nni_chkopt(tls_check_opts, name, data, sz, t); - if (rv == NNG_ENOTSUP) { - rv = nni_stream_checkopt("tcp", name, data, sz, t); - } - return (rv); -} - static void tls_cancel(nni_aio *aio, void *arg, int rv) { @@ -826,7 +763,7 @@ static const nni_option tls_options[] = { }; static int -tls_setx(void *arg, const char *name, const void *buf, size_t sz, nni_type t) +tls_set(void *arg, const char *name, const void *buf, size_t sz, nni_type t) { tls_conn * conn = arg; int rv; @@ -834,19 +771,19 @@ tls_setx(void *arg, const char *name, const void *buf, size_t sz, nni_type t) tcp = (conn != NULL) ? conn->tcp : NULL; - if ((rv = nni_stream_setx(tcp, name, buf, sz, t)) != NNG_ENOTSUP) { + if ((rv = nni_stream_set(tcp, name, buf, sz, t)) != NNG_ENOTSUP) { return (rv); } return (nni_setopt(tls_options, name, conn, buf, sz, t)); } static int -tls_getx(void *arg, const char *name, void *buf, size_t *szp, nni_type t) +tls_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t) { tls_conn *conn = arg; int rv; - if ((rv = nni_stream_getx(conn->tcp, name, buf, szp, t)) != + if ((rv = nni_stream_get(conn->tcp, name, buf, szp, t)) != NNG_ENOTSUP) { return (rv); } @@ -893,8 +830,8 @@ tls_alloc(tls_conn **conn_p, nng_tls_config *cfg, nng_aio *user_aio) conn->stream.s_free = tls_free; conn->stream.s_send = tls_send; conn->stream.s_recv = tls_recv; - conn->stream.s_getx = tls_getx; - conn->stream.s_setx = tls_setx; + conn->stream.s_get = tls_get; + conn->stream.s_set = tls_set; nng_tls_config_hold(cfg); *conn_p = conn; diff --git a/src/supplemental/websocket/websocket.c b/src/supplemental/websocket/websocket.c index e65fc24f..20adf626 100644 --- a/src/supplemental/websocket/websocket.c +++ b/src/supplemental/websocket/websocket.c @@ -179,8 +179,8 @@ static void ws_str_free(void *); static void ws_str_close(void *); static void ws_str_send(void *, nng_aio *); static void ws_str_recv(void *, nng_aio *); -static int ws_str_getx(void *, const char *, void *, size_t *, nni_type); -static int ws_str_setx(void *, const char *, const void *, size_t, nni_type); +static int ws_str_get(void *, const char *, void *, size_t *, nni_type); +static int ws_str_set(void *, const char *, const void *, size_t, nni_type); static void ws_listener_close(void *); static void ws_listener_free(void *); @@ -1438,8 +1438,8 @@ ws_init(nni_ws **wsp) ws->ops.s_free = ws_str_free; ws->ops.s_send = ws_str_send; ws->ops.s_recv = ws_str_recv; - ws->ops.s_getx = ws_str_getx; - ws->ops.s_setx = ws_str_setx; + ws->ops.s_get = ws_str_get; + ws->ops.s_set = ws_str_set; ws->fragsize = 1 << 20; // we won't send a frame larger than this *wsp = ws; @@ -2047,7 +2047,7 @@ ws_listener_set_header(nni_ws_listener *l, const char *name, const void *buf, } static int -ws_listener_setx( +ws_listener_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { nni_ws_listener *l = arg; @@ -2055,7 +2055,7 @@ ws_listener_setx( rv = nni_setopt(ws_listener_options, name, l, buf, sz, t); if (rv == NNG_ENOTSUP) { - rv = nni_http_server_setx(l->server, name, buf, sz, t); + rv = nni_http_server_set(l->server, name, buf, sz, t); } if (rv == NNG_ENOTSUP) { @@ -2067,7 +2067,7 @@ ws_listener_setx( } static int -ws_listener_getx( +ws_listener_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { nni_ws_listener *l = arg; @@ -2075,7 +2075,7 @@ ws_listener_getx( rv = nni_getopt(ws_listener_options, name, l, buf, szp, t); if (rv == NNG_ENOTSUP) { - rv = nni_http_server_getx(l->server, name, buf, szp, t); + rv = nni_http_server_get(l->server, name, buf, szp, t); } return (rv); } @@ -2128,8 +2128,8 @@ nni_ws_listener_alloc(nng_stream_listener **wslp, const nng_url *url) l->ops.sl_close = ws_listener_close; l->ops.sl_accept = ws_listener_accept; l->ops.sl_listen = ws_listener_listen; - l->ops.sl_setx = ws_listener_setx; - l->ops.sl_getx = ws_listener_getx; + l->ops.sl_set = ws_listener_set; + l->ops.sl_get = ws_listener_get; *wslp = (void *) l; return (0); } @@ -2578,7 +2578,7 @@ ws_dialer_set_header( } static int -ws_dialer_setx( +ws_dialer_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { nni_ws_dialer *d = arg; @@ -2586,7 +2586,7 @@ ws_dialer_setx( rv = nni_setopt(ws_dialer_options, name, d, buf, sz, t); if (rv == NNG_ENOTSUP) { - rv = nni_http_client_setx(d->client, name, buf, sz, t); + rv = nni_http_client_set(d->client, name, buf, sz, t); } if (rv == NNG_ENOTSUP) { @@ -2598,14 +2598,14 @@ ws_dialer_setx( } static int -ws_dialer_getx(void *arg, const char *name, void *buf, size_t *szp, nni_type t) +ws_dialer_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t) { nni_ws_dialer *d = arg; int rv; rv = nni_getopt(ws_dialer_options, name, d, buf, szp, t); if (rv == NNG_ENOTSUP) { - rv = nni_http_client_getx(d->client, name, buf, szp, t); + rv = nni_http_client_get(d->client, name, buf, szp, t); } return (rv); } @@ -2641,8 +2641,8 @@ nni_ws_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) d->ops.sd_free = ws_dialer_free; d->ops.sd_close = ws_dialer_close; d->ops.sd_dial = ws_dialer_dial; - d->ops.sd_setx = ws_dialer_setx; - d->ops.sd_getx = ws_dialer_getx; + d->ops.sd_set = ws_dialer_set; + d->ops.sd_get = ws_dialer_get; *dp = (void *) d; return (0); } @@ -2652,9 +2652,6 @@ nni_ws_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) // the dialer does not confirm the server's response at the HTTP // level. (It can still issue a websocket close). -// The implementation will send periodic PINGs, and respond with -// PONGs. - static void ws_str_free(void *arg) { @@ -2840,7 +2837,7 @@ static const nni_option ws_options[] = { }; static int -ws_str_setx(void *arg, const char *nm, const void *buf, size_t sz, nni_type t) +ws_str_set(void *arg, const char *nm, const void *buf, size_t sz, nni_type t) { nni_ws *ws = arg; int rv; @@ -2893,7 +2890,7 @@ ws_get_res_header( } static int -ws_str_getx(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) +ws_str_get(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) { nni_ws *ws = arg; int rv; @@ -2918,75 +2915,3 @@ ws_str_getx(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) } return (rv); } - -static int -ws_check_size(const void *buf, size_t sz, nni_type t) -{ - return (nni_copyin_size(NULL, buf, sz, 0, NNI_MAXSZ, t)); -} - -static int -ws_check_bool(const void *buf, size_t sz, nni_type t) -{ - return (nni_copyin_size(NULL, buf, sz, 0, NNI_MAXSZ, t)); -} - -static const nni_chkoption ws_chkopts[] = { - { - .o_name = NNG_OPT_WS_SENDMAXFRAME, - .o_check = ws_check_size, - }, - { - .o_name = NNG_OPT_WS_RECVMAXFRAME, - .o_check = ws_check_size, - }, - { - .o_name = NNG_OPT_RECVMAXSZ, - .o_check = ws_check_size, - }, - { - .o_name = NNG_OPT_WS_PROTOCOL, - .o_check = ws_check_string, - }, - { - .o_name = NNG_OPT_WS_REQUEST_HEADERS, - .o_check = ws_check_string, - }, - { - .o_name = NNG_OPT_WS_RESPONSE_HEADERS, - .o_check = ws_check_string, - }, - { - .o_name = NNG_OPT_WS_RECV_TEXT, - .o_check = ws_check_bool, - }, - { - .o_name = NNG_OPT_WS_SEND_TEXT, - .o_check = ws_check_bool, - }, - { - .o_name = NULL, - }, -}; - -int -nni_ws_checkopt(const char *name, const void *data, size_t sz, nni_type t) -{ - int rv; - - rv = nni_chkopt(ws_chkopts, name, data, sz, t); - if (rv == NNG_ENOTSUP) { - rv = nni_stream_checkopt("tcp", name, data, sz, t); - } - if (rv == NNG_ENOTSUP) { - rv = nni_stream_checkopt("tls+tcp", name, data, sz, t); - } - if (rv == NNG_ENOTSUP) { - if (startswith(name, NNG_OPT_WS_REQUEST_HEADER) || - startswith(name, NNG_OPT_WS_RESPONSE_HEADER)) { - rv = ws_check_string(data, sz, t); - } - } - // Potentially, add checks for header options. - return (rv); -} diff --git a/src/supplemental/websocket/websocket.h b/src/supplemental/websocket/websocket.h index 1ecb4618..ea4975ff 100644 --- a/src/supplemental/websocket/websocket.h +++ b/src/supplemental/websocket/websocket.h @@ -1,5 +1,5 @@ // -// Copyright 2019 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // Copyright 2019 Devolutions <info@devolutions.net> // @@ -33,6 +33,5 @@ typedef struct nni_ws_dialer nni_ws_dialer; // rely upon it being around. extern int nni_ws_listener_alloc(nng_stream_listener **, const nni_url *); extern int nni_ws_dialer_alloc(nng_stream_dialer **, const nni_url *); -extern int nni_ws_checkopt(const char *, const void *, size_t, nni_type); #endif // NNG_SUPPLEMENTAL_WEBSOCKET_WEBSOCKET_H |
