summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-06-16 15:26:18 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-06-16 15:26:18 +0000
commitf762fd7b4817c6668da0859b188d9d21a21e38bf (patch)
treeea51841b774060af0ef29de694cc0cc6206ce802 /pjsip
parent08adbe0d38c5cd9e7a10bf5b07dd9fd14e824f2b (diff)
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
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsip-ua/sip_inv.c24
1 files changed, 24 insertions, 0 deletions
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);