diff options
author | Mark Michelson <mmichelson@digium.com> | 2015-03-27 20:46:55 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2015-03-27 20:46:55 +0000 |
commit | 0b62e416541066c53088013fc99a0775f9b318e3 (patch) | |
tree | 94c712348790ee066a10e152c904f40b1d8cb320 /include/asterisk/res_pjsip.h | |
parent | a18da4eaf20223b0d20754dc51f769da53909fdb (diff) |
Add stateful PJSIP response API call, and use it for out-of-dialog responses.
Asterisk had an issue where retransmissions of MESSAGE requests resulted in
Asterisk processing the retransmission as if it were a new MESSAGE request.
This patch fixes the issue by creating a transaction in PJSIP on the incoming
request. This way, if a retransmission arrives, the PJSIP transaction layer
will resend the response and Asterisk will not ever see the retransmission.
ASTERISK-24920 #close
Reported by Mark Michelson
Review: https://reviewboard.asterisk.org/r/4532/
........
Merged revisions 433619 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@433620 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'include/asterisk/res_pjsip.h')
-rw-r--r-- | include/asterisk/res_pjsip.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h index 442ee72f7..6e3a9ea93 100644 --- a/include/asterisk/res_pjsip.h +++ b/include/asterisk/res_pjsip.h @@ -1281,6 +1281,11 @@ int ast_sip_create_response(const pjsip_rx_data *rdata, int st_code, /*! * \brief Send a response to an out of dialog request * + * Use this function sparingly, since this does not create a transaction + * within PJSIP. This means that if the request is retransmitted, it is + * your responsibility to detect this and not process the same request + * twice, and to send the same response for each retransmission. + * * \param res_addr The response address for this response * \param tdata The response to send * \param endpoint The ast_sip_endpoint associated with this response @@ -1291,6 +1296,24 @@ int ast_sip_create_response(const pjsip_rx_data *rdata, int st_code, int ast_sip_send_response(pjsip_response_addr *res_addr, pjsip_tx_data *tdata, struct ast_sip_endpoint *sip_endpoint); /*! + * \brief Send a stateful response to an out of dialog request + * + * This creates a transaction within PJSIP, meaning that if the request + * that we are responding to is retransmitted, we will not attempt to + * re-handle the request. + * + * \param rdata The request that is being responded to + * \param tdata The response to send + * \param endpoint The ast_sip_endpoint associated with this response + * + * \since 13.4.0 + * + * \retval 0 Success + * \retval -1 Failure + */ +int ast_sip_send_stateful_response(pjsip_rx_data *rdata, pjsip_tx_data *tdata, struct ast_sip_endpoint *sip_endpoint); + +/*! * \brief Determine if an incoming request requires authentication * * This calls into the registered authenticator's requires_authentication callback |