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/platform | |
| 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/platform')
| -rw-r--r-- | src/platform/posix/posix_ipcconn.c | 8 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipcdial.c | 12 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipclisten.c | 39 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcpconn.c | 8 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcpdial.c | 4 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcplisten.c | 4 | ||||
| -rw-r--r-- | src/platform/windows/win_ipcconn.c | 10 | ||||
| -rw-r--r-- | src/platform/windows/win_ipcdial.c | 31 | ||||
| -rw-r--r-- | src/platform/windows/win_ipclisten.c | 44 | ||||
| -rw-r--r-- | src/platform/windows/win_tcpconn.c | 8 | ||||
| -rw-r--r-- | src/platform/windows/win_tcpdial.c | 6 | ||||
| -rw-r--r-- | src/platform/windows/win_tcplisten.c | 6 |
12 files changed, 59 insertions, 121 deletions
diff --git a/src/platform/posix/posix_ipcconn.c b/src/platform/posix/posix_ipcconn.c index e77d54a4..825ecd4b 100644 --- a/src/platform/posix/posix_ipcconn.c +++ b/src/platform/posix/posix_ipcconn.c @@ -531,14 +531,14 @@ static const nni_option ipc_options[] = { }; static int -ipc_getx(void *arg, const char *name, void *val, size_t *szp, nni_type t) +ipc_get(void *arg, const char *name, void *val, size_t *szp, nni_type t) { ipc_conn *c = arg; return (nni_getopt(ipc_options, name, c, val, szp, t)); } static int -ipc_setx(void *arg, const char *name, const void *val, size_t sz, nni_type t) +ipc_set(void *arg, const char *name, const void *val, size_t sz, nni_type t) { ipc_conn *c = arg; return (nni_setopt(ipc_options, name, c, val, sz, t)); @@ -559,8 +559,8 @@ nni_posix_ipc_alloc(nni_ipc_conn **cp, nni_sockaddr *sa, nni_ipc_dialer *d) c->stream.s_close = ipc_close; c->stream.s_send = ipc_send; c->stream.s_recv = ipc_recv; - c->stream.s_getx = ipc_getx; - c->stream.s_setx = ipc_setx; + c->stream.s_get = ipc_get; + c->stream.s_set = ipc_set; c->sa = *sa; nni_mtx_init(&c->mtx); diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c index b25f7340..69ed4f77 100644 --- a/src/platform/posix/posix_ipcdial.c +++ b/src/platform/posix/posix_ipcdial.c @@ -244,15 +244,15 @@ static const nni_option ipc_dialer_options[] = { }, }; -int -ipc_dialer_getx(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) +static int +ipc_dialer_get(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) { ipc_dialer *d = arg; return (nni_getopt(ipc_dialer_options, nm, d, buf, szp, t)); } -int -ipc_dialer_setx( +static int +ipc_dialer_set( void *arg, const char *nm, const void *buf, size_t sz, nni_type t) { ipc_dialer *d = arg; @@ -306,8 +306,8 @@ nni_ipc_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) d->sd.sd_free = ipc_dialer_free; d->sd.sd_close = ipc_dialer_close; d->sd.sd_dial = ipc_dialer_dial; - d->sd.sd_getx = ipc_dialer_getx; - d->sd.sd_setx = ipc_dialer_setx; + d->sd.sd_get = ipc_dialer_get; + d->sd.sd_set = ipc_dialer_set; nni_atomic_init_bool(&d->fini); nni_atomic_init64(&d->ref); nni_atomic_inc64(&d->ref); diff --git a/src/platform/posix/posix_ipclisten.c b/src/platform/posix/posix_ipclisten.c index 9c0b55db..f2511487 100644 --- a/src/platform/posix/posix_ipclisten.c +++ b/src/platform/posix/posix_ipclisten.c @@ -269,7 +269,7 @@ static const nni_option ipc_listener_options[] = { }; static int -ipc_listener_getx( +ipc_listener_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { ipc_listener *l = arg; @@ -277,7 +277,7 @@ ipc_listener_getx( } static int -ipc_listener_setx( +ipc_listener_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { ipc_listener *l = arg; @@ -527,40 +527,9 @@ nni_ipc_listener_alloc(nng_stream_listener **lp, const nng_url *url) l->sl.sl_close = ipc_listener_close; l->sl.sl_listen = ipc_listener_listen; l->sl.sl_accept = ipc_listener_accept; - l->sl.sl_getx = ipc_listener_getx; - l->sl.sl_setx = ipc_listener_setx; + l->sl.sl_get = ipc_listener_get; + l->sl.sl_set = ipc_listener_set; *lp = (void *) l; return (0); } - -static int -ipc_check_perms(const void *buf, size_t sz, nni_type t) -{ - int32_t mode; - int rv; - - if ((rv = nni_copyin_int(&mode, buf, sz, 0, S_IFMT, t)) != 0) { - return (rv); - } - if ((mode & S_IFMT) != 0) { - return (NNG_EINVAL); - } - return (0); -} - -static const nni_chkoption ipc_chkopts[] = { - { - .o_name = NNG_OPT_IPC_PERMISSIONS, - .o_check = ipc_check_perms, - }, - { - .o_name = NULL, - }, -}; - -int -nni_ipc_checkopt(const char *name, const void *data, size_t sz, nni_type t) -{ - return (nni_chkopt(ipc_chkopts, name, data, sz, t)); -} diff --git a/src/platform/posix/posix_tcpconn.c b/src/platform/posix/posix_tcpconn.c index 3c8c3715..9684fe27 100644 --- a/src/platform/posix/posix_tcpconn.c +++ b/src/platform/posix/posix_tcpconn.c @@ -463,14 +463,14 @@ static const nni_option tcp_options[] = { }; static int -tcp_getx(void *arg, const char *name, void *buf, size_t *szp, nni_type t) +tcp_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t) { nni_tcp_conn *c = arg; return (nni_getopt(tcp_options, name, c, buf, szp, t)); } static int -tcp_setx(void *arg, const char *name, const void *buf, size_t sz, nni_type t) +tcp_set(void *arg, const char *name, const void *buf, size_t sz, nni_type t) { nni_tcp_conn *c = arg; return (nni_setopt(tcp_options, name, c, buf, sz, t)); @@ -495,8 +495,8 @@ nni_posix_tcp_alloc(nni_tcp_conn **cp, nni_tcp_dialer *d) c->stream.s_close = tcp_close; c->stream.s_recv = tcp_recv; c->stream.s_send = tcp_send; - c->stream.s_getx = tcp_getx; - c->stream.s_setx = tcp_setx; + c->stream.s_get = tcp_get; + c->stream.s_set = tcp_set; *cp = c; return (0); diff --git a/src/platform/posix/posix_tcpdial.c b/src/platform/posix/posix_tcpdial.c index 767717af..f7568db3 100644 --- a/src/platform/posix/posix_tcpdial.c +++ b/src/platform/posix/posix_tcpdial.c @@ -398,14 +398,14 @@ static const nni_option tcp_dialer_options[] = { }; int -nni_tcp_dialer_getopt( +nni_tcp_dialer_get( nni_tcp_dialer *d, const char *name, void *buf, size_t *szp, nni_type t) { return (nni_getopt(tcp_dialer_options, name, d, buf, szp, t)); } int -nni_tcp_dialer_setopt(nni_tcp_dialer *d, const char *name, const void *buf, +nni_tcp_dialer_set(nni_tcp_dialer *d, const char *name, const void *buf, size_t sz, nni_type t) { return (nni_setopt(tcp_dialer_options, name, d, buf, sz, t)); diff --git a/src/platform/posix/posix_tcplisten.c b/src/platform/posix/posix_tcplisten.c index 3a2ea62b..e1c0b90c 100644 --- a/src/platform/posix/posix_tcplisten.c +++ b/src/platform/posix/posix_tcplisten.c @@ -416,14 +416,14 @@ static const nni_option tcp_listener_options[] = { }; int -nni_tcp_listener_getopt( +nni_tcp_listener_get( nni_tcp_listener *l, const char *name, void *buf, size_t *szp, nni_type t) { return (nni_getopt(tcp_listener_options, name, l, buf, szp, t)); } int -nni_tcp_listener_setopt(nni_tcp_listener *l, const char *name, const void *buf, +nni_tcp_listener_set(nni_tcp_listener *l, const char *name, const void *buf, size_t sz, nni_type t) { return (nni_setopt(tcp_listener_options, name, l, buf, sz, t)); diff --git a/src/platform/windows/win_ipcconn.c b/src/platform/windows/win_ipcconn.c index aacd3601..b8dc62d3 100644 --- a/src/platform/windows/win_ipcconn.c +++ b/src/platform/windows/win_ipcconn.c @@ -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> // @@ -381,14 +381,14 @@ static const nni_option ipc_conn_options[] = { }; static int -ipc_setx(void *arg, const char *nm, const void *val, size_t sz, nni_opt_type t) +ipc_set(void *arg, const char *nm, const void *val, size_t sz, nni_opt_type t) { ipc_conn *c = arg; return (nni_setopt(ipc_conn_options, nm, c, val, sz, t)); } static int -ipc_getx(void *arg, const char *nm, void *val, size_t *szp, nni_opt_type t) +ipc_get(void *arg, const char *nm, void *val, size_t *szp, nni_opt_type t) { ipc_conn *c = arg; return (nni_getopt(ipc_conn_options, nm, c, val, szp, t)); @@ -415,8 +415,8 @@ nni_win_ipc_init( c->stream.s_close = ipc_close; c->stream.s_send = ipc_send; c->stream.s_recv = ipc_recv; - c->stream.s_getx = ipc_getx; - c->stream.s_setx = ipc_setx; + c->stream.s_get = ipc_get; + c->stream.s_set = ipc_set; if (((rv = nni_win_io_init(&c->recv_io, ipc_recv_cb, c)) != 0) || ((rv = nni_win_io_init(&c->send_io, ipc_send_cb, c)) != 0)) { diff --git a/src/platform/windows/win_ipcdial.c b/src/platform/windows/win_ipcdial.c index c210b7be..16052749 100644 --- a/src/platform/windows/win_ipcdial.c +++ b/src/platform/windows/win_ipcdial.c @@ -38,7 +38,7 @@ typedef struct ipc_dial_work { int exit; } ipc_dial_work; -static ipc_dial_work ipc_connecter; +static ipc_dial_work ipc_connector; static void ipc_dial_thr(void *arg) @@ -125,7 +125,7 @@ static void ipc_dial_cancel(nni_aio *aio, void *arg, int rv) { ipc_dialer * d = arg; - ipc_dial_work *w = &ipc_connecter; + ipc_dial_work *w = &ipc_connector; nni_mtx_lock(&w->mtx); if (nni_aio_list_active(aio)) { @@ -140,9 +140,10 @@ ipc_dial_cancel(nni_aio *aio, void *arg, int rv) } static void -ipc_dialer_dial(ipc_dialer *d, nni_aio *aio) +ipc_dialer_dial(void *arg, nni_aio *aio) { - ipc_dial_work *w = &ipc_connecter; + ipc_dialer * d = arg; + ipc_dial_work *w = &ipc_connector; int rv; if (nni_aio_begin(aio) != 0) { @@ -174,7 +175,7 @@ static void ipc_dialer_close(void *arg) { ipc_dialer * d = arg; - ipc_dial_work *w = &ipc_connecter; + ipc_dial_work *w = &ipc_connector; nni_aio * aio; nni_mtx_lock(&w->mtx); @@ -206,16 +207,16 @@ static const nni_option ipc_dialer_options[] = { }, }; -int -ipc_dialer_setx( +static int +ipc_dialer_set( void *arg, const char *nm, const void *buf, size_t sz, nni_type t) { ipc_dialer *d = arg; return (nni_setopt(ipc_dialer_options, nm, d, buf, sz, t)); } -int -ipc_dialer_getx(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) +static int +ipc_dialer_get(void *arg, const char *nm, void *buf, size_t *szp, nni_type t) { ipc_dialer *d = arg; return (nni_getopt(ipc_dialer_options, nm, d, buf, szp, t)); @@ -228,7 +229,7 @@ nni_ipc_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) int rv; if ((strcmp(url->u_scheme, "ipc") != 0) || (url->u_path == NULL) || - (strlen(url->u_path) == 0)|| + (strlen(url->u_path) == 0) || (strlen(url->u_path) >= NNG_MAXADDRLEN)) { return (NNG_EADDRINVAL); } @@ -247,8 +248,8 @@ nni_ipc_dialer_alloc(nng_stream_dialer **dp, const nng_url *url) d->sd.sd_free = ipc_dialer_free; d->sd.sd_close = ipc_dialer_close; d->sd.sd_dial = ipc_dialer_dial; - d->sd.sd_getx = ipc_dialer_getx; - d->sd.sd_setx = ipc_dialer_setx; + d->sd.sd_get = ipc_dialer_get; + d->sd.sd_set = ipc_dialer_set; nni_aio_list_init(&d->aios); *dp = (void *) d; return (0); @@ -258,7 +259,7 @@ int nni_win_ipc_sysinit(void) { int rv; - ipc_dial_work *worker = &ipc_connecter; + ipc_dial_work *worker = &ipc_connector; NNI_LIST_INIT(&worker->workers, ipc_dialer, node); NNI_LIST_INIT(&worker->waiters, ipc_dialer, node); @@ -270,7 +271,7 @@ nni_win_ipc_sysinit(void) if (rv != 0) { return (rv); } - nni_thr_set_name(&worker->thr, "nng:ipc:dial"); + nni_thr_set_name(&worker->thr, "nng:ipc:dial"); nni_thr_run(&worker->thr); return (0); @@ -279,7 +280,7 @@ nni_win_ipc_sysinit(void) void nni_win_ipc_sysfini(void) { - ipc_dial_work *worker = &ipc_connecter; + ipc_dial_work *worker = &ipc_connector; nni_reap_drain(); // so that listeners get cleaned up. diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c index 65a7a8d7..c5f31b22 100644 --- a/src/platform/windows/win_ipclisten.c +++ b/src/platform/windows/win_ipclisten.c @@ -178,16 +178,16 @@ static const nni_option ipc_listener_options[] = { }, }; -int -ipc_listener_setx( +static int +ipc_listener_set( void *arg, const char *name, const void *buf, size_t sz, nni_type t) { ipc_listener *l = arg; return (nni_setopt(ipc_listener_options, name, l, buf, sz, t)); } -int -ipc_listener_getx( +static int +ipc_listener_get( void *arg, const char *name, void *buf, size_t *szp, nni_type t) { ipc_listener *l = arg; @@ -349,8 +349,8 @@ nni_ipc_listener_alloc(nng_stream_listener **lp, const nng_url *url) l->sl.sl_close = ipc_listener_close; l->sl.sl_listen = ipc_listener_listen; l->sl.sl_accept = ipc_listener_accept; - l->sl.sl_getx = ipc_listener_getx; - l->sl.sl_setx = ipc_listener_setx; + l->sl.sl_get = ipc_listener_get; + l->sl.sl_set = ipc_listener_set; snprintf(l->sa.s_ipc.sa_path, NNG_MAXADDRLEN, "%s", url->u_path); nni_aio_list_init(&l->aios); nni_mtx_init(&l->mtx); @@ -358,35 +358,3 @@ nni_ipc_listener_alloc(nng_stream_listener **lp, const nng_url *url) *lp = (void *) l; return (0); } - -static int -ipc_check_sec_desc(const void *buf, size_t sz, nni_type t) -{ - void *desc; - int rv; - - if ((rv = nni_copyin_ptr(&desc, buf, sz, t)) != 0) { - return (rv); - } - if (!IsValidSecurityDescriptor((SECURITY_DESCRIPTOR *) desc)) { - return (NNG_EINVAL); - } - - return (0); -} - -static const nni_chkoption ipc_chkopts[] = { - { - .o_name = NNG_OPT_IPC_SECURITY_DESCRIPTOR, - .o_check = ipc_check_sec_desc, - }, - { - .o_name = NULL, - }, -}; - -int -nni_ipc_checkopt(const char *name, const void *data, size_t sz, nni_type t) -{ - return (nni_chkopt(ipc_chkopts, name, data, sz, t)); -} diff --git a/src/platform/windows/win_tcpconn.c b/src/platform/windows/win_tcpconn.c index 8016458b..f0e7c955 100644 --- a/src/platform/windows/win_tcpconn.c +++ b/src/platform/windows/win_tcpconn.c @@ -386,14 +386,14 @@ static const nni_option tcp_options[] = { }; static int -tcp_getx(void *arg, const char *name, void *buf, size_t *szp, nni_type t) +tcp_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t) { nni_tcp_conn *c = arg; return (nni_getopt(tcp_options, name, c, buf, szp, t)); } static int -tcp_setx(void *arg, const char *name, const void *buf, size_t sz, nni_type t) +tcp_set(void *arg, const char *name, const void *buf, size_t sz, nni_type t) { nni_tcp_conn *c = arg; return (nni_setopt(tcp_options, name, c, buf, sz, t)); @@ -448,8 +448,8 @@ nni_win_tcp_init(nni_tcp_conn **connp, SOCKET s) c->ops.s_free = tcp_free; c->ops.s_send = tcp_send; c->ops.s_recv = tcp_recv; - c->ops.s_getx = tcp_getx; - c->ops.s_setx = tcp_setx; + c->ops.s_get = tcp_get; + c->ops.s_set = tcp_set; if (((rv = nni_win_io_init(&c->recv_io, tcp_recv_cb, c)) != 0) || ((rv = nni_win_io_init(&c->send_io, tcp_send_cb, c)) != 0) || diff --git a/src/platform/windows/win_tcpdial.c b/src/platform/windows/win_tcpdial.c index 89c5bf6a..12ebdca6 100644 --- a/src/platform/windows/win_tcpdial.c +++ b/src/platform/windows/win_tcpdial.c @@ -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 2018 Devolutions <info@devolutions.net> // @@ -397,14 +397,14 @@ static const nni_option tcp_dialer_options[] = { }; int -nni_tcp_dialer_getopt( +nni_tcp_dialer_get( nni_tcp_dialer *d, const char *name, void *buf, size_t *szp, nni_type t) { return (nni_getopt(tcp_dialer_options, name, d, buf, szp, t)); } int -nni_tcp_dialer_setopt(nni_tcp_dialer *d, const char *name, const void *buf, +nni_tcp_dialer_set(nni_tcp_dialer *d, const char *name, const void *buf, size_t sz, nni_type t) { return (nni_setopt(tcp_dialer_options, name, d, buf, sz, t)); diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c index 18e552a6..9c5fec3c 100644 --- a/src/platform/windows/win_tcplisten.c +++ b/src/platform/windows/win_tcplisten.c @@ -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 2018 Devolutions <info@devolutions.net> // @@ -431,14 +431,14 @@ static const nni_option tcp_listener_options[] = { }; int -nni_tcp_listener_getopt( +nni_tcp_listener_get( nni_tcp_listener *l, const char *name, void *buf, size_t *szp, nni_type t) { return (nni_getopt(tcp_listener_options, name, l, buf, szp, t)); } int -nni_tcp_listener_setopt(nni_tcp_listener *l, const char *name, const void *buf, +nni_tcp_listener_set(nni_tcp_listener *l, const char *name, const void *buf, size_t sz, nni_type t) { return (nni_setopt(tcp_listener_options, name, l, buf, sz, t)); |
