summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsip-ua/sip_replaces.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip/src/pjsip-ua/sip_replaces.c')
-rw-r--r--pjsip/src/pjsip-ua/sip_replaces.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/pjsip/src/pjsip-ua/sip_replaces.c b/pjsip/src/pjsip-ua/sip_replaces.c
index 3bda5305..38793762 100644
--- a/pjsip/src/pjsip-ua/sip_replaces.c
+++ b/pjsip/src/pjsip-ua/sip_replaces.c
@@ -305,12 +305,19 @@ PJ_DEF(pj_status_t) pjsip_replaces_verify_request( pjsip_rx_data *rdata,
* initiated by this UA, it returns a 481 (Call/Transaction Does Not
* Exist) response to the new INVITE.
*/
- if (inv->state <= PJSIP_INV_STATE_EARLY && inv->role != PJSIP_ROLE_UAC &&
- pjsip_cfg()->endpt.accept_replace_in_early_state == PJ_FALSE)
+ if (inv->state <= PJSIP_INV_STATE_EARLY && inv->role != PJSIP_ROLE_UAC)
{
- code = PJSIP_SC_CALL_TSX_DOES_NOT_EXIST;
- warn_text = "Found early INVITE session but not initiated by this UA";
- goto on_return;
+ /* Really return 481 only if call haven't reached early state or
+ * accept-replace-in-early-state (ticket #1587) is not allowed.
+ */
+ if (inv->state != PJSIP_INV_STATE_EARLY ||
+ pjsip_cfg()->endpt.accept_replace_in_early_state == PJ_FALSE)
+ {
+ code = PJSIP_SC_CALL_TSX_DOES_NOT_EXIST;
+ warn_text = "Found early INVITE session but not initiated by "
+ "this UA";
+ goto on_return;
+ }
}