From 790e06757b92282d3f6436a46f278f5c2b92139b Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Thu, 6 Oct 2011 06:49:09 +0000 Subject: Re #1266: * Make sure that all media transports are already created and completed to fix the assertion when making call using ICE. * Change the callback pjsua_med_tp_state_cb to return pj_status_t (instead of void) git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3796 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/include/pjsua-lib/pjsua.h | 7 +++++-- pjsip/src/pjsua-lib/pjsua_call.c | 2 -- pjsip/src/pjsua-lib/pjsua_media.c | 8 +++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h index 2b5130c8..636d0955 100644 --- a/pjsip/include/pjsua-lib/pjsua.h +++ b/pjsip/include/pjsua-lib/pjsua.h @@ -530,9 +530,12 @@ typedef struct pjsua_med_tp_state_info * * @param call_id The call ID. * @param info The media transport state info. + * + * @return The callback must return PJ_SUCCESS at the moment. */ -typedef void (*pjsua_med_tp_state_cb)(pjsua_call_id call_id, - const pjsua_med_tp_state_info *info); +typedef pj_status_t +(*pjsua_med_tp_state_cb)(pjsua_call_id call_id, + const pjsua_med_tp_state_info *info); /** diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index 64aeac4d..ad96a4d6 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -630,7 +630,6 @@ PJ_DEF(pj_status_t) pjsua_call_make_call( pjsua_acc_id acc_id, status = pjsua_media_channel_init(call->index, PJSIP_ROLE_UAC, call->secure_level, dlg->pool, NULL, NULL, PJ_TRUE, - (pjsua_med_tp_state_cb) &on_make_call_med_tp_complete); if (status == PJ_SUCCESS) { status = on_make_call_med_tp_complete(call->index, NULL); @@ -1096,7 +1095,6 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata) rdata->tp_info.pool, offer, &sip_err_code, PJ_TRUE, - (pjsua_med_tp_state_cb) &on_incoming_call_med_tp_complete); if (status == PJ_SUCCESS) { status = on_incoming_call_med_tp_complete(call_id, NULL); diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 876f26b6..e7743659 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -1481,7 +1481,9 @@ static pj_status_t media_channel_init_cb(pjsua_call_id call_id, for (mi=0; mi < call->med_cnt; ++mi) { pjsua_call_media *call_med = &call->media[mi]; - if (call_med->med_init_cb) { + if (call_med->med_init_cb || + call_med->tp_st == PJSUA_MED_TP_NULL) + { pj_mutex_unlock(call->med_ch_mutex); return PJ_SUCCESS; } @@ -1697,8 +1699,8 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, &acc->cfg.rtp_cfg, security_level, sip_err_code, async, - (async? (pjsua_med_tp_state_cb) - &media_channel_init_cb: NULL)); + (async? &media_channel_init_cb: + NULL)); if (status == PJ_EPENDING) { pending_med_tp = PJ_TRUE; } else if (status != PJ_SUCCESS) { -- cgit v1.2.3