void nn_aipc_init (struct nn_aipc *self, int src, struct nn_epbase *epbase, struct nn_fsm *owner) { nn_fsm_init (&self->fsm, nn_aipc_handler, src, self, owner); self->state = NN_AIPC_STATE_IDLE; 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_fsm_event_init (&self->accepted); nn_fsm_event_init (&self->done); nn_list_item_init (&self->item); }
int nn_cipc_create (void *hint, struct nn_epbase **epbase) { struct nn_cipc *self; int reconnect_ivl; int reconnect_ivl_max; size_t sz; /* Allocate the new endpoint object. */ self = nn_alloc (sizeof (struct nn_cipc), "cipc"); alloc_assert (self); /* Initialise the structure. */ nn_epbase_init (&self->epbase, &nn_cipc_epbase_vfptr, hint); nn_fsm_init_root (&self->fsm, nn_cipc_handler, nn_epbase_getctx (&self->epbase)); 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_assert (sz == sizeof (reconnect_ivl)); sz = sizeof (reconnect_ivl_max); nn_epbase_getopt (&self->epbase, 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); /* Start the state machine. */ nn_fsm_start (&self->fsm); /* Return the base class as an out parameter. */ *epbase = &self->epbase; return 0; }
int nn_cipc_create (struct nn_ep *ep) { struct nn_cipc *self; int reconnect_ivl; int reconnect_ivl_max; size_t sz; /* Allocate the new endpoint object. */ self = nn_alloc (sizeof (struct nn_cipc), "cipc"); alloc_assert (self); /* Initialise the structure. */ self->ep = ep; nn_ep_tran_setup (ep, &nn_cipc_ep_ops, self); nn_fsm_init_root (&self->fsm, nn_cipc_handler, nn_cipc_shutdown, 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_ep_getopt (ep, NN_SOL_SOCKET, NN_RECONNECT_IVL, &reconnect_ivl, &sz); nn_assert (sz == sizeof (reconnect_ivl)); sz = sizeof (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, ep, &self->fsm); /* Start the state machine. */ nn_fsm_start (&self->fsm); return 0; }