diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-12-28 21:07:58 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-12-29 14:22:06 -0800 |
| commit | d3bd35ab49ad74528fd9e34cce9016d74dd91943 (patch) | |
| tree | 596459970f49a340f5e292f7bdb4060f4ea2be81 /src/transport | |
| parent | 02e90dd4f29037e43f28e3bd1e912d4092011d23 (diff) | |
| download | nng-d3bd35ab49ad74528fd9e34cce9016d74dd91943.tar.gz nng-d3bd35ab49ad74528fd9e34cce9016d74dd91943.tar.bz2 nng-d3bd35ab49ad74528fd9e34cce9016d74dd91943.zip | |
fixes #831 Unify option structures, o_type is unused
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/inproc/inproc.c | 17 | ||||
| -rw-r--r-- | src/transport/ipc/ipc.c | 51 | ||||
| -rw-r--r-- | src/transport/tcp/tcp.c | 44 | ||||
| -rw-r--r-- | src/transport/tls/tls.c | 113 | ||||
| -rw-r--r-- | src/transport/ws/websocket.c | 240 | ||||
| -rw-r--r-- | src/transport/zerotier/zerotier.c | 200 |
6 files changed, 189 insertions, 476 deletions
diff --git a/src/transport/inproc/inproc.c b/src/transport/inproc/inproc.c index 6199e949..798a946f 100644 --- a/src/transport/inproc/inproc.c +++ b/src/transport/inproc/inproc.c @@ -642,7 +642,8 @@ inproc_ep_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) nni_inproc_ep *ep = arg; size_t val; int rv; - if ((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) && + (ep != NULL)) { nni_mtx_lock(&ep->mtx); ep->rcvmax = val; nni_stat_set_value(&ep->st_rcvmaxsz, val); @@ -651,21 +652,13 @@ inproc_ep_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) return (rv); } -static int -inproc_check_recvmaxsz(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_size(NULL, data, sz, 0, NNI_MAXSZ, t)); -} - -static nni_tran_option nni_inproc_pipe_options[] = { +static nni_option nni_inproc_pipe_options[] = { { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = nni_inproc_pipe_get_addr, }, { .o_name = NNG_OPT_REMADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = nni_inproc_pipe_get_addr, }, // terminate list @@ -684,13 +677,11 @@ static nni_tran_pipe_ops nni_inproc_pipe_ops = { .p_options = nni_inproc_pipe_options, }; -static nni_tran_option nni_inproc_ep_options[] = { +static nni_option nni_inproc_ep_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = inproc_ep_get_recvmaxsz, .o_set = inproc_ep_set_recvmaxsz, - .o_chk = inproc_check_recvmaxsz, }, // terminate list { diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index d6280a69..25d53be8 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -871,7 +871,9 @@ ipctran_ep_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) ipctran_ep *ep = arg; size_t val; int rv; - if ((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) && + (ep != NULL)) { + ipctran_pipe *p; nni_mtx_lock(&ep->mtx); ep->rcvmax = val; @@ -937,12 +939,6 @@ ipctran_ep_get_locaddr(void *arg, void *buf, size_t *szp, nni_opt_type t) } static int -ipctran_check_recvmaxsz(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_size(NULL, data, sz, 0, NNI_MAXSZ, t)); -} - -static int ipctran_ep_set_perms(void *arg, const void *data, size_t sz, nni_opt_type t) { ipctran_ep *ep = arg; @@ -951,7 +947,8 @@ ipctran_ep_set_perms(void *arg, const void *data, size_t sz, nni_opt_type t) // Probably we could further limit this -- most systems don't have // meaningful chmod beyond the lower 9 bits. - if ((rv = nni_copyin_int(&val, data, sz, 0, 0x7FFFFFFF, t)) == 0) { + if (((rv = nni_copyin_int(&val, data, sz, 0, 0x7FFFFFFF, t)) == 0) && + (ep != NULL)) { nni_mtx_lock(&ep->mtx); rv = nni_ipc_listener_set_permissions(ep->listener, val); nni_mtx_unlock(&ep->mtx); @@ -960,19 +957,13 @@ ipctran_ep_set_perms(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -ipctran_check_perms(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_int(NULL, data, sz, 0, 0x7FFFFFFF, t)); -} - -static int ipctran_ep_set_sec_desc(void *arg, const void *data, size_t sz, nni_opt_type t) { ipctran_ep *ep = arg; void * ptr; int rv; - if ((rv = nni_copyin_ptr(&ptr, data, sz, t)) == 0) { + if (((rv = nni_copyin_ptr(&ptr, data, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); rv = nni_ipc_listener_set_security_descriptor( ep->listener, ptr); @@ -981,41 +972,29 @@ ipctran_ep_set_sec_desc(void *arg, const void *data, size_t sz, nni_opt_type t) return (rv); } -static int -ipctran_check_sec_desc(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_ptr(NULL, data, sz, t)); -} - -static nni_tran_option ipctran_pipe_options[] = { +static nni_option ipctran_pipe_options[] = { { .o_name = NNG_OPT_REMADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = ipctran_pipe_get_addr, }, { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = ipctran_pipe_get_addr, }, { .o_name = NNG_OPT_IPC_PEER_UID, - .o_type = NNI_TYPE_UINT64, .o_get = ipctran_pipe_get_peer_uid, }, { .o_name = NNG_OPT_IPC_PEER_GID, - .o_type = NNI_TYPE_UINT64, .o_get = ipctran_pipe_get_peer_gid, }, { .o_name = NNG_OPT_IPC_PEER_PID, - .o_type = NNI_TYPE_UINT64, .o_get = ipctran_pipe_get_peer_pid, }, { .o_name = NNG_OPT_IPC_PEER_ZONEID, - .o_type = NNI_TYPE_UINT64, .o_get = ipctran_pipe_get_peer_zoneid, }, // terminate list @@ -1035,17 +1014,14 @@ static nni_tran_pipe_ops ipctran_pipe_ops = { .p_options = ipctran_pipe_options, }; -static nni_tran_option ipctran_ep_dialer_options[] = { +static nni_option ipctran_ep_dialer_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = ipctran_ep_get_recvmaxsz, .o_set = ipctran_ep_set_recvmaxsz, - .o_chk = ipctran_check_recvmaxsz, }, { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = ipctran_ep_get_locaddr, }, // terminate list @@ -1054,32 +1030,23 @@ static nni_tran_option ipctran_ep_dialer_options[] = { }, }; -static nni_tran_option ipctran_ep_listener_options[] = { +static nni_option ipctran_ep_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = ipctran_ep_get_recvmaxsz, .o_set = ipctran_ep_set_recvmaxsz, - .o_chk = ipctran_check_recvmaxsz, }, { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = ipctran_ep_get_locaddr, }, { .o_name = NNG_OPT_IPC_SECURITY_DESCRIPTOR, - .o_type = NNI_TYPE_POINTER, - .o_get = NULL, .o_set = ipctran_ep_set_sec_desc, - .o_chk = ipctran_check_sec_desc, }, { .o_name = NNG_OPT_IPC_PERMISSIONS, - .o_type = NNI_TYPE_INT32, - .o_get = NULL, .o_set = ipctran_ep_set_perms, - .o_chk = ipctran_check_perms, }, // terminate list { diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c index be8f6bc3..4f7dbd72 100644 --- a/src/transport/tcp/tcp.c +++ b/src/transport/tcp/tcp.c @@ -996,7 +996,8 @@ tcptran_ep_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) tcptran_ep *ep = arg; size_t val; int rv; - if ((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) && + (ep != NULL)) { tcptran_pipe *p; nni_mtx_lock(&ep->mtx); ep->rcvmax = val; @@ -1025,7 +1026,7 @@ tcptran_ep_set_nodelay(void *arg, const void *v, size_t sz, nni_opt_type t) tcptran_ep *ep = arg; bool val; int rv; - if ((rv = nni_copyin_bool(&val, v, sz, t)) == 0) { + if (((rv = nni_copyin_bool(&val, v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); ep->nodelay = val; nni_mtx_unlock(&ep->mtx); @@ -1051,7 +1052,7 @@ tcptran_ep_set_keepalive(void *arg, const void *v, size_t sz, nni_opt_type t) tcptran_ep *ep = arg; bool val; int rv; - if ((rv = nni_copyin_bool(&val, v, sz, t)) == 0) { + if (((rv = nni_copyin_bool(&val, v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); ep->keepalive = val; nni_mtx_unlock(&ep->mtx); @@ -1114,37 +1115,21 @@ tcptran_ep_get_locaddr(void *arg, void *buf, size_t *szp, nni_opt_type t) return (rv); } -static int -tcptran_check_bool(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_bool(NULL, v, sz, t)); -} - -static int -tcptran_check_recvmaxsz(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_size(NULL, v, sz, 0, NNI_MAXSZ, t)); -} - -static nni_tran_option tcptran_pipe_options[] = { +static nni_option tcptran_pipe_options[] = { { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = tcptran_pipe_get_locaddr, }, { .o_name = NNG_OPT_REMADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = tcptran_pipe_get_remaddr, }, { .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_type = NNI_TYPE_BOOL, .o_get = tcptran_pipe_get_keepalive, }, { .o_name = NNG_OPT_TCP_NODELAY, - .o_type = NNI_TYPE_BOOL, .o_get = tcptran_pipe_get_nodelay, }, // terminate list @@ -1164,32 +1149,25 @@ static nni_tran_pipe_ops tcptran_pipe_ops = { .p_options = tcptran_pipe_options, }; -static nni_tran_option tcptran_dialer_options[] = { +static nni_option tcptran_dialer_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = tcptran_ep_get_recvmaxsz, .o_set = tcptran_ep_set_recvmaxsz, - .o_chk = tcptran_check_recvmaxsz, }, { .o_name = NNG_OPT_URL, - .o_type = NNI_TYPE_STRING, .o_get = tcptran_ep_get_url, }, { .o_name = NNG_OPT_TCP_NODELAY, - .o_type = NNI_TYPE_BOOL, .o_get = tcptran_ep_get_nodelay, .o_set = tcptran_ep_set_nodelay, - .o_chk = tcptran_check_bool, }, { .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_type = NNI_TYPE_BOOL, .o_get = tcptran_ep_get_keepalive, .o_set = tcptran_ep_set_keepalive, - .o_chk = tcptran_check_bool, }, // terminate list { @@ -1197,37 +1175,29 @@ static nni_tran_option tcptran_dialer_options[] = { }, }; -static nni_tran_option tcptran_listener_options[] = { +static nni_option tcptran_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = tcptran_ep_get_recvmaxsz, .o_set = tcptran_ep_set_recvmaxsz, - .o_chk = tcptran_check_recvmaxsz, }, { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = tcptran_ep_get_locaddr, }, { .o_name = NNG_OPT_URL, - .o_type = NNI_TYPE_STRING, .o_get = tcptran_ep_get_url, }, { .o_name = NNG_OPT_TCP_NODELAY, - .o_type = NNI_TYPE_BOOL, .o_get = tcptran_ep_get_nodelay, .o_set = tcptran_ep_set_nodelay, - .o_chk = tcptran_check_bool, }, { .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_type = NNI_TYPE_BOOL, .o_get = tcptran_ep_get_keepalive, .o_set = tcptran_ep_set_keepalive, - .o_chk = tcptran_check_bool, }, // terminate list { diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c index 867be9b8..35356054 100644 --- a/src/transport/tls/tls.c +++ b/src/transport/tls/tls.c @@ -15,8 +15,8 @@ #include "core/nng_impl.h" #include "nng/supplemental/tls/tls.h" -#include "supplemental/tls/tls_api.h" #include "nng/transport/tls/tls.h" +#include "supplemental/tls/tls_api.h" // TLS over TCP transport. Platform specific TCP operations must be // supplied as well, and uses the supplemental TLS v1.2 code. It is not @@ -1000,7 +1000,7 @@ tlstran_ep_set_nodelay(void *arg, const void *v, size_t sz, nni_opt_type t) tlstran_ep *ep = arg; bool val; int rv; - if ((rv = nni_copyin_bool(&val, v, sz, t)) == 0) { + if (((rv = nni_copyin_bool(&val, v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); ep->nodelay = val; nni_mtx_unlock(&ep->mtx); @@ -1025,7 +1025,8 @@ tlstran_ep_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) tlstran_ep *ep = arg; size_t val; int rv; - if ((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) && + (ep != NULL)) { nni_mtx_lock(&ep->mtx); ep->rcvmax = val; nni_mtx_unlock(&ep->mtx); @@ -1039,7 +1040,7 @@ tlstran_ep_set_keepalive(void *arg, const void *v, size_t sz, nni_opt_type t) tlstran_ep *ep = arg; bool val; int rv; - if ((rv = nni_copyin_bool(&val, v, sz, t)) == 0) { + if (((rv = nni_copyin_bool(&val, v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); ep->keepalive = val; nni_mtx_unlock(&ep->mtx); @@ -1070,12 +1071,6 @@ tlstran_ep_get_recvmaxsz(void *arg, void *v, size_t *szp, nni_opt_type t) } static int -tlstran_check_bool(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_bool(NULL, v, sz, t)); -} - -static int tlstran_ep_get_url(void *arg, void *v, size_t *szp, nni_opt_type t) { tlstran_ep *ep = arg; @@ -1106,27 +1101,10 @@ tlstran_ep_get_locaddr(void *arg, void *buf, size_t *szp, nni_opt_type t) } static int -tlstran_check_recvmaxsz(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_size(NULL, v, sz, 0, NNI_MAXSZ, t)); -} - -static int -tlstran_check_config(const void *data, size_t sz, nni_opt_type t) -{ - void *v; - int rv; - if (((rv = nni_copyin_ptr(&v, data, sz, t)) == 0) && (v == NULL)) { - rv = NNG_EINVAL; - } - return (rv); -} - -static int tlstran_ep_set_config(void *arg, const void *data, size_t sz, nni_opt_type t) { tlstran_ep * ep = arg; - nng_tls_config *cfg, *old; + nng_tls_config *cfg; int rv; if ((rv = nni_copyin_ptr((void **) &cfg, data, sz, t)) != 0) { @@ -1135,13 +1113,17 @@ tlstran_ep_set_config(void *arg, const void *data, size_t sz, nni_opt_type t) if (cfg == NULL) { return (NNG_EINVAL); } - nni_mtx_lock(&ep->mtx); - old = ep->cfg; - nni_tls_config_hold(cfg); - ep->cfg = cfg; - nni_mtx_unlock(&ep->mtx); - if (old != NULL) { - nni_tls_config_fini(old); + if (ep != NULL) { + nng_tls_config *old; + + nni_mtx_lock(&ep->mtx); + old = ep->cfg; + nni_tls_config_hold(cfg); + ep->cfg = cfg; + nni_mtx_unlock(&ep->mtx); + if (old != NULL) { + nni_tls_config_fini(old); + } } return (0); } @@ -1179,7 +1161,7 @@ tlstran_ep_set_ca_file(void *arg, const void *v, size_t sz, nni_opt_type t) tlstran_ep *ep = arg; int rv; - if ((rv = tlstran_check_string(v, sz, t)) == 0) { + if (((rv = tlstran_check_string(v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); rv = nng_tls_config_ca_file(ep->cfg, v); nni_mtx_unlock(&ep->mtx); @@ -1188,13 +1170,6 @@ tlstran_ep_set_ca_file(void *arg, const void *v, size_t sz, nni_opt_type t) } static int -tlstran_check_auth_mode(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_int(NULL, v, sz, NNG_TLS_AUTH_MODE_NONE, - NNG_TLS_AUTH_MODE_REQUIRED, t)); -} - -static int tlstran_ep_set_auth_mode(void *arg, const void *v, size_t sz, nni_opt_type t) { tlstran_ep *ep = arg; @@ -1203,7 +1178,7 @@ tlstran_ep_set_auth_mode(void *arg, const void *v, size_t sz, nni_opt_type t) rv = nni_copyin_int(&mode, v, sz, NNG_TLS_AUTH_MODE_NONE, NNG_TLS_AUTH_MODE_REQUIRED, t); - if (rv == 0) { + if ((rv == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); rv = nng_tls_config_auth_mode(ep->cfg, mode); nni_mtx_unlock(&ep->mtx); @@ -1217,7 +1192,7 @@ tlstran_ep_set_server_name(void *arg, const void *v, size_t sz, nni_opt_type t) tlstran_ep *ep = arg; int rv; - if ((rv = tlstran_check_string(v, sz, t)) == 0) { + if (((rv = tlstran_check_string(v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); rv = nng_tls_config_server_name(ep->cfg, v); nni_mtx_unlock(&ep->mtx); @@ -1232,7 +1207,7 @@ tlstran_ep_set_cert_key_file( tlstran_ep *ep = arg; int rv; - if ((rv = tlstran_check_string(v, sz, t)) == 0) { + if (((rv = tlstran_check_string(v, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&ep->mtx); rv = nng_tls_config_cert_key_file(ep->cfg, v, NULL); nni_mtx_unlock(&ep->mtx); @@ -1248,30 +1223,25 @@ tlstran_pipe_get_verified(void *arg, void *v, size_t *szp, nni_opt_type t) return (nni_copyout_bool(nni_tls_verified(p->tls), v, szp, t)); } -static nni_tran_option tlstran_pipe_options[] = { +static nni_option tlstran_pipe_options[] = { { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = tlstran_pipe_get_locaddr, }, { .o_name = NNG_OPT_REMADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = tlstran_pipe_get_remaddr, }, { .o_name = NNG_OPT_TLS_VERIFIED, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_pipe_get_verified, }, { .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_pipe_get_keepalive, }, { .o_name = NNG_OPT_TCP_NODELAY, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_pipe_get_nodelay, }, // terminate list @@ -1291,63 +1261,46 @@ static nni_tran_pipe_ops tlstran_pipe_ops = { .p_options = tlstran_pipe_options, }; -static nni_tran_option tlstran_dialer_options[] = { +static nni_option tlstran_dialer_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = tlstran_ep_get_recvmaxsz, .o_set = tlstran_ep_set_recvmaxsz, - .o_chk = tlstran_check_recvmaxsz, }, { .o_name = NNG_OPT_URL, - .o_type = NNI_TYPE_STRING, .o_get = tlstran_ep_get_url, }, { .o_name = NNG_OPT_TLS_CONFIG, - .o_type = NNI_TYPE_POINTER, .o_get = tlstran_ep_get_config, .o_set = tlstran_ep_set_config, - .o_chk = tlstran_check_config, }, { .o_name = NNG_OPT_TLS_CERT_KEY_FILE, - .o_type = NNI_TYPE_STRING, .o_set = tlstran_ep_set_cert_key_file, - .o_chk = tlstran_check_string, }, { .o_name = NNG_OPT_TLS_CA_FILE, - .o_type = NNI_TYPE_STRING, .o_set = tlstran_ep_set_ca_file, - .o_chk = tlstran_check_string, }, { .o_name = NNG_OPT_TLS_AUTH_MODE, - .o_type = NNI_TYPE_INT32, // enum really .o_set = tlstran_ep_set_auth_mode, - .o_chk = tlstran_check_auth_mode, }, { .o_name = NNG_OPT_TLS_SERVER_NAME, - .o_type = NNI_TYPE_STRING, .o_set = tlstran_ep_set_server_name, - .o_chk = tlstran_check_string, }, { .o_name = NNG_OPT_TCP_NODELAY, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_ep_get_nodelay, .o_set = tlstran_ep_set_nodelay, - .o_chk = tlstran_check_bool, }, { .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_ep_get_keepalive, .o_set = tlstran_ep_set_keepalive, - .o_chk = tlstran_check_bool, }, // terminate list { @@ -1355,68 +1308,50 @@ static nni_tran_option tlstran_dialer_options[] = { }, }; -static nni_tran_option tlstran_listener_options[] = { +static nni_option tlstran_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = tlstran_ep_get_recvmaxsz, .o_set = tlstran_ep_set_recvmaxsz, - .o_chk = tlstran_check_recvmaxsz, }, { .o_name = NNG_OPT_URL, - .o_type = NNI_TYPE_STRING, .o_get = tlstran_ep_get_url, }, { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = tlstran_ep_get_locaddr, }, { .o_name = NNG_OPT_TLS_CONFIG, - .o_type = NNI_TYPE_POINTER, .o_get = tlstran_ep_get_config, .o_set = tlstran_ep_set_config, - .o_chk = tlstran_check_config, }, { .o_name = NNG_OPT_TLS_CERT_KEY_FILE, - .o_type = NNI_TYPE_STRING, .o_set = tlstran_ep_set_cert_key_file, - .o_chk = tlstran_check_string, }, { .o_name = NNG_OPT_TLS_CA_FILE, - .o_type = NNI_TYPE_STRING, .o_set = tlstran_ep_set_ca_file, - .o_chk = tlstran_check_string, }, { .o_name = NNG_OPT_TLS_AUTH_MODE, - .o_type = NNI_TYPE_INT32, // enum really .o_set = tlstran_ep_set_auth_mode, - .o_chk = tlstran_check_auth_mode, }, { .o_name = NNG_OPT_TLS_SERVER_NAME, - .o_type = NNI_TYPE_STRING, .o_set = tlstran_ep_set_server_name, - .o_chk = tlstran_check_string, }, { .o_name = NNG_OPT_TCP_NODELAY, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_ep_get_nodelay, .o_set = tlstran_ep_set_nodelay, - .o_chk = tlstran_check_bool, }, { .o_name = NNG_OPT_TCP_KEEPALIVE, - .o_type = NNI_TYPE_BOOL, .o_get = tlstran_ep_get_keepalive, .o_set = tlstran_ep_set_keepalive, - .o_chk = tlstran_check_bool, }, // terminate list { diff --git a/src/transport/ws/websocket.c b/src/transport/ws/websocket.c index 12a1ef17..1d5358f6 100644 --- a/src/transport/ws/websocket.c +++ b/src/transport/ws/websocket.c @@ -14,8 +14,8 @@ #include <string.h> #include "core/nng_impl.h" -#include "supplemental/http/http_api.h" #include "nng/supplemental/tls/tls.h" +#include "supplemental/http/http_api.h" #include "supplemental/tls/tls_api.h" #include "supplemental/websocket/websocket.h" @@ -414,7 +414,8 @@ ws_dialer_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) size_t val; int rv; - if ((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) && + (d != NULL)) { nni_mtx_lock(&d->mtx); d->rcvmax = val; nni_mtx_unlock(&d->mtx); @@ -441,7 +442,8 @@ ws_listener_set_recvmaxsz(void *arg, const void *v, size_t sz, nni_opt_type t) size_t val; int rv; - if ((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, v, sz, 0, NNI_MAXSZ, t)) == 0) && + (l != NULL)) { nni_mtx_lock(&l->mtx); l->rcvmax = val; nni_mtx_unlock(&l->mtx); @@ -462,12 +464,6 @@ ws_listener_get_recvmaxsz(void *arg, void *v, size_t *szp, nni_opt_type t) } static int -ws_check_recvmaxsz(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_size(NULL, v, sz, 0, NNI_MAXSZ, t)); -} - -static int ws_set_headers(nni_list *headers, const char *v) { char * dupstr; @@ -552,11 +548,10 @@ ws_dialer_set_reqhdrs(void *arg, const void *v, size_t sz, nni_opt_type t) ws_dialer *d = arg; int rv; - if (d->started) { - return (NNG_EBUSY); - } - - if ((rv = ws_check_string(v, sz, t)) == 0) { + if (((rv = ws_check_string(v, sz, t)) == 0) && (d != NULL)) { + if (d->started) { + return (NNG_EBUSY); + } nni_mtx_lock(&d->mtx); rv = ws_set_headers(&d->headers, v); nni_mtx_unlock(&d->mtx); @@ -570,10 +565,10 @@ ws_listener_set_reshdrs(void *arg, const void *v, size_t sz, nni_opt_type t) ws_listener *l = arg; int rv; - if (l->started) { - return (NNG_EBUSY); - } - if ((rv = ws_check_string(v, sz, t)) == 0) { + if (((rv = ws_check_string(v, sz, t)) == 0) && (l != NULL)) { + if (l->started) { + return (NNG_EBUSY); + } nni_mtx_lock(&l->mtx); rv = ws_set_headers(&l->headers, v); nni_mtx_unlock(&l->mtx); @@ -640,31 +635,26 @@ ws_pipe_get_tls_verified(void *arg, void *v, size_t *szp, nni_opt_type t) return (nni_copyout_bool(nni_ws_tls_verified(p->ws), v, szp, t)); } -static nni_tran_option ws_pipe_options[] = { +static nni_option ws_pipe_options[] = { { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = ws_pipe_get_locaddr, }, { .o_name = NNG_OPT_REMADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = ws_pipe_get_remaddr, }, { .o_name = NNG_OPT_WS_REQUEST_HEADERS, - .o_type = NNI_TYPE_STRING, .o_get = ws_pipe_get_reqhdrs, }, { .o_name = NNG_OPT_WS_RESPONSE_HEADERS, - .o_type = NNI_TYPE_STRING, .o_get = ws_pipe_get_reshdrs, }, { .o_name = NNG_OPT_TLS_VERIFIED, - .o_type = NNI_TYPE_BOOL, .o_get = ws_pipe_get_tls_verified, }, // terminate list @@ -684,19 +674,15 @@ static nni_tran_pipe_ops ws_pipe_ops = { .p_options = ws_pipe_options, }; -static nni_tran_option ws_dialer_options[] = { +static nni_option ws_dialer_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = ws_dialer_get_recvmaxsz, .o_set = ws_dialer_set_recvmaxsz, - .o_chk = ws_check_recvmaxsz, }, { .o_name = NNG_OPT_WS_REQUEST_HEADERS, - .o_type = NNI_TYPE_STRING, .o_set = ws_dialer_set_reqhdrs, - .o_chk = ws_check_string, }, // terminate list { @@ -704,19 +690,15 @@ static nni_tran_option ws_dialer_options[] = { }, }; -static nni_tran_option ws_listener_options[] = { +static nni_option ws_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = ws_listener_get_recvmaxsz, .o_set = ws_listener_set_recvmaxsz, - .o_chk = ws_check_recvmaxsz, }, { .o_name = NNG_OPT_WS_RESPONSE_HEADERS, - .o_type = NNI_TYPE_STRING, .o_set = ws_listener_set_reshdrs, - .o_chk = ws_check_string, }, // terminate list { @@ -1006,17 +988,6 @@ wss_listener_get_tlsconfig(void *arg, void *v, size_t *szp, nni_opt_type t) } static int -wss_check_tlsconfig(const void *v, size_t sz, nni_opt_type t) -{ - void *p; - int rv; - if (((rv = nni_copyin_ptr(&p, v, sz, t)) == 0) && (p == NULL)) { - rv = NNG_EINVAL; - } - return (rv); -} - -static int wss_dialer_set_tlsconfig(void *arg, const void *v, size_t sz, nni_opt_type t) { ws_dialer * d = arg; @@ -1029,7 +1000,10 @@ wss_dialer_set_tlsconfig(void *arg, const void *v, size_t sz, nni_opt_type t) if (cfg == NULL) { return (NNG_EINVAL); } - return (nni_ws_dialer_set_tls(d->dialer, cfg)); + if (d != NULL) { + rv = nni_ws_dialer_set_tls(d->dialer, cfg); + } + return (rv); } static int @@ -1045,23 +1019,28 @@ wss_listener_set_tlsconfig(void *arg, const void *v, size_t sz, nni_opt_type t) if (cfg == NULL) { return (NNG_EINVAL); } - return (nni_ws_listener_set_tls(l->listener, cfg)); + if (l != NULL) { + rv = nni_ws_listener_set_tls(l->listener, cfg); + } + return (rv); } static int wss_dialer_set_cert_key_file( void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_dialer * d = arg; - int rv; - nng_tls_config *tls; + ws_dialer *d = arg; + int rv; - if (((rv = ws_check_string(v, sz, t)) != 0) || - ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0)) { - return (rv); + if (((rv = ws_check_string(v, sz, t)) == 0) && (d != NULL)) { + nng_tls_config *tls; + + if ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0) { + return (rv); + } + rv = nng_tls_config_cert_key_file(tls, v, NULL); + nni_tls_config_fini(tls); } - rv = nng_tls_config_cert_key_file(tls, v, NULL); - nni_tls_config_fini(tls); return (rv); } @@ -1069,95 +1048,98 @@ static int wss_listener_set_cert_key_file( void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_listener * l = arg; - int rv; - nng_tls_config *tls; + ws_listener *l = arg; + int rv; - if (((rv = ws_check_string(v, sz, t)) != 0) || - ((rv = nni_ws_listener_get_tls(l->listener, &tls)) != 0)) { - return (rv); + if (((rv = ws_check_string(v, sz, t)) == 0) && (l != NULL)) { + nng_tls_config *tls; + + if ((rv = nni_ws_listener_get_tls(l->listener, &tls)) != 0) { + return (rv); + } + rv = nng_tls_config_cert_key_file(tls, v, NULL); + nni_tls_config_fini(tls); } - rv = nng_tls_config_cert_key_file(tls, v, NULL); - nni_tls_config_fini(tls); return (rv); } static int wss_dialer_set_ca_file(void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_dialer * d = arg; - int rv; - nng_tls_config *tls; + ws_dialer *d = arg; + int rv; - if (((rv = ws_check_string(v, sz, t)) != 0) || - ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0)) { - return (rv); + if (((rv = ws_check_string(v, sz, t)) == 0) && (d != NULL)) { + nng_tls_config *tls; + + if ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0) { + return (rv); + } + rv = nng_tls_config_ca_file(tls, v); + nni_tls_config_fini(tls); } - rv = nng_tls_config_ca_file(tls, v); - nni_tls_config_fini(tls); return (rv); } static int wss_listener_set_ca_file(void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_listener * l = arg; - int rv; - nng_tls_config *tls; + ws_listener *l = arg; + int rv; - if (((rv = ws_check_string(v, sz, t)) != 0) || - ((rv = nni_ws_listener_get_tls(l->listener, &tls)) != 0)) { - return (rv); + if (((rv = ws_check_string(v, sz, t)) == 0) && (l != NULL)) { + nng_tls_config *tls; + + if ((rv = nni_ws_listener_get_tls(l->listener, &tls)) != 0) { + return (rv); + } + rv = nng_tls_config_ca_file(tls, v); + nni_tls_config_fini(tls); } - rv = nng_tls_config_ca_file(tls, v); - nni_tls_config_fini(tls); return (rv); } static int -wss_check_auth_mode(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_int(NULL, v, sz, NNG_TLS_AUTH_MODE_NONE, - NNG_TLS_AUTH_MODE_REQUIRED, t)); -} - -static int wss_dialer_set_auth_mode(void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_dialer * d = arg; - int rv; - nng_tls_config *tls; - int mode; + ws_dialer *d = arg; + int rv; + int mode; rv = nni_copyin_int(&mode, v, sz, NNG_TLS_AUTH_MODE_NONE, NNG_TLS_AUTH_MODE_REQUIRED, t); - if ((rv != 0) || - ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0)) { - return (rv); + if ((rv == 0) && (d != NULL)) { + nng_tls_config *tls; + + if ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0) { + return (rv); + } + rv = nng_tls_config_auth_mode(tls, mode); + nni_tls_config_fini(tls); } - rv = nng_tls_config_auth_mode(tls, mode); - nni_tls_config_fini(tls); return (rv); } static int wss_listener_set_auth_mode(void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_listener * l = arg; - int rv; - nng_tls_config *tls; - int mode; + ws_listener *l = arg; + int rv; + int mode; rv = nni_copyin_int(&mode, v, sz, NNG_TLS_AUTH_MODE_NONE, NNG_TLS_AUTH_MODE_REQUIRED, t); - if ((rv != 0) || - ((rv = nni_ws_listener_get_tls(l->listener, &tls)) != 0)) { - return (rv); + if ((rv == 0) && (l != NULL)) { + nng_tls_config *tls; + + if ((rv = nni_ws_listener_get_tls(l->listener, &tls)) != 0) { + return (rv); + } + rv = nng_tls_config_auth_mode(tls, mode); + nni_tls_config_fini(tls); } - rv = nng_tls_config_auth_mode(tls, mode); - nni_tls_config_fini(tls); return (rv); } @@ -1165,64 +1147,52 @@ static int wss_dialer_set_tls_server_name( void *arg, const void *v, size_t sz, nni_opt_type t) { - ws_dialer * d = arg; - int rv; - nng_tls_config *tls; + ws_dialer *d = arg; + int rv; - if (((rv = ws_check_string(v, sz, t)) != 0) || - ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0)) { - return (rv); - } + if (((rv = ws_check_string(v, sz, t)) == 0) && (d != NULL)) { + nng_tls_config *tls; - rv = nng_tls_config_server_name(tls, v); - nni_tls_config_fini(tls); + if ((rv = nni_ws_dialer_get_tls(d->dialer, &tls)) != 0) { + return (rv); + } + + rv = nng_tls_config_server_name(tls, v); + nni_tls_config_fini(tls); + } return (rv); } -static nni_tran_option wss_dialer_options[] = { +static nni_option wss_dialer_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = ws_dialer_get_recvmaxsz, .o_set = ws_dialer_set_recvmaxsz, - .o_chk = ws_check_recvmaxsz, }, { .o_name = NNG_OPT_WS_REQUEST_HEADERS, - .o_type = NNI_TYPE_STRING, .o_set = ws_dialer_set_reqhdrs, - .o_chk = ws_check_string, }, { .o_name = NNG_OPT_TLS_CONFIG, - .o_type = NNI_TYPE_POINTER, .o_get = wss_dialer_get_tlsconfig, .o_set = wss_dialer_set_tlsconfig, - .o_chk = wss_check_tlsconfig, }, { .o_name = NNG_OPT_TLS_CERT_KEY_FILE, - .o_type = NNI_TYPE_STRING, .o_set = wss_dialer_set_cert_key_file, - .o_chk = ws_check_string, }, { .o_name = NNG_OPT_TLS_CA_FILE, - .o_type = NNI_TYPE_STRING, .o_set = wss_dialer_set_ca_file, - .o_chk = ws_check_string, }, { .o_name = NNG_OPT_TLS_AUTH_MODE, - .o_type = NNI_TYPE_INT32, .o_set = wss_dialer_set_auth_mode, - .o_chk = wss_check_auth_mode, }, { .o_name = NNG_OPT_TLS_SERVER_NAME, - .o_type = NNI_TYPE_STRING, .o_set = wss_dialer_set_tls_server_name, - .o_chk = ws_check_string, }, // terminate list { @@ -1230,44 +1200,32 @@ static nni_tran_option wss_dialer_options[] = { }, }; -static nni_tran_option wss_listener_options[] = { +static nni_option wss_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = ws_listener_get_recvmaxsz, .o_set = ws_listener_set_recvmaxsz, - .o_chk = ws_check_recvmaxsz, }, { .o_name = NNG_OPT_WS_RESPONSE_HEADERS, - .o_type = NNI_TYPE_STRING, .o_set = ws_listener_set_reshdrs, - .o_chk = ws_check_string, }, { .o_name = NNG_OPT_TLS_CONFIG, - .o_type = NNI_TYPE_POINTER, .o_get = wss_listener_get_tlsconfig, .o_set = wss_listener_set_tlsconfig, - .o_chk = wss_check_tlsconfig, }, { .o_name = NNG_OPT_TLS_CERT_KEY_FILE, - .o_type = NNI_TYPE_STRING, .o_set = wss_listener_set_cert_key_file, - .o_chk = ws_check_string, }, { .o_name = NNG_OPT_TLS_CA_FILE, - .o_type = NNI_TYPE_STRING, .o_set = wss_listener_set_ca_file, - .o_chk = ws_check_string, }, { .o_name = NNG_OPT_TLS_AUTH_MODE, - .o_type = NNI_TYPE_INT32, .o_set = wss_listener_set_auth_mode, - .o_chk = wss_check_auth_mode, }, // terminate list { diff --git a/src/transport/zerotier/zerotier.c b/src/transport/zerotier/zerotier.c index a767e168..47dc4af8 100644 --- a/src/transport/zerotier/zerotier.c +++ b/src/transport/zerotier/zerotier.c @@ -2536,19 +2536,14 @@ zt_ep_connect(void *arg, nni_aio *aio) } static int -zt_ep_chk_recvmaxsz(const void *v, size_t sz, nni_opt_type t) -{ - return (nni_copyin_size(NULL, v, sz, 0, NNI_MAXSZ, t)); -} - -static int zt_ep_set_recvmaxsz(void *arg, const void *data, size_t sz, nni_opt_type t) { zt_ep *ep = arg; size_t val; int rv; - if ((rv = nni_copyin_size(&val, data, sz, 0, NNI_MAXSZ, t)) == 0) { + if (((rv = nni_copyin_size(&val, data, sz, 0, NNI_MAXSZ, t)) == 0) && + (ep != NULL)) { nni_mtx_lock(&zt_lk); ep->ze_rcvmax = val; nni_mtx_unlock(&zt_lk); @@ -2568,7 +2563,7 @@ zt_ep_get_recvmaxsz(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_chk_string(const void *data, size_t sz, nni_opt_type t) +zt_check_string(const void *data, size_t sz, nni_opt_type t) { size_t len; @@ -2588,7 +2583,7 @@ zt_ep_set_home(void *arg, const void *data, size_t sz, nni_opt_type t) int rv; zt_ep *ep = arg; - if ((rv = zt_ep_chk_string(data, sz, t)) == 0) { + if (((rv = zt_check_string(data, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&zt_lk); if (ep->ze_running) { rv = NNG_ESTATE; @@ -2634,26 +2629,6 @@ zt_ep_get_url(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_chk_orbit(const void *data, size_t sz, nni_opt_type t) -{ - NNI_ARG_UNUSED(data); - switch (t) { - case NNI_TYPE_UINT64: - NNI_ASSERT(sz == sizeof(uint64_t)); - break; - case NNI_TYPE_OPAQUE: - if ((sz != sizeof(uint64_t)) && - (sz != (sizeof(uint64_t) * 2))) { - return (NNG_EINVAL); - } - break; - default: - return (NNG_EBADTYPE); - } - return (0); -} - -static int zt_ep_set_orbit(void *arg, const void *data, size_t sz, nni_opt_type t) { uint64_t moonid; @@ -2662,18 +2637,21 @@ zt_ep_set_orbit(void *arg, const void *data, size_t sz, nni_opt_type t) int rv; enum ZT_ResultCode zrv; - if ((rv = zt_ep_chk_orbit(data, sz, t)) != 0) { - return (rv); + if ((t != NNI_TYPE_UINT64) && (t != NNI_TYPE_OPAQUE)) { + return (NNG_EBADTYPE); } - if (sz == sizeof(uint64_t)) { memcpy(&moonid, data, sizeof(moonid)); peerid = 0; - } else { - NNI_ASSERT(sz == (2 * sizeof(uint64_t))); + } else if (sz == sizeof(uint64_t) * 2) { memcpy(&moonid, data, sizeof(moonid)); memcpy(&peerid, ((char *) data) + sizeof(uint64_t), sizeof(peerid)); + } else { + return (NNG_EINVAL); + } + if (ep == NULL) { + return (0); } nni_mtx_lock(&zt_lk); @@ -2688,20 +2666,15 @@ zt_ep_set_orbit(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_chk_deorbit(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_u64(NULL, data, sz, t)); -} - -static int zt_ep_set_deorbit(void *arg, const void *data, size_t sz, nni_opt_type t) { - uint64_t moonid; - zt_ep * ep = arg; - enum ZT_ResultCode zrv; - int rv; + uint64_t moonid; + zt_ep * ep = arg; + int rv; - if ((rv = nni_copyin_u64(&moonid, data, sz, t)) == 0) { + if (((rv = nni_copyin_u64(&moonid, data, sz, t)) == 0) && + (ep != NULL)) { + enum ZT_ResultCode zrv; nni_mtx_lock(&zt_lk); if ((ep->ze_ztn == NULL) && ((rv = zt_node_find(ep)) != 0)) { @@ -2716,34 +2689,16 @@ zt_ep_set_deorbit(void *arg, const void *data, size_t sz, nni_opt_type t) } static int -zt_ep_chk_add_local_addr(const void *data, size_t sz, nni_opt_type t) -{ - int rv; - nng_sockaddr sa; - rv = nni_copyin_sockaddr(&sa, data, sz, t); - if (rv == 0) { - switch (sa.s_family) { - case NNG_AF_INET: - case NNG_AF_INET6: - break; - default: - return (NNG_EINVAL); - } - } - return (0); -} - -static int zt_ep_set_add_local_addr( void *arg, const void *data, size_t sz, nni_opt_type t) { - nng_sockaddr sa; - zt_ep * ep = arg; - enum ZT_ResultCode zrv; - int rv; - ZT_Node * zn; + nng_sockaddr sa; + zt_ep * ep = arg; + int rv; if ((rv = nni_copyin_sockaddr(&sa, data, sz, t)) == 0) { + enum ZT_ResultCode zrv; + ZT_Node * zn; struct sockaddr_storage ss; struct sockaddr_in * sin; struct sockaddr_in6 * sin6; @@ -2766,6 +2721,9 @@ zt_ep_set_add_local_addr( return (NNG_EINVAL); } + if (ep == NULL) { + return (0); + } nni_mtx_lock(&zt_lk); if ((ep->ze_ztn == NULL) && ((rv = zt_node_find(ep)) != 0)) { nni_mtx_unlock(&zt_lk); @@ -2780,33 +2738,26 @@ zt_ep_set_add_local_addr( } static int -zt_ep_chk_clear_local_addrs(const void *data, size_t sz, nni_opt_type t) -{ - NNI_ARG_UNUSED(data); - NNI_ARG_UNUSED(sz); - NNI_ARG_UNUSED(t); - return (0); -} - -static int zt_ep_set_clear_local_addrs( void *arg, const void *data, size_t sz, nni_opt_type t) { - zt_ep * ep = arg; - int rv; - ZT_Node *zn; + zt_ep *ep = arg; NNI_ARG_UNUSED(data); NNI_ARG_UNUSED(sz); NNI_ARG_UNUSED(t); - nni_mtx_lock(&zt_lk); - if ((ep->ze_ztn == NULL) && ((rv = zt_node_find(ep)) != 0)) { + if (ep != NULL) { + int rv; + ZT_Node *zn; + nni_mtx_lock(&zt_lk); + if ((ep->ze_ztn == NULL) && ((rv = zt_node_find(ep)) != 0)) { + nni_mtx_unlock(&zt_lk); + return (rv); + } + zn = ep->ze_ztn; + ZT_Node_clearLocalInterfaceAddresses(zn); nni_mtx_unlock(&zt_lk); - return (rv); } - zn = ep->ze_ztn; - ZT_Node_clearLocalInterfaceAddresses(zn); - nni_mtx_unlock(&zt_lk); return (0); } @@ -2881,19 +2832,13 @@ zt_ep_get_nw_status(void *arg, void *buf, size_t *szp, nni_opt_type t) } static int -zt_ep_chk_time(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_ms(NULL, data, sz, t)); -} - -static int zt_ep_set_ping_time(void *arg, const void *data, size_t sz, nni_opt_type t) { zt_ep * ep = arg; nng_duration val; int rv; - if ((rv = nni_copyin_ms(&val, data, sz, t)) == 0) { + if (((rv = nni_copyin_ms(&val, data, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&zt_lk); ep->ze_ping_time = val; nni_mtx_unlock(&zt_lk); @@ -2914,19 +2859,14 @@ zt_ep_get_ping_time(void *arg, void *data, size_t *szp, nni_opt_type t) } static int -zt_ep_chk_tries(const void *data, size_t sz, nni_opt_type t) -{ - return (nni_copyin_int(NULL, data, sz, 0, 1000000, t)); -} - -static int zt_ep_set_ping_tries(void *arg, const void *data, size_t sz, nni_opt_type t) { zt_ep *ep = arg; int val; int rv; - if ((rv = nni_copyin_int(&val, data, sz, 0, 1000000, t)) == 0) { + if (((rv = nni_copyin_int(&val, data, sz, 0, 1000000, t)) == 0) && + (ep != NULL)) { nni_mtx_lock(&zt_lk); ep->ze_ping_tries = val; nni_mtx_unlock(&zt_lk); @@ -2953,7 +2893,7 @@ zt_ep_set_conn_time(void *arg, const void *data, size_t sz, nni_opt_type t) nng_duration val; int rv; - if ((rv = nni_copyin_ms(&val, data, sz, t)) == 0) { + if (((rv = nni_copyin_ms(&val, data, sz, t)) == 0) && (ep != NULL)) { nni_mtx_lock(&zt_lk); ep->ze_conn_time = val; nni_mtx_unlock(&zt_lk); @@ -2980,7 +2920,8 @@ zt_ep_set_conn_tries(void *arg, const void *data, size_t sz, nni_opt_type t) int val; int rv; - if ((rv = nni_copyin_int(&val, data, sz, 0, 1000000, t)) == 0) { + if (((rv = nni_copyin_int(&val, data, sz, 0, 1000000, t)) == 0) && + (ep != NULL)) { nni_mtx_lock(&zt_lk); ep->ze_conn_tries = val; nni_mtx_unlock(&zt_lk); @@ -3051,35 +2992,29 @@ zt_pipe_get_mtu(void *arg, void *data, size_t *szp, nni_opt_type t) return (nni_copyout_size(p->zp_mtu, data, szp, t)); } -static nni_tran_option zt_pipe_options[] = { +static nni_option zt_pipe_options[] = { { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = zt_pipe_get_locaddr, }, { .o_name = NNG_OPT_REMADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = zt_pipe_get_remaddr, }, { .o_name = NNG_OPT_ZT_MTU, - .o_type = NNI_TYPE_SIZE, .o_get = zt_pipe_get_mtu, }, { .o_name = NNG_OPT_ZT_NWID, - .o_type = NNI_TYPE_UINT64, .o_get = zt_pipe_get_nwid, }, { .o_name = NNG_OPT_ZT_NODE, - .o_type = NNI_TYPE_UINT64, .o_get = zt_pipe_get_node, }, { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = zt_pipe_get_recvmaxsz, }, // terminate list @@ -3098,97 +3033,72 @@ static nni_tran_pipe_ops zt_pipe_ops = { .p_options = zt_pipe_options, }; -static nni_tran_option zt_dialer_options[] = { +static nni_option zt_dialer_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = zt_ep_get_recvmaxsz, .o_set = zt_ep_set_recvmaxsz, - .o_chk = zt_ep_chk_recvmaxsz, }, { .o_name = NNG_OPT_URL, - .o_type = NNI_TYPE_STRING, .o_get = zt_ep_get_url, }, { .o_name = NNG_OPT_ZT_HOME, - .o_type = NNI_TYPE_STRING, .o_get = zt_ep_get_home, .o_set = zt_ep_set_home, - .o_chk = zt_ep_chk_string, }, { .o_name = NNG_OPT_ZT_NODE, - .o_type = NNI_TYPE_UINT64, .o_get = zt_ep_get_node, }, { .o_name = NNG_OPT_ZT_NWID, - .o_type = NNI_TYPE_UINT64, .o_get = zt_ep_get_nwid, }, { .o_name = NNG_OPT_ZT_NETWORK_STATUS, - .o_type = NNI_TYPE_INT32, // enumeration really .o_get = zt_ep_get_nw_status, }, { .o_name = NNG_OPT_ZT_NETWORK_NAME, - .o_type = NNI_TYPE_STRING, .o_get = zt_ep_get_nw_name, }, { .o_name = NNG_OPT_ZT_PING_TIME, - .o_type = NNI_TYPE_DURATION, .o_get = zt_ep_get_ping_time, .o_set = zt_ep_set_ping_time, - .o_chk = zt_ep_chk_time, }, { .o_name = NNG_OPT_ZT_PING_TRIES, - .o_type = NNI_TYPE_INT32, .o_get = zt_ep_get_ping_tries, .o_set = zt_ep_set_ping_tries, - .o_chk = zt_ep_chk_tries, }, { .o_name = NNG_OPT_ZT_CONN_TIME, - .o_type = NNI_TYPE_DURATION, .o_get = zt_ep_get_conn_time, .o_set = zt_ep_set_conn_time, - .o_chk = zt_ep_chk_time, }, { .o_name = NNG_OPT_ZT_CONN_TRIES, - .o_type = NNI_TYPE_INT32, .o_get = zt_ep_get_conn_tries, .o_set = zt_ep_set_conn_tries, - .o_chk = zt_ep_chk_tries, }, { .o_name = NNG_OPT_ZT_ORBIT, - .o_type = NNI_TYPE_UINT64, // use opaque for two .o_set = zt_ep_set_orbit, - .o_chk = zt_ep_chk_orbit, }, { .o_name = NNG_OPT_ZT_DEORBIT, - .o_type = NNI_TYPE_UINT64, .o_set = zt_ep_set_deorbit, - .o_chk = zt_ep_chk_deorbit, }, { .o_name = NNG_OPT_ZT_ADD_LOCAL_ADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_set = zt_ep_set_add_local_addr, - .o_chk = zt_ep_chk_add_local_addr, }, { .o_name = NNG_OPT_ZT_CLEAR_LOCAL_ADDRS, - .o_type = NNI_TYPE_OPAQUE, .o_set = zt_ep_set_clear_local_addrs, - .o_chk = zt_ep_chk_clear_local_addrs, }, // terminate list @@ -3197,75 +3107,57 @@ static nni_tran_option zt_dialer_options[] = { }, }; -static nni_tran_option zt_listener_options[] = { +static nni_option zt_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, - .o_type = NNI_TYPE_SIZE, .o_get = zt_ep_get_recvmaxsz, .o_set = zt_ep_set_recvmaxsz, - .o_chk = zt_ep_chk_recvmaxsz, }, { .o_name = NNG_OPT_URL, - .o_type = NNI_TYPE_STRING, .o_get = zt_ep_get_url, }, { .o_name = NNG_OPT_ZT_HOME, - .o_type = NNI_TYPE_STRING, .o_get = zt_ep_get_home, .o_set = zt_ep_set_home, - .o_chk = zt_ep_chk_string, }, { .o_name = NNG_OPT_ZT_NODE, - .o_type = NNI_TYPE_UINT64, .o_get = zt_ep_get_node, }, { .o_name = NNG_OPT_ZT_NWID, - .o_type = NNI_TYPE_UINT64, .o_get = zt_ep_get_nwid, }, { .o_name = NNG_OPT_ZT_NETWORK_STATUS, - .o_type = NNI_TYPE_INT32, // enumeration really .o_get = zt_ep_get_nw_status, }, { .o_name = NNG_OPT_ZT_NETWORK_NAME, - .o_type = NNI_TYPE_STRING, .o_get = zt_ep_get_nw_name, }, { .o_name = NNG_OPT_ZT_PING_TIME, - .o_type = NNI_TYPE_DURATION, .o_get = zt_ep_get_ping_time, .o_set = zt_ep_set_ping_time, - .o_chk = zt_ep_chk_time, }, { .o_name = NNG_OPT_ZT_PING_TRIES, - .o_type = NNI_TYPE_INT32, .o_get = zt_ep_get_ping_tries, .o_set = zt_ep_set_ping_tries, - .o_chk = zt_ep_chk_tries, }, { .o_name = NNG_OPT_ZT_ORBIT, - .o_type = NNI_TYPE_UINT64, // use opaque for two .o_set = zt_ep_set_orbit, - .o_chk = zt_ep_chk_orbit, }, { .o_name = NNG_OPT_ZT_DEORBIT, - .o_type = NNI_TYPE_UINT64, .o_set = zt_ep_set_deorbit, - .o_chk = zt_ep_chk_deorbit, }, { .o_name = NNG_OPT_LOCADDR, - .o_type = NNI_TYPE_SOCKADDR, .o_get = zt_ep_get_locaddr, }, // terminate list |
