summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-10-31 10:31:23 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-10-31 10:31:23 +0000
commit5d2066e0c3368cce23090e842c407a35bc351a83 (patch)
treec188d02e9322edef6defc9161d8cb26a736108ba
parentd63fe414b41e56ccdcb45f6924e60cdc8a2ad3a4 (diff)
Re #1395: Backport of PJSIP 1.x branch into PJSIP 2.0 trunk
* Backport of r3833:r3877 git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3878 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia-codec/ipp_codecs.c2
-rw-r--r--pjmedia/src/pjmedia/stream.c5
-rw-r--r--pjmedia/src/pjmedia/wav_player.c6
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c20
-rw-r--r--pjsip/src/pjsip/sip_auth_client.c4
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c10
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c8
7 files changed, 43 insertions, 12 deletions
diff --git a/pjmedia/src/pjmedia-codec/ipp_codecs.c b/pjmedia/src/pjmedia-codec/ipp_codecs.c
index a2ead05b..5f939d08 100644
--- a/pjmedia/src/pjmedia-codec/ipp_codecs.c
+++ b/pjmedia/src/pjmedia-codec/ipp_codecs.c
@@ -438,7 +438,7 @@ static pj_status_t parse_g723(ipp_private_t *codec_data, void *pkt,
#endif /* PJMEDIA_HAS_INTEL_IPP_CODEC_G723_1 */
-#if PJMEDIA_HAS_INTEL_IPP_CODEC_AMR
+#if PJMEDIA_HAS_INTEL_IPP_CODEC_AMR || PJMEDIA_HAS_INTEL_IPP_CODEC_AMRWB
#include <pjmedia-codec/amr_helper.h>
diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c
index 45a3830e..1da09c70 100644
--- a/pjmedia/src/pjmedia/stream.c
+++ b/pjmedia/src/pjmedia/stream.c
@@ -2072,6 +2072,11 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt,
if (stream->codec_param.setting.frm_per_pkt < 1)
stream->codec_param.setting.frm_per_pkt = 1;
+ /* Init the codec. */
+ status = pjmedia_codec_init(stream->codec, pool);
+ if (status != PJ_SUCCESS)
+ goto err_cleanup;
+
/* Open the codec. */
status = pjmedia_codec_open(stream->codec, &stream->codec_param);
if (status != PJ_SUCCESS)
diff --git a/pjmedia/src/pjmedia/wav_player.c b/pjmedia/src/pjmedia/wav_player.c
index 3bccd527..c5ec3059 100644
--- a/pjmedia/src/pjmedia/wav_player.c
+++ b/pjmedia/src/pjmedia/wav_player.c
@@ -461,9 +461,13 @@ PJ_DEF(pj_status_t) pjmedia_wav_player_port_set_pos(pjmedia_port *port,
fport = (struct file_reader_port*) port;
- PJ_ASSERT_RETURN(bytes < fport->fsize - fport->start_data, PJ_EINVAL);
+ /* Check that this offset does not pass the audio-data (in case of
+ * extra chunk after audio data chunk
+ */
+ PJ_ASSERT_RETURN(bytes < fport->data_len, PJ_EINVAL);
fport->fpos = fport->start_data + bytes;
+ fport->data_left = fport->data_len - bytes;
pj_file_setpos( fport->fd, fport->fpos, PJ_SEEK_SET);
fport->eof = PJ_FALSE;
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index 46153c9f..8c2c92d0 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -455,17 +455,25 @@ static pj_bool_t mod_inv_on_rx_request(pjsip_rx_data *rdata)
*/
if (method->id == PJSIP_ACK_METHOD && inv) {
+ /* Ignore if we don't have INVITE in progress */
+ if (!inv->invite_tsx) {
+ return PJ_TRUE;
+ }
+
/* Ignore ACK if pending INVITE transaction has not finished. */
- if (inv->invite_tsx &&
- inv->invite_tsx->state < PJSIP_TSX_STATE_COMPLETED)
- {
+ if (inv->invite_tsx->state < PJSIP_TSX_STATE_COMPLETED) {
+ return PJ_TRUE;
+ }
+
+ /* Ignore ACK with different CSeq
+ * https://trac.pjsip.org/repos/ticket/1391
+ */
+ if (rdata->msg_info.cseq->cseq != inv->invite_tsx->cseq) {
return PJ_TRUE;
}
/* Terminate INVITE transaction, if it's still present. */
- if (inv->invite_tsx &&
- inv->invite_tsx->state <= PJSIP_TSX_STATE_COMPLETED)
- {
+ if (inv->invite_tsx->state <= PJSIP_TSX_STATE_COMPLETED) {
/* Before we terminate INVITE transaction, process the SDP
* in the ACK request, if any.
* Only do this when invite state is not already disconnected
diff --git a/pjsip/src/pjsip/sip_auth_client.c b/pjsip/src/pjsip/sip_auth_client.c
index 58ce2c20..8684cc9b 100644
--- a/pjsip/src/pjsip/sip_auth_client.c
+++ b/pjsip/src/pjsip/sip_auth_client.c
@@ -278,8 +278,8 @@ static pj_status_t respond_digest( pj_pool_t *pool,
/* Check algorithm is supported. We support MD5 and AKAv1-MD5. */
if (chal->algorithm.slen==0 ||
- (pj_stricmp(&chal->algorithm, &pjsip_MD5_STR) ||
- pj_stricmp(&chal->algorithm, &pjsip_AKAv1_MD5_STR)))
+ (pj_stricmp(&chal->algorithm, &pjsip_MD5_STR)==0 ||
+ pj_stricmp(&chal->algorithm, &pjsip_AKAv1_MD5_STR)==0))
{
;
}
diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c
index bd8096a3..24df6e01 100644
--- a/pjsip/src/pjsua-lib/pjsua_acc.c
+++ b/pjsip/src/pjsua-lib/pjsua_acc.c
@@ -895,6 +895,12 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id,
acc->cfg.use_stream_ka = cfg->use_stream_ka;
#endif
+ /* Use of proxy */
+ if (acc->cfg.reg_use_proxy != cfg->reg_use_proxy) {
+ acc->cfg.reg_use_proxy = cfg->reg_use_proxy;
+ update_reg = PJ_TRUE;
+ }
+
/* Global outbound proxy */
if (global_route_crc != acc->global_route_crc) {
unsigned i, rcnt;
@@ -1005,6 +1011,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id,
acc->cfg.reg_retry_interval = cfg->reg_retry_interval;
acc->cfg.reg_first_retry_interval = cfg->reg_first_retry_interval;
acc->cfg.drop_calls_on_reg_fail = cfg->drop_calls_on_reg_fail;
+ acc->cfg.register_on_acc_add = cfg->register_on_acc_add;
if (acc->cfg.reg_delay_before_refresh != cfg->reg_delay_before_refresh) {
acc->cfg.reg_delay_before_refresh = cfg->reg_delay_before_refresh;
pjsip_regc_set_delay_before_refresh(acc->regc,
@@ -1068,6 +1075,9 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id,
acc->cfg.vid_cap_dev = cfg->vid_cap_dev;
acc->cfg.vid_rend_dev = cfg->vid_rend_dev;
+ /* Call hold type */
+ acc->cfg.call_hold_type = cfg->call_hold_type;
+
on_return:
PJSUA_UNLOCK();
pj_log_pop_indent();
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index 52054226..6a80380c 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -1321,8 +1321,12 @@ pj_status_t resolve_stun_server(pj_bool_t wait)
* result.
*/
if (wait) {
- while (pjsua_var.stun_status == PJ_EPENDING)
- pjsua_handle_events(10);
+ while (pjsua_var.stun_status == PJ_EPENDING) {
+ if (pjsua_var.thread[0] == NULL)
+ pjsua_handle_events(10);
+ else
+ pj_thread_sleep(10);
+ }
}
}