From 8b979454d891b84da727a329906c4293fadc5f3c Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sun, 18 Mar 2018 12:46:31 -0700 Subject: fixes #295 boolean options should use C99 bool type fixes #275 nng_pipe_getopt_ptr() missing? fixes #285 nng_setopt_ptr MIS fixes #297 nng_listener/dialer_close does not validate mode This change adds some missing APIs, and changes others. In particular, certain options are now of type bool, with size of just one. This is a *breaking* change for code that uses those options -- NNG_OPT_RAW, NNG_OPT_PAIR1_POLY, NNG_OPT_TLS_VERIFIED. --- src/nng.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) (limited to 'src/nng.c') diff --git a/src/nng.c b/src/nng.c index 4c2a58db..ad255d16 100644 --- a/src/nng.c +++ b/src/nng.c @@ -379,6 +379,12 @@ nng_dialer_setopt(nng_dialer id, const char *name, const void *v, size_t sz) return (nng_ep_setopt(id, name, v, sz, NNI_EP_MODE_DIAL)); } +int +nng_dialer_setopt_bool(nng_dialer id, const char *name, bool val) +{ + return (nng_dialer_setopt(id, name, &val, sizeof(val))); +} + int nng_dialer_setopt_int(nng_dialer id, const char *name, int val) { @@ -421,6 +427,13 @@ nng_dialer_getopt(nng_dialer id, const char *name, void *val, size_t *szp) return (nng_ep_getopt(id, name, val, szp, NNI_EP_MODE_DIAL)); } +int +nng_dialer_getopt_bool(nng_dialer id, const char *name, bool *valp) +{ + size_t sz = sizeof(*valp); + return (nng_dialer_getopt(id, name, valp, &sz)); +} + int nng_dialer_getopt_int(nng_dialer id, const char *name, int *valp) { @@ -463,6 +476,12 @@ nng_listener_setopt( return (nng_ep_setopt(id, name, v, sz, NNI_EP_MODE_LISTEN)); } +int +nng_listener_setopt_bool(nng_listener id, const char *name, bool val) +{ + return (nng_listener_setopt(id, name, &val, sizeof(val))); +} + int nng_listener_setopt_int(nng_listener id, const char *name, int val) { @@ -505,6 +524,13 @@ nng_listener_getopt(nng_listener id, const char *name, void *val, size_t *szp) return (nng_ep_getopt(id, name, val, szp, NNI_EP_MODE_LISTEN)); } +int +nng_listener_getopt_bool(nng_listener id, const char *name, bool *valp) +{ + size_t sz = sizeof(*valp); + return (nng_listener_getopt(id, name, valp, &sz)); +} + int nng_listener_getopt_int(nng_listener id, const char *name, int *valp) { @@ -541,7 +567,7 @@ nng_listener_getopt_ms(nng_listener id, const char *name, nng_duration *valp) } static int -nng_ep_close(uint32_t id) +nng_ep_close(uint32_t id, int mode) { nni_ep *ep; int rv; @@ -549,6 +575,11 @@ nng_ep_close(uint32_t id) if ((rv = nni_ep_find(&ep, id)) != 0) { return (rv); } + if (nni_ep_mode(ep) != mode) { + nni_ep_rele(ep); + return (NNG_ENOENT); + } + nni_ep_close(ep); return (0); } @@ -556,13 +587,13 @@ nng_ep_close(uint32_t id) int nng_dialer_close(nng_dialer d) { - return (nng_ep_close((uint32_t) d)); + return (nng_ep_close((uint32_t) d, NNI_EP_MODE_DIAL)); } int nng_listener_close(nng_listener l) { - return (nng_ep_close((uint32_t) l)); + return (nng_ep_close((uint32_t) l, NNI_EP_MODE_LISTEN)); } int @@ -606,6 +637,12 @@ nng_setopt_int(nng_socket sid, const char *name, int val) return (nng_setopt(sid, name, &val, sizeof(val))); } +int +nng_setopt_bool(nng_socket sid, const char *name, bool val) +{ + return (nng_setopt(sid, name, &val, sizeof(val))); +} + int nng_setopt_size(nng_socket sid, const char *name, size_t val) { @@ -636,6 +673,13 @@ nng_setopt_string(nng_socket sid, const char *name, const char *val) return (nng_setopt(sid, name, val, strlen(val) + 1)); } +int +nng_getopt_bool(nng_socket sid, const char *name, bool *valp) +{ + size_t sz = sizeof(*valp); + return (nng_getopt(sid, name, valp, &sz)); +} + int nng_getopt_int(nng_socket sid, const char *name, int *valp) { @@ -784,6 +828,13 @@ nng_pipe_getopt(nng_pipe id, const char *name, void *val, size_t *sizep) return (rv); } +int +nng_pipe_getopt_bool(nng_pipe id, const char *name, bool *valp) +{ + size_t sz = sizeof(*valp); + return (nng_pipe_getopt(id, name, valp, &sz)); +} + int nng_pipe_getopt_int(nng_pipe id, const char *name, int *valp) { @@ -812,6 +863,13 @@ nng_pipe_getopt_ms(nng_pipe id, const char *name, nng_duration *valp) return (nng_pipe_getopt(id, name, valp, &sz)); } +int +nng_pipe_getopt_ptr(nng_pipe id, const char *name, void **valp) +{ + size_t sz = sizeof(*valp); + return (nng_pipe_getopt(id, name, valp, &sz)); +} + int nng_pipe_close(nng_pipe id) { -- cgit v1.2.3-70-g09d2