diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-01-15 16:54:54 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-01-15 16:54:54 +0000 |
commit | 1c26e28a2ce840ecb65b6ed23df44644a461e645 (patch) | |
tree | 6a2a4fa3659d790bf94d9268d7ffa73ee73f3ade /pjsip | |
parent | ceb6d9319ccb5da56bdc1cd74fd4896806ca34f6 (diff) |
Reply with 488+SDP instead of 415 when incoming SDP is not acceptable (thanks Alain Totouom)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1693 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_call.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index 5306d253..04c540be 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -2284,12 +2284,31 @@ static void pjsua_call_on_forked( pjsip_inv_session *inv, static void call_disconnect( pjsip_inv_session *inv, int code ) { + pjsua_call *call; pjsip_tx_data *tdata; pj_status_t status; + call = (pjsua_call*) inv->dlg->mod_data[pjsua_var.mod.id]; + status = pjsip_inv_end_session(inv, code, NULL, &tdata); - if (status == PJ_SUCCESS) - pjsip_inv_send_msg(inv, tdata); + if (status != PJ_SUCCESS) + return; + + /* Add SDP in 488 status */ + if (call && call->med_tp && code==PJSIP_SC_NOT_ACCEPTABLE_HERE) { + pjmedia_sdp_session *local_sdp; + pjmedia_sock_info si; + + call->med_tp->op->get_info(call->med_tp, &si); + status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool, + 1, &si, &local_sdp); + if (status == PJ_SUCCESS) { + pjsip_create_sdp_body(tdata->pool, local_sdp, + &tdata->msg->body); + } + } + + pjsip_inv_send_msg(inv, tdata); } /* @@ -2360,7 +2379,7 @@ static void pjsua_call_on_media_update(pjsip_inv_session *inv, if (status != PJ_SUCCESS) { pjsua_perror(THIS_FILE, "Unable to create media session", status); - call_disconnect(inv, PJSIP_SC_UNSUPPORTED_MEDIA_TYPE); + call_disconnect(inv, PJSIP_SC_NOT_ACCEPTABLE_HERE); pjsua_media_channel_deinit(call->index); PJSUA_UNLOCK(); return; |