diff options
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/include/pjsua-lib/pjsua_internal.h | 2 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_acc.c | 1 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 37 |
3 files changed, 19 insertions, 21 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h index 12048ade..d1a696ae 100644 --- a/pjsip/include/pjsua-lib/pjsua_internal.h +++ b/pjsip/include/pjsua-lib/pjsua_internal.h @@ -263,6 +263,8 @@ typedef struct pjsua_acc pjsip_evsub *mwi_sub; /**< MWI client subscription */ pjsip_dialog *mwi_dlg; /**< Dialog for MWI sub. */ + + pj_uint16_t next_rtp_port; /**< Next RTP port to be used. */ } pjsua_acc; diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index ccd272e6..19206b19 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -652,6 +652,7 @@ PJ_DEF(pj_status_t) pjsua_acc_del(pjsua_acc_id acc_id) acc->contact.slen = 0; pj_bzero(&acc->via_addr, sizeof(acc->via_addr)); acc->via_tp = NULL; + acc->next_rtp_port = 0; /* Remove from array */ for (i=0; i<pjsua_var.acc_cnt; ++i) { diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 31112652..22da8ec7 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -29,9 +29,6 @@ # define PJSUA_REQUIRE_CONSECUTIVE_RTCP_PORT 0 #endif -/* Next RTP port to be used */ -static pj_uint16_t next_rtp_port; - static void pjsua_media_config_dup(pj_pool_t *pool, pjsua_media_config *dst, const pjsua_media_config *src) @@ -219,9 +216,6 @@ pj_status_t pjsua_media_subsys_destroy(unsigned flags) //pjmedia_snd_deinit(); } - /* Reset RTP port */ - next_rtp_port = 0; - pj_log_pop_indent(); return PJ_SUCCESS; @@ -246,9 +240,9 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, pj_status_t status = PJ_SUCCESS; char addr_buf[PJ_INET6_ADDRSTRLEN+10]; pj_sock_t sock[2]; + pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id]; - use_ipv6 = (pjsua_var.acc[call_med->call->acc_id].cfg.ipv6_media_use != - PJSUA_IPV6_DISABLED); + use_ipv6 = (acc->cfg.ipv6_media_use != PJSUA_IPV6_DISABLED); af = use_ipv6 ? pj_AF_INET6() : pj_AF_INET(); /* Make sure STUN server resolution has completed */ @@ -260,11 +254,11 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, } } - if (next_rtp_port == 0) - next_rtp_port = (pj_uint16_t)cfg->port; + if (acc->next_rtp_port == 0) + acc->next_rtp_port = (pj_uint16_t)cfg->port; - if (next_rtp_port == 0) - next_rtp_port = (pj_uint16_t)40000; + if (acc->next_rtp_port == 0) + acc->next_rtp_port = (pj_uint16_t)DEFAULT_RTP_PORT; for (i=0; i<2; ++i) sock[i] = PJ_INVALID_SOCKET; @@ -280,12 +274,13 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, } /* Loop retry to bind RTP and RTCP sockets. */ - for (i=0; i<RTP_RETRY; ++i, next_rtp_port += 2) { + for (i=0; i<RTP_RETRY; ++i, acc->next_rtp_port += 2) { if (cfg->port > 0 && cfg->port_range > 0 && - next_rtp_port > cfg->port + cfg->port_range) + (acc->next_rtp_port > cfg->port + cfg->port_range || + acc->next_rtp_port < cfg->port)) { - next_rtp_port = (pj_uint16_t)cfg->port; + acc->next_rtp_port = (pj_uint16_t)cfg->port; } /* Create RTP socket. */ @@ -301,7 +296,7 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, 2, THIS_FILE, "RTP socket"); /* Bind RTP socket */ - pj_sockaddr_set_port(&bound_addr, next_rtp_port); + pj_sockaddr_set_port(&bound_addr, acc->next_rtp_port); status=pj_sock_bind(sock[0], &bound_addr, pj_sockaddr_get_len(&bound_addr)); if (status != PJ_SUCCESS) { @@ -324,7 +319,7 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, 2, THIS_FILE, "RTCP socket"); /* Bind RTCP socket */ - pj_sockaddr_set_port(&bound_addr, (pj_uint16_t)(next_rtp_port+1)); + pj_sockaddr_set_port(&bound_addr, (pj_uint16_t)(acc->next_rtp_port+1)); status=pj_sock_bind(sock[1], &bound_addr, pj_sockaddr_get_len(&bound_addr)); if (status != PJ_SUCCESS) { @@ -416,12 +411,12 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, } else if (cfg->public_addr.slen) { status = pj_sockaddr_init(af, &mapped_addr[0], &cfg->public_addr, - (pj_uint16_t)next_rtp_port); + (pj_uint16_t)acc->next_rtp_port); if (status != PJ_SUCCESS) goto on_error; status = pj_sockaddr_init(af, &mapped_addr[1], &cfg->public_addr, - (pj_uint16_t)(next_rtp_port+1)); + (pj_uint16_t)(acc->next_rtp_port+1)); if (status != PJ_SUCCESS) goto on_error; @@ -444,7 +439,7 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, pj_sockaddr_init(af, &mapped_addr[i], NULL, 0); pj_sockaddr_copy_addr(&mapped_addr[i], &bound_addr); pj_sockaddr_set_port(&mapped_addr[i], - (pj_uint16_t)(next_rtp_port+i)); + (pj_uint16_t)(acc->next_rtp_port+i)); } break; @@ -471,7 +466,7 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med, pj_sockaddr_print(&skinfo->rtcp_addr_name, addr_buf, sizeof(addr_buf), 3))); - next_rtp_port += 2; + acc->next_rtp_port += 2; return PJ_SUCCESS; on_error: |