aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/dialer.c10
-rw-r--r--src/core/listener.c11
-rw-r--r--src/sp/transport.c6
-rw-r--r--src/sp/transport.h2
4 files changed, 15 insertions, 14 deletions
diff --git a/src/core/dialer.c b/src/core/dialer.c
index 27020b37..3cd6620f 100644
--- a/src/core/dialer.c
+++ b/src/core/dialer.c
@@ -219,15 +219,15 @@ nni_dialer_create(nni_dialer **dp, nni_sock *s, const char *url_str)
if ((d = NNI_ALLOC_STRUCT(d)) == NULL) {
return (NNG_ENOMEM);
}
- if ((rv = nni_url_parse_inline(&d->d_url, url_str)) != 0) {
+ if (((tran = nni_sp_tran_find(url_str)) == NULL) ||
+ (tran->tran_dialer == NULL)) {
NNI_FREE_STRUCT(d);
- return (rv);
+ return (NNG_ENOTSUP);
}
- if (((tran = nni_sp_tran_find(&d->d_url)) == NULL) ||
- (tran->tran_dialer == NULL)) {
+ if ((rv = nni_url_parse_inline(&d->d_url, url_str)) != 0) {
nni_url_fini(&d->d_url);
NNI_FREE_STRUCT(d);
- return (NNG_ENOTSUP);
+ return (rv);
}
d->d_closed = false;
d->d_data = NULL;
diff --git a/src/core/listener.c b/src/core/listener.c
index 08b235af..3c2d7bf0 100644
--- a/src/core/listener.c
+++ b/src/core/listener.c
@@ -207,16 +207,15 @@ nni_listener_create(nni_listener **lp, nni_sock *s, const char *url_str)
if ((l = NNI_ALLOC_STRUCT(l)) == NULL) {
return (NNG_ENOMEM);
}
- if ((rv = nni_url_parse_inline(&l->l_url, url_str)) != 0) {
- nni_url_fini(&l->l_url);
+ if (((tran = nni_sp_tran_find(url_str)) == NULL) ||
+ (tran->tran_listener == NULL)) {
NNI_FREE_STRUCT(l);
- return (rv);
+ return (NNG_ENOTSUP);
}
- if (((tran = nni_sp_tran_find(&l->l_url)) == NULL) ||
- (tran->tran_listener == NULL)) {
+ if ((rv = nni_url_parse_inline(&l->l_url, url_str)) != 0) {
nni_url_fini(&l->l_url);
NNI_FREE_STRUCT(l);
- return (NNG_ENOTSUP);
+ return (rv);
}
l->l_closed = false;
l->l_data = NULL;
diff --git a/src/sp/transport.c b/src/sp/transport.c
index 61192e82..a2220e7b 100644
--- a/src/sp/transport.c
+++ b/src/sp/transport.c
@@ -32,14 +32,16 @@ nni_sp_tran_register(nni_sp_tran *tran)
}
nni_sp_tran *
-nni_sp_tran_find(nng_url *url)
+nni_sp_tran_find(const char *url)
{
// address is of the form "<scheme>://blah..."
nni_sp_tran *t;
nni_rwlock_rdlock(&sp_tran_lk);
NNI_LIST_FOREACH (&sp_tran_list, t) {
- if (strcmp(url->u_scheme, t->tran_scheme) == 0) {
+ size_t len = strlen(t->tran_scheme);
+ if ((strncmp(url, t->tran_scheme, len) == 0) &&
+ (strncmp(url + len, "://", 3) == 0)) {
nni_rwlock_unlock(&sp_tran_lk);
return (t);
}
diff --git a/src/sp/transport.h b/src/sp/transport.h
index 7311638f..b65486ed 100644
--- a/src/sp/transport.h
+++ b/src/sp/transport.h
@@ -186,7 +186,7 @@ struct nni_sp_tran {
// These APIs are used by the framework internally, and not for use by
// transport implementations.
-extern nni_sp_tran *nni_sp_tran_find(nng_url *);
+extern nni_sp_tran *nni_sp_tran_find(const char *);
extern void nni_sp_tran_sys_init(void);
extern void nni_sp_tran_sys_fini(void);
extern void nni_sp_tran_register(nni_sp_tran *);