aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--docs/man/nng_ipc.7.adoc15
-rw-r--r--src/compat/nanomsg/nn.c2
-rw-r--r--src/core/clock.c2
-rw-r--r--src/core/defs.h1
-rw-r--r--src/core/file.c2
-rw-r--r--src/core/idhash.c15
-rw-r--r--src/core/idhash.h4
-rw-r--r--src/core/message.c2
-rw-r--r--src/core/protocol.c2
-rw-r--r--src/core/strs.c2
-rw-r--r--src/nng.h17
-rw-r--r--src/platform/posix/posix_aio.h2
-rw-r--r--src/platform/posix/posix_epdesc.c4
-rw-r--r--src/platform/posix/posix_pipedesc.c7
-rw-r--r--src/platform/posix/posix_tcp.c4
-rw-r--r--src/platform/posix/posix_udp.c46
-rw-r--r--src/supplemental/http/http.h14
-rw-r--r--src/supplemental/http/http_api.h13
-rw-r--r--src/supplemental/http/http_client.c18
-rw-r--r--src/supplemental/http/http_conn.c81
-rw-r--r--src/supplemental/http/http_public.c8
-rw-r--r--src/supplemental/util/options.h2
-rw-r--r--src/supplemental/util/platform.c6
-rw-r--r--tests/base64.c4
-rw-r--r--tests/files.c2
-rw-r--r--tests/httpclient.c3
-rw-r--r--tests/idhash.c9
-rw-r--r--tests/ipc.c6
-rw-r--r--tests/ipcperms.c11
-rw-r--r--tests/ipcwinsec.c2
-rw-r--r--tests/message.c2
-rw-r--r--tests/multistress.c2
-rw-r--r--tests/options.c3
-rw-r--r--tests/pipe.c2
-rw-r--r--tests/pipeline.c2
-rw-r--r--tests/reconnect.c2
-rw-r--r--tests/reqctx.c9
-rw-r--r--tests/reqpoll.c2
-rw-r--r--tests/reqstress.c2
-rw-r--r--tests/respondpoll.c2
-rw-r--r--tests/scalability.c6
-rw-r--r--tests/sha1.c2
-rw-r--r--tests/survey.c2
-rw-r--r--tests/surveyctx.c10
-rw-r--r--tests/surveypoll.c2
-rw-r--r--tests/udp.c3
47 files changed, 185 insertions, 175 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f1bde337..c91e6a34 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -307,6 +307,7 @@ elseif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
elseif (CMAKE_SYSTEM_NAME MATCHES "SunOS")
add_definitions (-DNNG_PLATFORM_POSIX)
add_definitions (-DNNG_PLATFORM_SUNOS)
+ set(NNG_PLATFORM_POSIX ON)
elseif (CMAKE_SYSTEM_NAME MATCHES "Windows")
add_definitions (-DNNG_PLATFORM_WINDOWS)
diff --git a/docs/man/nng_ipc.7.adoc b/docs/man/nng_ipc.7.adoc
index 6bfa338b..ef9fd1b1 100644
--- a/docs/man/nng_ipc.7.adoc
+++ b/docs/man/nng_ipc.7.adoc
@@ -77,12 +77,27 @@ on a file, such as `0600` (typically meaning read-write to the owner, and
no permissions for anyone else.)
The default is system-specific, most often `0644`.
+IMPORTANT: Not all systems validate these permissions.
+In particular, illumos and Solaris are known to ignore these permission
+settings when connecting.
+
NOTE: Normally both read and write permission will be necessary for a
peer dialer to connect.
See your system documentation for UNIX domain sockets for more information.
NOTE: The _umask_ of the process is *not* applied to these bits.
+TIP: The best practice for limiting access is to place the socket in a
+directory writable only by the server, and only readable and searchable
+by clients.
+All mainstream POSIX systems will fail to permit a client to connect
+to a socket located in a diretor for which the client lacks search (execute)
+permission.
+
+TIP: Also consider using the `NNG_OPT_IPC_PEER_UID` property from within a
+a pipe notification callback (`<<nng_pipe_notify.3#,nng_pipe_notify()>>`)
+to validate peer credentials.
+
((`NNG_OPT_IPC_SECURITY_DESCRIPTOR`))::
(`PSECURITY_DESCRIPTOR`)
diff --git a/src/compat/nanomsg/nn.c b/src/compat/nanomsg/nn.c
index 03df279b..6d23106c 100644
--- a/src/compat/nanomsg/nn.c
+++ b/src/compat/nanomsg/nn.c
@@ -1166,4 +1166,4 @@ nn_get_statistic(int x, int y)
(void) y;
return (0);
-} \ No newline at end of file
+}
diff --git a/src/core/clock.c b/src/core/clock.c
index f114daa1..49b972e7 100644
--- a/src/core/clock.c
+++ b/src/core/clock.c
@@ -19,4 +19,4 @@ void
nni_msleep(nni_duration msec)
{
nni_plat_sleep(msec);
-} \ No newline at end of file
+}
diff --git a/src/core/defs.h b/src/core/defs.h
index 1d656bb2..b9c9b7e5 100644
--- a/src/core/defs.h
+++ b/src/core/defs.h
@@ -59,7 +59,6 @@ typedef struct nni_proto nni_proto;
typedef struct nni_plat_mtx nni_mtx;
typedef struct nni_plat_cv nni_cv;
-typedef struct nni_idhash nni_idhash;
typedef struct nni_thr nni_thr;
typedef void (*nni_thr_func)(void *);
diff --git a/src/core/file.c b/src/core/file.c
index b76fdcda..173a864d 100644
--- a/src/core/file.c
+++ b/src/core/file.c
@@ -156,4 +156,4 @@ nni_file_unlock(nni_file_lockh *h)
{
nni_plat_file_unlock(&h->lk);
NNI_FREE_STRUCT(h);
-} \ No newline at end of file
+}
diff --git a/src/core/idhash.c b/src/core/idhash.c
index 2bf01d6b..0de83eb1 100644
--- a/src/core/idhash.c
+++ b/src/core/idhash.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
@@ -306,14 +306,3 @@ nni_idhash_alloc(nni_idhash *h, uint64_t *idp, void *val)
return (rv);
}
-
-size_t
-nni_idhash_count(nni_idhash *h)
-{
- size_t num;
- nni_mtx_lock(&h->ih_mtx);
- num = h->ih_count;
- nni_mtx_unlock(&h->ih_mtx);
-
- return (num);
-}
diff --git a/src/core/idhash.h b/src/core/idhash.h
index 9dbdd45e..36797a76 100644
--- a/src/core/idhash.h
+++ b/src/core/idhash.h
@@ -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
diff --git a/src/core/message.c b/src/core/message.c
index 5c396f21..ba3c0e84 100644
--- a/src/core/message.c
+++ b/src/core/message.c
@@ -627,4 +627,4 @@ uint32_t
nni_msg_get_pipe(const nni_msg *m)
{
return (m->m_pipe);
-} \ No newline at end of file
+}
diff --git a/src/core/protocol.c b/src/core/protocol.c
index 52b9b7fb..ea28ad0a 100644
--- a/src/core/protocol.c
+++ b/src/core/protocol.c
@@ -95,4 +95,4 @@ nni_proto_sys_fini(void)
}
nni_proto_inited = 0;
nni_mtx_fini(&nni_proto_lk);
-} \ No newline at end of file
+}
diff --git a/src/core/strs.c b/src/core/strs.c
index 66a385d0..98c1a5fa 100644
--- a/src/core/strs.c
+++ b/src/core/strs.c
@@ -201,4 +201,4 @@ nni_asprintf(char **sp, const char *fmt, ...)
va_end(ap);
*sp = s;
return (0);
-} \ No newline at end of file
+}
diff --git a/src/nng.h b/src/nng.h
index ac4f178b..0c62dcb9 100644
--- a/src/nng.h
+++ b/src/nng.h
@@ -160,7 +160,7 @@ enum nng_sockaddr_family {
NNG_AF_IPC = 2,
NNG_AF_INET = 3,
NNG_AF_INET6 = 4,
- NNG_AF_ZT = 5, // ZeroTier
+ NNG_AF_ZT = 5 // ZeroTier
};
// Scatter/gather I/O.
@@ -223,9 +223,10 @@ NNG_DECL int nng_getopt_ptr(nng_socket, const char *, void **);
// Only one callback can be set on a given socket, and there is no way
// to retrieve the old value.
typedef enum {
- NNG_PIPE_ADD,
- NNG_PIPE_REM,
+ NNG_PIPE_ADD, // Pipe added to socket
+ NNG_PIPE_REM // Pipe removed from socket
} nng_pipe_action;
+
typedef void (*nng_pipe_cb)(nng_pipe, nng_pipe_action, void *);
NNG_DECL int nng_pipe_notify(nng_socket, nng_pipe_cb, void *);
@@ -619,7 +620,7 @@ NNG_DECL nng_listener nng_pipe_listener(nng_pipe);
// Flags.
enum nng_flag_enum {
NNG_FLAG_ALLOC = 1, // Recv to allocate receive buffer.
- NNG_FLAG_NONBLOCK = 2, // Non-blocking operations.
+ NNG_FLAG_NONBLOCK = 2 // Non-blocking operations.
};
// Options.
@@ -758,8 +759,8 @@ enum nng_flag_enum {
// NNG_DECL int nng_stat_type(nng_stat *);
enum nng_stat_type_enum {
- NNG_STAT_LEVEL = 0,
- NNG_STAT_COUNTER = 1,
+ NNG_STAT_LEVEL = 0, // Numeric "absolute" value, diffs meaningless
+ NNG_STAT_COUNTER = 1 // Incrementing value (diffs are meaningful)
};
// nng_stat_unit provides information about the unit for the statistic,
@@ -774,7 +775,7 @@ enum nng_unit_enum {
NNG_UNIT_MESSAGES = 2,
NNG_UNIT_BOOLEAN = 3,
NNG_UNIT_MILLIS = 4,
- NNG_UNIT_EVENTS = 5,
+ NNG_UNIT_EVENTS = 5
};
// nng_stat_value returns returns the actual value of the statistic.
@@ -845,7 +846,7 @@ enum nng_errno_enum {
NNG_EBADTYPE = 30,
NNG_EINTERNAL = 1000,
NNG_ESYSERR = 0x10000000,
- NNG_ETRANERR = 0x20000000,
+ NNG_ETRANERR = 0x20000000
};
// URL support. We frequently want to process a URL, and these methods
diff --git a/src/platform/posix/posix_aio.h b/src/platform/posix/posix_aio.h
index 7d6a7231..15d91db2 100644
--- a/src/platform/posix/posix_aio.h
+++ b/src/platform/posix/posix_aio.h
@@ -19,8 +19,6 @@
#include "core/nng_impl.h"
-typedef struct nni_posix_pollq nni_posix_pollq;
-
typedef struct nni_posix_pipedesc nni_posix_pipedesc;
typedef struct nni_posix_epdesc nni_posix_epdesc;
diff --git a/src/platform/posix/posix_epdesc.c b/src/platform/posix/posix_epdesc.c
index 0f63304f..7431dedf 100644
--- a/src/platform/posix/posix_epdesc.c
+++ b/src/platform/posix/posix_epdesc.c
@@ -28,6 +28,10 @@
#include <sys/un.h>
#include <unistd.h>
+#ifdef sun
+#undef sun
+#endif
+
#ifdef SOCK_CLOEXEC
#define NNI_STREAM_SOCKTYPE (SOCK_STREAM | SOCK_CLOEXEC)
#else
diff --git a/src/platform/posix/posix_pipedesc.c b/src/platform/posix/posix_pipedesc.c
index 61005ca8..3745f11f 100644
--- a/src/platform/posix/posix_pipedesc.c
+++ b/src/platform/posix/posix_pipedesc.c
@@ -32,6 +32,9 @@
#include <sys/ucred.h>
#include <sys/un.h>
#endif
+#ifdef NNG_HAVE_ALLOCA
+#include <alloca.h>
+#endif
// nni_posix_pipedesc is a descriptor kept one per transport pipe (i.e. open
// file descriptor for TCP socket, etc.) This contains the list of pending
@@ -426,12 +429,12 @@ nni_posix_pipedesc_get_peerid(nni_posix_pipedesc *pd, uint64_t *euid,
*znid = (uint64_t) -1;
return (0);
#elif defined(NNG_HAVE_GETPEERUCRED)
- ucred *ucp;
+ ucred_t *ucp = NULL;
if (getpeerucred(fd, &ucp) != 0) {
return (nni_plat_errno(errno));
}
*euid = ucred_geteuid(ucp);
- *egid = ucred_geteuid(ucp);
+ *egid = ucred_getegid(ucp);
*prid = ucred_getpid(ucp);
*znid = ucred_getzoneid(ucp);
ucred_free(ucp);
diff --git a/src/platform/posix/posix_tcp.c b/src/platform/posix/posix_tcp.c
index c00f9433..ace1f6bd 100644
--- a/src/platform/posix/posix_tcp.c
+++ b/src/platform/posix/posix_tcp.c
@@ -79,13 +79,13 @@ nni_plat_tcp_ep_listen(nni_plat_tcp_ep *ep, nng_sockaddr *bsa)
void
nni_plat_tcp_ep_connect(nni_plat_tcp_ep *ep, nni_aio *aio)
{
- return (nni_posix_epdesc_connect((void *) ep, aio));
+ nni_posix_epdesc_connect((void *) ep, aio);
}
void
nni_plat_tcp_ep_accept(nni_plat_tcp_ep *ep, nni_aio *aio)
{
- return (nni_posix_epdesc_accept((void *) ep, aio));
+ nni_posix_epdesc_accept((void *) ep, aio);
}
void
diff --git a/src/platform/posix/posix_udp.c b/src/platform/posix/posix_udp.c
index 37f79431..654d31e3 100644
--- a/src/platform/posix/posix_udp.c
+++ b/src/platform/posix/posix_udp.c
@@ -24,14 +24,15 @@
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
+#ifdef NNG_HAVE_ALLOCA
+#include <alloca.h>
+#endif
// UDP support.
// If we can suppress SIGPIPE on send, please do so.
-#ifdef MSG_NOSIGNAL
-#define NNI_MSG_NOSIGNAL MSG_NOSIGNAL
-#else
-#define NNI_MSG_NOSIGNAL 0
+#ifndef MSG_NOSIGNAL
+#define MSG_NOSIGNAL 0
#endif
struct nni_plat_udp {
@@ -67,7 +68,7 @@ nni_posix_udp_dorecv(nni_plat_udp *udp)
nni_iov * aiov;
struct sockaddr_storage ss;
nng_sockaddr * sa;
- struct msghdr hdr;
+ struct msghdr hdr = { .msg_name = NULL };
int rv = 0;
int cnt = 0;
@@ -77,13 +78,10 @@ nni_posix_udp_dorecv(nni_plat_udp *udp)
iov[i].iov_base = aiov[i].iov_buf;
iov[i].iov_len = aiov[i].iov_len;
}
- hdr.msg_iov = iov;
- hdr.msg_iovlen = niov;
- hdr.msg_name = &ss;
- hdr.msg_namelen = sizeof(ss);
- hdr.msg_flags = 0;
- hdr.msg_control = NULL;
- hdr.msg_controllen = 0;
+ hdr.msg_iov = iov;
+ hdr.msg_iovlen = niov;
+ hdr.msg_name = &ss;
+ hdr.msg_namelen = sizeof(ss);
if ((cnt = recvmsg(udp->udp_fd, &hdr, 0)) < 0) {
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
@@ -121,9 +119,8 @@ nni_posix_udp_dosend(nni_plat_udp *udp)
if (len < 1) {
rv = NNG_EADDRINVAL;
} else {
- struct msghdr hdr;
- unsigned niov;
- nni_iov * aiov;
+ unsigned niov;
+ nni_iov *aiov;
#ifdef NNG_HAVE_ALLOCA
struct iovec *iov;
#else
@@ -142,22 +139,19 @@ nni_posix_udp_dosend(nni_plat_udp *udp)
rv = NNG_EINVAL;
}
#endif
-
if (rv == 0) {
+ struct msghdr hdr = { .msg_name = NULL };
for (unsigned i = 0; i < niov; i++) {
iov[i].iov_base = aiov[i].iov_buf;
iov[i].iov_len = aiov[i].iov_len;
}
- hdr.msg_iov = iov;
- hdr.msg_iovlen = niov;
- hdr.msg_name = &ss;
- hdr.msg_namelen = len;
- hdr.msg_flags = NNI_MSG_NOSIGNAL;
- hdr.msg_control = NULL;
- hdr.msg_controllen = 0;
-
- if ((cnt = sendmsg(udp->udp_fd, &hdr, 0)) <
- 0) {
+ hdr.msg_iov = iov;
+ hdr.msg_iovlen = niov;
+ hdr.msg_name = &ss;
+ hdr.msg_namelen = len;
+
+ cnt = sendmsg(udp->udp_fd, &hdr, MSG_NOSIGNAL);
+ if (cnt < 0) {
if ((errno == EAGAIN) ||
(errno == EWOULDBLOCK)) {
// Cannot send now, leave.
diff --git a/src/supplemental/http/http.h b/src/supplemental/http/http.h
index 470ffbfa..f6a45df7 100644
--- a/src/supplemental/http/http.h
+++ b/src/supplemental/http/http.h
@@ -21,7 +21,7 @@ extern "C" {
#include <stdint.h>
-typedef struct nng_tls_config nng_tls_config;
+struct nng_tls_config;
// HTTP status codes. This list is not exhaustive.
enum nng_http_status {
@@ -398,12 +398,14 @@ NNG_DECL int nng_http_server_del_handler(
// server client, so the caller must have configured it reasonably.
// This API is not recommended unless the caller needs complete control
// over the TLS configuration.
-NNG_DECL int nng_http_server_set_tls(nng_http_server *, nng_tls_config *);
+NNG_DECL int nng_http_server_set_tls(
+ nng_http_server *, struct nng_tls_config *);
// nng_http_server_get_tls obtains the TLS configuration if one is present,
// or returns NNG_EINVAL. The TLS configuration is invalidated if the
// nng_http_server_set_tls function is called, so be careful.
-NNG_DECL int nng_http_server_get_tls(nng_http_server *, nng_tls_config **);
+NNG_DECL int nng_http_server_get_tls(
+ nng_http_server *, struct nng_tls_config **);
// nng_http_hijack is intended to be called by a handler that wishes to
// take over the processing of the HTTP session -- usually to change protocols
@@ -435,12 +437,14 @@ NNG_DECL void nng_http_client_free(nng_http_client *);
// the entire TLS configuration on the client, so the caller must have
// configured it reasonably. This API is not recommended unless the
// caller needs complete control over the TLS configuration.
-NNG_DECL int nng_http_client_set_tls(nng_http_client *, nng_tls_config *);
+NNG_DECL int nng_http_client_set_tls(
+ nng_http_client *, struct nng_tls_config *);
// nng_http_client_get_tls obtains the TLS configuration if one is present,
// or returns NNG_EINVAL. The supplied TLS configuration object may
// be invalidated by any future calls to nni_http_client_set_tls.
-NNG_DECL int nng_http_client_get_tls(nng_http_client *, nng_tls_config **);
+NNG_DECL int nng_http_client_get_tls(
+ nng_http_client *, struct nng_tls_config **);
// nng_http_client_connect establishes a new connection with the server
// named in the URL used when the client was created. Once the connection
diff --git a/src/supplemental/http/http_api.h b/src/supplemental/http/http_api.h
index 8de859b4..f1a5c0fa 100644
--- a/src/supplemental/http/http_api.h
+++ b/src/supplemental/http/http_api.h
@@ -65,7 +65,8 @@ extern void *nni_http_conn_get_ctx(nni_http_conn *);
// They should only be used by the server or client HTTP implementations,
// and are not for use by other code.
extern int nni_http_conn_init_tcp(nni_http_conn **, void *);
-extern int nni_http_conn_init_tls(nni_http_conn **, nng_tls_config *, void *);
+extern int nni_http_conn_init_tls(
+ nni_http_conn **, struct nng_tls_config *, void *);
extern void nni_http_conn_close(nni_http_conn *);
extern void nni_http_conn_fini(nni_http_conn *);
@@ -153,12 +154,13 @@ extern int nni_http_server_del_handler(nni_http_server *, nni_http_handler *);
// server client, so the caller must have configured it reasonably.
// This API is not recommended unless the caller needs complete control
// over the TLS configuration.
-extern int nni_http_server_set_tls(nni_http_server *, nng_tls_config *);
+extern int nni_http_server_set_tls(nni_http_server *, struct nng_tls_config *);
// nni_http_server_get_tls obtains the TLS configuration if one is present,
// or returns NNG_EINVAL. The TLS configuration is invalidated if the
// nni_http_server_set_tls function is called, so be careful.
-extern int nni_http_server_get_tls(nni_http_server *, nng_tls_config **);
+extern int nni_http_server_get_tls(
+ nni_http_server *, struct nng_tls_config **);
// nni_http_server_start starts listening on the supplied port.
extern int nni_http_server_start(nni_http_server *);
@@ -273,12 +275,13 @@ extern void nni_http_client_fini(nni_http_client *);
// the entire TLS configuration on the client, so the caller must have
// configured it reasonably. This API is not recommended unless the
// caller needs complete control over the TLS configuration.
-extern int nni_http_client_set_tls(nni_http_client *, nng_tls_config *);
+extern int nni_http_client_set_tls(nni_http_client *, struct nng_tls_config *);
// nni_http_client_get_tls obtains the TLS configuration if one is present,
// or returns NNG_EINVAL. The supplied TLS configuration object may
// be invalidated by any future calls to nni_http_client_set_tls.
-extern int nni_http_client_get_tls(nni_http_client *, nng_tls_config **);
+extern int nni_http_client_get_tls(
+ nni_http_client *, struct nng_tls_config **);
extern void nni_http_client_connect(nni_http_client *, nni_aio *);
diff --git a/src/supplemental/http/http_client.c b/src/supplemental/http/http_client.c
index 2a9be4bb..a2427009 100644
--- a/src/supplemental/http/http_client.c
+++ b/src/supplemental/http/http_client.c
@@ -20,12 +20,12 @@
#include "http_api.h"
struct nng_http_client {
- nni_list aios;
- nni_mtx mtx;
- bool closed;
- nng_tls_config * tls;
- nni_aio * connaio;
- nni_plat_tcp_ep *tep;
+ nni_list aios;
+ nni_mtx mtx;
+ bool closed;
+ struct nng_tls_config *tls;
+ nni_aio * connaio;
+ nni_plat_tcp_ep * tep;
};
static void
@@ -182,10 +182,10 @@ nni_http_client_init(nni_http_client **cp, const nni_url *url)
}
int
-nni_http_client_set_tls(nni_http_client *c, nng_tls_config *tls)
+nni_http_client_set_tls(nni_http_client *c, struct nng_tls_config *tls)
{
#ifdef NNG_SUPP_TLS
- nng_tls_config *old;
+ struct nng_tls_config *old;
nni_mtx_lock(&c->mtx);
old = c->tls;
c->tls = tls;
@@ -205,7 +205,7 @@ nni_http_client_set_tls(nni_http_client *c, nng_tls_config *tls)
}
int
-nni_http_client_get_tls(nni_http_client *c, nng_tls_config **tlsp)
+nni_http_client_get_tls(nni_http_client *c, struct nng_tls_config **tlsp)
{
#ifdef NNG_SUPP_TLS
nni_mtx_lock(&c->mtx);
diff --git a/src/supplemental/http/http_conn.c b/src/supplemental/http/http_conn.c
index a3039d0d..0de40e10 100644
--- a/src/supplemental/http/http_conn.c
+++ b/src/supplemental/http/http_conn.c
@@ -36,14 +36,21 @@ enum write_flavor {
HTTP_WR_RES,
};
+typedef void (*http_read_fn)(void *, nni_aio *);
+typedef void (*http_write_fn)(void *, nni_aio *);
+typedef void (*http_close_fn)(void *);
+typedef void (*http_fini_fn)(void *);
+typedef bool (*http_verified_fn)(void *);
+typedef int (*http_addr_fn)(void *, nni_sockaddr *);
+
typedef struct nni_http_tran {
- void (*h_read)(void *, nni_aio *);
- void (*h_write)(void *, nni_aio *);
- int (*h_sock_addr)(void *, nni_sockaddr *);
- int (*h_peer_addr)(void *, nni_sockaddr *);
- bool (*h_verified)(void *);
- void (*h_close)(void *);
- void (*h_fini)(void *);
+ http_read_fn h_read;
+ http_write_fn h_write;
+ http_addr_fn h_sock_addr;
+ http_addr_fn h_peer_addr;
+ http_verified_fn h_verified;
+ http_close_fn h_close;
+ http_fini_fn h_fini;
} nni_http_tran;
#define SET_RD_FLAVOR(aio, f) \
@@ -54,20 +61,18 @@ typedef struct nni_http_tran {
#define GET_WR_FLAVOR(aio) (int) ((intptr_t) nni_aio_get_prov_extra(aio, 0))
struct nng_http_conn {
- void *sock;
- void (*rd)(void *, nni_aio *);
- void (*wr)(void *, nni_aio *);
- int (*sock_addr)(void *, nni_sockaddr *);
- int (*peer_addr)(void *, nni_sockaddr *);
- bool (*verified)(void *);
- void (*close)(void *);
- void (*fini)(void *);
-
- void *ctx;
- bool closed;
-
- nni_list rdq; // high level http read requests
- nni_list wrq; // high level http write requests
+ void * sock;
+ http_read_fn rd;
+ http_write_fn wr;
+ http_addr_fn sock_addr;
+ http_addr_fn peer_addr;
+ http_verified_fn verified;
+ http_close_fn close;
+ http_fini_fn fini;
+ void * ctx;
+ bool closed;
+ nni_list rdq; // high level http read requests
+ nni_list wrq; // high level http write requests
nni_aio *rd_uaio; // user aio for read
nni_aio *wr_uaio; // user aio for write
@@ -715,13 +720,13 @@ nni_http_verified_tcp(void *arg)
}
static nni_http_tran http_tcp_ops = {
- .h_read = (void *) nni_plat_tcp_pipe_recv,
- .h_write = (void *) nni_plat_tcp_pipe_send,
- .h_close = (void *) nni_plat_tcp_pipe_close,
- .h_fini = (void *) nni_plat_tcp_pipe_fini,
- .h_sock_addr = (void *) nni_plat_tcp_pipe_sockname,
- .h_peer_addr = (void *) nni_plat_tcp_pipe_peername,
- .h_verified = nni_http_verified_tcp,
+ .h_read = (http_read_fn) nni_plat_tcp_pipe_recv,
+ .h_write = (http_write_fn) nni_plat_tcp_pipe_send,
+ .h_close = (http_close_fn) nni_plat_tcp_pipe_close,
+ .h_fini = (http_fini_fn) nni_plat_tcp_pipe_fini,
+ .h_sock_addr = (http_addr_fn) nni_plat_tcp_pipe_sockname,
+ .h_peer_addr = (http_addr_fn) nni_plat_tcp_pipe_peername,
+ .h_verified = (http_verified_fn) nni_http_verified_tcp,
};
int
@@ -732,17 +737,18 @@ nni_http_conn_init_tcp(nni_http_conn **connp, void *tcp)
#ifdef NNG_SUPP_TLS
static nni_http_tran http_tls_ops = {
- .h_read = (void *) nni_tls_recv,
- .h_write = (void *) nni_tls_send,
- .h_close = (void *) nni_tls_close,
- .h_fini = (void *) nni_tls_fini,
- .h_sock_addr = (void *) nni_tls_sockname,
- .h_peer_addr = (void *) nni_tls_peername,
- .h_verified = (void *) nni_tls_verified,
+ .h_read = (http_read_fn) nni_tls_recv,
+ .h_write = (http_write_fn) nni_tls_send,
+ .h_close = (http_close_fn) nni_tls_close,
+ .h_fini = (http_fini_fn) nni_tls_fini,
+ .h_sock_addr = (http_addr_fn) nni_tls_sockname,
+ .h_peer_addr = (http_addr_fn) nni_tls_peername,
+ .h_verified = (http_verified_fn) nni_tls_verified,
};
int
-nni_http_conn_init_tls(nni_http_conn **connp, nng_tls_config *cfg, void *tcp)
+nni_http_conn_init_tls(
+ nni_http_conn **connp, struct nng_tls_config *cfg, void *tcp)
{
nni_tls *tls;
int rv;
@@ -756,7 +762,8 @@ nni_http_conn_init_tls(nni_http_conn **connp, nng_tls_config *cfg, void *tcp)
}
#else
int
-nni_http_conn_init_tls(nni_http_conn **connp, nng_tls_config *cfg, void *tcp)
+nni_http_conn_init_tls(
+ nni_http_conn **connp, struct nng_tls_config *cfg, void *tcp)
{
NNI_ARG_UNUSED(connp);
NNI_ARG_UNUSED(cfg);
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c
index 7aae45b2..40d4a19c 100644
--- a/src/supplemental/http/http_public.c
+++ b/src/supplemental/http/http_public.c
@@ -676,7 +676,7 @@ nng_http_server_del_handler(nng_http_server *srv, nng_http_handler *h)
}
int
-nng_http_server_set_tls(nng_http_server *srv, nng_tls_config *cfg)
+nng_http_server_set_tls(nng_http_server *srv, struct nng_tls_config *cfg)
{
#if defined(NNG_SUPP_HTTP) && defined(NNG_SUPP_TLS)
return (nni_http_server_set_tls(srv, cfg));
@@ -688,7 +688,7 @@ nng_http_server_set_tls(nng_http_server *srv, nng_tls_config *cfg)
}
int
-nng_http_server_get_tls(nng_http_server *srv, nng_tls_config **cfgp)
+nng_http_server_get_tls(nng_http_server *srv, struct nng_tls_config **cfgp)
{
#if defined(NNG_SUPP_HTTP) && defined(NNG_SUPP_TLS)
return (nni_http_server_get_tls(srv, cfgp));
@@ -734,7 +734,7 @@ nng_http_client_free(nng_http_client *cli)
}
int
-nng_http_client_set_tls(nng_http_client *cli, nng_tls_config *cfg)
+nng_http_client_set_tls(nng_http_client *cli, struct nng_tls_config *cfg)
{
#if defined(NNG_SUPP_HTTP) && defined(NNG_SUPP_TLS)
return (nni_http_client_set_tls(cli, cfg));
@@ -746,7 +746,7 @@ nng_http_client_set_tls(nng_http_client *cli, nng_tls_config *cfg)
}
int
-nng_http_client_get_tls(nng_http_client *cli, nng_tls_config **cfgp)
+nng_http_client_get_tls(nng_http_client *cli, struct nng_tls_config **cfgp)
{
#if defined(NNG_SUPP_HTTP) && defined(NNG_SUPP_TLS)
return (nni_http_client_get_tls(cli, cfgp));
diff --git a/src/supplemental/util/options.h b/src/supplemental/util/options.h
index 02b3a9d4..00cf1351 100644
--- a/src/supplemental/util/options.h
+++ b/src/supplemental/util/options.h
@@ -45,4 +45,4 @@ NNG_DECL int nng_opts_parse(int argc, const char **argv,
}
#endif
-#endif // NNG_SUPPLEMENTAL_UTIL_OPTIONS_H \ No newline at end of file
+#endif // NNG_SUPPLEMENTAL_UTIL_OPTIONS_H
diff --git a/src/supplemental/util/platform.c b/src/supplemental/util/platform.c
index ce52491a..fc0f839e 100644
--- a/src/supplemental/util/platform.c
+++ b/src/supplemental/util/platform.c
@@ -29,10 +29,6 @@ nng_msleep(nng_duration dur)
nni_msleep(dur);
}
-// nng_thread is a handle to a "thread", which may be a real system
-// thread, or a coroutine on some platforms.
-typedef struct nng_thread nng_thread;
-
// Create and start a thread. Note that on some platforms, this might
// actually be a coroutine, with limitations about what system APIs
// you can call. Therefore, these threads should only be used with the
@@ -111,8 +107,6 @@ struct nng_cv {
nni_cv c;
};
-typedef struct nng_cv nng_cv;
-
int
nng_cv_alloc(nng_cv **cvp, nng_mtx *mx)
{
diff --git a/tests/base64.c b/tests/base64.c
index eac84df2..6641928a 100644
--- a/tests/base64.c
+++ b/tests/base64.c
@@ -82,7 +82,5 @@ TestMain("Base64 Verification", {
enc, strlen(enc), buf, strlen(dec) - 1) == -1);
So(nni_base64_encode(enc, strlen(enc), buf, 0) == -1);
}
-
})
-
-});
+})
diff --git a/tests/files.c b/tests/files.c
index 9983d7d3..3690ef63 100644
--- a/tests/files.c
+++ b/tests/files.c
@@ -256,4 +256,4 @@ TestMain("Platform File Support", {
});
test_permissions();
-});
+})
diff --git a/tests/httpclient.c b/tests/httpclient.c
index 5180d13f..e167587e 100644
--- a/tests/httpclient.c
+++ b/tests/httpclient.c
@@ -71,7 +71,6 @@ TestMain("HTTP Client", {
nng_http_conn_read_res(http, res, aio);
nng_aio_wait(aio);
So(nng_aio_result(aio) == 0);
- printf("RESULT IS %d\n", nng_http_res_get_status(res));
So(nng_http_res_get_status(res) == 200);
Convey("The message contents are correct", {
@@ -107,4 +106,4 @@ TestMain("HTTP Client", {
});
});
});
-});
+})
diff --git a/tests/idhash.c b/tests/idhash.c
index 32751334..eb62fd76 100644
--- a/tests/idhash.c
+++ b/tests/idhash.c
@@ -24,7 +24,6 @@ Main({
So(nni_idhash_init(&h) == 0);
So(h != NULL);
- So(nni_idhash_count(h) == 0);
Reset({ nni_idhash_fini(h); });
@@ -32,7 +31,6 @@ Main({
char *five = "five";
char *four = "four";
rv = nni_idhash_insert(h, 5, five);
- So(nni_idhash_count(h) == 1);
So(rv == 0);
Convey("And we can find it", {
@@ -51,7 +49,6 @@ Main({
Convey("We can change the value", {
void *ptr;
So(nni_idhash_insert(h, 5, four) == 0);
- So(nni_idhash_count(h) == 1);
So(nni_idhash_find(h, 5, &ptr) == 0);
So(ptr == four);
});
@@ -59,7 +56,6 @@ Main({
void *ptr;
So(nni_idhash_insert(h, 13, four) ==
0);
- So(nni_idhash_count(h) == 2);
So(nni_idhash_find(h, 5, &ptr) == 0);
So(ptr == five);
So(nni_idhash_find(h, 13, &ptr) == 0);
@@ -120,7 +116,6 @@ Main({
nni_idhash *h;
So(nni_idhash_init(&h) == 0);
- So(nni_idhash_count(h) == 0);
Reset({ nni_idhash_fini(h); });
@@ -128,13 +123,11 @@ Main({
for (i = 0; i < 1024; i++) {
nni_idhash_insert(h, i, &expect[i]);
}
- So(nni_idhash_count(h) == 1024);
Convey("We can remove them", {
for (i = 0; i < 1024; i++) {
nni_idhash_remove(h, i);
}
- So(nni_idhash_count(h) == 0);
});
});
});
@@ -175,4 +168,4 @@ Main({
});
});
});
-});
+})
diff --git a/tests/ipc.c b/tests/ipc.c
index 4c8f5e41..5956b5d3 100644
--- a/tests/ipc.c
+++ b/tests/ipc.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
@@ -69,7 +69,7 @@ check_props(nng_msg *msg)
#ifdef NNG_HAVE_GETPEERUCRED
So(nng_pipe_getopt_uint64(p, NNG_OPT_IPC_PEER_ZONEID, &id) == 0);
- So(id == getzoneid());
+ So(id == (uint64_t) getzoneid());
#else
So(nng_pipe_getopt_uint64(p, NNG_OPT_IPC_PEER_ZONEID, &id) ==
NNG_ENOTSUP);
diff --git a/tests/ipcperms.c b/tests/ipcperms.c
index 84801efd..6d083d00 100644
--- a/tests/ipcperms.c
+++ b/tests/ipcperms.c
@@ -30,6 +30,12 @@
#define ADDR "/tmp/ipc_perms_test"
+#if defined(__sun)
+#define honor_chmod() false
+#else
+#define honor_chmod() true
+#endif
+
// Inproc tests.
#ifdef _WIN32
@@ -78,6 +84,9 @@ TestMain("IPC Permissions", {
if (geteuid() == 0) {
Skip("Running as root");
}
+ if (!honor_chmod()) {
+ Skip("System does not honor chmod");
+ }
strcpy(sa.sun_path, ADDR);
sa.sun_family = AF_UNIX;
So((cfd = socket(AF_UNIX, SOCK_STREAM, 0)) >=
@@ -111,4 +120,4 @@ TestMain("IPC Permissions", {
NNG_ENOTSUP);
});
})
-#endif \ No newline at end of file
+#endif
diff --git a/tests/ipcwinsec.c b/tests/ipcwinsec.c
index 80ec163c..e6d2a205 100644
--- a/tests/ipcwinsec.c
+++ b/tests/ipcwinsec.c
@@ -197,4 +197,4 @@ TestMain("IPC Security Descriptor", {
sdesc) == NNG_ENOTSUP);
});
})
-#endif \ No newline at end of file
+#endif
diff --git a/tests/message.c b/tests/message.c
index 7f40cd38..d680c100 100644
--- a/tests/message.c
+++ b/tests/message.c
@@ -253,4 +253,4 @@ TestMain("Message Tests", {
});
});
-});
+})
diff --git a/tests/multistress.c b/tests/multistress.c
index 1ae6f323..d88d0af5 100644
--- a/tests/multistress.c
+++ b/tests/multistress.c
@@ -650,4 +650,4 @@ Main({
}
});
});
-});
+})
diff --git a/tests/options.c b/tests/options.c
index 166af37c..db04eea6 100644
--- a/tests/options.c
+++ b/tests/options.c
@@ -248,5 +248,4 @@ TestMain("Option Parsing", {
So(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
So(opti == 6);
});
-
-});
+})
diff --git a/tests/pipe.c b/tests/pipe.c
index b81f72b8..3457db9b 100644
--- a/tests/pipe.c
+++ b/tests/pipe.c
@@ -146,4 +146,4 @@ TestMain("Pipe notify works", {
});
});
});
-});
+})
diff --git a/tests/pipeline.c b/tests/pipeline.c
index 2b61d99a..f7d89367 100644
--- a/tests/pipeline.c
+++ b/tests/pipeline.c
@@ -166,4 +166,4 @@ TestMain("PIPELINE (PUSH/PULL) pattern", {
So(nng_recvmsg(pull1, &abc, 0) == NNG_ETIMEDOUT);
So(nng_recvmsg(pull2, &abc, 0) == NNG_ETIMEDOUT);
});
-});
+})
diff --git a/tests/reconnect.c b/tests/reconnect.c
index 6b4e8586..d13e6ad9 100644
--- a/tests/reconnect.c
+++ b/tests/reconnect.c
@@ -101,4 +101,4 @@ TestMain("Reconnect works", {
});
});
});
-});
+})
diff --git a/tests/reqctx.c b/tests/reqctx.c
index 4aae2e24..de9f1ef2 100644
--- a/tests/reqctx.c
+++ b/tests/reqctx.c
@@ -26,9 +26,10 @@ static struct {
} rep_state;
void
-rep_cb(void)
+rep_cb(void *notused)
{
int rv;
+ (void) notused;
if (rep_state.state == START) {
rep_state.state = RECV;
@@ -94,7 +95,7 @@ TestMain("REQ concurrent contexts", {
Convey("We can use REQ contexts concurrently", {
nng_socket req;
- So(nng_aio_alloc(&rep_state.aio, (void *) rep_cb, NULL) == 0);
+ So(nng_aio_alloc(&rep_state.aio, rep_cb, NULL) == 0);
So(nng_rep_open(&rep_state.s) == 0);
So(nng_req_open(&req) == 0);
@@ -137,7 +138,7 @@ TestMain("REQ concurrent contexts", {
nng_msleep(100); // let things establish.
// Start the rep state machine going.
- rep_cb();
+ rep_cb(NULL);
for (i = 0; i < NCTX; i++) {
if ((rv = nng_ctx_open(&ctxs[i], req)) != 0) {
@@ -255,4 +256,4 @@ TestMain("REQ concurrent contexts", {
nng_close(req);
});
});
-});
+})
diff --git a/tests/reqpoll.c b/tests/reqpoll.c
index aeee7d0b..e1a996dd 100644
--- a/tests/reqpoll.c
+++ b/tests/reqpoll.c
@@ -145,4 +145,4 @@ TestMain("REQ pollable", {
});
});
});
-});
+})
diff --git a/tests/reqstress.c b/tests/reqstress.c
index 3f1e7396..81249946 100644
--- a/tests/reqstress.c
+++ b/tests/reqstress.c
@@ -274,4 +274,4 @@ Main({
}
});
});
-});
+})
diff --git a/tests/respondpoll.c b/tests/respondpoll.c
index 2e24b5b2..5dd34c7f 100644
--- a/tests/respondpoll.c
+++ b/tests/respondpoll.c
@@ -106,4 +106,4 @@ TestMain("Respondent pollable", {
});
});
});
-});
+})
diff --git a/tests/scalability.c b/tests/scalability.c
index 84395f9d..38137e90 100644
--- a/tests/scalability.c
+++ b/tests/scalability.c
@@ -13,8 +13,8 @@
#include "protocol/reqrep0/rep.h"
#include "protocol/reqrep0/req.h"
-#include "supplemental/util/platform.h"
#include "stubs.h"
+#include "supplemental/util/platform.h"
#include <string.h>
@@ -22,7 +22,7 @@ static int nclients = 200;
static char *addr = "inproc:///atscale";
nng_socket rep;
-nng_thread *server;
+nng_thread * server;
void
serve(void *arg)
@@ -124,4 +124,4 @@ Main({
free(clients);
free(results);
-});
+})
diff --git a/tests/sha1.c b/tests/sha1.c
index 9f1901e0..1aa137d7 100644
--- a/tests/sha1.c
+++ b/tests/sha1.c
@@ -60,4 +60,4 @@ TestMain("SHA1 Verification", {
So(strcmp(strout, resultarray[i]) == 0);
}
});
-});
+})
diff --git a/tests/survey.c b/tests/survey.c
index ed73b3dd..d6d35c1b 100644
--- a/tests/survey.c
+++ b/tests/survey.c
@@ -332,4 +332,4 @@ TestMain("SURVEY pattern", {
So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT);
});
-});
+})
diff --git a/tests/surveyctx.c b/tests/surveyctx.c
index aa36eca1..b3843e9d 100644
--- a/tests/surveyctx.c
+++ b/tests/surveyctx.c
@@ -26,9 +26,10 @@ static struct {
} resp_state;
void
-resp_cb(void)
+resp_cb(void *notused)
{
int rv;
+ (void) notused;
if (resp_state.state == START) {
resp_state.state = RECV;
@@ -94,8 +95,7 @@ TestMain("Surveyor concurrent contexts", {
Convey("We can use Surveyor contexts concurrently", {
nng_socket surv = NNG_SOCKET_INITIALIZER;
- So(nng_aio_alloc(&resp_state.aio, (void *) resp_cb, NULL) ==
- 0);
+ So(nng_aio_alloc(&resp_state.aio, resp_cb, NULL) == 0);
So(nng_respondent0_open(&resp_state.s) == 0);
So(nng_surveyor0_open(&surv) == 0);
@@ -139,7 +139,7 @@ TestMain("Surveyor concurrent contexts", {
nng_msleep(100); // let things establish.
// Start the rep state machine going.
- resp_cb();
+ resp_cb(NULL);
for (i = 0; i < NCTX; i++) {
if ((rv = nng_ctx_open(&ctxs[i], surv)) != 0) {
@@ -303,4 +303,4 @@ TestMain("Surveyor concurrent contexts", {
So(nng_ctx_open(&ctx, surv) == NNG_ENOTSUP);
nng_close(surv);
});
-});
+})
diff --git a/tests/surveypoll.c b/tests/surveypoll.c
index f97e1c22..a2264d3e 100644
--- a/tests/surveypoll.c
+++ b/tests/surveypoll.c
@@ -123,4 +123,4 @@ TestMain("Survey pollable", {
});
});
});
-});
+})
diff --git a/tests/udp.c b/tests/udp.c
index b0def72a..15520791 100644
--- a/tests/udp.c
+++ b/tests/udp.c
@@ -292,5 +292,4 @@ TestMain("UDP support", {
So(nni_plat_udp_open(&u2, &sa) == NNG_EADDRINUSE);
nni_plat_udp_close(u1);
});
-
-});
+})