aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/transport/tcp/tcp.c43
-rw-r--r--src/transport/tls/tls.c43
2 files changed, 78 insertions, 8 deletions
diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c
index 171cc8ee..419774e1 100644
--- a/src/transport/tcp/tcp.c
+++ b/src/transport/tcp/tcp.c
@@ -611,6 +611,17 @@ nni_tcp_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
nni_sockaddr rsa, lsa;
nni_aio * aio;
int passive;
+ uint16_t af;
+
+ if (strcmp(url->u_scheme, "tcp") == 0) {
+ af = NNG_AF_UNSPEC;
+ } else if (strcmp(url->u_scheme, "tcp4") == 0) {
+ af = NNG_AF_INET;
+ } else if (strcmp(url->u_scheme, "tcp6") == 0) {
+ af = NNG_AF_INET6;
+ } else {
+ return (NNG_EADDRINVAL);
+ }
// Check for invalid URL components.
if ((strlen(url->u_path) != 0) && (strcmp(url->u_path, "/") != 0)) {
@@ -640,7 +651,7 @@ nni_tcp_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
// or connect!
if (mode == NNI_EP_MODE_DIAL) {
passive = 0;
- lsa.s_family = NNG_AF_UNSPEC;
+ lsa.s_family = af;
nni_aio_set_input(aio, 0, &rsa);
if ((host == NULL) || (serv == NULL)) {
nni_aio_fini(aio);
@@ -648,11 +659,11 @@ nni_tcp_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
}
} else {
passive = 1;
- rsa.s_family = NNG_AF_UNSPEC;
+ rsa.s_family = af;
nni_aio_set_input(aio, 0, &lsa);
}
- nni_plat_tcp_resolv(host, serv, NNG_AF_UNSPEC, passive, aio);
+ nni_plat_tcp_resolv(host, serv, af, passive, aio);
nni_aio_wait(aio);
if ((rv = nni_aio_result(aio)) != 0) {
nni_aio_fini(aio);
@@ -981,8 +992,32 @@ static nni_tran nni_tcp_tran = {
.tran_fini = nni_tcp_tran_fini,
};
+static nni_tran nni_tcp4_tran = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "tcp4",
+ .tran_ep = &nni_tcp_ep_ops,
+ .tran_pipe = &nni_tcp_pipe_ops,
+ .tran_init = nni_tcp_tran_init,
+ .tran_fini = nni_tcp_tran_fini,
+};
+
+static nni_tran nni_tcp6_tran = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "tcp6",
+ .tran_ep = &nni_tcp_ep_ops,
+ .tran_pipe = &nni_tcp_pipe_ops,
+ .tran_init = nni_tcp_tran_init,
+ .tran_fini = nni_tcp_tran_fini,
+};
+
int
nng_tcp_register(void)
{
- return (nni_tran_register(&nni_tcp_tran));
+ int rv;
+ if (((rv = nni_tran_register(&nni_tcp_tran)) != 0) ||
+ ((rv = nni_tran_register(&nni_tcp4_tran)) != 0) ||
+ ((rv = nni_tran_register(&nni_tcp6_tran)) != 0)) {
+ return (rv);
+ }
+ return (0);
}
diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c
index f7e90303..385dd206 100644
--- a/src/transport/tls/tls.c
+++ b/src/transport/tls/tls.c
@@ -622,6 +622,17 @@ nni_tls_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
int passive;
nng_tls_mode tlsmode;
nng_tls_auth_mode authmode;
+ uint16_t af;
+
+ if (strcmp(url->u_scheme, "tls+tcp") == 0) {
+ af = NNG_AF_UNSPEC;
+ } else if (strcmp(url->u_scheme, "tls+tcp4") == 0) {
+ af = NNG_AF_INET;
+ } else if (strcmp(url->u_scheme, "tls+tcp6") == 0) {
+ af = NNG_AF_INET6;
+ } else {
+ return (NNG_EADDRINVAL);
+ }
// Check for invalid URL components.
if ((strlen(url->u_path) != 0) && (strcmp(url->u_path, "/") != 0)) {
@@ -651,7 +662,7 @@ nni_tls_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
passive = 0;
tlsmode = NNG_TLS_MODE_CLIENT;
authmode = NNG_TLS_AUTH_MODE_REQUIRED;
- lsa.s_family = NNG_AF_UNSPEC;
+ lsa.s_family = af;
nni_aio_set_input(aio, 0, &rsa);
if ((host == NULL) || (serv == NULL)) {
nni_aio_fini(aio);
@@ -661,13 +672,13 @@ nni_tls_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode)
passive = 1;
tlsmode = NNG_TLS_MODE_SERVER;
authmode = NNG_TLS_AUTH_MODE_NONE;
- rsa.s_family = NNG_AF_UNSPEC;
+ rsa.s_family = af;
nni_aio_set_input(aio, 0, &lsa);
}
// XXX: arguably we could defer this part to the point we do a bind
// or connect!
- nni_plat_tcp_resolv(host, serv, NNG_AF_UNSPEC, passive, aio);
+ nni_plat_tcp_resolv(host, serv, af, passive, aio);
nni_aio_wait(aio);
if ((rv = nni_aio_result(aio)) != 0) {
nni_aio_fini(aio);
@@ -1137,8 +1148,32 @@ static nni_tran nni_tls_tran = {
.tran_fini = nni_tls_tran_fini,
};
+static nni_tran nni_tls4_tran = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "tls+tcp4",
+ .tran_ep = &nni_tls_ep_ops,
+ .tran_pipe = &nni_tls_pipe_ops,
+ .tran_init = nni_tls_tran_init,
+ .tran_fini = nni_tls_tran_fini,
+};
+
+static nni_tran nni_tls6_tran = {
+ .tran_version = NNI_TRANSPORT_VERSION,
+ .tran_scheme = "tls+tcp6",
+ .tran_ep = &nni_tls_ep_ops,
+ .tran_pipe = &nni_tls_pipe_ops,
+ .tran_init = nni_tls_tran_init,
+ .tran_fini = nni_tls_tran_fini,
+};
+
int
nng_tls_register(void)
{
- return (nni_tran_register(&nni_tls_tran));
+ int rv;
+ if (((rv = nni_tran_register(&nni_tls_tran)) != 0) ||
+ ((rv = nni_tran_register(&nni_tls4_tran)) != 0) ||
+ ((rv = nni_tran_register(&nni_tls6_tran)) != 0)) {
+ return (rv);
+ }
+ return (0);
}