From f762fd7b4817c6668da0859b188d9d21a21e38bf Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Wed, 16 Jun 2010 15:26:18 +0000 Subject: Fix #1045: - Fixed invite module to reset SDP negotiator state after incomplete SDP offer-answer in re-INVITE/UPDATE. - Added some SIPp test scenarios. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3208 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip-ua/sip_inv.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'pjsip/src/pjsip-ua/sip_inv.c') diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c index 94ec987e..ecfebec3 100644 --- a/pjsip/src/pjsip-ua/sip_inv.c +++ b/pjsip/src/pjsip-ua/sip_inv.c @@ -458,6 +458,16 @@ static pj_bool_t mod_inv_on_rx_request(pjsip_rx_data *rdata) */ if (inv->state < PJSIP_INV_STATE_DISCONNECTED) { inv_check_sdp_in_incoming_msg(inv, inv->invite_tsx, rdata); + + /* Check if local offer got no SDP answer and INVITE session + * is in CONFIRMED state. + */ + if (pjmedia_sdp_neg_get_state(inv->neg)== + PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER && + inv->state==PJSIP_INV_STATE_CONFIRMED) + { + pjmedia_sdp_neg_cancel_offer(inv->neg); + } } /* Now we can terminate the INVITE transaction */ @@ -3975,6 +3985,13 @@ static void inv_on_state_confirmed( pjsip_inv_session *inv, pjsip_event *e) { inv_check_sdp_in_incoming_msg(inv, tsx, e->body.tsx_state.src.rdata); + + /* Check if local offer got no SDP answer */ + if (pjmedia_sdp_neg_get_state(inv->neg)== + PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER) + { + pjmedia_sdp_neg_cancel_offer(inv->neg); + } } } @@ -4013,6 +4030,13 @@ static void inv_on_state_confirmed( pjsip_inv_session *inv, pjsip_event *e) inv_check_sdp_in_incoming_msg(inv, tsx, e->body.tsx_state.src.rdata); + /* Check if local offer got no SDP answer */ + if (pjmedia_sdp_neg_get_state(inv->neg)== + PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER) + { + pjmedia_sdp_neg_cancel_offer(inv->neg); + } + /* Send ACK */ inv_send_ack(inv, e); -- cgit v1.2.3