summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2010-09-28 07:43:18 +0000
committerBenny Prijono <bennylp@teluu.com>2010-09-28 07:43:18 +0000
commit6e7c99b00209bbdb5403cec88f6b7ad01e25526c (patch)
treea96b1174be66eaca9d756c71fc76898ccdffa9c5 /pjsip/src/pjsua-lib
parent956dfe0b552043fbd5ce2181219feeb59b7f459f (diff)
Closed #1139 (Support for tel: URI in PJSUA-LIB):
- added new PJSUA API: pjsua_verify_url() which can be used for tel: URI - modified and tested according to spec - added new PJSIP error code, PJSIP_ENOROUTESET, to indicate that route set is needed to send to tel: URI - added couple of unit tests (we can't cover the whole tel: URI scenario yet) git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3323 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c35
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c29
2 files changed, 44 insertions, 20 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c
index abb61b15..fdd37a51 100644
--- a/pjsip/src/pjsua-lib/pjsua_acc.c
+++ b/pjsip/src/pjsua-lib/pjsua_acc.c
@@ -119,7 +119,7 @@ static pj_status_t initialize_acc(unsigned acc_id)
pjsua_acc_config *acc_cfg = &pjsua_var.acc[acc_id].cfg;
pjsua_acc *acc = &pjsua_var.acc[acc_id];
pjsip_name_addr *name_addr;
- pjsip_sip_uri *sip_uri, *sip_reg_uri;
+ pjsip_sip_uri *sip_reg_uri;
pj_status_t status;
unsigned i;
@@ -136,18 +136,27 @@ static pj_status_t initialize_acc(unsigned acc_id)
}
/* Local URI MUST be a SIP or SIPS: */
-
if (!PJSIP_URI_SCHEME_IS_SIP(name_addr) &&
!PJSIP_URI_SCHEME_IS_SIPS(name_addr))
{
- pjsua_perror(THIS_FILE, "Invalid local URI",
- PJSIP_EINVALIDSCHEME);
- return PJSIP_EINVALIDSCHEME;
- }
+ acc->display = name_addr->display;
+ acc->user_part = name_addr->display;
+ acc->srv_domain = pj_str("");
+ acc->srv_port = 0;
+ } else {
+ pjsip_sip_uri *sip_uri;
+ /* Get the SIP URI object: */
+ sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri(name_addr);
- /* Get the SIP URI object: */
- sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri(name_addr);
+ /* Save the user and domain part. These will be used when finding an
+ * account for incoming requests.
+ */
+ acc->display = name_addr->display;
+ acc->user_part = sip_uri->user;
+ acc->srv_domain = sip_uri->host;
+ acc->srv_port = 0;
+ }
/* Parse registrar URI, if any */
@@ -177,14 +186,6 @@ static pj_status_t initialize_acc(unsigned acc_id)
sip_reg_uri = NULL;
}
- /* Save the user and domain part. These will be used when finding an
- * account for incoming requests.
- */
- acc->display = name_addr->display;
- acc->user_part = sip_uri->user;
- acc->srv_domain = sip_uri->host;
- acc->srv_port = 0;
-
if (sip_reg_uri) {
acc->srv_port = sip_reg_uri->port;
}
@@ -2160,7 +2161,7 @@ PJ_DEF(pj_status_t) pjsua_acc_create_uac_contact( pj_pool_t *pool,
/* For non-SIP scheme, route set should be configured */
if (!PJSIP_URI_SCHEME_IS_SIP(uri) && !PJSIP_URI_SCHEME_IS_SIPS(uri))
- return PJSIP_EINVALIDREQURI;
+ return PJSIP_ENOROUTESET;
sip_uri = (pjsip_sip_uri*)pjsip_uri_get_uri(uri);
}
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index 9fb0a5d0..0dcd0f2a 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -2404,6 +2404,29 @@ PJ_DEF(pj_status_t) pjsua_get_nat_type(pj_stun_nat_type *type)
return pjsua_var.nat_status;
}
+/*
+ * Verify that valid url is given.
+ */
+PJ_DEF(pj_status_t) pjsua_verify_url(const char *c_url)
+{
+ pjsip_uri *p;
+ pj_pool_t *pool;
+ char *url;
+ int len = (c_url ? pj_ansi_strlen(c_url) : 0);
+
+ if (!len) return PJSIP_EINVALIDURI;
+
+ pool = pj_pool_create(&pjsua_var.cp.factory, "check%p", 1024, 0, NULL);
+ if (!pool) return PJ_ENOMEM;
+
+ url = (char*) pj_pool_alloc(pool, len+1);
+ pj_ansi_strcpy(url, c_url);
+
+ p = pjsip_parse_uri(pool, url, len, 0);
+
+ pj_pool_release(pool);
+ return p ? 0 : PJSIP_EINVALIDURI;
+}
/*
* Verify that valid SIP url is given.
@@ -2415,10 +2438,10 @@ PJ_DEF(pj_status_t) pjsua_verify_sip_url(const char *c_url)
char *url;
int len = (c_url ? pj_ansi_strlen(c_url) : 0);
- if (!len) return -1;
+ if (!len) return PJSIP_EINVALIDURI;
pool = pj_pool_create(&pjsua_var.cp.factory, "check%p", 1024, 0, NULL);
- if (!pool) return -1;
+ if (!pool) return PJ_ENOMEM;
url = (char*) pj_pool_alloc(pool, len+1);
pj_ansi_strcpy(url, c_url);
@@ -2431,7 +2454,7 @@ PJ_DEF(pj_status_t) pjsua_verify_sip_url(const char *c_url)
}
pj_pool_release(pool);
- return p ? 0 : -1;
+ return p ? 0 : PJSIP_EINVALIDURI;
}
/*