summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-03-21 08:56:02 +0000
committerBenny Prijono <bennylp@teluu.com>2008-03-21 08:56:02 +0000
commite1f6e2c436a7ff660c91810a8e0baff70664cc96 (patch)
tree8cd179dfc38ad83195e1169a8225d5d33cf9f245 /pjsip
parent619fc98f231881529092bf502d84ccbef0d4db76 (diff)
More ticket #61: bug in pjsua-lib with SRTP. If call is hold and resumed, SRTP transports will use itself as the underlying transport
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1883 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 7917c558..d50667ce 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -169,7 +169,7 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
/* Save additional conference bridge parameters for future
* reference.
*/
- pjsua_var.mconf_cfg.channel_count = 1;
+ pjsua_var.mconf_cfg.channel_count = pjsua_var.media_cfg.channel_count;
pjsua_var.mconf_cfg.bits_per_sample = 16;
pjsua_var.mconf_cfg.samples_per_frame = pjsua_var.media_cfg.clock_rate *
pjsua_var.mconf_cfg.channel_count *
@@ -785,6 +785,12 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id,
/* Stop media transport (for good measure!) */
pjmedia_transport_media_stop(call->med_tp);
+ /* Close upper entry of transport stack */
+ if (call->med_orig && (call->med_tp != call->med_orig)) {
+ pjmedia_transport_close(call->med_tp);
+ call->med_tp = call->med_orig;
+ }
+
#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
/* Check if SRTP requires secure signaling */
if (acc->cfg.use_srtp != PJMEDIA_SRTP_DISABLED) {
@@ -925,7 +931,7 @@ pj_status_t pjsua_media_channel_deinit(pjsua_call_id call_id)
pjmedia_transport_media_stop(call->med_tp);
- if (call->med_tp != call->med_orig) {
+ if (call->med_orig && call->med_tp != call->med_orig) {
pjmedia_transport_close(call->med_tp);
call->med_tp = call->med_orig;
}
@@ -1022,6 +1028,12 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id,
/* No need because we need keepalive? */
+ /* Close upper entry of transport stack */
+ if (call->med_orig && (call->med_tp != call->med_orig)) {
+ pjmedia_transport_close(call->med_tp);
+ call->med_tp = call->med_orig;
+ }
+
} else {
/* Start media transport */
status = pjmedia_transport_media_start(call->med_tp,
@@ -1822,8 +1834,10 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev,
fps = 1000 / pjsua_var.media_cfg.audio_frame_ptime;
status = pjmedia_snd_port_create(pjsua_var.pool, capture_dev,
playback_dev,
- clock_rates[i], 1,
- clock_rates[i]/fps,
+ clock_rates[i],
+ pjsua_var.media_cfg.channel_count,
+ clock_rates[i]/fps *
+ pjsua_var.media_cfg.channel_count,
16, 0, &pjsua_var.snd_port);
if (status == PJ_SUCCESS) {