summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua/sip_inv.c
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2013-03-19 03:51:10 +0000
committerNanang Izzuddin <nanang@teluu.com>2013-03-19 03:51:10 +0000
commitba8d46d99f2952ac2831790179ec54b44b2138d2 (patch)
treee54693d89c9fde79668e34470c79df570ff2787c /pjsip/src/pjsip-ua/sip_inv.c
parent458b2a58d18f7e548cfed653dc6f18c318790232 (diff)
Re #1644: Added run-time setting 'pjsip_cfg()->follow_early_media_fork' and compile-time setting 'PJSIP_FOLLOW_EARLY_MEDIA_FORK', the default value is PJ_TRUE.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4441 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua/sip_inv.c')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index 3c383183..35bb8fe8 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -1735,23 +1735,27 @@ static pj_status_t inv_check_sdp_in_incoming_msg( pjsip_inv_session *inv,
*/
if (tsx_inv_data->sdp_done) {
pj_str_t res_tag;
+ int st_code;
res_tag = rdata->msg_info.to->tag;
+ st_code = rdata->msg_info.msg->line.status.code;
- /* Allow final response after SDP has been negotiated in early
- * media, IF this response is a final response with different
+ /* Allow final/early response after SDP has been negotiated in early
+ * media, IF this response is a final/early response with different
* tag.
*/
if (tsx->role == PJSIP_ROLE_UAC &&
- rdata->msg_info.msg->line.status.code/100 == 2 &&
+ (st_code/100 == 2 ||
+ (st_code==183 && pjsip_cfg()->endpt.follow_early_media_fork)) &&
tsx_inv_data->done_early &&
pj_stricmp(&tsx_inv_data->done_tag, &res_tag))
{
const pjmedia_sdp_session *reoffer_sdp = NULL;
- PJ_LOG(4,(inv->obj_name, "Received forked final response "
+ PJ_LOG(4,(inv->obj_name, "Received forked %s response "
"after SDP negotiation has been done in early "
- "media. Renegotiating SDP.."));
+ "media. Renegotiating SDP..",
+ (st_code==183? "early" : "final" )));
/* Retrieve original SDP offer from INVITE request */
reoffer_sdp = (const pjmedia_sdp_session*)
@@ -1763,7 +1767,7 @@ static pj_status_t inv_check_sdp_in_incoming_msg( pjsip_inv_session *inv,
reoffer_sdp);
if (status != PJ_SUCCESS) {
PJ_LOG(1,(inv->obj_name, "Error updating local offer for "
- "forked 2xx response (err=%d)", status));
+ "forked 2xx/183 response (err=%d)", status));
return status;
}