fixes #735 epbase seems to have no purpose
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aaeb9a4..3e148b4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -38,7 +38,6 @@
core/ep.h
core/ep.c
- core/epbase.c
core/global.h
core/global.c
core/pipe.c
diff --git a/src/core/ep.c b/src/core/ep.c
index 94b5f5e..a39f01a 100644
--- a/src/core/ep.c
+++ b/src/core/ep.c
@@ -1,6 +1,7 @@
/*
Copyright (c) 2012 Martin Sustrik All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -54,7 +55,6 @@
src, self, &sock->fsm);
self->state = NN_EP_STATE_IDLE;
- self->epbase = NULL;
self->sock = sock;
self->eid = eid;
self->last_errno = 0;
@@ -67,9 +67,9 @@
/* Create transport-specific part of the endpoint. */
if (bind)
- rc = transport->bind ((void*) self, &self->epbase);
+ rc = transport->bind (self);
else
- rc = transport->connect ((void*) self, &self->epbase);
+ rc = transport->connect (self);
/* Endpoint creation failed. */
if (rc < 0) {
@@ -85,7 +85,7 @@
{
nn_assert_state (self, NN_EP_STATE_IDLE);
- self->epbase->vfptr->destroy (self->epbase);
+ self->vfptr->destroy (self);
nn_list_item_term (&self->item);
nn_fsm_term (&self->fsm);
}
@@ -143,7 +143,7 @@
ep = nn_cont (self, struct nn_ep, fsm);
if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
- ep->epbase->vfptr->stop (ep->epbase);
+ ep->vfptr->stop (ep);
ep->state = NN_EP_STATE_STOPPING;
return;
}
@@ -228,3 +228,24 @@
{
nn_sock_stat_increment (self->sock, name, increment);
}
+
+/* Get transport private state object. */
+void *nn_ep_tran_private (struct nn_ep *self)
+{
+ return self->tran_private;
+}
+
+int nn_ep_ispeer_ep (struct nn_ep *self, struct nn_ep *other)
+{
+ return nn_ep_ispeer (self, other->sock->socktype->protocol);
+}
+
+/* Set up an ep for use by a transport. Note that the core will already have
+ done most of the initialization steps. The associated data can be retrieved
+ later with nn_ep_tran_private(). */
+void nn_ep_tran_setup (struct nn_ep *ep, const struct nn_ep_vfptr *vfptr,
+ void *data)
+{
+ ep->vfptr = vfptr;
+ ep->tran_private = data;
+}
diff --git a/src/core/ep.h b/src/core/ep.h
index d32c23b..1e44930 100644
--- a/src/core/ep.h
+++ b/src/core/ep.h
@@ -35,15 +35,21 @@
struct nn_ep {
struct nn_fsm fsm;
int state;
- struct nn_epbase *epbase;
struct nn_sock *sock;
struct nn_ep_options options;
int eid;
struct nn_list_item item;
char addr [NN_SOCKADDR_MAX + 1];
+ int protocol;
/* Error state for endpoint */
int last_errno;
+
+ /* Transport private state structure */
+ void *tran_private;
+
+ /* Transport specific operations */
+ const struct nn_ep_vfptr *vfptr;
};
int nn_ep_init (struct nn_ep *self, int src, struct nn_sock *sock, int eid,
diff --git a/src/core/epbase.c b/src/core/epbase.c
deleted file mode 100644
index 28e0905..0000000
--- a/src/core/epbase.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- Copyright (c) 2013 Martin Sustrik All rights reserved.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom
- the Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
-*/
-
-#include "../transport.h"
-
-#include "ep.h"
-#include "sock.h"
-#include "../utils/attr.h"
-
-void nn_epbase_init (struct nn_epbase *self,
- const struct nn_epbase_vfptr *vfptr, void *hint)
-{
- self->vfptr = vfptr;
- self->ep = (struct nn_ep*) hint;
-}
-
-void nn_epbase_term (NN_UNUSED struct nn_epbase *self)
-{
-}
-
-void nn_epbase_stopped (struct nn_epbase *self)
-{
- nn_ep_stopped (self->ep);
-}
-
-struct nn_ctx *nn_epbase_getctx (struct nn_epbase *self)
-{
- return nn_ep_getctx (self->ep);
-}
-
-const char *nn_epbase_getaddr (struct nn_epbase *self)
-{
- return nn_ep_getaddr (self->ep);
-}
-
-void nn_epbase_getopt (struct nn_epbase *self, int level, int option,
- void *optval, size_t *optvallen)
-{
- nn_ep_getopt (self->ep, level, option, optval, optvallen);
-}
-
-int nn_epbase_ispeer (struct nn_epbase *self, int socktype)
-{
- return nn_ep_ispeer (self->ep, socktype);
-}
-
-void nn_epbase_set_error (struct nn_epbase *self, int errnum)
-{
- nn_ep_set_error (self->ep, errnum);
-}
-
-void nn_epbase_clear_error (struct nn_epbase *self)
-{
- nn_ep_clear_error (self->ep);
-}
-
-void nn_epbase_stat_increment(struct nn_epbase *self, int name, int increment) {
- nn_ep_stat_increment(self->ep, name, increment);
-}
diff --git a/src/core/pipe.c b/src/core/pipe.c
index 5308c3a..e495b80 100644
--- a/src/core/pipe.c
+++ b/src/core/pipe.c
@@ -48,18 +48,17 @@
#define NN_PIPEBASE_OUTSTATE_ASYNC 4
void nn_pipebase_init (struct nn_pipebase *self,
- const struct nn_pipebase_vfptr *vfptr, struct nn_epbase *epbase)
+ const struct nn_pipebase_vfptr *vfptr, struct nn_ep *ep)
{
- nn_assert (epbase->ep->sock);
+ nn_assert (ep->sock);
- nn_fsm_init (&self->fsm, NULL, NULL, 0, self, &epbase->ep->sock->fsm);
+ nn_fsm_init (&self->fsm, NULL, NULL, 0, self, &ep->sock->fsm);
self->vfptr = vfptr;
self->state = NN_PIPEBASE_STATE_IDLE;
self->instate = NN_PIPEBASE_INSTATE_DEACTIVATED;
self->outstate = NN_PIPEBASE_OUTSTATE_DEACTIVATED;
- self->sock = epbase->ep->sock;
- memcpy (&self->options, &epbase->ep->options,
- sizeof (struct nn_ep_options));
+ self->sock = ep->sock;
+ memcpy (&self->options, &ep->options, sizeof (struct nn_ep_options));
nn_fsm_event_init (&self->in);
nn_fsm_event_init (&self->out);
}
@@ -223,4 +222,3 @@
pipebase = (struct nn_pipebase*) self;
nn_pipebase_getopt (pipebase, level, option, optval, optvallen);
}
-
diff --git a/src/transport.h b/src/transport.h
index d56a77a..86fb817 100644
--- a/src/transport.h
+++ b/src/transport.h
@@ -1,6 +1,7 @@
/*
Copyright (c) 2012-2014 Martin Sustrik All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -64,57 +65,54 @@
by each nn_bind() or nn_connect() call. Each endpoint is associated with
exactly one address string (e.g. "tcp://127.0.0.1:5555"). */
-struct nn_epbase;
+struct nn_ep;
-struct nn_epbase_vfptr {
+struct nn_ep_vfptr {
/* Ask the endpoint to stop itself. The endpoint is allowed to linger
to send the pending outbound data. When done, it reports the fact by
- invoking nn_epbase_stopped() function. */
- void (*stop) (struct nn_epbase *self);
+ invoking nn_ep_stopped() function. */
+ void (*stop) (struct nn_ep *);
/* Deallocate the endpoint object. */
- void (*destroy) (struct nn_epbase *self);
+ void (*destroy) (struct nn_ep *);
};
-struct nn_epbase {
- const struct nn_epbase_vfptr *vfptr;
- struct nn_ep *ep;
-};
+/* Gets the opaque value stored by a transport at setup time. */
+void *nn_ep_tran_private (struct nn_ep *);
-/* Creates a new endpoint. 'hint' parameter is an opaque value that
- was passed to transport's bind or connect function. */
-void nn_epbase_init (struct nn_epbase *self,
- const struct nn_epbase_vfptr *vfptr, void *hint);
+/* Set up an ep for use by a transport. The final opaque argument can be
+ accessed later by calling nn_ep_tran_private(). */
+void nn_ep_tran_setup (struct nn_ep *, const struct nn_ep_vfptr *, void *);
/* Notify the user that stopping is done. */
-void nn_epbase_stopped (struct nn_epbase *self);
-
-/* Terminate the epbase object. */
-void nn_epbase_term (struct nn_epbase *self);
+void nn_ep_stopped (struct nn_ep *);
/* Returns the AIO context associated with the endpoint. */
-struct nn_ctx *nn_epbase_getctx (struct nn_epbase *self);
+struct nn_ctx *nn_ep_getctx (struct nn_ep *);
/* Returns the address string associated with this endpoint. */
-const char *nn_epbase_getaddr (struct nn_epbase *self);
+const char *nn_ep_getaddr (struct nn_ep *self);
/* Retrieve value of a socket option. */
-void nn_epbase_getopt (struct nn_epbase *self, int level, int option,
+void nn_ep_getopt (struct nn_ep *, int level, int option,
void *optval, size_t *optvallen);
-/* Returns 1 is the specified socket type is a valid peer for this socket,
+/* Returns 1 if the specified socket type is a valid peer for this socket,
or 0 otherwise. */
-int nn_epbase_ispeer (struct nn_epbase *self, int socktype);
+int nn_ep_ispeer (struct nn_ep *, int socktype);
+
+/* Returns 1 if the ep's are valid peers for each other, 0 otherwise. */
+int nn_ep_ispeer_ep (struct nn_ep *, struct nn_ep *);
/* Notifies a monitoring system the error on this endpoint */
-void nn_epbase_set_error(struct nn_epbase *self, int errnum);
+void nn_ep_set_error(struct nn_ep*, int errnum);
/* Notifies a monitoring system that error is gone */
-void nn_epbase_clear_error(struct nn_epbase *self);
+void nn_ep_clear_error(struct nn_ep *);
/* Increments statistics counters in the socket structure */
-void nn_epbase_stat_increment(struct nn_epbase *self, int name, int increment);
+void nn_ep_stat_increment(struct nn_ep *, int name, int increment);
/******************************************************************************/
@@ -176,7 +174,7 @@
/* Initialise the pipe. */
void nn_pipebase_init (struct nn_pipebase *self,
- const struct nn_pipebase_vfptr *vfptr, struct nn_epbase *epbase);
+ const struct nn_pipebase_vfptr *vfptr, struct nn_ep *ep);
/* Terminate the pipe. */
void nn_pipebase_term (struct nn_pipebase *self);
@@ -222,14 +220,13 @@
void (*init) (void);
void (*term) (void);
- /* Each of these functions creates an endpoint and returns the newly
- created endpoint in 'epbase' parameter. 'hint' is in opaque pointer
- to be passed to nn_epbase_init(). The epbase object can then be used
- to retrieve the address to bind/connect to. These functions are guarded
- by a socket-wide critical section. Two of these function will never be
- invoked in parallel on the same socket. */
- int (*bind) (void *hint, struct nn_epbase **epbase);
- int (*connect) (void *hint, struct nn_epbase **epbase);
+ /* Each of these functions creates an endpoint and sets up the newly
+ established endpoint in 'ep' parameter using nn_ep_tran_setup ().
+ These functions are guarded by a socket-wide critical section.
+ Two of these function will never be invoked in parallel on the same
+ socket. */
+ int (*bind) (struct nn_ep *);
+ int (*connect) (struct nn_ep *);
/* Create an object to hold transport-specific socket options.
Set this member to NULL in case there are no transport-specific
diff --git a/src/transports/inproc/binproc.c b/src/transports/inproc/binproc.c
index af96045..d7fc7d6 100644
--- a/src/transports/inproc/binproc.c
+++ b/src/transports/inproc/binproc.c
@@ -1,6 +1,7 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -37,10 +38,10 @@
#define NN_BINPROC_SRC_SINPROC 1
-/* Implementation of nn_epbase interface. */
-static void nn_binproc_stop (struct nn_epbase *self);
-static void nn_binproc_destroy (struct nn_epbase *self);
-static const struct nn_epbase_vfptr nn_binproc_vfptr = {
+/* Implementation of nn_ep interface. */
+static void nn_binproc_stop (struct nn_ep *);
+static void nn_binproc_destroy (struct nn_ep *);
+static const struct nn_ep_vfptr nn_binproc_vfptr = {
nn_binproc_stop,
nn_binproc_destroy
};
@@ -54,7 +55,7 @@
struct nn_ins_item *peer);
-int nn_binproc_create (void *hint, struct nn_epbase **epbase)
+int nn_binproc_create (struct nn_ep *ep)
{
int rc;
struct nn_binproc *self;
@@ -62,9 +63,9 @@
self = nn_alloc (sizeof (struct nn_binproc), "binproc");
alloc_assert (self);
- nn_ins_item_init (&self->item, &nn_binproc_vfptr, hint);
+ nn_ins_item_init (&self->item, ep);
nn_fsm_init_root (&self->fsm, nn_binproc_handler, nn_binproc_shutdown,
- nn_epbase_getctx (&self->item.epbase));
+ nn_ep_getctx (ep));
self->state = NN_BINPROC_STATE_IDLE;
nn_list_init (&self->sinprocs);
@@ -73,7 +74,7 @@
/* Register the inproc endpoint into a global repository. */
rc = nn_ins_bind (&self->item, nn_binproc_connect);
- if (nn_slow (rc < 0)) {
+ if (rc < 0) {
nn_list_term (&self->sinprocs);
/* TODO: Now, this is ugly! We are getting the state machine into
@@ -86,24 +87,24 @@
return rc;
}
- *epbase = &self->item.epbase;
+ nn_ep_tran_setup (ep, &nn_binproc_vfptr, self);
return 0;
}
-static void nn_binproc_stop (struct nn_epbase *self)
+static void nn_binproc_stop (struct nn_ep *ep)
{
struct nn_binproc *binproc;
- binproc = nn_cont (self, struct nn_binproc, item.epbase);
+ binproc = nn_ep_tran_private (ep);
nn_fsm_stop (&binproc->fsm);
}
-static void nn_binproc_destroy (struct nn_epbase *self)
+static void nn_binproc_destroy (struct nn_ep *ep)
{
struct nn_binproc *binproc;
- binproc = nn_cont (self, struct nn_binproc, item.epbase);
+ binproc = nn_ep_tran_private (ep);
nn_list_term (&binproc->sinprocs);
nn_fsm_term (&binproc->fsm);
@@ -127,13 +128,12 @@
sinproc = nn_alloc (sizeof (struct nn_sinproc), "sinproc");
alloc_assert (sinproc);
nn_sinproc_init (sinproc, NN_BINPROC_SRC_SINPROC,
- &binproc->item.epbase, &binproc->fsm);
+ binproc->item.ep, &binproc->fsm);
nn_list_insert (&binproc->sinprocs, &sinproc->item,
nn_list_end (&binproc->sinprocs));
nn_sinproc_connect (sinproc, &cinproc->fsm);
- nn_epbase_stat_increment (&binproc->item.epbase,
- NN_STAT_ACCEPTED_CONNECTIONS, 1);
+ nn_ep_stat_increment (binproc->item.ep, NN_STAT_ACCEPTED_CONNECTIONS, 1);
}
static void nn_binproc_shutdown (struct nn_fsm *self, int src, int type,
@@ -162,7 +162,7 @@
binproc->state = NN_BINPROC_STATE_STOPPING;
goto finish;
}
- if (nn_slow (binproc->state == NN_BINPROC_STATE_STOPPING)) {
+ if (binproc->state == NN_BINPROC_STATE_STOPPING) {
nn_assert (src == NN_BINPROC_SRC_SINPROC && type == NN_SINPROC_STOPPED);
sinproc = (struct nn_sinproc*) srcptr;
nn_list_erase (&binproc->sinprocs, &sinproc->item);
@@ -173,7 +173,7 @@
return;
binproc->state = NN_BINPROC_STATE_IDLE;
nn_fsm_stopped_noevent (&binproc->fsm);
- nn_epbase_stopped (&binproc->item.epbase);
+ nn_ep_stopped (binproc->item.ep);
return;
}
@@ -223,7 +223,7 @@
sinproc = nn_alloc (sizeof (struct nn_sinproc), "sinproc");
alloc_assert (sinproc);
nn_sinproc_init (sinproc, NN_BINPROC_SRC_SINPROC,
- &binproc->item.epbase, &binproc->fsm);
+ binproc->item.ep, &binproc->fsm);
nn_list_insert (&binproc->sinprocs, &sinproc->item,
nn_list_end (&binproc->sinprocs));
nn_sinproc_accept (sinproc, peer);
@@ -246,4 +246,3 @@
nn_fsm_bad_state (binproc->state, src, type);
}
}
-
diff --git a/src/transports/inproc/binproc.h b/src/transports/inproc/binproc.h
index 4516bfa..0320673 100644
--- a/src/transports/inproc/binproc.h
+++ b/src/transports/inproc/binproc.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -46,6 +47,6 @@
struct nn_list sinprocs;
};
-int nn_binproc_create (void *hint, struct nn_epbase **epbase);
+int nn_binproc_create (struct nn_ep *);
#endif
diff --git a/src/transports/inproc/cinproc.c b/src/transports/inproc/cinproc.c
index 00c1bb7..06d9466 100644
--- a/src/transports/inproc/cinproc.c
+++ b/src/transports/inproc/cinproc.c
@@ -1,6 +1,7 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -40,10 +41,10 @@
#define NN_CINPROC_SRC_SINPROC 1
-/* Implementation of nn_epbase callback interface. */
-static void nn_cinproc_stop (struct nn_epbase *self);
-static void nn_cinproc_destroy (struct nn_epbase *self);
-static const struct nn_epbase_vfptr nn_cinproc_vfptr = {
+/* Implementation of nn_ep callback interface. */
+static void nn_cinproc_stop (struct nn_ep *);
+static void nn_cinproc_destroy (struct nn_ep *);
+static const struct nn_ep_vfptr nn_cinproc_vfptr = {
nn_cinproc_stop,
nn_cinproc_destroy
};
@@ -56,21 +57,22 @@
static void nn_cinproc_connect (struct nn_ins_item *self,
struct nn_ins_item *peer);
-int nn_cinproc_create (void *hint, struct nn_epbase **epbase)
+int nn_cinproc_create (struct nn_ep *ep)
{
struct nn_cinproc *self;
self = nn_alloc (sizeof (struct nn_cinproc), "cinproc");
alloc_assert (self);
- nn_ins_item_init (&self->item, &nn_cinproc_vfptr, hint);
+ nn_ep_tran_setup (ep, &nn_cinproc_vfptr, self);
+
+ nn_ins_item_init (&self->item, ep);
nn_fsm_init_root (&self->fsm, nn_cinproc_handler, nn_cinproc_shutdown,
- nn_epbase_getctx (&self->item.epbase));
+ nn_ep_getctx (ep));
self->state = NN_CINPROC_STATE_IDLE;
nn_list_init (&self->sinprocs);
- nn_epbase_stat_increment (&self->item.epbase,
- NN_STAT_INPROGRESS_CONNECTIONS, 1);
+ nn_ep_stat_increment (ep, NN_STAT_INPROGRESS_CONNECTIONS, 1);
/* Start the state machine. */
nn_fsm_start (&self->fsm);
@@ -78,24 +80,23 @@
/* Register the inproc endpoint into a global repository. */
nn_ins_connect (&self->item, nn_cinproc_connect);
- *epbase = &self->item.epbase;
return 0;
}
-static void nn_cinproc_stop (struct nn_epbase *self)
+static void nn_cinproc_stop (struct nn_ep *ep)
{
struct nn_cinproc *cinproc;
- cinproc = nn_cont (self, struct nn_cinproc, item.epbase);
+ cinproc = nn_ep_tran_private (ep);
nn_fsm_stop (&cinproc->fsm);
}
-static void nn_cinproc_destroy (struct nn_epbase *self)
+static void nn_cinproc_destroy (struct nn_ep *ep)
{
struct nn_cinproc *cinproc;
- cinproc = nn_cont (self, struct nn_cinproc, item.epbase);
+ cinproc = nn_ep_tran_private (ep);
nn_list_term (&cinproc->sinprocs);
nn_fsm_term (&cinproc->fsm);
@@ -119,17 +120,15 @@
sinproc = nn_alloc (sizeof (struct nn_sinproc), "sinproc");
alloc_assert (sinproc);
nn_sinproc_init (sinproc, NN_CINPROC_SRC_SINPROC,
- &cinproc->item.epbase, &cinproc->fsm);
+ cinproc->item.ep, &cinproc->fsm);
nn_list_insert (&cinproc->sinprocs, &sinproc->item,
nn_list_end (&cinproc->sinprocs));
nn_sinproc_connect (sinproc, &binproc->fsm);
- nn_epbase_stat_increment (&cinproc->item.epbase,
- NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&cinproc->item.epbase,
- NN_STAT_ESTABLISHED_CONNECTIONS, 1);
+ nn_ep_stat_increment (cinproc->item.ep, NN_STAT_INPROGRESS_CONNECTIONS, -1);
+ nn_ep_stat_increment (cinproc->item.ep, NN_STAT_ESTABLISHED_CONNECTIONS, 1);
}
static void nn_cinproc_shutdown (struct nn_fsm *self, int src, int type,
@@ -141,7 +140,7 @@
cinproc = nn_cont (self, struct nn_cinproc, fsm);
- if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
+ if (src == NN_FSM_ACTION && type == NN_FSM_STOP) {
/* First, unregister the endpoint from the global repository of inproc
endpoints. This way, new connections cannot be created anymore. */
@@ -157,7 +156,7 @@
cinproc->state = NN_CINPROC_STATE_STOPPING;
goto finish;
}
- if (nn_slow (cinproc->state == NN_CINPROC_STATE_STOPPING)) {
+ if (cinproc->state == NN_CINPROC_STATE_STOPPING) {
sinproc = (struct nn_sinproc *) srcptr;
nn_list_erase (&cinproc->sinprocs, &sinproc->item);
nn_sinproc_term (sinproc);
@@ -168,7 +167,7 @@
return;
cinproc->state = NN_CINPROC_STATE_IDLE;
nn_fsm_stopped_noevent (&cinproc->fsm);
- nn_epbase_stopped (&cinproc->item.epbase);
+ nn_ep_stopped (cinproc->item.ep);
return;
}
@@ -219,13 +218,13 @@
sinproc = nn_alloc (sizeof (struct nn_sinproc), "sinproc");
alloc_assert (sinproc);
nn_sinproc_init (sinproc, NN_CINPROC_SRC_SINPROC,
- &cinproc->item.epbase, &cinproc->fsm);
+ cinproc->item.ep, &cinproc->fsm);
nn_list_insert (&cinproc->sinprocs, &sinproc->item,
nn_list_end (&cinproc->sinprocs));
nn_sinproc_accept (sinproc, peer);
- nn_epbase_stat_increment (&cinproc->item.epbase,
+ nn_ep_stat_increment (cinproc->item.ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&cinproc->item.epbase,
+ nn_ep_stat_increment (cinproc->item.ep,
NN_STAT_ESTABLISHED_CONNECTIONS, 1);
return;
default:
@@ -235,7 +234,7 @@
case NN_CINPROC_SRC_SINPROC:
switch (type) {
case NN_SINPROC_DISCONNECT:
- nn_epbase_stat_increment (&cinproc->item.epbase,
+ nn_ep_stat_increment (cinproc->item.ep,
NN_STAT_INPROGRESS_CONNECTIONS, 1);
return;
}
@@ -252,4 +251,3 @@
nn_fsm_bad_state (cinproc->state, src, type);
}
}
-
diff --git a/src/transports/inproc/cinproc.h b/src/transports/inproc/cinproc.h
index 8a6355e..c5d7c0b 100644
--- a/src/transports/inproc/cinproc.h
+++ b/src/transports/inproc/cinproc.h
@@ -46,7 +46,7 @@
struct nn_list sinprocs;
};
-int nn_cinproc_create (void *hint, struct nn_epbase **epbase);
+int nn_cinproc_create (struct nn_ep *);
#endif
diff --git a/src/transports/inproc/inproc.c b/src/transports/inproc/inproc.c
index 9f994f5..a77f8fa 100644
--- a/src/transports/inproc/inproc.c
+++ b/src/transports/inproc/inproc.c
@@ -33,8 +33,8 @@
/* nn_transport interface. */
static void nn_inproc_init (void);
static void nn_inproc_term (void);
-static int nn_inproc_bind (void *hint, struct nn_epbase **epbase);
-static int nn_inproc_connect (void *hint, struct nn_epbase **epbase);
+static int nn_inproc_bind (struct nn_ep *);
+static int nn_inproc_connect (struct nn_ep *);
static struct nn_transport nn_inproc_vfptr = {
"inproc",
@@ -59,13 +59,13 @@
nn_ins_term ();
}
-static int nn_inproc_bind (void *hint, struct nn_epbase **epbase)
+static int nn_inproc_bind (struct nn_ep *ep)
{
- return nn_binproc_create (hint, epbase);
+ return nn_binproc_create (ep);
}
-static int nn_inproc_connect (void *hint, struct nn_epbase **epbase)
+static int nn_inproc_connect (struct nn_ep *ep)
{
- return nn_cinproc_create (hint, epbase);
+ return nn_cinproc_create (ep);
}
diff --git a/src/transports/inproc/ins.c b/src/transports/inproc/ins.c
index b8e08eb..2bd39fe 100644
--- a/src/transports/inproc/ins.c
+++ b/src/transports/inproc/ins.c
@@ -48,23 +48,15 @@
inproc endpoints in the current process. */
static struct nn_ins self;
-void nn_ins_item_init (struct nn_ins_item *self,
- const struct nn_epbase_vfptr *vfptr, void *hint)
+void nn_ins_item_init (struct nn_ins_item *self, struct nn_ep *ep)
{
- size_t sz;
-
- nn_epbase_init (&self->epbase, vfptr, hint);
+ self->ep = ep;
nn_list_item_init (&self->item);
- sz = sizeof (self->protocol);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_PROTOCOL,
- &self->protocol, &sz);
- nn_assert (sz == sizeof (self->protocol));
}
void nn_ins_item_term (struct nn_ins_item *self)
{
nn_list_item_term (&self->item);
- nn_epbase_term (&self->epbase);
}
void nn_ins_init (void)
@@ -93,8 +85,10 @@
for (it = nn_list_begin (&self.bound); it != nn_list_end (&self.bound);
it = nn_list_next (&self.bound, it)) {
bitem = nn_cont (it, struct nn_ins_item, item);
- if (strncmp (nn_epbase_getaddr (&item->epbase),
- nn_epbase_getaddr (&bitem->epbase), NN_SOCKADDR_MAX) == 0) {
+
+ if (strncmp (nn_ep_getaddr(bitem->ep), nn_ep_getaddr(item->ep),
+ NN_SOCKADDR_MAX) == 0) {
+
nn_mutex_unlock (&self.sync);
return -EADDRINUSE;
}
@@ -109,11 +103,11 @@
it != nn_list_end (&self.connected);
it = nn_list_next (&self.connected, it)) {
citem = nn_cont (it, struct nn_ins_item, item);
- if (strncmp (nn_epbase_getaddr (&item->epbase),
- nn_epbase_getaddr (&citem->epbase), NN_SOCKADDR_MAX) == 0) {
+ if (strncmp (nn_ep_getaddr(item->ep), nn_ep_getaddr(citem->ep),
+ NN_SOCKADDR_MAX) == 0) {
/* Check whether the two sockets are compatible. */
- if (!nn_epbase_ispeer (&item->epbase, citem->protocol))
+ if (!nn_ep_ispeer_ep (item->ep, citem->ep))
continue;
fn (item, citem);
@@ -141,11 +135,12 @@
it != nn_list_end (&self.bound);
it = nn_list_next (&self.bound, it)) {
bitem = nn_cont (it, struct nn_ins_item, item);
- if (strncmp (nn_epbase_getaddr (&item->epbase),
- nn_epbase_getaddr (&bitem->epbase), NN_SOCKADDR_MAX) == 0) {
+
+ if (strncmp (nn_ep_getaddr(item->ep), nn_ep_getaddr(bitem->ep),
+ NN_SOCKADDR_MAX) == 0) {
/* Check whether the two sockets are compatible. */
- if (!nn_epbase_ispeer (&item->epbase, bitem->protocol))
+ if (!nn_ep_ispeer_ep (item->ep, bitem->ep))
break;
/* Call back to cinproc to create actual connection. */
diff --git a/src/transports/inproc/ins.h b/src/transports/inproc/ins.h
index 04034fb..99b76fd 100644
--- a/src/transports/inproc/ins.h
+++ b/src/transports/inproc/ins.h
@@ -31,19 +31,17 @@
struct nn_ins_item {
- /* Every ins_item is an endpoint. */
- struct nn_epbase epbase;
-
/* Every ins_item is either in the list of bound or connected endpoints. */
struct nn_list_item item;
+ struct nn_ep *ep;
+
/* This is the local cache of the endpoint's protocol ID. This way we can
check the value without actually locking the object. */
int protocol;
};
-void nn_ins_item_init (struct nn_ins_item *self,
- const struct nn_epbase_vfptr *vfptr, void *hint);
+void nn_ins_item_init (struct nn_ins_item *self, struct nn_ep *ep);
void nn_ins_item_term (struct nn_ins_item *self);
void nn_ins_init (void);
diff --git a/src/transports/inproc/sinproc.c b/src/transports/inproc/sinproc.c
index 546e299..314d827 100644
--- a/src/transports/inproc/sinproc.c
+++ b/src/transports/inproc/sinproc.c
@@ -63,7 +63,7 @@
};
void nn_sinproc_init (struct nn_sinproc *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
int rcvbuf;
size_t sz;
@@ -73,9 +73,9 @@
self->state = NN_SINPROC_STATE_IDLE;
self->flags = 0;
self->peer = NULL;
- nn_pipebase_init (&self->pipebase, &nn_sinproc_pipebase_vfptr, epbase);
+ nn_pipebase_init (&self->pipebase, &nn_sinproc_pipebase_vfptr, ep);
sz = sizeof (rcvbuf);
- nn_epbase_getopt (epbase, NN_SOL_SOCKET, NN_RCVBUF, &rcvbuf, &sz);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RCVBUF, &rcvbuf, &sz);
nn_assert (sz == sizeof (rcvbuf));
nn_msgqueue_init (&self->msgqueue, rcvbuf);
nn_msg_init (&self->msg, 0);
diff --git a/src/transports/inproc/sinproc.h b/src/transports/inproc/sinproc.h
index 07b51ad..ed6367f 100644
--- a/src/transports/inproc/sinproc.h
+++ b/src/transports/inproc/sinproc.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -82,7 +83,7 @@
};
void nn_sinproc_init (struct nn_sinproc *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_sinproc_term (struct nn_sinproc *self);
int nn_sinproc_isidle (struct nn_sinproc *self);
diff --git a/src/transports/ipc/aipc.c b/src/transports/ipc/aipc.c
index bc64a4e..8889af2 100644
--- a/src/transports/ipc/aipc.c
+++ b/src/transports/ipc/aipc.c
@@ -1,5 +1,6 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -46,17 +47,17 @@
void *srcptr);
void nn_aipc_init (struct nn_aipc *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
nn_fsm_init (&self->fsm, nn_aipc_handler, nn_aipc_shutdown,
src, self, owner);
self->state = NN_AIPC_STATE_IDLE;
- self->epbase = epbase;
+ self->ep = ep;
nn_usock_init (&self->usock, NN_AIPC_SRC_USOCK, &self->fsm);
self->listener = NULL;
self->listener_owner.src = -1;
self->listener_owner.fsm = NULL;
- nn_sipc_init (&self->sipc, NN_AIPC_SRC_SIPC, epbase, &self->fsm);
+ nn_sipc_init (&self->sipc, NN_AIPC_SRC_SIPC, ep, &self->fsm);
nn_fsm_event_init (&self->accepted);
nn_fsm_event_init (&self->done);
nn_list_item_init (&self->item);
@@ -94,9 +95,9 @@
#if defined NN_HAVE_WINDOWS
/* Get/Set security attribute pointer*/
- nn_epbase_getopt (self->epbase, NN_IPC, NN_IPC_SEC_ATTR, &self->usock.sec_attr, &sz);
- nn_epbase_getopt (self->epbase, NN_IPC, NN_IPC_OUTBUFSZ, &self->usock.outbuffersz, &sz);
- nn_epbase_getopt (self->epbase, NN_IPC, NN_IPC_INBUFSZ, &self->usock.inbuffersz, &sz);
+ nn_ep_getopt (self->ep, NN_IPC, NN_IPC_SEC_ATTR, &self->usock.sec_attr, &sz);
+ nn_ep_getopt (self->ep, NN_IPC, NN_IPC_OUTBUFSZ, &self->usock.outbuffersz, &sz);
+ nn_ep_getopt (self->ep, NN_IPC, NN_IPC_INBUFSZ, &self->usock.inbuffersz, &sz);
#endif
/* Start the state machine. */
@@ -117,8 +118,7 @@
if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
if (!nn_sipc_isidle (&aipc->sipc)) {
- nn_epbase_stat_increment (aipc->epbase,
- NN_STAT_DROPPED_CONNECTIONS, 1);
+ nn_ep_stat_increment (aipc->ep, NN_STAT_DROPPED_CONNECTIONS, 1);
nn_sipc_stop (&aipc->sipc);
}
aipc->state = NN_AIPC_STATE_STOPPING_SIPC_FINAL;
@@ -189,18 +189,16 @@
case NN_AIPC_SRC_USOCK:
switch (type) {
case NN_USOCK_ACCEPTED:
- nn_epbase_clear_error (aipc->epbase);
+ nn_ep_clear_error (aipc->ep);
/* Set the relevant socket options. */
sz = sizeof (val);
- nn_epbase_getopt (aipc->epbase, NN_SOL_SOCKET, NN_SNDBUF,
- &val, &sz);
+ nn_ep_getopt (aipc->ep, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&aipc->usock, SOL_SOCKET, SO_SNDBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (aipc->epbase, NN_SOL_SOCKET, NN_RCVBUF,
- &val, &sz);
+ nn_ep_getopt (aipc->ep, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&aipc->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
@@ -217,7 +215,7 @@
nn_sipc_start (&aipc->sipc, &aipc->usock);
aipc->state = NN_AIPC_STATE_ACTIVE;
- nn_epbase_stat_increment (aipc->epbase,
+ nn_ep_stat_increment (aipc->ep,
NN_STAT_ACCEPTED_CONNECTIONS, 1);
return;
@@ -229,10 +227,8 @@
case NN_AIPC_SRC_LISTENER:
switch (type) {
case NN_USOCK_ACCEPT_ERROR:
- nn_epbase_set_error (aipc->epbase,
- nn_usock_geterrno (aipc->listener));
- nn_epbase_stat_increment (aipc->epbase,
- NN_STAT_ACCEPT_ERRORS, 1);
+ nn_ep_set_error (aipc->ep, nn_usock_geterrno (aipc->listener));
+ nn_ep_stat_increment (aipc->ep, NN_STAT_ACCEPT_ERRORS, 1);
nn_usock_accept (&aipc->usock, aipc->listener);
return;
@@ -256,8 +252,7 @@
case NN_SIPC_ERROR:
nn_sipc_stop (&aipc->sipc);
aipc->state = NN_AIPC_STATE_STOPPING_SIPC;
- nn_epbase_stat_increment (aipc->epbase,
- NN_STAT_BROKEN_CONNECTIONS, 1);
+ nn_ep_stat_increment (aipc->ep, NN_STAT_BROKEN_CONNECTIONS, 1);
return;
default:
nn_fsm_bad_action (aipc->state, src, type);
diff --git a/src/transports/ipc/aipc.h b/src/transports/ipc/aipc.h
index 2c95a7f..e9d7c72 100644
--- a/src/transports/ipc/aipc.h
+++ b/src/transports/ipc/aipc.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -49,7 +50,7 @@
int state;
/* Pointer to the associated endpoint. */
- struct nn_epbase *epbase;
+ struct nn_ep *ep;
/* Underlying socket. */
struct nn_usock usock;
@@ -70,7 +71,7 @@
};
void nn_aipc_init (struct nn_aipc *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_aipc_term (struct nn_aipc *self);
int nn_aipc_isidle (struct nn_aipc *self);
@@ -78,4 +79,3 @@
void nn_aipc_stop (struct nn_aipc *self);
#endif
-
diff --git a/src/transports/ipc/bipc.c b/src/transports/ipc/bipc.c
index f1b3a2a..4b729ab 100644
--- a/src/transports/ipc/bipc.c
+++ b/src/transports/ipc/bipc.c
@@ -60,9 +60,7 @@
struct nn_fsm fsm;
int state;
- /* This object is a specific type of endpoint.
- Thus it is derived from epbase. */
- struct nn_epbase epbase;
+ struct nn_ep *ep;
/* The underlying listening IPC socket. */
struct nn_usock usock;
@@ -74,10 +72,10 @@
struct nn_list aipcs;
};
-/* nn_epbase virtual interface implementation. */
-static void nn_bipc_stop (struct nn_epbase *self);
-static void nn_bipc_destroy (struct nn_epbase *self);
-const struct nn_epbase_vfptr nn_bipc_epbase_vfptr = {
+/* nn_ep virtual interface implementation. */
+static void nn_bipc_stop (struct nn_ep *self);
+static void nn_bipc_destroy (struct nn_ep *self);
+const struct nn_ep_vfptr nn_bipc_ep_vfptr = {
nn_bipc_stop,
nn_bipc_destroy
};
@@ -90,7 +88,7 @@
static int nn_bipc_listen (struct nn_bipc *self);
static void nn_bipc_start_accepting (struct nn_bipc *self);
-int nn_bipc_create (void *hint, struct nn_epbase **epbase)
+int nn_bipc_create (struct nn_ep *ep)
{
struct nn_bipc *self;
int rc;
@@ -101,9 +99,10 @@
/* Initialise the structure. */
- nn_epbase_init (&self->epbase, &nn_bipc_epbase_vfptr, hint);
+ nn_ep_tran_setup (ep, &nn_bipc_ep_vfptr, self);
+ self->ep = ep;
nn_fsm_init_root (&self->fsm, nn_bipc_handler, nn_bipc_shutdown,
- nn_epbase_getctx (&self->epbase));
+ nn_ep_getctx (ep));
self->state = NN_BIPC_STATE_IDLE;
self->aipc = NULL;
nn_list_init (&self->aipcs);
@@ -115,36 +114,31 @@
rc = nn_bipc_listen (self);
if (rc != 0) {
- nn_epbase_term (&self->epbase);
return rc;
}
- /* Return the base class as an out parameter. */
- *epbase = &self->epbase;
-
return 0;
}
-static void nn_bipc_stop (struct nn_epbase *self)
+static void nn_bipc_stop (struct nn_ep *ep)
{
struct nn_bipc *bipc;
- bipc = nn_cont (self, struct nn_bipc, epbase);
+ bipc = nn_ep_tran_private (ep);
nn_fsm_stop (&bipc->fsm);
}
-static void nn_bipc_destroy (struct nn_epbase *self)
+static void nn_bipc_destroy (struct nn_ep *ep)
{
struct nn_bipc *bipc;
- bipc = nn_cont (self, struct nn_bipc, epbase);
+ bipc = nn_ep_tran_private (ep);
nn_assert_state (bipc, NN_BIPC_STATE_IDLE);
nn_list_term (&bipc->aipcs);
nn_assert (bipc->aipc == NULL);
nn_usock_term (&bipc->usock);
- nn_epbase_term (&bipc->epbase);
nn_fsm_term (&bipc->fsm);
nn_free (bipc);
@@ -182,7 +176,7 @@
/* On *nixes, unlink the domain socket file */
#if defined NN_HAVE_UNIX_SOCKETS
- addr = nn_epbase_getaddr (&bipc->epbase);
+ addr = nn_ep_getaddr (bipc->ep);
rc = unlink(addr);
errno_assert (rc == 0 || errno == ENOENT);
#endif
@@ -215,7 +209,7 @@
if (nn_list_empty (&bipc->aipcs)) {
bipc->state = NN_BIPC_STATE_IDLE;
nn_fsm_stopped_noevent (&bipc->fsm);
- nn_epbase_stopped (&bipc->epbase);
+ nn_ep_stopped (bipc->ep);
return;
}
@@ -296,7 +290,7 @@
#endif
/* First, create the AF_UNIX address. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (self->ep);
memset (&ss, 0, sizeof (ss));
un = (struct sockaddr_un*) &ss;
nn_assert (strlen (addr) < sizeof (un->sun_path));
@@ -357,7 +351,7 @@
/* Allocate new aipc state machine. */
self->aipc = nn_alloc (sizeof (struct nn_aipc), "aipc");
alloc_assert (self->aipc);
- nn_aipc_init (self->aipc, NN_BIPC_SRC_AIPC, &self->epbase, &self->fsm);
+ nn_aipc_init (self->aipc, NN_BIPC_SRC_AIPC, self->ep, &self->fsm);
/* Start waiting for a new incoming connection. */
nn_aipc_start (self->aipc, &self->usock);
diff --git a/src/transports/ipc/bipc.h b/src/transports/ipc/bipc.h
index ca43bd5..b7c3f69 100644
--- a/src/transports/ipc/bipc.h
+++ b/src/transports/ipc/bipc.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -27,6 +28,6 @@
/* State machine managing bound IPC socket. */
-int nn_bipc_create (void *hint, struct nn_epbase **epbase);
+int nn_bipc_create (struct nn_ep *);
#endif
diff --git a/src/transports/ipc/cipc.c b/src/transports/ipc/cipc.c
index 1f6adad..844cf94 100644
--- a/src/transports/ipc/cipc.c
+++ b/src/transports/ipc/cipc.c
@@ -1,5 +1,6 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -62,9 +63,7 @@
struct nn_fsm fsm;
int state;
- /* This object is a specific type of endpoint.
- Thus it is derived from epbase. */
- struct nn_epbase epbase;
+ struct nn_ep *ep;
/* The underlying IPC socket. */
struct nn_usock usock;
@@ -77,10 +76,10 @@
struct nn_sipc sipc;
};
-/* nn_epbase virtual interface implementation. */
-static void nn_cipc_stop (struct nn_epbase *self);
-static void nn_cipc_destroy (struct nn_epbase *self);
-const struct nn_epbase_vfptr nn_cipc_epbase_vfptr = {
+/* nn_ep virtual interface implementation. */
+static void nn_cipc_stop (struct nn_ep *ep);
+static void nn_cipc_destroy (struct nn_ep *ep);
+const struct nn_ep_vfptr nn_cipc_ep_vfptr = {
nn_cipc_stop,
nn_cipc_destroy
};
@@ -92,7 +91,7 @@
void *srcptr);
static void nn_cipc_start_connecting (struct nn_cipc *self);
-int nn_cipc_create (void *hint, struct nn_epbase **epbase)
+int nn_cipc_create (struct nn_ep *ep)
{
struct nn_cipc *self;
int reconnect_ivl;
@@ -104,54 +103,50 @@
alloc_assert (self);
/* Initialise the structure. */
- nn_epbase_init (&self->epbase, &nn_cipc_epbase_vfptr, hint);
+ self->ep = ep;
+ nn_ep_tran_setup (ep, &nn_cipc_ep_vfptr, self);
nn_fsm_init_root (&self->fsm, nn_cipc_handler, nn_cipc_shutdown,
- nn_epbase_getctx (&self->epbase));
+ nn_ep_getctx (ep));
self->state = NN_CIPC_STATE_IDLE;
nn_usock_init (&self->usock, NN_CIPC_SRC_USOCK, &self->fsm);
sz = sizeof (reconnect_ivl);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RECONNECT_IVL,
- &reconnect_ivl, &sz);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL, &reconnect_ivl, &sz);
nn_assert (sz == sizeof (reconnect_ivl));
sz = sizeof (reconnect_ivl_max);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RECONNECT_IVL_MAX,
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL_MAX,
&reconnect_ivl_max, &sz);
nn_assert (sz == sizeof (reconnect_ivl_max));
if (reconnect_ivl_max == 0)
reconnect_ivl_max = reconnect_ivl;
nn_backoff_init (&self->retry, NN_CIPC_SRC_RECONNECT_TIMER,
reconnect_ivl, reconnect_ivl_max, &self->fsm);
- nn_sipc_init (&self->sipc, NN_CIPC_SRC_SIPC, &self->epbase, &self->fsm);
+ nn_sipc_init (&self->sipc, NN_CIPC_SRC_SIPC, ep, &self->fsm);
/* Start the state machine. */
nn_fsm_start (&self->fsm);
- /* Return the base class as an out parameter. */
- *epbase = &self->epbase;
-
return 0;
}
-static void nn_cipc_stop (struct nn_epbase *self)
+static void nn_cipc_stop (struct nn_ep *ep)
{
struct nn_cipc *cipc;
- cipc = nn_cont (self, struct nn_cipc, epbase);
+ cipc = nn_ep_tran_private (ep);
nn_fsm_stop (&cipc->fsm);
}
-static void nn_cipc_destroy (struct nn_epbase *self)
+static void nn_cipc_destroy (struct nn_ep *ep)
{
struct nn_cipc *cipc;
- cipc = nn_cont (self, struct nn_cipc, epbase);
+ cipc = nn_ep_tran_private (ep);
nn_sipc_term (&cipc->sipc);
nn_backoff_term (&cipc->retry);
nn_usock_term (&cipc->usock);
nn_fsm_term (&cipc->fsm);
- nn_epbase_term (&cipc->epbase);
nn_free (cipc);
}
@@ -165,8 +160,7 @@
if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
if (!nn_sipc_isidle (&cipc->sipc)) {
- nn_epbase_stat_increment (&cipc->epbase,
- NN_STAT_DROPPED_CONNECTIONS, 1);
+ nn_ep_stat_increment (cipc->ep, NN_STAT_DROPPED_CONNECTIONS, 1);
nn_sipc_stop (&cipc->sipc);
}
cipc->state = NN_CIPC_STATE_STOPPING_SIPC_FINAL;
@@ -184,7 +178,7 @@
return;
cipc->state = NN_CIPC_STATE_IDLE;
nn_fsm_stopped_noevent (&cipc->fsm);
- nn_epbase_stopped (&cipc->epbase);
+ nn_ep_stopped (cipc->ep);
return;
}
@@ -232,21 +226,19 @@
case NN_USOCK_CONNECTED:
nn_sipc_start (&cipc->sipc, &cipc->usock);
cipc->state = NN_CIPC_STATE_ACTIVE;
- nn_epbase_stat_increment (&cipc->epbase,
+ nn_ep_stat_increment (cipc->ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&cipc->epbase,
+ nn_ep_stat_increment (cipc->ep,
NN_STAT_ESTABLISHED_CONNECTIONS, 1);
- nn_epbase_clear_error (&cipc->epbase);
+ nn_ep_clear_error (cipc->ep);
return;
case NN_USOCK_ERROR:
- nn_epbase_set_error (&cipc->epbase,
- nn_usock_geterrno (&cipc->usock));
+ nn_ep_set_error (cipc->ep, nn_usock_geterrno (&cipc->usock));
nn_usock_stop (&cipc->usock);
cipc->state = NN_CIPC_STATE_STOPPING_USOCK;
- nn_epbase_stat_increment (&cipc->epbase,
+ nn_ep_stat_increment (cipc->ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&cipc->epbase,
- NN_STAT_CONNECT_ERRORS, 1);
+ nn_ep_stat_increment (cipc->ep, NN_STAT_CONNECT_ERRORS, 1);
return;
default:
nn_fsm_bad_action (cipc->state, src, type);
@@ -268,8 +260,7 @@
case NN_SIPC_ERROR:
nn_sipc_stop (&cipc->sipc);
cipc->state = NN_CIPC_STATE_STOPPING_SIPC;
- nn_epbase_stat_increment (&cipc->epbase,
- NN_STAT_BROKEN_CONNECTIONS, 1);
+ nn_ep_stat_increment (cipc->ep, NN_STAT_BROKEN_CONNECTIONS, 1);
return;
default:
nn_fsm_bad_action (cipc->state, src, type);
@@ -398,18 +389,18 @@
/* Set the relevant socket options. */
sz = sizeof (val);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_SNDBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
/* Create the IPC address from the address string. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (self->ep);
memset (&ss, 0, sizeof (ss));
un = (struct sockaddr_un*) &ss;
nn_assert (strlen (addr) < sizeof (un->sun_path));
@@ -418,10 +409,10 @@
#if defined NN_HAVE_WINDOWS
/* Get/Set security attribute pointer*/
- nn_epbase_getopt (&self->epbase, NN_IPC, NN_IPC_SEC_ATTR, &self->usock.sec_attr, &sz);
+ nn_ep_getopt (self->ep, NN_IPC, NN_IPC_SEC_ATTR, &self->usock.sec_attr, &sz);
- nn_epbase_getopt (&self->epbase, NN_IPC, NN_IPC_OUTBUFSZ, &self->usock.outbuffersz, &sz);
- nn_epbase_getopt (&self->epbase, NN_IPC, NN_IPC_INBUFSZ, &self->usock.inbuffersz, &sz);
+ nn_ep_getopt (self->ep, NN_IPC, NN_IPC_OUTBUFSZ, &self->usock.outbuffersz, &sz);
+ nn_ep_getopt (self->ep, NN_IPC, NN_IPC_INBUFSZ, &self->usock.inbuffersz, &sz);
#endif
/* Start connecting. */
@@ -429,7 +420,5 @@
sizeof (struct sockaddr_un));
self->state = NN_CIPC_STATE_CONNECTING;
- nn_epbase_stat_increment (&self->epbase,
- NN_STAT_INPROGRESS_CONNECTIONS, 1);
+ nn_ep_stat_increment (self->ep, NN_STAT_INPROGRESS_CONNECTIONS, 1);
}
-
diff --git a/src/transports/ipc/cipc.h b/src/transports/ipc/cipc.h
index 4036bba..c66db06 100644
--- a/src/transports/ipc/cipc.h
+++ b/src/transports/ipc/cipc.h
@@ -28,6 +28,6 @@
/* State machine managing connected IPC socket. */
-int nn_cipc_create (void *hint, struct nn_epbase **epbase);
+int nn_cipc_create (struct nn_ep *ep);
#endif
diff --git a/src/transports/ipc/ipc.c b/src/transports/ipc/ipc.c
index c4fe740..5f23722 100644
--- a/src/transports/ipc/ipc.c
+++ b/src/transports/ipc/ipc.c
@@ -1,6 +1,7 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -65,8 +66,8 @@
};
/* nn_transport interface. */
-static int nn_ipc_bind (void *hint, struct nn_epbase **epbase);
-static int nn_ipc_connect (void *hint, struct nn_epbase **epbase);
+static int nn_ipc_bind (struct nn_ep *ep);
+static int nn_ipc_connect (struct nn_ep *ep);
static struct nn_optset *nn_ipc_optset (void);
static struct nn_transport nn_ipc_vfptr = {
@@ -82,14 +83,14 @@
struct nn_transport *nn_ipc = &nn_ipc_vfptr;
-static int nn_ipc_bind (void *hint, struct nn_epbase **epbase)
+static int nn_ipc_bind (struct nn_ep *ep)
{
- return nn_bipc_create (hint, epbase);
+ return nn_bipc_create (ep);
}
-static int nn_ipc_connect (void *hint, struct nn_epbase **epbase)
+static int nn_ipc_connect (struct nn_ep *ep)
{
- return nn_cipc_create (hint, epbase);
+ return nn_cipc_create (ep);
}
static struct nn_optset *nn_ipc_optset ()
diff --git a/src/transports/ipc/sipc.c b/src/transports/ipc/sipc.c
index 8375d49..204dc7a 100644
--- a/src/transports/ipc/sipc.c
+++ b/src/transports/ipc/sipc.c
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -69,7 +70,7 @@
void *srcptr);
void nn_sipc_init (struct nn_sipc *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
nn_fsm_init (&self->fsm, nn_sipc_handler, nn_sipc_shutdown,
src, self, owner);
@@ -78,7 +79,7 @@
self->usock = NULL;
self->usock_owner.src = -1;
self->usock_owner.fsm = NULL;
- nn_pipebase_init (&self->pipebase, &nn_sipc_pipebase_vfptr, epbase);
+ nn_pipebase_init (&self->pipebase, &nn_sipc_pipebase_vfptr, ep);
self->instate = -1;
nn_msg_init (&self->inmsg, 0);
self->outstate = -1;
diff --git a/src/transports/ipc/sipc.h b/src/transports/ipc/sipc.h
index eaf1e2b..7102c89 100644
--- a/src/transports/ipc/sipc.h
+++ b/src/transports/ipc/sipc.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -79,7 +80,7 @@
};
void nn_sipc_init (struct nn_sipc *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_sipc_term (struct nn_sipc *self);
int nn_sipc_isidle (struct nn_sipc *self);
diff --git a/src/transports/tcp/atcp.c b/src/transports/tcp/atcp.c
index e94be8f..60d75ef 100644
--- a/src/transports/tcp/atcp.c
+++ b/src/transports/tcp/atcp.c
@@ -1,5 +1,6 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -46,17 +47,17 @@
void *srcptr);
void nn_atcp_init (struct nn_atcp *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
nn_fsm_init (&self->fsm, nn_atcp_handler, nn_atcp_shutdown,
src, self, owner);
self->state = NN_ATCP_STATE_IDLE;
- self->epbase = epbase;
+ self->ep = ep;
nn_usock_init (&self->usock, NN_ATCP_SRC_USOCK, &self->fsm);
self->listener = NULL;
self->listener_owner.src = -1;
self->listener_owner.fsm = NULL;
- nn_stcp_init (&self->stcp, NN_ATCP_SRC_STCP, epbase, &self->fsm);
+ nn_stcp_init (&self->stcp, NN_ATCP_SRC_STCP, ep, &self->fsm);
nn_fsm_event_init (&self->accepted);
nn_fsm_event_init (&self->done);
nn_list_item_init (&self->item);
@@ -107,8 +108,7 @@
if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
if (!nn_stcp_isidle (&atcp->stcp)) {
- nn_epbase_stat_increment (atcp->epbase,
- NN_STAT_DROPPED_CONNECTIONS, 1);
+ nn_ep_stat_increment (atcp->ep, NN_STAT_DROPPED_CONNECTIONS, 1);
nn_stcp_stop (&atcp->stcp);
}
atcp->state = NN_ATCP_STATE_STOPPING_STCP_FINAL;
@@ -179,18 +179,16 @@
case NN_ATCP_SRC_USOCK:
switch (type) {
case NN_USOCK_ACCEPTED:
- nn_epbase_clear_error (atcp->epbase);
+ nn_ep_clear_error (atcp->ep);
/* Set the relevant socket options. */
sz = sizeof (val);
- nn_epbase_getopt (atcp->epbase, NN_SOL_SOCKET, NN_SNDBUF,
- &val, &sz);
+ nn_ep_getopt (atcp->ep, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&atcp->usock, SOL_SOCKET, SO_SNDBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (atcp->epbase, NN_SOL_SOCKET, NN_RCVBUF,
- &val, &sz);
+ nn_ep_getopt (atcp->ep, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&atcp->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
@@ -207,7 +205,7 @@
nn_stcp_start (&atcp->stcp, &atcp->usock);
atcp->state = NN_ATCP_STATE_ACTIVE;
- nn_epbase_stat_increment (atcp->epbase,
+ nn_ep_stat_increment (atcp->ep,
NN_STAT_ACCEPTED_CONNECTIONS, 1);
return;
@@ -220,10 +218,8 @@
switch (type) {
case NN_USOCK_ACCEPT_ERROR:
- nn_epbase_set_error (atcp->epbase,
- nn_usock_geterrno(atcp->listener));
- nn_epbase_stat_increment (atcp->epbase,
- NN_STAT_ACCEPT_ERRORS, 1);
+ nn_ep_set_error (atcp->ep, nn_usock_geterrno(atcp->listener));
+ nn_ep_stat_increment (atcp->ep, NN_STAT_ACCEPT_ERRORS, 1);
nn_usock_accept (&atcp->usock, atcp->listener);
return;
@@ -246,8 +242,7 @@
case NN_STCP_ERROR:
nn_stcp_stop (&atcp->stcp);
atcp->state = NN_ATCP_STATE_STOPPING_STCP;
- nn_epbase_stat_increment (atcp->epbase,
- NN_STAT_BROKEN_CONNECTIONS, 1);
+ nn_ep_stat_increment (atcp->ep, NN_STAT_BROKEN_CONNECTIONS, 1);
return;
default:
nn_fsm_bad_action (atcp->state, src, type);
diff --git a/src/transports/tcp/atcp.h b/src/transports/tcp/atcp.h
index 435d2a8..ee9cf45 100644
--- a/src/transports/tcp/atcp.h
+++ b/src/transports/tcp/atcp.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -48,7 +49,7 @@
int state;
/* Pointer to the associated endpoint. */
- struct nn_epbase *epbase;
+ struct nn_ep *ep;
/* Underlying socket. */
struct nn_usock usock;
@@ -69,7 +70,7 @@
};
void nn_atcp_init (struct nn_atcp *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_atcp_term (struct nn_atcp *self);
int nn_atcp_isidle (struct nn_atcp *self);
diff --git a/src/transports/tcp/btcp.c b/src/transports/tcp/btcp.c
index 1b012c8..a22b60c 100644
--- a/src/transports/tcp/btcp.c
+++ b/src/transports/tcp/btcp.c
@@ -66,9 +66,7 @@
struct nn_fsm fsm;
int state;
- /* This object is a specific type of endpoint.
- Thus it is derived from epbase. */
- struct nn_epbase epbase;
+ struct nn_ep *ep;
/* The underlying listening TCP socket. */
struct nn_usock usock;
@@ -80,10 +78,10 @@
struct nn_list atcps;
};
-/* nn_epbase virtual interface implementation. */
-static void nn_btcp_stop (struct nn_epbase *self);
-static void nn_btcp_destroy (struct nn_epbase *self);
-const struct nn_epbase_vfptr nn_btcp_epbase_vfptr = {
+/* nn_ep virtual interface implementation. */
+static void nn_btcp_stop (struct nn_ep *);
+static void nn_btcp_destroy (struct nn_ep *);
+const struct nn_ep_vfptr nn_btcp_ep_vfptr = {
nn_btcp_stop,
nn_btcp_destroy
};
@@ -96,7 +94,7 @@
static int nn_btcp_listen (struct nn_btcp *self);
static void nn_btcp_start_accepting (struct nn_btcp *self);
-int nn_btcp_create (void *hint, struct nn_epbase **epbase)
+int nn_btcp_create (struct nn_ep *ep)
{
int rc;
struct nn_btcp *self;
@@ -110,42 +108,38 @@
/* Allocate the new endpoint object. */
self = nn_alloc (sizeof (struct nn_btcp), "btcp");
+ self->ep = ep;
alloc_assert (self);
- /* Initalise the epbase. */
- nn_epbase_init (&self->epbase, &nn_btcp_epbase_vfptr, hint);
- addr = nn_epbase_getaddr (&self->epbase);
+ nn_ep_tran_setup (ep, &nn_btcp_ep_vfptr, self);
+ addr = nn_ep_getaddr (ep);
/* Parse the port. */
end = addr + strlen (addr);
pos = strrchr (addr, ':');
- if (nn_slow (!pos)) {
- nn_epbase_term (&self->epbase);
+ if (pos == NULL) {
return -EINVAL;
}
++pos;
rc = nn_port_resolve (pos, end - pos);
- if (nn_slow (rc < 0)) {
- nn_epbase_term (&self->epbase);
+ if (rc < 0) {
return -EINVAL;
}
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
- &ipv4only, &ipv4onlylen);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_IPV4ONLY, &ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
/* Parse the address. */
rc = nn_iface_resolve (addr, pos - addr - 1, ipv4only, &ss, &sslen);
if (nn_slow (rc < 0)) {
- nn_epbase_term (&self->epbase);
return -ENODEV;
}
/* Initialise the structure. */
nn_fsm_init_root (&self->fsm, nn_btcp_handler, nn_btcp_shutdown,
- nn_epbase_getctx (&self->epbase));
+ nn_ep_getctx (ep));
self->state = NN_BTCP_STATE_IDLE;
self->atcp = NULL;
nn_list_init (&self->atcps);
@@ -157,36 +151,31 @@
rc = nn_btcp_listen (self);
if (rc != 0) {
- nn_epbase_term (&self->epbase);
return rc;
}
- /* Return the base class as an out parameter. */
- *epbase = &self->epbase;
-
return 0;
}
-static void nn_btcp_stop (struct nn_epbase *self)
+static void nn_btcp_stop (struct nn_ep *ep)
{
struct nn_btcp *btcp;
- btcp = nn_cont (self, struct nn_btcp, epbase);
+ btcp = nn_ep_tran_private (ep);
nn_fsm_stop (&btcp->fsm);
}
-static void nn_btcp_destroy (struct nn_epbase *self)
+static void nn_btcp_destroy (struct nn_ep *ep)
{
struct nn_btcp *btcp;
- btcp = nn_cont (self, struct nn_btcp, epbase);
+ btcp = nn_ep_tran_private (ep);
nn_assert_state (btcp, NN_BTCP_STATE_IDLE);
nn_list_term (&btcp->atcps);
nn_assert (btcp->atcp == NULL);
nn_usock_term (&btcp->usock);
- nn_epbase_term (&btcp->epbase);
nn_fsm_term (&btcp->fsm);
nn_free (btcp);
@@ -244,7 +233,7 @@
if (nn_list_empty (&btcp->atcps)) {
btcp->state = NN_BTCP_STATE_IDLE;
nn_fsm_stopped_noevent (&btcp->fsm);
- nn_epbase_stopped (&btcp->epbase);
+ nn_ep_stopped (btcp->ep);
return;
}
@@ -328,7 +317,7 @@
uint16_t port;
/* First, resolve the IP address. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (self->ep);
memset (&ss, 0, sizeof (ss));
/* Parse the port. */
@@ -345,7 +334,7 @@
/* Parse the address. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_IPV4ONLY,
&ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
rc = nn_iface_resolve (addr, pos - addr - 1, ipv4only, &ss, &sslen);
@@ -400,7 +389,7 @@
/* Allocate new atcp state machine. */
self->atcp = nn_alloc (sizeof (struct nn_atcp), "atcp");
alloc_assert (self->atcp);
- nn_atcp_init (self->atcp, NN_BTCP_SRC_ATCP, &self->epbase, &self->fsm);
+ nn_atcp_init (self->atcp, NN_BTCP_SRC_ATCP, self->ep, &self->fsm);
/* Start waiting for a new incoming connection. */
nn_atcp_start (self->atcp, &self->usock);
diff --git a/src/transports/tcp/btcp.h b/src/transports/tcp/btcp.h
index 30aca24..633af88 100644
--- a/src/transports/tcp/btcp.h
+++ b/src/transports/tcp/btcp.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -27,7 +28,7 @@
/* State machine managing bound TCP socket. */
-int nn_btcp_create (void *hint, struct nn_epbase **epbase);
+int nn_btcp_create (struct nn_ep *);
#endif
diff --git a/src/transports/tcp/ctcp.c b/src/transports/tcp/ctcp.c
index d46ddf7..fb1fc73 100644
--- a/src/transports/tcp/ctcp.c
+++ b/src/transports/tcp/ctcp.c
@@ -1,5 +1,6 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -73,9 +74,7 @@
struct nn_fsm fsm;
int state;
- /* This object is a specific type of endpoint.
- Thus it is derived from epbase. */
- struct nn_epbase epbase;
+ struct nn_ep *ep;
/* The underlying TCP socket. */
struct nn_usock usock;
@@ -93,10 +92,10 @@
struct nn_dns_result dns_result;
};
-/* nn_epbase virtual interface implementation. */
-static void nn_ctcp_stop (struct nn_epbase *self);
-static void nn_ctcp_destroy (struct nn_epbase *self);
-const struct nn_epbase_vfptr nn_ctcp_epbase_vfptr = {
+/* nn_ep virtual interface implementation. */
+static void nn_ctcp_stop (struct nn_ep *ep);
+static void nn_ctcp_destroy (struct nn_ep *ep);
+const struct nn_ep_vfptr nn_ctcp_ep_vfptr = {
nn_ctcp_stop,
nn_ctcp_destroy
};
@@ -110,7 +109,7 @@
static void nn_ctcp_start_connecting (struct nn_ctcp *self,
struct sockaddr_storage *ss, size_t sslen);
-int nn_ctcp_create (void *hint, struct nn_epbase **epbase)
+int nn_ctcp_create (struct nn_ep *ep)
{
int rc;
const char *addr;
@@ -133,16 +132,16 @@
alloc_assert (self);
/* Initalise the endpoint. */
- nn_epbase_init (&self->epbase, &nn_ctcp_epbase_vfptr, hint);
+ self->ep = ep;
+ nn_ep_tran_setup (ep, &nn_ctcp_ep_vfptr, self);
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
- &ipv4only, &ipv4onlylen);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_IPV4ONLY, &ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
/* Start parsing the address. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (ep);
addrlen = strlen (addr);
semicolon = strchr (addr, ';');
hostname = semicolon ? semicolon + 1 : addr;
@@ -150,13 +149,11 @@
end = addr + addrlen;
/* Parse the port. */
- if (nn_slow (!colon)) {
- nn_epbase_term (&self->epbase);
+ if (!colon) {
return -EINVAL;
}
rc = nn_port_resolve (colon + 1, end - colon - 1);
- if (nn_slow (rc < 0)) {
- nn_epbase_term (&self->epbase);
+ if (rc < 0) {
return -EINVAL;
}
@@ -165,7 +162,6 @@
if (nn_dns_check_hostname (hostname, colon - hostname) < 0 &&
nn_literal_resolve (hostname, colon - hostname, ipv4only,
&ss, &sslen) < 0) {
- nn_epbase_term (&self->epbase);
return -EINVAL;
}
@@ -173,61 +169,55 @@
if (semicolon) {
rc = nn_iface_resolve (addr, semicolon - addr, ipv4only, &ss, &sslen);
if (rc < 0) {
- nn_epbase_term (&self->epbase);
return -ENODEV;
}
}
/* Initialise the structure. */
nn_fsm_init_root (&self->fsm, nn_ctcp_handler, nn_ctcp_shutdown,
- nn_epbase_getctx (&self->epbase));
+ nn_ep_getctx (ep));
self->state = NN_CTCP_STATE_IDLE;
nn_usock_init (&self->usock, NN_CTCP_SRC_USOCK, &self->fsm);
sz = sizeof (reconnect_ivl);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RECONNECT_IVL,
- &reconnect_ivl, &sz);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL, &reconnect_ivl, &sz);
nn_assert (sz == sizeof (reconnect_ivl));
sz = sizeof (reconnect_ivl_max);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RECONNECT_IVL_MAX,
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL_MAX,
&reconnect_ivl_max, &sz);
nn_assert (sz == sizeof (reconnect_ivl_max));
if (reconnect_ivl_max == 0)
reconnect_ivl_max = reconnect_ivl;
nn_backoff_init (&self->retry, NN_CTCP_SRC_RECONNECT_TIMER,
reconnect_ivl, reconnect_ivl_max, &self->fsm);
- nn_stcp_init (&self->stcp, NN_CTCP_SRC_STCP, &self->epbase, &self->fsm);
+ nn_stcp_init (&self->stcp, NN_CTCP_SRC_STCP, ep, &self->fsm);
nn_dns_init (&self->dns, NN_CTCP_SRC_DNS, &self->fsm);
/* Start the state machine. */
nn_fsm_start (&self->fsm);
- /* Return the base class as an out parameter. */
- *epbase = &self->epbase;
-
return 0;
}
-static void nn_ctcp_stop (struct nn_epbase *self)
+static void nn_ctcp_stop (struct nn_ep *ep)
{
struct nn_ctcp *ctcp;
- ctcp = nn_cont (self, struct nn_ctcp, epbase);
+ ctcp = nn_ep_tran_private (ep);
nn_fsm_stop (&ctcp->fsm);
}
-static void nn_ctcp_destroy (struct nn_epbase *self)
+static void nn_ctcp_destroy (struct nn_ep *ep)
{
struct nn_ctcp *ctcp;
- ctcp = nn_cont (self, struct nn_ctcp, epbase);
+ ctcp = nn_ep_tran_private (ep);
nn_dns_term (&ctcp->dns);
nn_stcp_term (&ctcp->stcp);
nn_backoff_term (&ctcp->retry);
nn_usock_term (&ctcp->usock);
nn_fsm_term (&ctcp->fsm);
- nn_epbase_term (&ctcp->epbase);
nn_free (ctcp);
}
@@ -239,15 +229,14 @@
ctcp = nn_cont (self, struct nn_ctcp, fsm);
- if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
+ if (src == NN_FSM_ACTION && type == NN_FSM_STOP) {
if (!nn_stcp_isidle (&ctcp->stcp)) {
- nn_epbase_stat_increment (&ctcp->epbase,
- NN_STAT_DROPPED_CONNECTIONS, 1);
+ nn_ep_stat_increment (ctcp->ep, NN_STAT_DROPPED_CONNECTIONS, 1);
nn_stcp_stop (&ctcp->stcp);
}
ctcp->state = NN_CTCP_STATE_STOPPING_STCP_FINAL;
}
- if (nn_slow (ctcp->state == NN_CTCP_STATE_STOPPING_STCP_FINAL)) {
+ if (ctcp->state == NN_CTCP_STATE_STOPPING_STCP_FINAL) {
if (!nn_stcp_isidle (&ctcp->stcp))
return;
nn_backoff_stop (&ctcp->retry);
@@ -262,7 +251,7 @@
return;
ctcp->state = NN_CTCP_STATE_IDLE;
nn_fsm_stopped_noevent (&ctcp->fsm);
- nn_epbase_stopped (&ctcp->epbase);
+ nn_ep_stopped (ctcp->ep);
return;
}
@@ -357,21 +346,19 @@
case NN_USOCK_CONNECTED:
nn_stcp_start (&ctcp->stcp, &ctcp->usock);
ctcp->state = NN_CTCP_STATE_ACTIVE;
- nn_epbase_stat_increment (&ctcp->epbase,
+ nn_ep_stat_increment (ctcp->ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&ctcp->epbase,
+ nn_ep_stat_increment (ctcp->ep,
NN_STAT_ESTABLISHED_CONNECTIONS, 1);
- nn_epbase_clear_error (&ctcp->epbase);
+ nn_ep_clear_error (ctcp->ep);
return;
case NN_USOCK_ERROR:
- nn_epbase_set_error (&ctcp->epbase,
- nn_usock_geterrno (&ctcp->usock));
+ nn_ep_set_error (ctcp->ep, nn_usock_geterrno (&ctcp->usock));
nn_usock_stop (&ctcp->usock);
ctcp->state = NN_CTCP_STATE_STOPPING_USOCK;
- nn_epbase_stat_increment (&ctcp->epbase,
+ nn_ep_stat_increment (ctcp->ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&ctcp->epbase,
- NN_STAT_CONNECT_ERRORS, 1);
+ nn_ep_stat_increment (ctcp->ep, NN_STAT_CONNECT_ERRORS, 1);
return;
default:
nn_fsm_bad_action (ctcp->state, src, type);
@@ -393,8 +380,7 @@
case NN_STCP_ERROR:
nn_stcp_stop (&ctcp->stcp);
ctcp->state = NN_CTCP_STATE_STOPPING_STCP;
- nn_epbase_stat_increment (&ctcp->epbase,
- NN_STAT_BROKEN_CONNECTIONS, 1);
+ nn_ep_stat_increment (ctcp->ep, NN_STAT_BROKEN_CONNECTIONS, 1);
return;
default:
nn_fsm_bad_action (ctcp->state, src, type);
@@ -513,7 +499,7 @@
size_t ipv4onlylen;
/* Extract the hostname part from address string. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (self->ep);
begin = strchr (addr, ';');
if (!begin)
begin = addr;
@@ -524,7 +510,7 @@
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_IPV4ONLY,
&ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
@@ -553,7 +539,7 @@
size_t sz;
/* Create IP address from the address string. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (self->ep);
memset (&remote, 0, sizeof (remote));
/* Parse the port. */
@@ -565,7 +551,7 @@
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_IPV4ONLY,
&ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
@@ -603,12 +589,12 @@
/* Set the relevant socket options. */
sz = sizeof (val);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_SNDBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
@@ -624,7 +610,5 @@
/* Start connecting. */
nn_usock_connect (&self->usock, (struct sockaddr*) &remote, remotelen);
self->state = NN_CTCP_STATE_CONNECTING;
- nn_epbase_stat_increment (&self->epbase,
- NN_STAT_INPROGRESS_CONNECTIONS, 1);
+ nn_ep_stat_increment (self->ep, NN_STAT_INPROGRESS_CONNECTIONS, 1);
}
-
diff --git a/src/transports/tcp/ctcp.h b/src/transports/tcp/ctcp.h
index 92b1694..11db1ca 100644
--- a/src/transports/tcp/ctcp.h
+++ b/src/transports/tcp/ctcp.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -27,7 +28,7 @@
/* State machine managing connected TCP socket. */
-int nn_ctcp_create (void *hint, struct nn_epbase **epbase);
+int nn_ctcp_create (struct nn_ep *);
#endif
diff --git a/src/transports/tcp/stcp.c b/src/transports/tcp/stcp.c
index 5abe536..61be273 100644
--- a/src/transports/tcp/stcp.c
+++ b/src/transports/tcp/stcp.c
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -65,7 +66,7 @@
void *srcptr);
void nn_stcp_init (struct nn_stcp *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
nn_fsm_init (&self->fsm, nn_stcp_handler, nn_stcp_shutdown,
src, self, owner);
@@ -74,7 +75,7 @@
self->usock = NULL;
self->usock_owner.src = -1;
self->usock_owner.fsm = NULL;
- nn_pipebase_init (&self->pipebase, &nn_stcp_pipebase_vfptr, epbase);
+ nn_pipebase_init (&self->pipebase, &nn_stcp_pipebase_vfptr, ep);
self->instate = -1;
nn_msg_init (&self->inmsg, 0);
self->outstate = -1;
diff --git a/src/transports/tcp/stcp.h b/src/transports/tcp/stcp.h
index d817807..0a53717 100644
--- a/src/transports/tcp/stcp.h
+++ b/src/transports/tcp/stcp.h
@@ -1,5 +1,6 @@
/*
Copyright (c) 2013 Martin Sustrik All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -79,7 +80,7 @@
};
void nn_stcp_init (struct nn_stcp *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_stcp_term (struct nn_stcp *self);
int nn_stcp_isidle (struct nn_stcp *self);
diff --git a/src/transports/tcp/tcp.c b/src/transports/tcp/tcp.c
index 3039e21..32e5c60 100644
--- a/src/transports/tcp/tcp.c
+++ b/src/transports/tcp/tcp.c
@@ -1,6 +1,7 @@
/*
Copyright (c) 2012-2013 Martin Sustrik All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -63,8 +64,8 @@
};
/* nn_transport interface. */
-static int nn_tcp_bind (void *hint, struct nn_epbase **epbase);
-static int nn_tcp_connect (void *hint, struct nn_epbase **epbase);
+static int nn_tcp_bind (struct nn_ep *ep);
+static int nn_tcp_connect (struct nn_ep *ep);
static struct nn_optset *nn_tcp_optset (void);
static struct nn_transport nn_tcp_vfptr = {
@@ -80,14 +81,14 @@
struct nn_transport *nn_tcp = &nn_tcp_vfptr;
-static int nn_tcp_bind (void *hint, struct nn_epbase **epbase)
+static int nn_tcp_bind (struct nn_ep *ep)
{
- return nn_btcp_create (hint, epbase);
+ return nn_btcp_create (ep);
}
-static int nn_tcp_connect (void *hint, struct nn_epbase **epbase)
+static int nn_tcp_connect (struct nn_ep *ep)
{
- return nn_ctcp_create (hint, epbase);
+ return nn_ctcp_create (ep);
}
static struct nn_optset *nn_tcp_optset ()
diff --git a/src/transports/ws/aws.c b/src/transports/ws/aws.c
index bb025e4..d60a1fd 100644
--- a/src/transports/ws/aws.c
+++ b/src/transports/ws/aws.c
@@ -1,7 +1,7 @@
/*
Copyright (c) 2012-2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014-2016 Jack R. Dunaway. All rights reserved.
- Copyright 2015 Garrett D'Amore <garrett@damore.org>
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -49,17 +49,17 @@
void *srcptr);
void nn_aws_init (struct nn_aws *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
nn_fsm_init (&self->fsm, nn_aws_handler, nn_aws_shutdown,
src, self, owner);
self->state = NN_AWS_STATE_IDLE;
- self->epbase = epbase;
+ self->ep = ep;
nn_usock_init (&self->usock, NN_AWS_SRC_USOCK, &self->fsm);
self->listener = NULL;
self->listener_owner.src = -1;
self->listener_owner.fsm = NULL;
- nn_sws_init (&self->sws, NN_AWS_SRC_SWS, epbase, &self->fsm);
+ nn_sws_init (&self->sws, NN_AWS_SRC_SWS, ep, &self->fsm);
nn_fsm_event_init (&self->accepted);
nn_fsm_event_init (&self->done);
nn_list_item_init (&self->item);
@@ -110,8 +110,7 @@
if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
if (!nn_sws_isidle (&aws->sws)) {
- nn_epbase_stat_increment (aws->epbase,
- NN_STAT_DROPPED_CONNECTIONS, 1);
+ nn_ep_stat_increment (aws->ep, NN_STAT_DROPPED_CONNECTIONS, 1);
nn_sws_stop (&aws->sws);
}
aws->state = NN_AWS_STATE_STOPPING_SWS_FINAL;
@@ -183,24 +182,21 @@
case NN_AWS_SRC_USOCK:
switch (type) {
case NN_USOCK_ACCEPTED:
- nn_epbase_clear_error (aws->epbase);
+ nn_ep_clear_error (aws->ep);
/* Set the relevant socket options. */
sz = sizeof (val);
- nn_epbase_getopt (aws->epbase, NN_SOL_SOCKET, NN_SNDBUF,
- &val, &sz);
+ nn_ep_getopt (aws->ep, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&aws->usock, SOL_SOCKET, SO_SNDBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (aws->epbase, NN_SOL_SOCKET, NN_RCVBUF,
- &val, &sz);
+ nn_ep_getopt (aws->ep, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&aws->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (aws->epbase, NN_WS, NN_WS_MSG_TYPE,
- &val, &sz);
+ nn_ep_getopt (aws->ep, NN_WS, NN_WS_MSG_TYPE, &val, &sz);
msg_type = (uint8_t)val;
/* Since the WebSocket handshake must poll, the receive
@@ -224,8 +220,7 @@
NULL, NULL, msg_type);
aws->state = NN_AWS_STATE_ACTIVE;
- nn_epbase_stat_increment (aws->epbase,
- NN_STAT_ACCEPTED_CONNECTIONS, 1);
+ nn_ep_stat_increment (aws->ep, NN_STAT_ACCEPTED_CONNECTIONS, 1);
return;
@@ -237,10 +232,8 @@
switch (type) {
case NN_USOCK_ACCEPT_ERROR:
- nn_epbase_set_error (aws->epbase,
- nn_usock_geterrno (aws->listener));
- nn_epbase_stat_increment (aws->epbase,
- NN_STAT_ACCEPT_ERRORS, 1);
+ nn_ep_set_error (aws->ep, nn_usock_geterrno (aws->listener));
+ nn_ep_stat_increment (aws->ep, NN_STAT_ACCEPT_ERRORS, 1);
nn_usock_accept (&aws->usock, aws->listener);
return;
@@ -269,8 +262,7 @@
case NN_SWS_RETURN_ERROR:
nn_sws_stop (&aws->sws);
aws->state = NN_AWS_STATE_STOPPING_SWS;
- nn_epbase_stat_increment (aws->epbase,
- NN_STAT_BROKEN_CONNECTIONS, 1);
+ nn_ep_stat_increment (aws->ep, NN_STAT_BROKEN_CONNECTIONS, 1);
return;
default:
nn_fsm_bad_action (aws->state, src, type);
diff --git a/src/transports/ws/aws.h b/src/transports/ws/aws.h
index ae271be..8a03255 100644
--- a/src/transports/ws/aws.h
+++ b/src/transports/ws/aws.h
@@ -1,6 +1,7 @@
/*
Copyright (c) 2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014 Wirebird Labs LLC. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -49,7 +50,7 @@
int state;
/* Pointer to the associated endpoint. */
- struct nn_epbase *epbase;
+ struct nn_ep *ep;
/* Underlying socket. */
struct nn_usock usock;
@@ -70,7 +71,7 @@
};
void nn_aws_init (struct nn_aws *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_aws_term (struct nn_aws *self);
int nn_aws_isidle (struct nn_aws *self);
diff --git a/src/transports/ws/bws.c b/src/transports/ws/bws.c
index da3a53f..98c5448 100644
--- a/src/transports/ws/bws.c
+++ b/src/transports/ws/bws.c
@@ -65,9 +65,7 @@
struct nn_fsm fsm;
int state;
- /* This object is a specific type of endpoint.
- Thus it is derived from epbase. */
- struct nn_epbase epbase;
+ struct nn_ep *ep;
/* The underlying listening WS socket. */
struct nn_usock usock;
@@ -79,10 +77,10 @@
struct nn_list awss;
};
-/* nn_epbase virtual interface implementation. */
-static void nn_bws_stop (struct nn_epbase *self);
-static void nn_bws_destroy (struct nn_epbase *self);
-const struct nn_epbase_vfptr nn_bws_epbase_vfptr = {
+/* nn_ep virtual interface implementation. */
+static void nn_bws_stop (struct nn_ep *);
+static void nn_bws_destroy (struct nn_ep *);
+const struct nn_ep_vfptr nn_bws_ep_vfptr = {
nn_bws_stop,
nn_bws_destroy
};
@@ -95,7 +93,7 @@
static int nn_bws_listen (struct nn_bws *self);
static void nn_bws_start_accepting (struct nn_bws *self);
-int nn_bws_create (void *hint, struct nn_epbase **epbase)
+int nn_bws_create (struct nn_ep *ep)
{
int rc;
struct nn_bws *self;
@@ -110,41 +108,37 @@
/* Allocate the new endpoint object. */
self = nn_alloc (sizeof (struct nn_bws), "bws");
alloc_assert (self);
+ self->ep = ep;
- /* Initalise the epbase. */
- nn_epbase_init (&self->epbase, &nn_bws_epbase_vfptr, hint);
- addr = nn_epbase_getaddr (&self->epbase);
+ nn_ep_tran_setup (ep, &nn_bws_ep_vfptr, self);
+ addr = nn_ep_getaddr (ep);
/* Parse the port. */
end = addr + strlen (addr);
pos = strrchr (addr, ':');
- if (nn_slow (!pos)) {
- nn_epbase_term (&self->epbase);
+ if (!pos) {
return -EINVAL;
}
++pos;
rc = nn_port_resolve (pos, end - pos);
- if (nn_slow (rc < 0)) {
- nn_epbase_term (&self->epbase);
+ if (rc < 0) {
return -EINVAL;
}
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
- &ipv4only, &ipv4onlylen);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_IPV4ONLY, &ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
/* Parse the address. */
rc = nn_iface_resolve (addr, pos - addr - 1, ipv4only, &ss, &sslen);
- if (nn_slow (rc < 0)) {
- nn_epbase_term (&self->epbase);
+ if (rc < 0) {
return -ENODEV;
}
/* Initialise the structure. */
nn_fsm_init_root (&self->fsm, nn_bws_handler, nn_bws_shutdown,
- nn_epbase_getctx (&self->epbase));
+ nn_ep_getctx (ep));
self->state = NN_BWS_STATE_IDLE;
self->aws = NULL;
nn_list_init (&self->awss);
@@ -156,36 +150,31 @@
rc = nn_bws_listen (self);
if (rc != 0) {
- nn_epbase_term (&self->epbase);
return rc;
}
- /* Return the base class as an out parameter. */
- *epbase = &self->epbase;
-
return 0;
}
-static void nn_bws_stop (struct nn_epbase *self)
+static void nn_bws_stop (struct nn_ep *ep)
{
struct nn_bws *bws;
- bws = nn_cont (self, struct nn_bws, epbase);
+ bws = nn_ep_tran_private (ep);
nn_fsm_stop (&bws->fsm);
}
-static void nn_bws_destroy (struct nn_epbase *self)
+static void nn_bws_destroy (struct nn_ep *ep)
{
struct nn_bws *bws;
- bws = nn_cont (self, struct nn_bws, epbase);
+ bws = nn_ep_tran_private (ep);
nn_assert_state (bws, NN_BWS_STATE_IDLE);
nn_list_term (&bws->awss);
nn_assert (bws->aws == NULL);
nn_usock_term (&bws->usock);
- nn_epbase_term (&bws->epbase);
nn_fsm_term (&bws->fsm);
nn_free (bws);
@@ -200,7 +189,7 @@
bws = nn_cont (self, struct nn_bws, fsm);
- if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
+ if (src == NN_FSM_ACTION && type == NN_FSM_STOP) {
if (bws->aws) {
nn_aws_stop (bws->aws);
bws->state = NN_BWS_STATE_STOPPING_AWS;
@@ -209,7 +198,7 @@
bws->state = NN_BWS_STATE_STOPPING_USOCK;
}
}
- if (nn_slow (bws->state == NN_BWS_STATE_STOPPING_AWS)) {
+ if (bws->state == NN_BWS_STATE_STOPPING_AWS) {
if (!nn_aws_isidle (bws->aws))
return;
nn_aws_term (bws->aws);
@@ -218,7 +207,7 @@
nn_usock_stop (&bws->usock);
bws->state = NN_BWS_STATE_STOPPING_USOCK;
}
- if (nn_slow (bws->state == NN_BWS_STATE_STOPPING_USOCK)) {
+ if (bws->state == NN_BWS_STATE_STOPPING_USOCK) {
if (!nn_usock_isidle (&bws->usock))
return;
for (it = nn_list_begin (&bws->awss);
@@ -230,7 +219,7 @@
bws->state = NN_BWS_STATE_STOPPING_AWSS;
goto awss_stopping;
}
- if (nn_slow (bws->state == NN_BWS_STATE_STOPPING_AWSS)) {
+ if (bws->state == NN_BWS_STATE_STOPPING_AWSS) {
nn_assert (src == NN_BWS_SRC_AWS && type == NN_AWS_STOPPED);
aws = (struct nn_aws *) srcptr;
nn_list_erase (&bws->awss, &aws->item);
@@ -243,7 +232,7 @@
if (nn_list_empty (&bws->awss)) {
bws->state = NN_BWS_STATE_IDLE;
nn_fsm_stopped_noevent (&bws->fsm);
- nn_epbase_stopped (&bws->epbase);
+ nn_ep_stopped (bws->ep);
return;
}
@@ -332,7 +321,7 @@
uint16_t port;
/* First, resolve the IP address. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (self->ep);
memset (&ss, 0, sizeof (ss));
/* Parse the port. */
@@ -348,7 +337,7 @@
/* Parse the address. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_IPV4ONLY,
&ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
rc = nn_iface_resolve (addr, pos - addr - 1, ipv4only, &ss, &sslen);
@@ -401,7 +390,7 @@
/* Allocate new aws state machine. */
self->aws = nn_alloc (sizeof (struct nn_aws), "aws");
alloc_assert (self->aws);
- nn_aws_init (self->aws, NN_BWS_SRC_AWS, &self->epbase, &self->fsm);
+ nn_aws_init (self->aws, NN_BWS_SRC_AWS, self->ep, &self->fsm);
/* Start waiting for a new incoming connection. */
nn_aws_start (self->aws, &self->usock);
diff --git a/src/transports/ws/bws.h b/src/transports/ws/bws.h
index 9203b2e..7e9f3f3 100644
--- a/src/transports/ws/bws.h
+++ b/src/transports/ws/bws.h
@@ -1,6 +1,7 @@
/*
Copyright (c) 2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014 Wirebird Labs LLC. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -28,7 +29,6 @@
/* State machine managing bound WS socket. */
-int nn_bws_create (void *hint, struct nn_epbase **epbase);
+int nn_bws_create (struct nn_ep *ep);
#endif
-
diff --git a/src/transports/ws/cws.c b/src/transports/ws/cws.c
index 627d1ec..546430f 100644
--- a/src/transports/ws/cws.c
+++ b/src/transports/ws/cws.c
@@ -1,7 +1,7 @@
/*
Copyright (c) 2012-2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014-2016 Jack R. Dunaway. All rights reserved.
- Copyright 2015 Garrett D'Amore <garrett@damore.org>
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -75,9 +75,7 @@
struct nn_fsm fsm;
int state;
- /* This object is a specific type of endpoint.
- Thus it is derived from epbase. */
- struct nn_epbase epbase;
+ struct nn_ep *ep;
/* The underlying WS socket. */
struct nn_usock usock;
@@ -109,10 +107,10 @@
struct nn_dns_result dns_result;
};
-/* nn_epbase virtual interface implementation. */
-static void nn_cws_stop (struct nn_epbase *self);
-static void nn_cws_destroy (struct nn_epbase *self);
-const struct nn_epbase_vfptr nn_cws_epbase_vfptr = {
+/* nn_ep virtual interface implementation. */
+static void nn_cws_stop (struct nn_ep *ep);
+static void nn_cws_destroy (struct nn_ep *ep);
+const struct nn_ep_vfptr nn_cws_ep_vfptr = {
nn_cws_stop,
nn_cws_destroy
};
@@ -126,7 +124,7 @@
static void nn_cws_start_connecting (struct nn_cws *self,
struct sockaddr_storage *ss, size_t sslen);
-int nn_cws_create (void *hint, struct nn_epbase **epbase)
+int nn_cws_create (struct nn_ep *ep)
{
int rc;
const char *addr;
@@ -151,18 +149,18 @@
/* Allocate the new endpoint object. */
self = nn_alloc (sizeof (struct nn_cws), "cws");
alloc_assert (self);
+ self->ep = ep;
/* Initalise the endpoint. */
- nn_epbase_init (&self->epbase, &nn_cws_epbase_vfptr, hint);
+ nn_ep_tran_setup (ep, &nn_cws_ep_vfptr, self);
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
- &ipv4only, &ipv4onlylen);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_IPV4ONLY, &ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
/* Start parsing the address. */
- addr = nn_epbase_getaddr (&self->epbase);
+ addr = nn_ep_getaddr (ep);
addrlen = strlen (addr);
semicolon = strchr (addr, ';');
hostname = semicolon ? semicolon + 1 : addr;
@@ -175,10 +173,9 @@
hostlen = resource - hostname;
/* Parse the port; assume port 80 if not explicitly declared. */
- if (nn_slow (colon != NULL)) {
+ if (colon != NULL) {
rc = nn_port_resolve (colon + 1, resource - colon - 1);
- if (nn_slow (rc < 0)) {
- nn_epbase_term (&self->epbase);
+ if (rc < 0) {
return -EINVAL;
}
self->remote_port = rc;
@@ -192,7 +189,6 @@
if (nn_dns_check_hostname (hostname, self->remote_hostname_len) < 0 &&
nn_literal_resolve (hostname, self->remote_hostname_len, ipv4only,
&ss, &sslen) < 0) {
- nn_epbase_term (&self->epbase);
return -EINVAL;
}
@@ -200,7 +196,6 @@
if (semicolon) {
rc = nn_iface_resolve (addr, semicolon - addr, ipv4only, &ss, &sslen);
if (rc < 0) {
- nn_epbase_term (&self->epbase);
return -ENODEV;
}
}
@@ -235,22 +230,20 @@
/* Initialise the structure. */
nn_fsm_init_root (&self->fsm, nn_cws_handler, nn_cws_shutdown,
- nn_epbase_getctx (&self->epbase));
+ nn_ep_getctx (ep));
self->state = NN_CWS_STATE_IDLE;
nn_usock_init (&self->usock, NN_CWS_SRC_USOCK, &self->fsm);
sz = sizeof (msg_type);
- nn_epbase_getopt (&self->epbase, NN_WS, NN_WS_MSG_TYPE,
- &msg_type, &sz);
+ nn_ep_getopt (ep, NN_WS, NN_WS_MSG_TYPE, &msg_type, &sz);
nn_assert (sz == sizeof (msg_type));
self->msg_type = (uint8_t) msg_type;
sz = sizeof (reconnect_ivl);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RECONNECT_IVL,
- &reconnect_ivl, &sz);
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL, &reconnect_ivl, &sz);
nn_assert (sz == sizeof (reconnect_ivl));
sz = sizeof (reconnect_ivl_max);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RECONNECT_IVL_MAX,
+ nn_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL_MAX,
&reconnect_ivl_max, &sz);
nn_assert (sz == sizeof (reconnect_ivl_max));
if (reconnect_ivl_max == 0)
@@ -258,32 +251,29 @@
nn_backoff_init (&self->retry, NN_CWS_SRC_RECONNECT_TIMER,
reconnect_ivl, reconnect_ivl_max, &self->fsm);
- nn_sws_init (&self->sws, NN_CWS_SRC_SWS, &self->epbase, &self->fsm);
+ nn_sws_init (&self->sws, NN_CWS_SRC_SWS, ep, &self->fsm);
nn_dns_init (&self->dns, NN_CWS_SRC_DNS, &self->fsm);
/* Start the state machine. */
nn_fsm_start (&self->fsm);
- /* Return the base class as an out parameter. */
- *epbase = &self->epbase;
-
return 0;
}
-static void nn_cws_stop (struct nn_epbase *self)
+static void nn_cws_stop (struct nn_ep *ep)
{
struct nn_cws *cws;
- cws = nn_cont (self, struct nn_cws, epbase);
+ cws = nn_ep_tran_private (ep);
nn_fsm_stop (&cws->fsm);
}
-static void nn_cws_destroy (struct nn_epbase *self)
+static void nn_cws_destroy (struct nn_ep *ep)
{
struct nn_cws *cws;
- cws = nn_cont (self, struct nn_cws, epbase);
+ cws = nn_ep_tran_private (ep);
nn_chunkref_term (&cws->resource);
nn_chunkref_term (&cws->remote_host);
@@ -293,7 +283,6 @@
nn_backoff_term (&cws->retry);
nn_usock_term (&cws->usock);
nn_fsm_term (&cws->fsm);
- nn_epbase_term (&cws->epbase);
nn_free (cws);
}
@@ -307,8 +296,7 @@
if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) {
if (!nn_sws_isidle (&cws->sws)) {
- nn_epbase_stat_increment (&cws->epbase,
- NN_STAT_DROPPED_CONNECTIONS, 1);
+ nn_ep_stat_increment (cws->ep, NN_STAT_DROPPED_CONNECTIONS, 1);
nn_sws_stop (&cws->sws);
}
cws->state = NN_CWS_STATE_STOPPING_SWS_FINAL;
@@ -328,7 +316,7 @@
return;
cws->state = NN_CWS_STATE_IDLE;
nn_fsm_stopped_noevent (&cws->fsm);
- nn_epbase_stopped (&cws->epbase);
+ nn_ep_stopped (cws->ep);
return;
}
@@ -426,21 +414,19 @@
nn_chunkref_data (&cws->remote_host), cws->msg_type);
cws->state = NN_CWS_STATE_ACTIVE;
cws->peer_gone = 0;
- nn_epbase_stat_increment (&cws->epbase,
+ nn_ep_stat_increment (cws->ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&cws->epbase,
+ nn_ep_stat_increment (cws->ep,
NN_STAT_ESTABLISHED_CONNECTIONS, 1);
- nn_epbase_clear_error (&cws->epbase);
+ nn_ep_clear_error (cws->ep);
return;
case NN_USOCK_ERROR:
- nn_epbase_set_error (&cws->epbase,
- nn_usock_geterrno (&cws->usock));
+ nn_ep_set_error (cws->ep, nn_usock_geterrno (&cws->usock));
nn_usock_stop (&cws->usock);
cws->state = NN_CWS_STATE_STOPPING_USOCK;
- nn_epbase_stat_increment (&cws->epbase,
+ nn_ep_stat_increment (cws->ep,
NN_STAT_INPROGRESS_CONNECTIONS, -1);
- nn_epbase_stat_increment (&cws->epbase,
- NN_STAT_CONNECT_ERRORS, 1);
+ nn_ep_stat_increment (cws->ep, NN_STAT_CONNECT_ERRORS, 1);
return;
default:
nn_fsm_bad_action (cws->state, src, type);
@@ -469,8 +455,7 @@
case NN_SWS_RETURN_ERROR:
nn_sws_stop (&cws->sws);
cws->state = NN_CWS_STATE_STOPPING_SWS;
- nn_epbase_stat_increment (&cws->epbase,
- NN_STAT_BROKEN_CONNECTIONS, 1);
+ nn_ep_stat_increment (cws->ep, NN_STAT_BROKEN_CONNECTIONS, 1);
return;
default:
nn_fsm_bad_action (cws->state, src, type);
@@ -593,7 +578,7 @@
/* Check whether IPv6 is to be used. */
ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_IPV4ONLY,
&ipv4only, &ipv4onlylen);
nn_assert (ipv4onlylen == sizeof (ipv4only));
@@ -615,7 +600,6 @@
struct sockaddr_storage local;
size_t locallen;
int ipv4only;
- size_t ipv4onlylen;
int val;
size_t sz;
@@ -623,10 +607,9 @@
memset (&local, 0, sizeof (local));
/* Check whether IPv6 is to be used. */
- ipv4onlylen = sizeof (ipv4only);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_IPV4ONLY,
- &ipv4only, &ipv4onlylen);
- nn_assert (ipv4onlylen == sizeof (ipv4only));
+ sz = sizeof (ipv4only);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_IPV4ONLY, &ipv4only, &sz);
+ nn_assert (sz == sizeof (ipv4only));
rc = nn_iface_resolve (nn_chunkref_data (&self->nic),
nn_chunkref_size (&self->nic), ipv4only, &local, &locallen);
@@ -657,12 +640,12 @@
/* Set the relevant socket options. */
sz = sizeof (val);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_SNDBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_SNDBUF,
&val, sizeof (val));
sz = sizeof (val);
- nn_epbase_getopt (&self->epbase, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
+ nn_ep_getopt (self->ep, NN_SOL_SOCKET, NN_RCVBUF, &val, &sz);
nn_assert (sz == sizeof (val));
nn_usock_setsockopt (&self->usock, SOL_SOCKET, SO_RCVBUF,
&val, sizeof (val));
@@ -678,6 +661,5 @@
/* Start connecting. */
nn_usock_connect (&self->usock, (struct sockaddr*) &remote, remotelen);
self->state = NN_CWS_STATE_CONNECTING;
- nn_epbase_stat_increment (&self->epbase,
- NN_STAT_INPROGRESS_CONNECTIONS, 1);
+ nn_ep_stat_increment (self->ep, NN_STAT_INPROGRESS_CONNECTIONS, 1);
}
diff --git a/src/transports/ws/cws.h b/src/transports/ws/cws.h
index 6c25b38..5314018 100644
--- a/src/transports/ws/cws.h
+++ b/src/transports/ws/cws.h
@@ -1,6 +1,7 @@
/*
Copyright (c) 2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014 Wirebird Labs LLC. All rights reserved.
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -28,7 +29,7 @@
/* State machine managing connected WS socket. */
-int nn_cws_create (void *hint, struct nn_epbase **epbase);
+int nn_cws_create (struct nn_ep *);
#endif
diff --git a/src/transports/ws/sws.c b/src/transports/ws/sws.c
index 7029131..b2590d4 100644
--- a/src/transports/ws/sws.c
+++ b/src/transports/ws/sws.c
@@ -1,7 +1,7 @@
/*
Copyright (c) 2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014-2016 Jack R. Dunaway. All rights reserved.
- Copyright 2015 Garrett D'Amore <garrett@damore.org>
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -132,18 +132,17 @@
static void nn_sws_acknowledge_close_handshake (struct nn_sws *self);
void nn_sws_init (struct nn_sws *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner)
+ struct nn_ep *ep, struct nn_fsm *owner)
{
nn_fsm_init (&self->fsm, nn_sws_handler, nn_sws_shutdown,
src, self, owner);
self->state = NN_SWS_STATE_IDLE;
- self->epbase = epbase;
nn_ws_handshake_init (&self->handshaker,
NN_SWS_SRC_HANDSHAKE, &self->fsm);
self->usock = NULL;
self->usock_owner.src = -1;
self->usock_owner.fsm = NULL;
- nn_pipebase_init (&self->pipebase, &nn_sws_pipebase_vfptr, epbase);
+ nn_pipebase_init (&self->pipebase, &nn_sws_pipebase_vfptr, ep);
self->instate = -1;
nn_list_init (&self->inmsg_array);
self->outstate = -1;
diff --git a/src/transports/ws/sws.h b/src/transports/ws/sws.h
index 9ab02e6..7f2659d 100644
--- a/src/transports/ws/sws.h
+++ b/src/transports/ws/sws.h
@@ -1,7 +1,7 @@
/*
Copyright (c) 2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2014 Wirebird Labs LLC. All rights reserved.
- Copyright 2015 Garrett D'Amore <garrett@damore.org>
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -83,9 +83,6 @@
struct nn_fsm fsm;
int state;
- /* Endpoint base. */
- struct nn_epbase *epbase;
-
/* Default message type set on outbound frames. */
uint8_t msg_type;
@@ -193,7 +190,7 @@
void nn_msg_array_term (struct nn_list *msg_array);
void nn_sws_init (struct nn_sws *self, int src,
- struct nn_epbase *epbase, struct nn_fsm *owner);
+ struct nn_ep *ep, struct nn_fsm *owner);
void nn_sws_term (struct nn_sws *self);
int nn_sws_isidle (struct nn_sws *self);
diff --git a/src/transports/ws/ws.c b/src/transports/ws/ws.c
index af5bf8b..4e6d805 100644
--- a/src/transports/ws/ws.c
+++ b/src/transports/ws/ws.c
@@ -2,7 +2,7 @@
Copyright (c) 2012-2013 250bpm s.r.o. All rights reserved.
Copyright (c) 2013 GoPivotal, Inc. All rights reserved.
Copyright (c) 2014 Wirebird Labs LLC. All rights reserved.
- Copyright 2015 Garrett D'Amore <garrett@damore.org>
+ Copyright 2016 Garrett D'Amore <garrett@damore.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
@@ -65,8 +65,8 @@
};
/* nn_transport interface. */
-static int nn_ws_bind (void *hint, struct nn_epbase **epbase);
-static int nn_ws_connect (void *hint, struct nn_epbase **epbase);
+static int nn_ws_bind (struct nn_ep *);
+static int nn_ws_connect (struct nn_ep *);
static struct nn_optset *nn_ws_optset (void);
static struct nn_transport nn_ws_vfptr = {
@@ -82,14 +82,14 @@
struct nn_transport *nn_ws = &nn_ws_vfptr;
-static int nn_ws_bind (void *hint, struct nn_epbase **epbase)
+static int nn_ws_bind (struct nn_ep *ep)
{
- return nn_bws_create (hint, epbase);
+ return nn_bws_create (ep);
}
-static int nn_ws_connect (void *hint, struct nn_epbase **epbase)
+static int nn_ws_connect (struct nn_ep *ep)
{
- return nn_cws_create (hint, epbase);
+ return nn_cws_create (ep);
}
static struct nn_optset *nn_ws_optset ()
diff --git a/src/transports/ws/ws_handshake.c b/src/transports/ws/ws_handshake.c
index 26b7367..ddf5f25 100644
--- a/src/transports/ws/ws_handshake.c
+++ b/src/transports/ws/ws_handshake.c
@@ -916,7 +916,6 @@
{
const char *conn = NULL;
size_t conn_len = 0;
-fprintf(stderr, "POS is %s\n", pos);
if (nn_ws_match_token ("Host:", &pos, 1, 0)) {
rc = nn_ws_match_value (CRLF, &pos, 1, 1,
&self->host, &self->host_len);