diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-04-26 15:36:13 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-04-26 19:13:59 -0700 |
| commit | fd06aba05381055ab56e1ec81d56055b66462f0b (patch) | |
| tree | 99633af36e1c393bffeda213c0ac85e83fc4a6ee | |
| parent | 3de2b56557c80b310341c423492bd8ba895c1abe (diff) | |
| download | nng-fd06aba05381055ab56e1ec81d56055b66462f0b.tar.gz nng-fd06aba05381055ab56e1ec81d56055b66462f0b.tar.bz2 nng-fd06aba05381055ab56e1ec81d56055b66462f0b.zip | |
fixes #375 integer types are error prone
This change converts the various integer types like nng_socket
in the public API to opaque structures that are passed by value.
Basically we just wrap the integer ID. This "hack" give us strong
type checks by the compiler (yay!), at the expense of not being able
to directly use these as numbers (so comparisions for example don't
work, and neither does initialization to zero using the normal
method.
Comparison of disassembly output shows that at least with the optimizer
enabled there is no difference in the compiler output between using
a structure or an integral value.
| -rw-r--r-- | docs/man/nng_ctx.5.adoc | 7 | ||||
| -rw-r--r-- | docs/man/nng_dialer.5.adoc | 11 | ||||
| -rw-r--r-- | docs/man/nng_listener.5.adoc | 11 | ||||
| -rw-r--r-- | docs/man/nng_pipe.5.adoc | 11 | ||||
| -rw-r--r-- | docs/man/nng_socket.5.adoc | 9 | ||||
| -rw-r--r-- | src/compat/nanomsg/nn.c | 95 | ||||
| -rw-r--r-- | src/core/protocol.c | 8 | ||||
| -rw-r--r-- | src/nng.c | 397 | ||||
| -rw-r--r-- | src/nng.h | 32 | ||||
| -rw-r--r-- | tests/bufsz.c | 4 | ||||
| -rw-r--r-- | tests/message.c | 14 | ||||
| -rw-r--r-- | tests/multistress.c | 26 | ||||
| -rw-r--r-- | tests/pair1.c | 28 | ||||
| -rw-r--r-- | tests/reconnect.c | 2 | ||||
| -rw-r--r-- | tests/reqstress.c | 10 | ||||
| -rw-r--r-- | tests/sock.c | 64 | ||||
| -rw-r--r-- | tests/surveyctx.c | 2 | ||||
| -rw-r--r-- | tests/tcp.c | 2 | ||||
| -rw-r--r-- | tests/tcp6.c | 4 | ||||
| -rw-r--r-- | tests/tls.c | 6 | ||||
| -rw-r--r-- | tests/trantest.h | 43 | ||||
| -rw-r--r-- | tests/ws.c | 2 | ||||
| -rw-r--r-- | tests/wss.c | 2 | ||||
| -rw-r--r-- | tests/wssfile.c | 6 | ||||
| -rw-r--r-- | tests/zt.c | 2 |
25 files changed, 453 insertions, 345 deletions
diff --git a/docs/man/nng_ctx.5.adoc b/docs/man/nng_ctx.5.adoc index 4fcac571..98402738 100644 --- a/docs/man/nng_ctx.5.adoc +++ b/docs/man/nng_ctx.5.adoc @@ -19,7 +19,7 @@ nng_ctx - protocol context ---- #include <nng/nng.h> -typedef uint32_t nng_ctx +typedef struct nng_ctx_s nng_ctx ---- == DESCRIPTION @@ -38,6 +38,11 @@ of any sent request, a timer to retry the request on failure, and so forth. A separate context on the same socket can have similar data, but corresponding to a completely different request. +IMPORTANT: The `nng_ctx` structure is always passed by value (both +for input parameters and return values), and should be treated opaquely. +Passing structures this way ensures gives the compiler a chance to perform +accurate type checks in functions passing values of this type. + All contexts share the same socket, and so some options, as well as the underlying transport details, will be common to all contexts on that socket. diff --git a/docs/man/nng_dialer.5.adoc b/docs/man/nng_dialer.5.adoc index daadbd0b..45c60bc9 100644 --- a/docs/man/nng_dialer.5.adoc +++ b/docs/man/nng_dialer.5.adoc @@ -16,11 +16,11 @@ nng_dialer - dialer == SYNOPSIS [source, c] ------------ +---- #include <nng/nng.h> -typedef uint32_t nng_dialer; ------------ +typedef struct nng_dialer_s nng_dialer; +---- == DESCRIPTION @@ -38,6 +38,11 @@ Dialer objects are created by the or <<nng_dial.3#,`nng_dial()`>> functions, and are always "`owned`" by a single <<nng_socket.5#,`nng_socket`>>. +IMPORTANT: The `nng_dialer` structure is always passed by value (both +for input parameters and return values), and should be treated opaquely. +Passing structures this way ensures gives the compiler a chance to perform +accurate type checks in functions passing values of this type. + TIP: A given <<nng_socket.5#,`nng_socket`>> may have multiple dialer objects, multiple <<nng_listener.5#,listener>> objects, or even some of both. diff --git a/docs/man/nng_listener.5.adoc b/docs/man/nng_listener.5.adoc index 6c5d0bd0..558eb920 100644 --- a/docs/man/nng_listener.5.adoc +++ b/docs/man/nng_listener.5.adoc @@ -16,11 +16,11 @@ nng_listener - listener == SYNOPSIS [source, c] ------------ +---- #include <nng/nng.h> -typedef uint32_t nng_listener; ------------ +typedef struct nng_listener_s nng_listener; +---- == DESCRIPTION @@ -35,6 +35,11 @@ Listener objects are created by the or <<nng_listen.3#,`nng_listen()`>> functions, and are always "`owned`" by a single <<nng_socket.5#,`nng_socket`>>. +IMPORTANT: The `nng_listener` structure is always passed by value (both +for input parameters and return values), and should be treated opaquely. +Passing structures this way ensures gives the compiler a chance to perform +accurate type checks in functions passing values of this type. + TIP: A given <<nng_socket.5#,`nng_socket`>> may have multiple listener objects, multiple <<nng_dialer.5#,dialer>> objects, or even some of both. diff --git a/docs/man/nng_pipe.5.adoc b/docs/man/nng_pipe.5.adoc index 4befd3e8..39247fbd 100644 --- a/docs/man/nng_pipe.5.adoc +++ b/docs/man/nng_pipe.5.adoc @@ -16,11 +16,11 @@ nng_pipe - communications pipe == SYNOPSIS [source, c] ------------ +---- #include <nng/nng.h> -typedef uint32_t nng_pipe; ------------ +typedef struct nng_pipe_s nng_pipe; +---- == DESCRIPTION @@ -32,6 +32,11 @@ single TCP or IPC connection.) Pipes are associated with either the listener or dialer that created them, and therefore are also automatically associated with a single socket. +IMPORTANT: The `nng_pipe` structure is always passed by value (both +for input parameters and return values), and should be treated opaquely. +Passing structures this way ensures gives the compiler a chance to perform +accurate type checks in functions passing values of this type. + TIP: Most applications should never concern themselves with individual pipes. However it is possible to access a pipe when more information about the source of a message is needed, or when more control is required over diff --git a/docs/man/nng_socket.5.adoc b/docs/man/nng_socket.5.adoc index 0dcdfa99..4711495f 100644 --- a/docs/man/nng_socket.5.adoc +++ b/docs/man/nng_socket.5.adoc @@ -19,7 +19,7 @@ nng_socket - socket handle ---- #include <nng/nng.h> -typedef uint32_t nng_socket; +typedef struct nng_socket_s nng_socket; ---- == DESCRIPTION @@ -34,9 +34,10 @@ may be connected to multiple transports at the same time. However, a given socket will have exactly one "`protocol`" associated with it, and is responsible for any state machines or other protocol-specific logic. -NOTE: Although `nng_socket` is an integer data type, these objects are not -ordinary file descriptors, and can only be used with the functions that -explicitly indicate that it safe and appropropate to do so. +IMPORTANT: The `nng_socket` structure is always passed by value (both +for input parameters and return values), and should be treated opaquely. +Passing structures this way ensures gives the compiler a chance to perform +accurate type checks in functions passing values of this type. Each `nng_socket` is created by a protocol-specific constructor, such as <<nng_rep_open.3#,`nng_rep_open()`>>. diff --git a/src/compat/nanomsg/nn.c b/src/compat/nanomsg/nn.c index e99c0ff3..0eb97298 100644 --- a/src/compat/nanomsg/nn.c +++ b/src/compat/nanomsg/nn.c @@ -221,15 +221,18 @@ nn_socket(int domain, int protocol) return (-1); } - return ((int) sock); + return ((int) sock.id); } int nn_close(int s) { - int rv; + int rv; + nng_socket sid; + + sid.id = (uint32_t) s; - if ((rv = nng_close((nng_socket) s)) != 0) { + if ((rv = nng_close(sid)) != 0) { nn_seterror(rv); return (-1); } @@ -241,12 +244,14 @@ nn_bind(int s, const char *addr) { int rv; nng_listener l; + nng_socket sid; - if ((rv = nng_listen((nng_socket) s, addr, &l, 0)) != 0) { + sid.id = (uint32_t) s; + if ((rv = nng_listen(sid, addr, &l, 0)) != 0) { nn_seterror(rv); return (-1); } - return ((int) l); + return ((int) l.id); } int @@ -254,13 +259,14 @@ nn_connect(int s, const char *addr) { int rv; nng_dialer d; + nng_socket sid; - if ((rv = nng_dial((nng_socket) s, addr, &d, NNG_FLAG_NONBLOCK)) != - 0) { + sid.id = (uint32_t) s; + if ((rv = nng_dial(sid, addr, &d, NNG_FLAG_NONBLOCK)) != 0) { nn_seterror(rv); return (-1); } - return ((int) d); + return ((int) d.id); } int @@ -268,6 +274,8 @@ nn_shutdown(int s, int ep) { int rv; (void) s; // Unused + nng_dialer d; + nng_listener l; // Socket is wired into the endpoint... so passing a bad endpoint // ID can result in affecting the wrong socket. But this requires @@ -276,8 +284,9 @@ nn_shutdown(int s, int ep) // Note that listeners and dialers share the same namespace // in the core, so we can close either one this way. - if (((rv = nng_dialer_close((nng_dialer) ep)) != 0) && - ((rv = nng_listener_close((nng_listener) ep)) != 0)) { + d.id = l.id = (uint32_t) ep; + if (((rv = nng_dialer_close(d)) != 0) && + ((rv = nng_listener_close(l)) != 0)) { nn_seterror(rv); return (-1); } @@ -405,10 +414,11 @@ nn_recv(int s, void *buf, size_t len, int flags) int nn_recvmsg(int s, struct nn_msghdr *mh, int flags) { - int rv; - nng_msg *msg; - size_t len; - int keep = 0; + int rv; + nng_msg * msg; + size_t len; + int keep = 0; + nng_socket sid; if ((flags = nn_flags(flags)) == -1) { return (-1); @@ -422,7 +432,8 @@ nn_recvmsg(int s, struct nn_msghdr *mh, int flags) return (-1); } - if ((rv = nng_recvmsg((nng_socket) s, &msg, flags)) != 0) { + sid.id = (uint32_t) s; + if ((rv = nng_recvmsg(sid, &msg, flags)) != 0) { nn_seterror(rv); return (-1); } @@ -523,12 +534,15 @@ nn_recvmsg(int s, struct nn_msghdr *mh, int flags) int nn_sendmsg(int s, const struct nn_msghdr *mh, int flags) { - nng_msg *msg = NULL; - nng_msg *cmsg = NULL; - char * cdata; - int keep = 0; - size_t sz; - int rv; + nng_msg * msg = NULL; + nng_msg * cmsg = NULL; + nng_socket sid; + char * cdata; + int keep = 0; + size_t sz; + int rv; + + sid.id = (uint32_t) s; if ((flags = nn_flags(flags)) == -1) { return (-1); @@ -629,7 +643,7 @@ nn_sendmsg(int s, const struct nn_msghdr *mh, int flags) } sz = nng_msg_len(msg); - if ((rv = nng_sendmsg((nng_socket) s, msg, flags)) != 0) { + if ((rv = nng_sendmsg(sid, msg, flags)) != 0) { if (!keep) { nng_msg_free(msg); } @@ -901,7 +915,10 @@ nn_getsockopt(int s, int nnlevel, int nnopt, void *valp, size_t *szp) { const char *name = NULL; int (*get)(nng_socket, void *, size_t *) = NULL; - int rv; + int rv; + nng_socket sid; + + sid.id = (uint32_t) s; for (unsigned i = 0; i < sizeof(options) / sizeof(options[0]); i++) { if ((options[i].nnlevel == nnlevel) && @@ -913,7 +930,7 @@ nn_getsockopt(int s, int nnlevel, int nnopt, void *valp, size_t *szp) } if (get != NULL) { - return (get((nng_socket) s, valp, szp)); + return (get(sid, valp, szp)); } if (name == NULL) { @@ -921,7 +938,7 @@ nn_getsockopt(int s, int nnlevel, int nnopt, void *valp, size_t *szp) return (-1); } - if ((rv = nng_getopt((nng_socket) s, name, valp, szp)) != 0) { + if ((rv = nng_getopt(sid, name, valp, szp)) != 0) { nn_seterror(rv); return (-1); } @@ -932,10 +949,13 @@ nn_getsockopt(int s, int nnlevel, int nnopt, void *valp, size_t *szp) int nn_setsockopt(int s, int nnlevel, int nnopt, const void *valp, size_t sz) { + nng_socket sid; const char *name = NULL; int (*set)(nng_socket, const void *, size_t) = NULL; int rv; + sid.id = (uint32_t) s; + for (unsigned i = 0; i < sizeof(options) / sizeof(options[0]); i++) { if ((options[i].nnlevel == nnlevel) && (options[i].nnopt == nnopt)) { @@ -947,7 +967,7 @@ nn_setsockopt(int s, int nnlevel, int nnopt, const void *valp, size_t sz) } if (set != NULL) { - return (set((nng_socket) s, valp, sz)); + return (set(sid, valp, sz)); } if (name == NULL) { @@ -955,7 +975,7 @@ nn_setsockopt(int s, int nnlevel, int nnopt, const void *valp, size_t sz) return (-1); } - if ((rv = nng_setopt((nng_socket) s, name, valp, sz)) != 0) { + if ((rv = nng_setopt(sid, name, valp, sz)) != 0) { nn_seterror(rv); return (-1); } @@ -996,9 +1016,14 @@ nn_cmsg_next(struct nn_msghdr *mh, struct nn_cmsghdr *first) int nn_device(int s1, int s2) { - int rv; + int rv; + nng_socket sid1; + nng_socket sid2; + + sid1.id = (uint32_t) s1; + sid2.id = (uint32_t) s2; - rv = nng_device((nng_socket) s1, (nng_socket) s2); + rv = nng_device(sid1, sid2); // rv must always be nonzero nn_seterror(rv); return (-1); @@ -1041,8 +1066,10 @@ nn_poll(struct nn_pollfd *fds, int nfds, int timeout) for (int i = 0; i < nfds; i++) { int fd; if (fds[i].events & NN_POLLIN) { - if ((rv = nng_getopt_int((nng_socket) fds[i].fd, - NNG_OPT_RECVFD, &fd)) != 0) { + nng_socket s; + s.id = fds[i].fd; + if ((rv = nng_getopt_int(s, NNG_OPT_RECVFD, &fd)) != + 0) { nn_seterror(rv); NNI_FREE_STRUCTS(pfd, nfds * 2); return (-1); @@ -1056,8 +1083,10 @@ nn_poll(struct nn_pollfd *fds, int nfds, int timeout) npfd++; } if (fds[i].events & NN_POLLOUT) { - if ((rv = nng_getopt_int((nng_socket) fds[i].fd, - NNG_OPT_SENDFD, &fd)) != 0) { + nng_socket s; + s.id = fds[i].fd; + if ((rv = nng_getopt_int(s, NNG_OPT_SENDFD, &fd)) != + 0) { nn_seterror(rv); NNI_FREE_STRUCTS(pfd, nfds * 2); return (-1); diff --git a/src/core/protocol.c b/src/core/protocol.c index e36bc31f..52b9b7fb 100644 --- a/src/core/protocol.c +++ b/src/core/protocol.c @@ -1,6 +1,6 @@ // -// Copyright 2017 Garrett D'Amore <garrett@damore.org> -// Copyright 2017 Capitar IT Group BV <info@capitar.com> +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -62,7 +62,9 @@ nni_proto_open(nng_socket *sockidp, const nni_proto *proto) return (rv); } if ((rv = nni_sock_open(&sock, proto)) == 0) { - *sockidp = nni_sock_id(sock); // Keep socket held open. + nng_socket s; + s.id = nni_sock_id(sock); // Keep socket held open. + *sockidp = s; } return (rv); } @@ -31,14 +31,14 @@ nng_fini(void) } int -nng_close(nng_socket sid) +nng_close(nng_socket s) { int rv; nni_sock *sock; // Close is special, because we still want to be able to get // a hold on the socket even if shutdown was called. - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } // No release -- close releases it. @@ -77,14 +77,14 @@ nng_strfree(char *s) } int -nng_recv(nng_socket sid, void *buf, size_t *szp, int flags) +nng_recv(nng_socket s, void *buf, size_t *szp, int flags) { nng_msg *msg; int rv; // Note that while it would be nice to make this a zero copy operation, // its not normally possible if a size was specified. - if ((rv = nng_recvmsg(sid, &msg, flags & ~(NNG_FLAG_ALLOC))) != 0) { + if ((rv = nng_recvmsg(s, &msg, flags & ~(NNG_FLAG_ALLOC))) != 0) { return (rv); } if (!(flags & NNG_FLAG_ALLOC)) { @@ -113,7 +113,7 @@ nng_recv(nng_socket sid, void *buf, size_t *szp, int flags) } int -nng_recvmsg(nng_socket sid, nng_msg **msgp, int flags) +nng_recvmsg(nng_socket s, nng_msg **msgp, int flags) { int rv; nng_aio *ap; @@ -127,7 +127,7 @@ nng_recvmsg(nng_socket sid, nng_msg **msgp, int flags) nng_aio_set_timeout(ap, NNG_DURATION_DEFAULT); } - nng_recv_aio(sid, ap); + nng_recv_aio(s, ap); nng_aio_wait(ap); if ((rv = nng_aio_result(ap)) == 0) { @@ -142,7 +142,7 @@ nng_recvmsg(nng_socket sid, nng_msg **msgp, int flags) } int -nng_send(nng_socket sid, void *buf, size_t len, int flags) +nng_send(nng_socket s, void *buf, size_t len, int flags) { nng_msg *msg; int rv; @@ -151,7 +151,7 @@ nng_send(nng_socket sid, void *buf, size_t len, int flags) return (rv); } memcpy(nng_msg_body(msg), buf, len); - if ((rv = nng_sendmsg(sid, msg, flags)) != 0) { + if ((rv = nng_sendmsg(s, msg, flags)) != 0) { nng_msg_free(msg); } if (flags & NNG_FLAG_ALLOC) { @@ -161,7 +161,7 @@ nng_send(nng_socket sid, void *buf, size_t len, int flags) } int -nng_sendmsg(nng_socket sid, nng_msg *msg, int flags) +nng_sendmsg(nng_socket s, nng_msg *msg, int flags) { int rv; nng_aio *ap; @@ -176,7 +176,7 @@ nng_sendmsg(nng_socket sid, nng_msg *msg, int flags) } nng_aio_set_msg(ap, msg); - nng_send_aio(sid, ap); + nng_send_aio(s, ap); nng_aio_wait(ap); rv = nng_aio_result(ap); @@ -192,12 +192,12 @@ nng_sendmsg(nng_socket sid, nng_msg *msg, int flags) } void -nng_recv_aio(nng_socket sid, nng_aio *aio) +nng_recv_aio(nng_socket s, nng_aio *aio) { nni_sock *sock; int rv; - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { if (nni_aio_begin(aio) == 0) { nni_aio_finish_error(aio, rv); } @@ -208,7 +208,7 @@ nng_recv_aio(nng_socket sid, nng_aio *aio) } void -nng_send_aio(nng_socket sid, nng_aio *aio) +nng_send_aio(nng_socket s, nng_aio *aio) { nni_sock *sock; int rv; @@ -219,7 +219,7 @@ nng_send_aio(nng_socket sid, nng_aio *aio) } return; } - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { if (nni_aio_begin(aio) == 0) { nni_aio_finish_error(aio, rv); } @@ -230,20 +230,22 @@ nng_send_aio(nng_socket sid, nng_aio *aio) } int -nng_ctx_open(nng_ctx *idp, nng_socket sid) +nng_ctx_open(nng_ctx *idp, nng_socket s) { nni_sock *sock; nni_ctx * ctx; int rv; + nng_ctx id; - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } if ((rv = nni_ctx_open(&ctx, sock)) != 0) { nni_sock_rele(sock); return (rv); } - *idp = nni_ctx_id(ctx); + id.id = nni_ctx_id(ctx); + *idp = id; nni_ctx_rele(ctx); nni_sock_rele(sock); return (0); @@ -255,7 +257,7 @@ nng_ctx_close(nng_ctx cid) int rv; nni_ctx *ctx; - if ((rv = nni_ctx_find(&ctx, cid, true)) != 0) { + if ((rv = nni_ctx_find(&ctx, cid.id, true)) != 0) { return (rv); } // no release, close releases implicitly. @@ -269,7 +271,7 @@ nng_ctx_recv(nng_ctx cid, nng_aio *aio) int rv; nni_ctx *ctx; - if ((rv = nni_ctx_find(&ctx, cid, false)) != 0) { + if ((rv = nni_ctx_find(&ctx, cid.id, false)) != 0) { if (nni_aio_begin(aio) == 0) { nni_aio_finish_error(aio, rv); } @@ -291,7 +293,7 @@ nng_ctx_send(nng_ctx cid, nng_aio *aio) } return; } - if ((rv = nni_ctx_find(&ctx, cid, false)) != 0) { + if ((rv = nni_ctx_find(&ctx, cid.id, false)) != 0) { if (nni_aio_begin(aio) == 0) { nni_aio_finish_error(aio, rv); } @@ -310,7 +312,7 @@ nng_ctx_getx(nng_ctx id, const char *n, void *v, size_t *szp, int t) if ((rv = nni_init()) != 0) { return (rv); } - if ((rv = nni_ctx_find(&ctx, id, false)) != 0) { + if ((rv = nni_ctx_find(&ctx, id.id, false)) != 0) { return (rv); } rv = nni_ctx_getopt(ctx, n, v, szp, t); @@ -361,7 +363,7 @@ nng_ctx_setx(nng_ctx id, const char *n, const void *v, size_t sz, int t) if ((rv = nni_init()) != 0) { return (rv); } - if ((rv = nni_ctx_find(&ctx, id, false)) != 0) { + if ((rv = nni_ctx_find(&ctx, id.id, false)) != 0) { return (rv); } rv = nni_ctx_setopt(ctx, n, v, sz, t); @@ -400,13 +402,13 @@ nng_ctx_setopt_ms(nng_ctx id, const char *name, nng_duration v) } int -nng_dial(nng_socket sid, const char *addr, nng_dialer *dp, int flags) +nng_dial(nng_socket s, const char *addr, nng_dialer *dp, int flags) { nni_ep * ep; int rv; nni_sock *sock; - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } if ((rv = nni_ep_create_dialer(&ep, sock, addr)) != 0) { @@ -419,7 +421,9 @@ nng_dial(nng_socket sid, const char *addr, nng_dialer *dp, int flags) return (rv); } if (dp != NULL) { - *dp = nni_ep_id(ep); + nng_dialer d; + d.id = nni_ep_id(ep); + *dp = d; } nni_ep_rele(ep); nni_sock_rele(sock); @@ -427,13 +431,13 @@ nng_dial(nng_socket sid, const char *addr, nng_dialer *dp, int flags) } int -nng_listen(nng_socket sid, const char *addr, nng_listener *lp, int flags) +nng_listen(nng_socket s, const char *addr, nng_listener *lp, int flags) { nni_ep * ep; int rv; nni_sock *sock; - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } if ((rv = nni_ep_create_listener(&ep, sock, addr)) != 0) { @@ -447,7 +451,9 @@ nng_listen(nng_socket sid, const char *addr, nng_listener *lp, int flags) } if (lp != NULL) { - *lp = nni_ep_id(ep); + nng_listener l; + l.id = nni_ep_id(ep); + *lp = l; } nni_ep_rele(ep); nni_sock_rele(sock); @@ -455,32 +461,34 @@ nng_listen(nng_socket sid, const char *addr, nng_listener *lp, int flags) } int -nng_listener_create(nng_listener *lp, nng_socket sid, const char *addr) +nng_listener_create(nng_listener *lp, nng_socket s, const char *addr) { - nni_sock *s; - nni_ep * ep; - int rv; + nni_sock * sock; + nni_ep * ep; + int rv; + nng_listener l; - if ((rv = nni_sock_find(&s, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } - if ((rv = nni_ep_create_listener(&ep, s, addr)) != 0) { - nni_sock_rele(s); + if ((rv = nni_ep_create_listener(&ep, sock, addr)) != 0) { + nni_sock_rele(sock); return (rv); } - *lp = nni_ep_id(ep); + l.id = nni_ep_id(ep); + *lp = l; nni_ep_rele(ep); - nni_sock_rele(s); + nni_sock_rele(sock); return (0); } int -nng_listener_start(nng_listener id, int flags) +nng_listener_start(nng_listener l, int flags) { nni_ep *ep; int rv; - if ((rv = nni_ep_find(&ep, id)) != 0) { + if ((rv = nni_ep_find(&ep, l.id)) != 0) { return (rv); } rv = nni_ep_listen(ep, flags); @@ -489,32 +497,34 @@ nng_listener_start(nng_listener id, int flags) } int -nng_dialer_create(nng_dialer *dp, nng_socket sid, const char *addr) +nng_dialer_create(nng_dialer *dp, nng_socket s, const char *addr) { - nni_sock *s; - nni_ep * ep; - int rv; + nni_sock * sock; + nni_ep * ep; + int rv; + nng_dialer d; - if ((rv = nni_sock_find(&s, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } - if ((rv = nni_ep_create_dialer(&ep, s, addr)) != 0) { - nni_sock_rele(s); + if ((rv = nni_ep_create_dialer(&ep, sock, addr)) != 0) { + nni_sock_rele(sock); return (rv); } - *dp = nni_ep_id(ep); + d.id = nni_ep_id(ep); + *dp = d; nni_ep_rele(ep); - nni_sock_rele(s); + nni_sock_rele(sock); return (0); } int -nng_dialer_start(nng_dialer id, int flags) +nng_dialer_start(nng_dialer d, int flags) { nni_ep *ep; int rv; - if ((rv = nni_ep_find(&ep, id)) != 0) { + if ((rv = nni_ep_find(&ep, d.id)) != 0) { return (rv); } rv = nni_ep_dial(ep, flags); @@ -566,251 +576,250 @@ nng_ep_getx(uint32_t id, const char *n, void *v, size_t *szp, int mode, int t) } static int -nng_dialer_setx(nng_dialer id, const char *nm, const void *v, size_t sz, int t) +nng_dialer_setx(nng_dialer d, const char *nm, const void *v, size_t sz, int t) { - return (nng_ep_setx(id, nm, v, sz, NNI_EP_MODE_DIAL, t)); + return (nng_ep_setx(d.id, nm, v, sz, NNI_EP_MODE_DIAL, t)); } int -nng_dialer_setopt(nng_dialer id, const char *name, const void *v, size_t sz) +nng_dialer_setopt(nng_dialer d, const char *name, const void *v, size_t sz) { - return (nng_dialer_setx(id, name, v, sz, NNI_TYPE_OPAQUE)); + return (nng_dialer_setx(d, name, v, sz, NNI_TYPE_OPAQUE)); } int -nng_dialer_setopt_bool(nng_dialer id, const char *name, bool v) +nng_dialer_setopt_bool(nng_dialer d, const char *name, bool v) { - return (nng_dialer_setx(id, name, &v, sizeof(v), NNI_TYPE_BOOL)); + return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_BOOL)); } int -nng_dialer_setopt_int(nng_dialer id, const char *name, int v) +nng_dialer_setopt_int(nng_dialer d, const char *name, int v) { - return (nng_dialer_setx(id, name, &v, sizeof(v), NNI_TYPE_INT32)); + return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_INT32)); } int -nng_dialer_setopt_size(nng_dialer id, const char *name, size_t v) +nng_dialer_setopt_size(nng_dialer d, const char *name, size_t v) { - return (nng_dialer_setx(id, name, &v, sizeof(v), NNI_TYPE_SIZE)); + return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_SIZE)); } int -nng_dialer_setopt_ms(nng_dialer id, const char *name, nng_duration v) +nng_dialer_setopt_ms(nng_dialer d, const char *name, nng_duration v) { - return (nng_dialer_setx(id, name, &v, sizeof(v), NNI_TYPE_DURATION)); + return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_DURATION)); } int -nng_dialer_setopt_uint64(nng_dialer id, const char *name, uint64_t v) +nng_dialer_setopt_uint64(nng_dialer d, const char *name, uint64_t v) { - return (nng_dialer_setx(id, name, &v, sizeof(v), NNI_TYPE_UINT64)); + return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_UINT64)); } int -nng_dialer_setopt_ptr(nng_dialer id, const char *name, void *v) +nng_dialer_setopt_ptr(nng_dialer d, const char *name, void *v) { - return (nng_dialer_setx(id, name, &v, sizeof(v), NNI_TYPE_POINTER)); + return (nng_dialer_setx(d, name, &v, sizeof(v), NNI_TYPE_POINTER)); } int -nng_dialer_setopt_string(nng_dialer id, const char *name, const char *v) +nng_dialer_setopt_string(nng_dialer d, const char *name, const char *v) { - return (nng_dialer_setx(id, name, v, strlen(v) + 1, NNI_TYPE_STRING)); + return (nng_dialer_setx(d, name, v, strlen(v) + 1, NNI_TYPE_STRING)); } static int -nng_dialer_getx(nng_dialer id, const char *n, void *v, size_t *szp, int t) +nng_dialer_getx(nng_dialer d, const char *n, void *v, size_t *szp, int t) { - return (nng_ep_getx(id, n, v, szp, NNI_EP_MODE_DIAL, t)); + return (nng_ep_getx(d.id, n, v, szp, NNI_EP_MODE_DIAL, t)); } int -nng_dialer_getopt(nng_dialer id, const char *name, void *val, size_t *szp) +nng_dialer_getopt(nng_dialer d, const char *name, void *val, size_t *szp) { - return (nng_dialer_getx(id, name, val, szp, NNI_TYPE_OPAQUE)); + return (nng_dialer_getx(d, name, val, szp, NNI_TYPE_OPAQUE)); } int -nng_dialer_getopt_bool(nng_dialer id, const char *name, bool *vp) +nng_dialer_getopt_bool(nng_dialer d, const char *name, bool *vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_BOOL)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_BOOL)); } int -nng_dialer_getopt_int(nng_dialer id, const char *name, int *vp) +nng_dialer_getopt_int(nng_dialer d, const char *name, int *vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_INT32)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_INT32)); } int -nng_dialer_getopt_size(nng_dialer id, const char *name, size_t *vp) +nng_dialer_getopt_size(nng_dialer d, const char *name, size_t *vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_SIZE)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_SIZE)); } int -nng_dialer_getopt_sockaddr(nng_dialer id, const char *name, nng_sockaddr *vp) +nng_dialer_getopt_sockaddr(nng_dialer d, const char *name, nng_sockaddr *vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_SOCKADDR)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_SOCKADDR)); } int -nng_dialer_getopt_uint64(nng_dialer id, const char *name, uint64_t *vp) +nng_dialer_getopt_uint64(nng_dialer d, const char *name, uint64_t *vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_UINT64)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_UINT64)); } int -nng_dialer_getopt_ptr(nng_dialer id, const char *name, void **vp) +nng_dialer_getopt_ptr(nng_dialer d, const char *name, void **vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_POINTER)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_POINTER)); } int -nng_dialer_getopt_string(nng_dialer id, const char *name, char **vp) +nng_dialer_getopt_string(nng_dialer d, const char *name, char **vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_STRING)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_STRING)); } int -nng_dialer_getopt_ms(nng_dialer id, const char *name, nng_duration *vp) +nng_dialer_getopt_ms(nng_dialer d, const char *name, nng_duration *vp) { size_t sz = sizeof(*vp); - return (nng_dialer_getx(id, name, vp, &sz, NNI_TYPE_DURATION)); + return (nng_dialer_getx(d, name, vp, &sz, NNI_TYPE_DURATION)); } int nng_listener_setx( - nng_listener id, const char *name, const void *v, size_t sz, int t) + nng_listener l, const char *name, const void *v, size_t sz, int t) { - return (nng_ep_setx(id, name, v, sz, NNI_EP_MODE_LISTEN, t)); + return (nng_ep_setx(l.id, name, v, sz, NNI_EP_MODE_LISTEN, t)); } int -nng_listener_setopt( - nng_listener id, const char *name, const void *v, size_t sz) +nng_listener_setopt(nng_listener l, const char *name, const void *v, size_t sz) { - return (nng_listener_setx(id, name, v, sz, NNI_TYPE_OPAQUE)); + return (nng_listener_setx(l, name, v, sz, NNI_TYPE_OPAQUE)); } int -nng_listener_setopt_bool(nng_listener id, const char *name, bool v) +nng_listener_setopt_bool(nng_listener l, const char *name, bool v) { - return (nng_listener_setx(id, name, &v, sizeof(v), NNI_TYPE_BOOL)); + return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_BOOL)); } int -nng_listener_setopt_int(nng_listener id, const char *name, int v) +nng_listener_setopt_int(nng_listener l, const char *name, int v) { - return (nng_listener_setx(id, name, &v, sizeof(v), NNI_TYPE_INT32)); + return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_INT32)); } int -nng_listener_setopt_size(nng_listener id, const char *name, size_t v) +nng_listener_setopt_size(nng_listener l, const char *name, size_t v) { - return (nng_listener_setx(id, name, &v, sizeof(v), NNI_TYPE_SIZE)); + return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_SIZE)); } int -nng_listener_setopt_ms(nng_listener id, const char *name, nng_duration v) +nng_listener_setopt_ms(nng_listener l, const char *name, nng_duration v) { - return (nng_listener_setx(id, name, &v, sizeof(v), NNI_TYPE_DURATION)); + return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_DURATION)); } int -nng_listener_setopt_uint64(nng_listener id, const char *name, uint64_t v) +nng_listener_setopt_uint64(nng_listener l, const char *name, uint64_t v) { - return (nng_listener_setx(id, name, &v, sizeof(v), NNI_TYPE_UINT64)); + return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_UINT64)); } int -nng_listener_setopt_ptr(nng_listener id, const char *name, void *v) +nng_listener_setopt_ptr(nng_listener l, const char *name, void *v) { - return (nng_listener_setx(id, name, &v, sizeof(v), NNI_TYPE_POINTER)); + return (nng_listener_setx(l, name, &v, sizeof(v), NNI_TYPE_POINTER)); } int -nng_listener_setopt_string(nng_listener id, const char *n, const char *v) +nng_listener_setopt_string(nng_listener l, const char *n, const char *v) { - return (nng_listener_setx(id, n, v, strlen(v) + 1, NNI_TYPE_STRING)); + return (nng_listener_setx(l, n, v, strlen(v) + 1, NNI_TYPE_STRING)); } int nng_listener_getx( - nng_listener id, const char *name, void *v, size_t *szp, int t) + nng_listener l, const char *name, void *v, size_t *szp, int t) { - return (nng_ep_getx(id, name, v, szp, NNI_EP_MODE_LISTEN, t)); + return (nng_ep_getx(l.id, name, v, szp, NNI_EP_MODE_LISTEN, t)); } int -nng_listener_getopt(nng_listener id, const char *name, void *v, size_t *szp) +nng_listener_getopt(nng_listener l, const char *name, void *v, size_t *szp) { - return (nng_listener_getx(id, name, v, szp, NNI_TYPE_OPAQUE)); + return (nng_listener_getx(l, name, v, szp, NNI_TYPE_OPAQUE)); } int -nng_listener_getopt_bool(nng_listener id, const char *name, bool *vp) +nng_listener_getopt_bool(nng_listener l, const char *name, bool *vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_BOOL)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_BOOL)); } int -nng_listener_getopt_int(nng_listener id, const char *name, int *vp) +nng_listener_getopt_int(nng_listener l, const char *name, int *vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_INT32)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_INT32)); } int -nng_listener_getopt_size(nng_listener id, const char *name, size_t *vp) +nng_listener_getopt_size(nng_listener l, const char *name, size_t *vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_SIZE)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_SIZE)); } int nng_listener_getopt_sockaddr( - nng_listener id, const char *name, nng_sockaddr *vp) + nng_listener l, const char *name, nng_sockaddr *vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_SOCKADDR)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_SOCKADDR)); } int -nng_listener_getopt_uint64(nng_listener id, const char *name, uint64_t *vp) +nng_listener_getopt_uint64(nng_listener l, const char *name, uint64_t *vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_UINT64)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_UINT64)); } int -nng_listener_getopt_ptr(nng_listener id, const char *name, void **vp) +nng_listener_getopt_ptr(nng_listener l, const char *name, void **vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_POINTER)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_POINTER)); } int -nng_listener_getopt_string(nng_listener id, const char *name, char **vp) +nng_listener_getopt_string(nng_listener l, const char *name, char **vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_STRING)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_STRING)); } int -nng_listener_getopt_ms(nng_listener id, const char *name, nng_duration *vp) +nng_listener_getopt_ms(nng_listener l, const char *name, nng_duration *vp) { size_t sz = sizeof(*vp); - return (nng_listener_getx(id, name, vp, &sz, NNI_TYPE_DURATION)); + return (nng_listener_getx(l, name, vp, &sz, NNI_TYPE_DURATION)); } static int @@ -834,17 +843,17 @@ nng_ep_close(uint32_t id, int mode) int nng_dialer_close(nng_dialer d) { - return (nng_ep_close((uint32_t) d, NNI_EP_MODE_DIAL)); + return (nng_ep_close(d.id, NNI_EP_MODE_DIAL)); } int nng_listener_close(nng_listener l) { - return (nng_ep_close((uint32_t) l, NNI_EP_MODE_LISTEN)); + return (nng_ep_close(l.id, NNI_EP_MODE_LISTEN)); } static int -nng_setx(nng_socket sid, const char *name, const void *val, size_t sz, int t) +nng_setx(nng_socket s, const char *name, const void *val, size_t sz, int t) { nni_sock *sock; int rv; @@ -852,7 +861,7 @@ nng_setx(nng_socket sid, const char *name, const void *val, size_t sz, int t) if ((rv = nni_init()) != 0) { return (rv); } - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } rv = nni_sock_setopt(sock, name, val, sz, t); @@ -861,13 +870,13 @@ nng_setx(nng_socket sid, const char *name, const void *val, size_t sz, int t) } int -nng_setopt(nng_socket sid, const char *name, const void *val, size_t sz) +nng_setopt(nng_socket s, const char *name, const void *val, size_t sz) { - return (nng_setx(sid, name, val, sz, NNI_TYPE_OPAQUE)); + return (nng_setx(s, name, val, sz, NNI_TYPE_OPAQUE)); } static int -nng_getx(nng_socket sid, const char *name, void *val, size_t *szp, int t) +nng_getx(nng_socket s, const char *name, void *val, size_t *szp, int t) { nni_sock *sock; int rv; @@ -875,7 +884,7 @@ nng_getx(nng_socket sid, const char *name, void *val, size_t *szp, int t) if ((rv = nni_init()) != 0) { return (rv); } - if ((rv = nni_sock_find(&sock, sid)) != 0) { + if ((rv = nni_sock_find(&sock, s.id)) != 0) { return (rv); } rv = nni_sock_getopt(sock, name, val, szp, t); @@ -884,101 +893,101 @@ nng_getx(nng_socket sid, const char *name, void *val, size_t *szp, int t) } int -nng_getopt(nng_socket sid, const char *name, void *val, size_t *szp) +nng_getopt(nng_socket s, const char *name, void *val, size_t *szp) { - return (nng_getx(sid, name, val, szp, NNI_TYPE_OPAQUE)); + return (nng_getx(s, name, val, szp, NNI_TYPE_OPAQUE)); } // Convenience option wrappers. int -nng_setopt_int(nng_socket sid, const char *name, int val) +nng_setopt_int(nng_socket s, const char *name, int val) { - return (nng_setx(sid, name, &val, sizeof(val), NNI_TYPE_INT32)); + return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_INT32)); } int -nng_setopt_bool(nng_socket sid, const char *name, bool val) +nng_setopt_bool(nng_socket s, const char *name, bool val) { - return (nng_setx(sid, name, &val, sizeof(val), NNI_TYPE_BOOL)); + return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_BOOL)); } int -nng_setopt_size(nng_socket sid, const char *name, size_t val) +nng_setopt_size(nng_socket s, const char *name, size_t val) { - return (nng_setx(sid, name, &val, sizeof(val), NNI_TYPE_SIZE)); + return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_SIZE)); } int -nng_setopt_ms(nng_socket sid, const char *name, nng_duration val) +nng_setopt_ms(nng_socket s, const char *name, nng_duration val) { - return (nng_setx(sid, name, &val, sizeof(val), NNI_TYPE_DURATION)); + return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_DURATION)); } int -nng_setopt_uint64(nng_socket sid, const char *name, uint64_t val) +nng_setopt_uint64(nng_socket s, const char *name, uint64_t val) { - return (nng_setx(sid, name, &val, sizeof(val), NNI_TYPE_UINT64)); + return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_UINT64)); } int -nng_setopt_ptr(nng_socket sid, const char *name, void *val) +nng_setopt_ptr(nng_socket s, const char *name, void *val) { - return (nng_setx(sid, name, &val, sizeof(val), NNI_TYPE_POINTER)); + return (nng_setx(s, name, &val, sizeof(val), NNI_TYPE_POINTER)); } int -nng_setopt_string(nng_socket sid, const char *name, const char *val) +nng_setopt_string(nng_socket s, const char *name, const char *val) { - return (nng_setx(sid, name, val, strlen(val) + 1, NNI_TYPE_STRING)); + return (nng_setx(s, name, val, strlen(val) + 1, NNI_TYPE_STRING)); } int -nng_getopt_bool(nng_socket sid, const char *name, bool *valp) +nng_getopt_bool(nng_socket s, const char *name, bool *valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_BOOL)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_BOOL)); } int -nng_getopt_int(nng_socket sid, const char *name, int *valp) +nng_getopt_int(nng_socket s, const char *name, int *valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_INT32)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_INT32)); } int -nng_getopt_size(nng_socket sid, const char *name, size_t *valp) +nng_getopt_size(nng_socket s, const char *name, size_t *valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_SIZE)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_SIZE)); } int -nng_getopt_uint64(nng_socket sid, const char *name, uint64_t *valp) +nng_getopt_uint64(nng_socket s, const char *name, uint64_t *valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_UINT64)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_UINT64)); } int -nng_getopt_ms(nng_socket sid, const char *name, nng_duration *valp) +nng_getopt_ms(nng_socket s, const char *name, nng_duration *valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_DURATION)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_DURATION)); } int -nng_getopt_ptr(nng_socket sid, const char *name, void **valp) +nng_getopt_ptr(nng_socket s, const char *name, void **valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_DURATION)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_DURATION)); } int -nng_getopt_string(nng_socket sid, const char *name, char **valp) +nng_getopt_string(nng_socket s, const char *name, char **valp) { size_t sz = sizeof(*valp); - return (nng_getx(sid, name, valp, &sz, NNI_TYPE_STRING)); + return (nng_getx(s, name, valp, &sz, NNI_TYPE_STRING)); } int @@ -988,13 +997,13 @@ nng_device(nng_socket s1, nng_socket s2) nni_sock *sock1 = NULL; nni_sock *sock2 = NULL; - if ((s1 > 0) && (s1 != (nng_socket) -1)) { - if ((rv = nni_sock_find(&sock1, s1)) != 0) { + if ((s1.id > 0) && (s1.id != (uint32_t) -1)) { + if ((rv = nni_sock_find(&sock1, s1.id)) != 0) { return (rv); } } - if (((s2 > 0) && (s2 != (nng_socket) -1)) && (s2 != s1)) { - if ((rv = nni_sock_find(&sock2, s2)) != 0) { + if (((s2.id > 0) && (s2.id != (uint32_t) -1)) && (s2.id != s1.id)) { + if ((rv = nni_sock_find(&sock2, s2.id)) != 0) { nni_sock_rele(sock1); return (rv); } @@ -1079,7 +1088,7 @@ nng_strerror(int num) } static int -nng_pipe_getopt_x(nng_pipe id, const char *name, void *val, size_t *szp, int t) +nng_pipe_getx(nng_pipe id, const char *name, void *val, size_t *szp, int t) { int rv; nni_pipe *p; @@ -1087,7 +1096,7 @@ nng_pipe_getopt_x(nng_pipe id, const char *name, void *val, size_t *szp, int t) if ((rv = nni_init()) < 0) { return (rv); } - if ((rv = nni_pipe_find(&p, id)) != 0) { + if ((rv = nni_pipe_find(&p, id.id)) != 0) { return (rv); } rv = nni_pipe_getopt(p, name, val, szp, t); @@ -1096,74 +1105,74 @@ nng_pipe_getopt_x(nng_pipe id, const char *name, void *val, size_t *szp, int t) } int -nng_pipe_getopt(nng_pipe id, const char *name, void *val, size_t *szp) +nng_pipe_getopt(nng_pipe p, const char *name, void *val, size_t *szp) { - return (nng_pipe_getopt_x(id, name, val, szp, NNI_TYPE_OPAQUE)); + return (nng_pipe_getx(p, name, val, szp, NNI_TYPE_OPAQUE)); } int -nng_pipe_getopt_bool(nng_pipe id, const char *name, bool *valp) +nng_pipe_getopt_bool(nng_pipe p, const char *name, bool *valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_BOOL)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_BOOL)); } int -nng_pipe_getopt_int(nng_pipe id, const char *name, int *valp) +nng_pipe_getopt_int(nng_pipe p, const char *name, int *valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_INT32)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_INT32)); } int -nng_pipe_getopt_size(nng_pipe id, const char *name, size_t *valp) +nng_pipe_getopt_size(nng_pipe p, const char *name, size_t *valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_SIZE)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_SIZE)); } int -nng_pipe_getopt_uint64(nng_pipe id, const char *name, uint64_t *valp) +nng_pipe_getopt_uint64(nng_pipe p, const char *name, uint64_t *valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_UINT64)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_UINT64)); } int -nng_pipe_getopt_ms(nng_pipe id, const char *name, nng_duration *valp) +nng_pipe_getopt_ms(nng_pipe p, const char *name, nng_duration *valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_DURATION)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_DURATION)); } int -nng_pipe_getopt_ptr(nng_pipe id, const char *name, void **valp) +nng_pipe_getopt_ptr(nng_pipe p, const char *name, void **valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_POINTER)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_POINTER)); } int -nng_pipe_getopt_sockaddr(nng_pipe id, const char *name, nng_sockaddr *sap) +nng_pipe_getopt_sockaddr(nng_pipe p, const char *name, nng_sockaddr *sap) { size_t sz = sizeof(*sap); - return (nng_pipe_getopt_x(id, name, sap, &sz, NNI_TYPE_SOCKADDR)); + return (nng_pipe_getx(p, name, sap, &sz, NNI_TYPE_SOCKADDR)); } int -nng_pipe_getopt_string(nng_pipe id, const char *name, char **valp) +nng_pipe_getopt_string(nng_pipe p, const char *name, char **valp) { size_t sz = sizeof(*valp); - return (nng_pipe_getopt_x(id, name, valp, &sz, NNI_TYPE_STRING)); + return (nng_pipe_getx(p, name, valp, &sz, NNI_TYPE_STRING)); } int -nng_pipe_close(nng_pipe id) +nng_pipe_close(nng_pipe pid) { int rv; nni_pipe *p; - if ((rv = nni_pipe_find(&p, id)) != 0) { + if ((rv = nni_pipe_find(&p, pid.id)) != 0) { return (rv); } nni_pipe_close(p); @@ -1347,13 +1356,15 @@ nng_msg_dup(nng_msg **dup, const nng_msg *src) nng_pipe nng_msg_get_pipe(const nng_msg *msg) { - return (nni_msg_get_pipe(msg)); + nng_pipe p; + p.id = nni_msg_get_pipe(msg); + return (p); } void nng_msg_set_pipe(nng_msg *msg, nng_pipe p) { - nni_msg_set_pipe(msg, p); + nni_msg_set_pipe(msg, p.id); } int @@ -59,11 +59,33 @@ extern "C" { #define NNG_MAXADDRLEN (128) // Types common to nng. -typedef uint32_t nng_socket; -typedef uint32_t nng_ctx; -typedef uint32_t nng_dialer; -typedef uint32_t nng_listener; -typedef uint32_t nng_pipe; + +// Identifiers are wrapped in a structure to improve compiler validation +// of incorrect passing. This gives us strong type checking. Modern +// compilers compile passing these by value to identical code as passing +// the integer type (at least with optimization applied). Please do not +// access the ID member directly. + +typedef struct nng_ctx_s { + uint32_t id; +} nng_ctx; + +typedef struct nng_dialer_s { + uint32_t id; +} nng_dialer; + +typedef struct nng_listener_s { + uint32_t id; +} nng_listener; + +typedef struct nng_pipe_s { + uint32_t id; +} nng_pipe; + +typedef struct nng_socket_s { + uint32_t id; +} nng_socket; + typedef int32_t nng_duration; // in milliseconds typedef struct nng_msg nng_msg; typedef struct nng_snapshot nng_snapshot; diff --git a/tests/bufsz.c b/tests/bufsz.c index 4686a4e5..b7128ed4 100644 --- a/tests/bufsz.c +++ b/tests/bufsz.c @@ -61,7 +61,7 @@ TestMain("Buffer Options", { // MUST NOT assume this. We only do so for testing. Convey("Legacy Recv Buf Option", { int cnt; - int os = (int) s1; + int os = (int) s1.id; size_t sz = sizeof(cnt); So(nng_setopt_int(s1, NNG_OPT_RECVBUF, 10) == 0); So(nn_getsockopt( @@ -82,7 +82,7 @@ TestMain("Buffer Options", { }); Convey("Legacy Send Buf Option", { int cnt; - int os = (int) s1; + int os = (int) s1.id; size_t sz = sizeof(cnt); So(nng_setopt_int(s1, NNG_OPT_SENDBUF, 10) == 0); So(nn_getsockopt( diff --git a/tests/message.c b/tests/message.c index 2dfa67fb..bf212b48 100644 --- a/tests/message.c +++ b/tests/message.c @@ -1,6 +1,6 @@ // -// Copyright 2017 Garrett D'Amore <garrett@damore.org> -// Copyright 2017 Capitar IT Group BV <info@capitar.com> +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -113,9 +113,13 @@ TestMain("Message Tests", { }); Convey("Pipe retrievals work", { - So(nng_msg_get_pipe(msg) == 0); - nng_msg_set_pipe(msg, (nng_pipe) 45); - So(nng_msg_get_pipe(msg) == (nng_pipe) 45); + nng_pipe p; + p = nng_msg_get_pipe(msg); + So(p.id == 0); + p.id = 45; + nng_msg_set_pipe(msg, p); + p = nng_msg_get_pipe(msg); + So(p.id == 45); }); Convey("Message realloc works", { diff --git a/tests/multistress.c b/tests/multistress.c index 0a98d5fc..1ae6f323 100644 --- a/tests/multistress.c +++ b/tests/multistress.c @@ -150,7 +150,7 @@ req_client(void *arg) nng_msg * msg; char buf[32]; - (void) snprintf(buf, sizeof(buf), "%d-%d", req, num++); + (void) snprintf(buf, sizeof(buf), "%u-%d", req.id, num++); nng_msleep(rand() % 10); @@ -212,8 +212,8 @@ reqrep_test(int ntests) cli->name = "req"; getaddr(addr); - dprintf("DOING reqrep0 (req %d rep %d) address: %s\n", - cli->socket, srv->socket, addr); + dprintf("DOING reqrep0 (req %u rep %u) address: %s\n", + cli->socket.id, srv->socket.id, addr); if ((rv = nng_listen(srv->socket, addr, NULL, 0)) != 0) { fatal("nng_listen", rv); @@ -296,8 +296,8 @@ pair0_test(void) } getaddr(addr); - dprintf("DOING pair0 (%d, %d) address: %s\n", cli->socket, srv->socket, - addr); + dprintf("DOING pair0 (%u, %u) address: %s\n", cli->socket.id, + srv->socket.id, addr); if ((rv = nng_listen(srv->socket, addr, NULL, 0)) != 0) { fatal("nng_listen", rv); @@ -375,8 +375,8 @@ bus_test(void) } getaddr(addr); - dprintf("DOING bus0 (%d, %d) address: %s\n", cli->socket, srv->socket, - addr); + dprintf("DOING bus0 (%u, %u) address: %s\n", cli->socket.id, + srv->socket.id, addr); if ((rv = nng_listen(srv->socket, addr, NULL, 0)) != 0) { fatal("nng_listen", rv); @@ -468,8 +468,8 @@ pubsub_test(int ntests) cli->name = "sub"; getaddr(addr); - dprintf("DOING pubsub0 (pub %d sub %d) address: %s\n", - cli->socket, srv->socket, addr); + dprintf("DOING pubsub0 (pub %u sub %u) address: %s\n", + cli->socket.id, srv->socket.id, addr); if ((rv = nng_listen(srv->socket, addr, NULL, 0)) != 0) { fatal("nng_listen", rv); @@ -563,8 +563,8 @@ pipeline0_test(int ntests) cli->name = "pull"; getaddr(addr); - dprintf("DOING pipeline0 (pull %d push %d) address: %s\n", - cli->socket, srv->socket, addr); + dprintf("DOING pipeline0 (pull %u push %u) address: %s\n", + cli->socket.id, srv->socket.id, addr); if ((rv = nng_listen(srv->socket, addr, NULL, 0)) != 0) { fatal("nng_listen", rv); @@ -637,10 +637,10 @@ Main({ if (cases[i].thr != NULL) { nng_thread_destroy(cases[i].thr); dprintf( - "RESULT socket %d (%s) sent %d " + "RESULT socket %u (%s) sent %d " "recd " "%d fail %d\n", - cases[i].socket, cases[i].name, + cases[i].socket.id, cases[i].name, cases[i].nsend, cases[i].nrecv, cases[i].nfail); So(cases[i].nfail == 0); diff --git a/tests/pair1.c b/tests/pair1.c index ef3fe263..8a27bc6e 100644 --- a/tests/pair1.c +++ b/tests/pair1.c @@ -28,13 +28,14 @@ TestMain("PAIRv1 protocol", { const char * templ = "inproc://pairv1/%u"; char addr[NNG_MAXADDRLEN + 1]; - nng_socket s1 = 0; - nng_socket c1 = 0; - nng_socket c2 = 0; + nng_socket s1; + nng_socket c1; + nng_socket c2; nng_duration tmo; uint32_t v; size_t sz; + s1.id = c1.id = c2.id = 0; atexit(nng_fini); Convey("Given a few sockets", { @@ -210,7 +211,7 @@ TestMain("PAIRv1 protocol", { So(nng_recvmsg(s1, &msg, 0) == 0); CHECKSTR(msg, "ONE"); p1 = nng_msg_get_pipe(msg); - So(p1 != 0); + So(p1.id != 0); nng_msg_free(msg); So(nng_msg_alloc(&msg, 0) == 0); @@ -219,10 +220,10 @@ TestMain("PAIRv1 protocol", { So(nng_recvmsg(s1, &msg, 0) == 0); CHECKSTR(msg, "TWO"); p2 = nng_msg_get_pipe(msg); - So(p2 != 0); + So(p2.id != 0); nng_msg_free(msg); - So(p1 != p2); + So(p1.id != p2.id); So(nng_msg_alloc(&msg, 0) == 0); @@ -307,13 +308,15 @@ TestMain("PAIRv1 protocol", { nng_msleep(20); Convey("Send/recv work", { + nng_pipe p; So(nng_msg_alloc(&msg, 0) == 0); APPENDSTR(msg, "GAMMA"); So(nng_msg_header_append_u32(msg, 1) == 0); So(nng_msg_header_len(msg) == sizeof(uint32_t)); So(nng_sendmsg(c1, msg, 0) == 0); So(nng_recvmsg(s1, &msg, 0) == 0); - So(nng_msg_get_pipe(msg) != 0); + p = nng_msg_get_pipe(msg); + So(p.id != 0); CHECKSTR(msg, "GAMMA"); So(nng_msg_header_len(msg) == sizeof(uint32_t)); So(nng_msg_header_trim_u32(msg, &hops) == 0); @@ -328,7 +331,8 @@ TestMain("PAIRv1 protocol", { CHECKSTR(msg, "EPSILON"); So(nng_msg_header_len(msg) == sizeof(uint32_t)); So(nng_msg_header_trim_u32(msg, &hops) == 0); - So(nng_msg_get_pipe(msg) != 0); + p = nng_msg_get_pipe(msg); + So(p.id != 0); So(hops == 2); nng_msg_free(msg); }); @@ -470,7 +474,7 @@ TestMain("PAIRv1 protocol", { So(nng_recvmsg(s1, &msg, 0) == 0); CHECKSTR(msg, "ONE"); p1 = nng_msg_get_pipe(msg); - So(p1 != 0); + So(p1.id != 0); So(nng_msg_header_trim_u32(msg, &hops) == 0); So(hops == 1); nng_msg_free(msg); @@ -481,12 +485,12 @@ TestMain("PAIRv1 protocol", { So(nng_recvmsg(s1, &msg, 0) == 0); CHECKSTR(msg, "TWO"); p2 = nng_msg_get_pipe(msg); - So(p2 != 0); + So(p2.id != 0); So(nng_msg_header_trim_u32(msg, &hops) == 0); So(hops == 1); nng_msg_free(msg); - So(p1 != p2); + So(p1.id != p2.id); So(nng_msg_alloc(&msg, 0) == 0); nng_msg_set_pipe(msg, p1); @@ -514,7 +518,7 @@ TestMain("PAIRv1 protocol", { So(nng_recvmsg(s1, &msg, 0) == 0); CHECKSTR(msg, "ONE"); p1 = nng_msg_get_pipe(msg); - So(p1 != 0); + So(p1.id != 0); nng_msg_free(msg); nng_close(c1); diff --git a/tests/reconnect.c b/tests/reconnect.c index 6e7ab79f..4cd6cb3a 100644 --- a/tests/reconnect.c +++ b/tests/reconnect.c @@ -96,7 +96,7 @@ TestMain("Reconnect works", { CHECKSTR(msg, "again"); p2 = nng_msg_get_pipe(msg); nng_msg_free(msg); - So(p2 != p1); + So(p2.id != p1.id); }); }); }); diff --git a/tests/reqstress.c b/tests/reqstress.c index 04cf73ab..3f1e7396 100644 --- a/tests/reqstress.c +++ b/tests/reqstress.c @@ -146,7 +146,7 @@ req_client(void *arg) nng_msg * msg; char buf[32]; - (void) snprintf(buf, sizeof(buf), "%d-%d", req, num++); + (void) snprintf(buf, sizeof(buf), "%u-%d", req.id, num++); nng_msleep(rand() % 10); @@ -208,8 +208,8 @@ reqrep_test(int ntests) cli->name = "req"; getaddr(addr); - dprintf("DOING reqrep0 (req %d rep %d) address: %s\n", - cli->socket, srv->socket, addr); + dprintf("DOING reqrep0 (req %u rep %u) address: %s\n", + cli->socket.id, srv->socket.id, addr); if ((rv = nng_listen(srv->socket, addr, NULL, 0)) != 0) { fatal("nng_listen", rv); @@ -261,10 +261,10 @@ Main({ if (cases[i].thr != NULL) { nng_thread_destroy(cases[i].thr); dprintf( - "RESULT socket %d (%s) sent %d " + "RESULT socket %u (%s) sent %d " "recd " "%d fail %d\n", - cases[i].socket, cases[i].name, + cases[i].socket.id, cases[i].name, cases[i].nsend, cases[i].nrecv, cases[i].nfail); So(cases[i].nfail == 0); diff --git a/tests/sock.c b/tests/sock.c index 17ea055d..d6e36235 100644 --- a/tests/sock.c +++ b/tests/sock.c @@ -99,7 +99,7 @@ TestMain("Socket Operations", { s1, NNG_OPT_SOCKNAME, name, &sz) == 0); So(sz > 0 && sz < 64); So(sz == nni_strnlen(name, 64) + 1); - So(atoi(name) == (int) s1); + So(atoi(name) == (int) s1.id); So(nng_setopt( s1, NNG_OPT_SOCKNAME, "hello", 6) == 0); @@ -336,7 +336,7 @@ TestMain("Socket Operations", { nng_listener l; rv = nng_listen(s1, a, &l, 0); So(rv == 0); - So(l != 0); + So(l.id != 0); Convey("Second listen fails ADDRINUSE", { rv = nng_listen(s1, a, NULL, 0); @@ -369,10 +369,12 @@ TestMain("Socket Operations", { }); Convey("Cannot access as listener", { - bool b; + bool b; + nng_listener l; + l.id = ep.id; So(nng_listener_getopt_bool( - ep, NNG_OPT_RAW, &b) == NNG_ENOENT); - So(nng_listener_close(ep) == NNG_ENOENT); + l, NNG_OPT_RAW, &b) == NNG_ENOENT); + So(nng_listener_close(l) == NNG_ENOENT); }); Convey("Socket opts not for dialer", { @@ -395,8 +397,11 @@ TestMain("Socket Operations", { So(nng_dialer_setopt(ep, NNG_OPT_RECVMAXSZ, "a", 1) == NNG_EINVAL); }); - Convey("Cannot listen", - { So(nng_listener_start(ep, 0) == NNG_ENOTSUP); }); + Convey("Cannot listen", { + nng_listener l; + l.id = ep.id; + So(nng_listener_start(l, 0) == NNG_ENOTSUP); + }); }); @@ -413,10 +418,12 @@ TestMain("Socket Operations", { So(sz == 4321); }); Convey("Cannot access as dialer", { - bool b; + bool b; + nng_dialer d; + d.id = ep.id; So(nng_dialer_getopt_bool( - ep, NNG_OPT_RAW, &b) == NNG_ENOENT); - So(nng_dialer_close(ep) == NNG_ENOENT); + d, NNG_OPT_RAW, &b) == NNG_ENOENT); + So(nng_dialer_close(d) == NNG_ENOENT); }); Convey("Socket opts not for listener", { @@ -440,8 +447,11 @@ TestMain("Socket Operations", { So(nng_listener_setopt(ep, NNG_OPT_RECVMAXSZ, "a", 1) == NNG_EINVAL); }); - Convey("Cannot dial", - { So(nng_dialer_start(ep, 0) == NNG_ENOTSUP); }); + Convey("Cannot dial", { + nng_dialer d; + d.id = ep.id; + So(nng_dialer_start(d, 0) == NNG_ENOTSUP); + }); }); Convey("Cannot access absent ep options", { @@ -449,32 +459,36 @@ TestMain("Socket Operations", { int i; nng_duration t; bool b; + nng_dialer d; + nng_listener l; + d.id = 1999; + l.id = 1999; - So(nng_dialer_setopt_size( - 1999, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT); + So(nng_dialer_setopt_size(d, NNG_OPT_RECVMAXSZ, 10) == + NNG_ENOENT); So(nng_listener_setopt_size( - 1999, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT); + l, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT); s = 1; - So(nng_dialer_getopt_bool(1999, NNG_OPT_RAW, &b) == + So(nng_dialer_getopt_bool(d, NNG_OPT_RAW, &b) == NNG_ENOENT); - So(nng_listener_getopt_bool(1999, NNG_OPT_RAW, &b) == + So(nng_listener_getopt_bool(l, NNG_OPT_RAW, &b) == NNG_ENOENT); - So(nng_dialer_getopt_size( - 1999, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT); + So(nng_dialer_getopt_size(d, NNG_OPT_RECVMAXSZ, &s) == + NNG_ENOENT); So(nng_listener_getopt_size( - 1999, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT); + l, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT); - So(nng_dialer_getopt_int(1999, NNG_OPT_RAW, &i) == + So(nng_dialer_getopt_int(d, NNG_OPT_RAW, &i) == NNG_ENOENT); - So(nng_listener_getopt_int(1999, NNG_OPT_RAW, &i) == + So(nng_listener_getopt_int(l, NNG_OPT_RAW, &i) == NNG_ENOENT); - So(nng_dialer_getopt_ms(1999, NNG_OPT_RECVTIMEO, &t) == + So(nng_dialer_getopt_ms(d, NNG_OPT_RECVTIMEO, &t) == + NNG_ENOENT); + So(nng_listener_getopt_ms(l, NNG_OPT_SENDTIMEO, &t) == NNG_ENOENT); - So(nng_listener_getopt_ms( - 1999, NNG_OPT_SENDTIMEO, &t) == NNG_ENOENT); }); diff --git a/tests/surveyctx.c b/tests/surveyctx.c index 9ab2de40..f4d8e703 100644 --- a/tests/surveyctx.c +++ b/tests/surveyctx.c @@ -266,7 +266,7 @@ TestMain("Surveyor concurrent contexts", { nng_ctx_send(ctx, aio); nng_aio_wait(aio); So(nng_aio_result(aio) == 0); - nng_recv_aio(ctx, aio); + nng_ctx_recv(ctx, aio); nng_ctx_close(ctx); nng_aio_wait(aio); So(nng_aio_result(aio) == NNG_ECLOSED); diff --git a/tests/tcp.c b/tests/tcp.c index 2677222d..3d2ecfc8 100644 --- a/tests/tcp.c +++ b/tests/tcp.c @@ -30,7 +30,7 @@ check_props_v4(nng_msg *msg) bool b; p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt_sockaddr(p, NNG_OPT_LOCADDR, &la) == 0); So(la.s_family == NNG_AF_INET); So(la.s_in.sa_port == htons(trantest_port - 1)); diff --git a/tests/tcp6.c b/tests/tcp6.c index 07990a36..80135b33 100644 --- a/tests/tcp6.c +++ b/tests/tcp6.c @@ -49,7 +49,7 @@ check_props_v6(nng_msg *msg) nng_sockaddr la; z = sizeof(nng_sockaddr); p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt(p, NNG_OPT_LOCADDR, &la, &z) == 0); So(z == sizeof(la)); So(la.s_family == NNG_AF_INET6); @@ -62,7 +62,7 @@ check_props_v6(nng_msg *msg) nng_sockaddr ra; z = sizeof(nng_sockaddr); p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt(p, NNG_OPT_REMADDR, &ra, &z) == 0); So(z == sizeof(ra)); So(ra.s_family == NNG_AF_INET6); diff --git a/tests/tls.c b/tests/tls.c index 4ce12ea8..71e28deb 100644 --- a/tests/tls.c +++ b/tests/tls.c @@ -114,7 +114,7 @@ check_props_v4(nng_msg *msg) nng_sockaddr ra; p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); // Typed access So(nng_pipe_getopt_sockaddr(p, NNG_OPT_LOCADDR, &la) == 0); @@ -426,7 +426,7 @@ TestMain("TLS Transport", { So(nng_msg_len(msg) == 6); So(strcmp(nng_msg_body(msg), "hello") == 0); p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0); So(b == false); nng_msg_free(msg); @@ -468,7 +468,7 @@ TestMain("TLS Transport", { So(nng_msg_len(msg) == 6); So(strcmp(nng_msg_body(msg), "hello") == 0); p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0); So(b == true); int i; diff --git a/tests/trantest.h b/tests/trantest.h index cbed58f3..ed1eccb7 100644 --- a/tests/trantest.h +++ b/tests/trantest.h @@ -172,7 +172,7 @@ trantest_dial(trantest *tt, nng_dialer *dp) { nng_dialer d; int rv; - *dp = 0; + d.id = 0; rv = nng_dialer_create(&d, tt->reqsock, tt->addr); if (rv != 0) { @@ -197,7 +197,7 @@ trantest_listen(trantest *tt, nng_listener *lp) { int rv; nng_listener l; - *lp = 0; + l.id = 0; rv = nng_listener_create(&l, tt->repsock, tt->addr); if (rv != 0) { @@ -231,12 +231,13 @@ void trantest_conn_refused(trantest *tt) { Convey("Connection refused works", { - nng_dialer d = 0; + nng_dialer d; + d.id = 0; So(trantest_dial(tt, &d) == NNG_ECONNREFUSED); - So(d == 0); + So(d.id == 0); So(trantest_dial(tt, &d) == NNG_ECONNREFUSED); - So(d == 0); + So(d.id == 0); }); } @@ -248,10 +249,10 @@ trantest_duplicate_listen(trantest *tt) int rv; rv = trantest_listen(tt, &l); So(rv == 0); - So(l != 0); - l = 0; + So(l.id != 0); + l.id = 0; So(trantest_listen(tt, &l) == NNG_EADDRINUSE); - So(l == 0); + So(l.id == 0); }); } @@ -262,12 +263,12 @@ trantest_listen_accept(trantest *tt) nng_listener l; nng_dialer d; So(trantest_listen(tt, &l) == 0); - So(l != 0); + So(l.id != 0); nng_msleep(200); - d = 0; + d.id = 0; So(trantest_dial(tt, &d) == 0); - So(d != 0); + So(d.id != 0); }); } @@ -284,9 +285,9 @@ trantest_send_recv(trantest *tt) char * url; So(trantest_listen(tt, &l) == 0); - So(l != 0); + So(l.id != 0); So(trantest_dial(tt, &d) == 0); - So(d != 0); + So(d.id != 0); nng_msleep(200); // listener may be behind slightly @@ -312,7 +313,7 @@ trantest_send_recv(trantest *tt) So(nng_msg_len(recv) == strlen("acknowledge")); So(strcmp(nng_msg_body(recv), "acknowledge") == 0); p = nng_msg_get_pipe(recv); - So(p != 0); + So(p.id != 0); So(nng_pipe_getopt_string(p, NNG_OPT_URL, &url) == 0); So(strcmp(url, tt->addr) == 0); nng_strfree(url); @@ -334,9 +335,9 @@ trantest_send_recv_multi(trantest *tt) char msgbuf[16]; So(trantest_listen(tt, &l) == 0); - So(l != 0); + So(l.id != 0); So(trantest_dial(tt, &d) == 0); - So(d != 0); + So(d.id != 0); nng_msleep(200); // listener may be behind slightly @@ -366,7 +367,7 @@ trantest_send_recv_multi(trantest *tt) So(nng_msg_len(recv) == strlen(msgbuf) + 1); So(strcmp(nng_msg_body(recv), msgbuf) == 0); p = nng_msg_get_pipe(recv); - So(p != 0); + So(p.id != 0); So(nng_pipe_getopt_string(p, NNG_OPT_URL, &url) == 0); So(strcmp(url, tt->addr) == 0); nng_strfree(url); @@ -386,9 +387,9 @@ trantest_check_properties(trantest *tt, trantest_proptest_t f) int rv; So(trantest_listen(tt, &l) == 0); - So(l != 0); + So(l.id != 0); So(trantest_dial(tt, &d) == 0); - So(d != 0); + So(d.id != 0); nng_msleep(200); // listener may be behind slightly @@ -429,9 +430,9 @@ trantest_send_recv_large(trantest *tt) } So(trantest_listen(tt, &l) == 0); - So(l != 0); + So(l.id != 0); So(trantest_dial(tt, &d) == 0); - So(d != 0); + So(d.id != 0); nng_msleep(200); // listener may be behind slightly @@ -32,7 +32,7 @@ check_props_v4(nng_msg *msg) size_t len; p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt_sockaddr(p, NNG_OPT_LOCADDR, &la) == 0); So(la.s_family == NNG_AF_INET); diff --git a/tests/wss.c b/tests/wss.c index 89a26623..333af56c 100644 --- a/tests/wss.c +++ b/tests/wss.c @@ -141,7 +141,7 @@ check_props(nng_msg *msg) size_t len; p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); z = sizeof(nng_sockaddr); So(nng_pipe_getopt(p, NNG_OPT_LOCADDR, &la, &z) == 0); diff --git a/tests/wssfile.c b/tests/wssfile.c index 41fb8f9f..6b1d1a7b 100644 --- a/tests/wssfile.c +++ b/tests/wssfile.c @@ -142,7 +142,7 @@ check_props(nng_msg *msg) size_t len; p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); // Typed z = sizeof(nng_sockaddr); @@ -349,7 +349,7 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", { So(nng_msg_len(msg) == 6); So(strcmp(nng_msg_body(msg), "hello") == 0); p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0); So(b == false); nng_msg_free(msg); @@ -391,7 +391,7 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", { So(nng_msg_len(msg) == 6); So(strcmp(nng_msg_body(msg), "hello") == 0); p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0); So(b == true); nng_msg_free(msg); @@ -44,7 +44,7 @@ check_props(nng_msg *msg) { nng_pipe p; p = nng_msg_get_pipe(msg); - So(p > 0); + So(p.id > 0); // Check local address. Convey("Local address property works", { |
