diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2012-09-28 08:56:08 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2012-09-28 08:56:08 +0000 |
commit | bea8edcb195eda3e316b67c29ecceca22db3ef1e (patch) | |
tree | 2fadbb443980b7c32c501ba4b211f2c302ef011f /pjsip/src/pjsip-ua | |
parent | f9699a50372fce5b374b3e768fd433296403e894 (diff) |
Re #1587:
- Don't answer call replace request with 200 if the replaced call hasn't reach confirmed state and has UAS role.
- Only apply accept_replace_in_early_state when call is in early state.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4268 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsip-ua')
-rw-r--r-- | pjsip/src/pjsip-ua/sip_replaces.c | 17 |
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; + } } |