aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-12-28 21:07:58 -0800
committerGarrett D'Amore <garrett@damore.org>2018-12-29 14:22:06 -0800
commitd3bd35ab49ad74528fd9e34cce9016d74dd91943 (patch)
tree596459970f49a340f5e292f7bdb4060f4ea2be81 /src/transport
parent02e90dd4f29037e43f28e3bd1e912d4092011d23 (diff)
downloadnng-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.c17
-rw-r--r--src/transport/ipc/ipc.c51
-rw-r--r--src/transport/tcp/tcp.c44
-rw-r--r--src/transport/tls/tls.c113
-rw-r--r--src/transport/ws/websocket.c240
-rw-r--r--src/transport/zerotier/zerotier.c200
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