diff options
Diffstat (limited to 'src/nng.c')
| -rw-r--r-- | src/nng.c | 554 |
1 files changed, 445 insertions, 109 deletions
@@ -52,12 +52,6 @@ nng_socket_id(nng_socket s) return (((int) s.id > 0) ? (int) s.id : -1); } -void -nng_closeall(void) -{ - nni_sock_closeall(); -} - void * nng_alloc(size_t sz) { @@ -323,7 +317,7 @@ nng_ctx_send(nng_ctx cid, nng_aio *aio) } static int -nni_ctx_getx(nng_ctx id, const char *n, void *v, size_t *szp, nni_type t) +ctx_get(nng_ctx id, const char *n, void *v, size_t *szp, nni_type t) { nni_ctx *ctx; int rv; @@ -339,8 +333,62 @@ nni_ctx_getx(nng_ctx id, const char *n, void *v, size_t *szp, nni_type t) return (rv); } +int +nng_ctx_get(nng_ctx id, const char *n, void *v, size_t *szp) +{ + return (ctx_get(id, n, v, szp, NNI_TYPE_OPAQUE)); +} + +int +nng_ctx_get_int(nng_ctx id, const char *n, int *v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_INT32)); +} + +int +nng_ctx_get_bool(nng_ctx id, const char *n, bool *v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_BOOL)); +} + +int +nng_ctx_get_size(nng_ctx id, const char *n, size_t *v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_SIZE)); +} + +int +nng_ctx_get_uint64(nng_ctx id, const char *n, uint64_t *v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_UINT64)); +} + +int +nng_ctx_get_string(nng_ctx id, const char *n, char **v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_STRING)); +} + +int +nng_ctx_get_ptr(nng_ctx id, const char *n, void **v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_POINTER)); +} + +int +nng_ctx_get_ms(nng_ctx id, const char *n, nng_duration *v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_DURATION)); +} + +int +nng_ctx_get_addr(nng_ctx id, const char *n, nng_sockaddr *v) +{ + return (ctx_get(id, n, v, NULL, NNI_TYPE_SOCKADDR)); +} + static int -nni_ctx_setx(nng_ctx id, const char *n, const void *v, size_t sz, nni_type t) +ctx_set(nng_ctx id, const char *n, const void *v, size_t sz, nni_type t) { nni_ctx *ctx; int rv; @@ -356,8 +404,60 @@ nni_ctx_setx(nng_ctx id, const char *n, const void *v, size_t sz, nni_type t) return (rv); } -NNI_LEGACY_DEFGETALL(ctx) -NNI_LEGACY_DEFSETALL(ctx) +int +nng_ctx_set(nng_ctx id, const char *n, const void *v, size_t sz) +{ + return (ctx_set(id, n, v, sz, NNI_TYPE_OPAQUE)); +} + +int +nng_ctx_set_int(nng_ctx id, const char *n, int v) +{ + return (ctx_set(id, n, &v, sizeof(v), NNI_TYPE_INT32)); +} + +int +nng_ctx_set_bool(nng_ctx id, const char *n, bool v) +{ + return (ctx_set(id, n, &v, sizeof(v), NNI_TYPE_BOOL)); +} + +int +nng_ctx_set_size(nng_ctx id, const char *n, size_t v) +{ + return (ctx_set(id, n, &v, sizeof(v), NNI_TYPE_SIZE)); +} + +int +nng_ctx_set_uint64(nng_ctx id, const char *n, uint64_t v) +{ + return (ctx_set(id, n, &v, sizeof(v), NNI_TYPE_UINT64)); +} + +int +nng_ctx_set_ms(nng_ctx id, const char *n, nng_duration v) +{ + return (ctx_set(id, n, &v, sizeof(v), NNI_TYPE_DURATION)); +} + +int +nng_ctx_set_ptr(nng_ctx id, const char *n, void *v) +{ + return (ctx_set(id, n, &v, sizeof(v), NNI_TYPE_POINTER)); +} + +int +nng_ctx_set_string(nng_ctx id, const char *n, const char *v) +{ + return (ctx_set( + id, n, v, v == NULL ? 0 : strlen(v) + 1, NNI_TYPE_STRING)); +} + +int +nng_ctx_set_addr(nng_ctx id, const char *n, const nng_sockaddr *v) +{ + return (ctx_set(id, n, v, sizeof(*v), NNI_TYPE_SOCKADDR)); +} int nng_dial(nng_socket sid, const char *addr, nng_dialer *dp, int flags) @@ -503,8 +603,7 @@ nng_dialer_id(nng_dialer d) } static int -nni_dialer_setx( - nng_dialer did, const char *n, const void *v, size_t sz, nni_type t) +dialer_set(nng_dialer id, const char *n, const void *v, size_t sz, nni_type t) { nni_dialer *d; int rv; @@ -512,7 +611,7 @@ nni_dialer_setx( if ((rv = nni_init()) != 0) { return (rv); } - if ((rv = nni_dialer_find(&d, did.id)) != 0) { + if ((rv = nni_dialer_find(&d, id.id)) != 0) { return (rv); } rv = nni_dialer_setopt(d, n, v, sz, t); @@ -520,9 +619,63 @@ nni_dialer_setx( return (rv); } +int +nng_dialer_set(nng_dialer id, const char *n, const void *v, size_t sz) +{ + return (dialer_set(id, n, v, sz, NNI_TYPE_OPAQUE)); +} + +int +nng_dialer_set_int(nng_dialer id, const char *n, int v) +{ + return (dialer_set(id, n, &v, sizeof(v), NNI_TYPE_INT32)); +} + +int +nng_dialer_set_bool(nng_dialer id, const char *n, bool v) +{ + return (dialer_set(id, n, &v, sizeof(v), NNI_TYPE_BOOL)); +} + +int +nng_dialer_set_size(nng_dialer id, const char *n, size_t v) +{ + return (dialer_set(id, n, &v, sizeof(v), NNI_TYPE_SIZE)); +} + +int +nng_dialer_set_uint64(nng_dialer id, const char *n, uint64_t v) +{ + return (dialer_set(id, n, &v, sizeof(v), NNI_TYPE_UINT64)); +} + +int +nng_dialer_set_ms(nng_dialer id, const char *n, nng_duration v) +{ + return (dialer_set(id, n, &v, sizeof(v), NNI_TYPE_DURATION)); +} + +int +nng_dialer_set_ptr(nng_dialer id, const char *n, void *v) +{ + return (dialer_set(id, n, &v, sizeof(v), NNI_TYPE_POINTER)); +} + +int +nng_dialer_set_string(nng_dialer id, const char *n, const char *v) +{ + return (dialer_set( + id, n, v, v == NULL ? 0 : strlen(v) + 1, NNI_TYPE_STRING)); +} + +int +nng_dialer_set_addr(nng_dialer id, const char *n, const nng_sockaddr *v) +{ + return (dialer_set(id, n, v, sizeof(*v), NNI_TYPE_SOCKADDR)); +} + static int -nni_dialer_getx( - nng_dialer did, const char *n, void *v, size_t *szp, nni_type t) +dialer_get(nng_dialer id, const char *n, void *v, size_t *szp, nni_type t) { nni_dialer *d; int rv; @@ -530,7 +683,7 @@ nni_dialer_getx( if ((rv = nni_init()) != 0) { return (rv); } - if ((rv = nni_dialer_find(&d, did.id)) != 0) { + if ((rv = nni_dialer_find(&d, id.id)) != 0) { return (rv); } rv = nni_dialer_getopt(d, n, v, szp, t); @@ -538,11 +691,62 @@ nni_dialer_getx( return (rv); } -NNI_LEGACY_DEFGETALL(dialer) -NNI_LEGACY_DEFSETALL(dialer) +int +nng_dialer_get(nng_dialer id, const char *n, void *v, size_t *szp) +{ + return (dialer_get(id, n, v, szp, NNI_TYPE_OPAQUE)); +} + +int +nng_dialer_get_int(nng_dialer id, const char *n, int *v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_INT32)); +} int -nni_listener_setx( +nng_dialer_get_bool(nng_dialer id, const char *n, bool *v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_BOOL)); +} + +int +nng_dialer_get_size(nng_dialer id, const char *n, size_t *v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_SIZE)); +} + +int +nng_dialer_get_uint64(nng_dialer id, const char *n, uint64_t *v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_UINT64)); +} + +int +nng_dialer_get_string(nng_dialer id, const char *n, char **v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_STRING)); +} + +int +nng_dialer_get_ptr(nng_dialer id, const char *n, void **v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_POINTER)); +} + +int +nng_dialer_get_ms(nng_dialer id, const char *n, nng_duration *v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_DURATION)); +} + +int +nng_dialer_get_addr(nng_dialer id, const char *n, nng_sockaddr *v) +{ + return (dialer_get(id, n, v, NULL, NNI_TYPE_SOCKADDR)); +} + +static int +listener_set( nng_listener lid, const char *name, const void *v, size_t sz, nni_type t) { nni_listener *l; @@ -560,7 +764,62 @@ nni_listener_setx( } int -nni_listener_getx( +nng_listener_set(nng_listener id, const char *n, const void *v, size_t sz) +{ + return (listener_set(id, n, v, sz, NNI_TYPE_OPAQUE)); +} + +int +nng_listener_set_int(nng_listener id, const char *n, int v) +{ + return (listener_set(id, n, &v, sizeof(v), NNI_TYPE_INT32)); +} + +int +nng_listener_set_bool(nng_listener id, const char *n, bool v) +{ + return (listener_set(id, n, &v, sizeof(v), NNI_TYPE_BOOL)); +} + +int +nng_listener_set_size(nng_listener id, const char *n, size_t v) +{ + return (listener_set(id, n, &v, sizeof(v), NNI_TYPE_SIZE)); +} + +int +nng_listener_set_uint64(nng_listener id, const char *n, uint64_t v) +{ + return (listener_set(id, n, &v, sizeof(v), NNI_TYPE_UINT64)); +} + +int +nng_listener_set_ms(nng_listener id, const char *n, nng_duration v) +{ + return (listener_set(id, n, &v, sizeof(v), NNI_TYPE_DURATION)); +} + +int +nng_listener_set_ptr(nng_listener id, const char *n, void *v) +{ + return (listener_set(id, n, &v, sizeof(v), NNI_TYPE_POINTER)); +} + +int +nng_listener_set_string(nng_listener id, const char *n, const char *v) +{ + return (listener_set( + id, n, v, v == NULL ? 0 : strlen(v) + 1, NNI_TYPE_STRING)); +} + +int +nng_listener_set_addr(nng_listener id, const char *n, const nng_sockaddr *v) +{ + return (listener_set(id, n, v, sizeof(*v), NNI_TYPE_SOCKADDR)); +} + +static int +listener_get( nng_listener lid, const char *name, void *v, size_t *szp, nni_type t) { nni_listener *l; @@ -577,8 +836,59 @@ nni_listener_getx( return (rv); } -NNI_LEGACY_DEFGETALL(listener) -NNI_LEGACY_DEFSETALL(listener) +int +nng_listener_get(nng_listener id, const char *n, void *v, size_t *szp) +{ + return (listener_get(id, n, v, szp, NNI_TYPE_OPAQUE)); +} + +int +nng_listener_get_int(nng_listener id, const char *n, int *v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_INT32)); +} + +int +nng_listener_get_bool(nng_listener id, const char *n, bool *v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_BOOL)); +} + +int +nng_listener_get_size(nng_listener id, const char *n, size_t *v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_SIZE)); +} + +int +nng_listener_get_uint64(nng_listener id, const char *n, uint64_t *v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_UINT64)); +} + +int +nng_listener_get_string(nng_listener id, const char *n, char **v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_STRING)); +} + +int +nng_listener_get_ptr(nng_listener id, const char *n, void **v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_POINTER)); +} + +int +nng_listener_get_ms(nng_listener id, const char *n, nng_duration *v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_DURATION)); +} + +int +nng_listener_get_addr(nng_listener id, const char *n, nng_sockaddr *v) +{ + return (listener_get(id, n, v, NULL, NNI_TYPE_SOCKADDR)); +} int nng_dialer_close(nng_dialer did) @@ -607,7 +917,7 @@ nng_listener_close(nng_listener lid) } static int -nni_socket_setx( +socket_set( nng_socket s, const char *name, const void *val, size_t sz, nni_type t) { nni_sock *sock; @@ -625,118 +935,129 @@ nni_socket_setx( } int -nng_setopt(nng_socket s, const char *name, const void *val, size_t sz) +nng_socket_set(nng_socket id, const char *n, const void *v, size_t sz) { - return (nng_socket_set(s, name, val, sz)); + return (socket_set(id, n, v, sz, NNI_TYPE_OPAQUE)); } -static int -nni_socket_getx( - nng_socket s, const char *name, void *val, size_t *szp, nni_type t) +int +nng_socket_set_int(nng_socket id, const char *n, int v) { - nni_sock *sock; - int rv; + return (socket_set(id, n, &v, sizeof(v), NNI_TYPE_INT32)); +} - if ((rv = nni_init()) != 0) { - return (rv); - } - if ((rv = nni_sock_find(&sock, s.id)) != 0) { - return (rv); - } - rv = nni_sock_getopt(sock, name, val, szp, t); - nni_sock_rele(sock); - return (rv); +int +nng_socket_set_bool(nng_socket id, const char *n, bool v) +{ + return (socket_set(id, n, &v, sizeof(v), NNI_TYPE_BOOL)); } int -nng_getopt(nng_socket s, const char *name, void *val, size_t *szp) +nng_socket_set_size(nng_socket id, const char *n, size_t v) { - return (nng_socket_get(s, name, val, szp)); + return (socket_set(id, n, &v, sizeof(v), NNI_TYPE_SIZE)); } -// Convenience option wrappers. int -nng_setopt_int(nng_socket s, const char *name, int val) +nng_socket_set_uint64(nng_socket id, const char *n, uint64_t v) { - return (nng_socket_set_int(s, name, val)); + return (socket_set(id, n, &v, sizeof(v), NNI_TYPE_UINT64)); } int -nng_setopt_bool(nng_socket s, const char *name, bool val) +nng_socket_set_ms(nng_socket id, const char *n, nng_duration v) { - return (nng_socket_set_bool(s, name, val)); + return (socket_set(id, n, &v, sizeof(v), NNI_TYPE_DURATION)); } int -nng_setopt_size(nng_socket s, const char *name, size_t val) +nng_socket_set_ptr(nng_socket id, const char *n, void *v) { - return (nng_socket_set_size(s, name, val)); + return (socket_set(id, n, &v, sizeof(v), NNI_TYPE_POINTER)); } int -nng_setopt_ms(nng_socket s, const char *name, nng_duration val) +nng_socket_set_string(nng_socket id, const char *n, const char *v) { - return (nng_socket_set_ms(s, name, val)); + return (socket_set( + id, n, v, v == NULL ? 0 : strlen(v) + 1, NNI_TYPE_STRING)); } int -nng_setopt_uint64(nng_socket s, const char *name, uint64_t val) +nng_socket_set_addr(nng_socket id, const char *n, const nng_sockaddr *v) { - return (nng_socket_set_uint64(s, name, val)); + return (socket_set(id, n, v, sizeof(*v), NNI_TYPE_SOCKADDR)); +} + +static int +socket_get(nng_socket s, const char *name, void *val, size_t *szp, nni_type t) +{ + nni_sock *sock; + int rv; + + if ((rv = nni_init()) != 0) { + return (rv); + } + if ((rv = nni_sock_find(&sock, s.id)) != 0) { + return (rv); + } + rv = nni_sock_getopt(sock, name, val, szp, t); + nni_sock_rele(sock); + return (rv); } int -nng_setopt_ptr(nng_socket s, const char *name, void *val) +nng_socket_get(nng_socket id, const char *n, void *v, size_t *szp) { - return (nng_socket_set_ptr(s, name, val)); + return (socket_get(id, n, v, szp, NNI_TYPE_OPAQUE)); } int -nng_setopt_string(nng_socket s, const char *name, const char *val) +nng_socket_get_int(nng_socket id, const char *n, int *v) { - return (nng_socket_set_string(s, name, val)); + return (socket_get(id, n, v, NULL, NNI_TYPE_INT32)); } int -nng_getopt_bool(nng_socket s, const char *name, bool *valp) +nng_socket_get_bool(nng_socket id, const char *n, bool *v) { - return (nng_socket_get_bool(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_BOOL)); } int -nng_getopt_int(nng_socket s, const char *name, int *valp) +nng_socket_get_size(nng_socket id, const char *n, size_t *v) { - return (nng_socket_get_int(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_SIZE)); } int -nng_getopt_size(nng_socket s, const char *name, size_t *valp) +nng_socket_get_uint64(nng_socket id, const char *n, uint64_t *v) { - return (nng_socket_get_size(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_UINT64)); } int -nng_getopt_uint64(nng_socket s, const char *name, uint64_t *valp) +nng_socket_get_string(nng_socket id, const char *n, char **v) { - return (nng_socket_get_uint64(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_STRING)); } int -nng_getopt_ms(nng_socket s, const char *name, nng_duration *valp) +nng_socket_get_ptr(nng_socket id, const char *n, void **v) { - return (nng_socket_get_ms(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_POINTER)); } int -nng_getopt_ptr(nng_socket s, const char *name, void **valp) +nng_socket_get_ms(nng_socket id, const char *n, nng_duration *v) { - return (nng_socket_get_ptr(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_DURATION)); } int -nng_getopt_string(nng_socket s, const char *name, char **valp) +nng_socket_get_addr(nng_socket id, const char *n, nng_sockaddr *v) { - return (nng_socket_get_string(s, name, valp)); + return (socket_get(id, n, v, NULL, NNI_TYPE_SOCKADDR)); } int @@ -856,7 +1177,7 @@ nng_strerror(int num) } static int -nni_pipe_getx(nng_pipe p, const char *name, void *val, size_t *szp, nni_type t) +pipe_get(nng_pipe p, const char *name, void *val, size_t *szp, nni_type t) { int rv; nni_pipe *pipe; @@ -872,7 +1193,59 @@ nni_pipe_getx(nng_pipe p, const char *name, void *val, size_t *szp, nni_type t) return (rv); } -NNI_LEGACY_DEFGETALL(pipe) +int +nng_pipe_get(nng_pipe id, const char *n, void *v, size_t *szp) +{ + return (pipe_get(id, n, v, szp, NNI_TYPE_OPAQUE)); +} + +int +nng_pipe_get_int(nng_pipe id, const char *n, int *v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_INT32)); +} + +int +nng_pipe_get_bool(nng_pipe id, const char *n, bool *v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_BOOL)); +} + +int +nng_pipe_get_size(nng_pipe id, const char *n, size_t *v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_SIZE)); +} + +int +nng_pipe_get_uint64(nng_pipe id, const char *n, uint64_t *v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_UINT64)); +} + +int +nng_pipe_get_string(nng_pipe id, const char *n, char **v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_STRING)); +} + +int +nng_pipe_get_ptr(nng_pipe id, const char *n, void **v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_POINTER)); +} + +int +nng_pipe_get_ms(nng_pipe id, const char *n, nng_duration *v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_DURATION)); +} + +int +nng_pipe_get_addr(nng_pipe id, const char *n, nng_sockaddr *v) +{ + return (pipe_get(id, n, v, NULL, NNI_TYPE_SOCKADDR)); +} nng_socket nng_pipe_socket(nng_pipe p) @@ -931,16 +1304,6 @@ nng_pipe_id(nng_pipe p) return (((int) p.id > 0) ? (int) p.id : -1); } -NNI_DEFSETALL(ctx) -NNI_DEFGETALL(ctx) -NNI_DEFSETALL(dialer) -NNI_DEFGETALL(dialer) -NNI_DEFSETALL(listener) -NNI_DEFGETALL(listener) -NNI_DEFSETALL(socket) -NNI_DEFGETALL(socket) -NNI_DEFGETALL(pipe) - // Message handling. int nng_msg_alloc(nng_msg **msgp, size_t size) @@ -1349,19 +1712,6 @@ nng_msg_set_pipe(nng_msg *msg, nng_pipe p) nni_msg_set_pipe(msg, p.id); } -// This function is not supported, but we keep it around to -// satisfy link dependencies in old programs. It has never done -// anything useful. -int -nng_msg_getopt(nng_msg *msg, int opt, void *ptr, size_t *szp) -{ - NNI_ARG_UNUSED(msg); - NNI_ARG_UNUSED(opt); - NNI_ARG_UNUSED(ptr); - NNI_ARG_UNUSED(szp); - return (NNG_ENOTSUP); -} - int nng_aio_alloc(nng_aio **app, void (*cb)(void *), void *arg) { @@ -1447,20 +1797,6 @@ nng_aio_set_timeout(nng_aio *aio, nni_duration when) int nng_aio_set_iov(nng_aio *aio, unsigned niov, const nng_iov *iov) { -// We limit the niov to prevent user insanity. This is required -// to avoid stack allocations that might smash the stack. The -// assumption is that we can always put at least 1kB on the stack -- -// our nng_iov structures are 16B. Systems without stack allocation -// get a smaller limit, because we use an automatic variable. -#if defined(NNG_HAVE_ALLOCA) || defined(_WIN32) - if (niov > 64) { - return (NNG_EINVAL); - } -#else - if (niov > 16) { - return (NNG_EINVAL); - } -#endif return (nni_aio_set_iov(aio, niov, iov)); } |
