summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip/src/pjsip-ua')
-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);