summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_core.c
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2016-05-13 10:56:48 +0000
committerLiong Sauw Ming <ming@teluu.com>2016-05-13 10:56:48 +0000
commit7f59e4d6d01926c2535937463095e8d769be4ad9 (patch)
tree8b95e6a62838cb82e8856a9b19fdc64fcafe259a /pjsip/src/pjsua-lib/pjsua_core.c
parentf5034fe8896342601b10dd2381b06dcb754e3f6c (diff)
Fixed #1918: Add API to update STUN servers and option to retry STUN for media on failure
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5297 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_core.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index 55e7ef10..45918bd7 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -1376,6 +1376,36 @@ on_return:
/*
+ * Update STUN servers.
+ */
+PJ_DEF(pj_status_t) pjsua_update_stun_servers(unsigned count, pj_str_t srv[],
+ pj_bool_t wait)
+{
+ unsigned i;
+ pj_status_t status;
+
+ PJ_ASSERT_RETURN(count && srv, PJ_EINVAL);
+
+ PJSUA_LOCK();
+
+ pjsua_var.ua_cfg.stun_srv_cnt = count;
+ for (i = 0; i < count; i++) {
+ if (pj_strcmp(&pjsua_var.ua_cfg.stun_srv[i], &srv[i]))
+ pj_strdup(pjsua_var.pool, &pjsua_var.ua_cfg.stun_srv[i], &srv[i]);
+ }
+ pjsua_var.stun_status = PJ_EUNKNOWN;
+
+ status = resolve_stun_server(wait);
+ if (wait == PJ_FALSE && status == PJ_EPENDING)
+ status = PJ_SUCCESS;
+
+ PJSUA_UNLOCK();
+
+ return status;
+}
+
+
+/*
* Resolve STUN server.
*/
PJ_DEF(pj_status_t) pjsua_resolve_stun_servers( unsigned count,
@@ -1481,6 +1511,7 @@ static void internal_stun_resolve_cb(const pj_stun_resolve_result *result)
/* Perform NAT type detection if not yet */
if (pjsua_var.nat_type == PJ_STUN_NAT_TYPE_UNKNOWN &&
+ !pjsua_var.nat_in_progress &&
pjsua_var.ua_cfg.nat_type_in_sdp)
{
pjsua_detect_nat_type();