diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-06-26 17:39:17 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-06-27 17:28:05 -0700 |
| commit | 251553b13e6bc8019914b9edd1292f97e856dd43 (patch) | |
| tree | 9193b8b4d4df86253f0a469cd96d8bb304a64c82 /src/transport/ipc | |
| parent | 91f9061ad9289afffb0111c03a8390d0f82d7114 (diff) | |
| download | nng-251553b13e6bc8019914b9edd1292f97e856dd43.tar.gz nng-251553b13e6bc8019914b9edd1292f97e856dd43.tar.bz2 nng-251553b13e6bc8019914b9edd1292f97e856dd43.zip | |
fixes #522 Separate out the endpoint plumbing
This separates the plumbing for endpoints into distinct
dialer and listeners. Some of the transports could benefit
from further separation, but we've done some rather larger
separation e.g. for the websocket transport.
IPC would be a good one to update later, when we start looking
at exposing a more natural underlying API.
Diffstat (limited to 'src/transport/ipc')
| -rw-r--r-- | src/transport/ipc/ipc.c | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index c5c7032a..b48b82d9 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -656,6 +656,18 @@ ipc_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode) return (0); } +static int +ipc_dialer_init(void **epp, nni_url *url, nni_sock *sock) +{ + return (ipc_ep_init(epp, url, sock, NNI_EP_MODE_DIAL)); +} + +static int +ipc_listener_init(void **epp, nni_url *url, nni_sock *sock) +{ + return (ipc_ep_init(epp, url, sock, NNI_EP_MODE_LISTEN)); +} + static void ipc_ep_close(void *arg) { @@ -915,7 +927,26 @@ static nni_tran_pipe_ops ipc_pipe_ops = { .p_options = ipc_pipe_options, }; -static nni_tran_option ipc_ep_options[] = { +static nni_tran_option ipc_dialer_options[] = { + { + .o_name = NNG_OPT_RECVMAXSZ, + .o_type = NNI_TYPE_SIZE, + .o_get = ipc_ep_get_recvmaxsz, + .o_set = ipc_ep_set_recvmaxsz, + .o_chk = ipc_ep_chk_recvmaxsz, + }, + { + .o_name = NNG_OPT_LOCADDR, + .o_type = NNI_TYPE_SOCKADDR, + .o_get = ipc_ep_get_addr, + }, + // terminate list + { + .o_name = NULL, + }, +}; + +static nni_tran_option ipc_listener_options[] = { { .o_name = NNG_OPT_RECVMAXSZ, .o_type = NNI_TYPE_SIZE, @@ -948,23 +979,31 @@ static nni_tran_option ipc_ep_options[] = { }, }; -static nni_tran_ep_ops ipc_ep_ops = { - .ep_init = ipc_ep_init, - .ep_fini = ipc_ep_fini, - .ep_connect = ipc_ep_connect, - .ep_bind = ipc_ep_bind, - .ep_accept = ipc_ep_accept, - .ep_close = ipc_ep_close, - .ep_options = ipc_ep_options, +static nni_tran_dialer_ops ipc_dialer_ops = { + .d_init = ipc_dialer_init, + .d_fini = ipc_ep_fini, + .d_connect = ipc_ep_connect, + .d_close = ipc_ep_close, + .d_options = ipc_dialer_options, +}; + +static nni_tran_listener_ops ipc_listener_ops = { + .l_init = ipc_listener_init, + .l_fini = ipc_ep_fini, + .l_bind = ipc_ep_bind, + .l_accept = ipc_ep_accept, + .l_close = ipc_ep_close, + .l_options = ipc_listener_options, }; static nni_tran ipc_tran = { - .tran_version = NNI_TRANSPORT_VERSION, - .tran_scheme = "ipc", - .tran_ep = &ipc_ep_ops, - .tran_pipe = &ipc_pipe_ops, - .tran_init = ipc_tran_init, - .tran_fini = ipc_tran_fini, + .tran_version = NNI_TRANSPORT_VERSION, + .tran_scheme = "ipc", + .tran_dialer = &ipc_dialer_ops, + .tran_listener = &ipc_listener_ops, + .tran_pipe = &ipc_pipe_ops, + .tran_init = ipc_tran_init, + .tran_fini = ipc_tran_fini, }; int |
