summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-10-06 06:49:09 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-10-06 06:49:09 +0000
commit790e06757b92282d3f6436a46f278f5c2b92139b (patch)
tree1507a87839993ad83b901b4cef9a130775ff97f6
parent56a567ffe9bbe46f17caa83faf943e095254d9d9 (diff)
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
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h7
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c2
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c8
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) {