Merge "res_pjsip_outbound_authenticator: Increase CSeq on authed requests."
This commit is contained in:
commit
3646ce0cb5
|
@ -105,6 +105,7 @@ static int digest_create_request_with_auth(const struct ast_sip_auth_vector *aut
|
|||
pjsip_transaction *tsx, pjsip_tx_data **new_request)
|
||||
{
|
||||
pjsip_auth_clt_sess auth_sess;
|
||||
pjsip_cseq_hdr *cseq;
|
||||
|
||||
if (pjsip_auth_clt_init(&auth_sess, ast_sip_get_pjsip_endpoint(),
|
||||
tsx->pool, 0) != PJ_SUCCESS) {
|
||||
|
@ -120,6 +121,15 @@ static int digest_create_request_with_auth(const struct ast_sip_auth_vector *aut
|
|||
switch (pjsip_auth_clt_reinit_req(&auth_sess, challenge,
|
||||
tsx->last_tx, new_request)) {
|
||||
case PJ_SUCCESS:
|
||||
/* PJSIP creates a new transaction for new_request (meaning it creates a new
|
||||
* branch). However, it recycles the Call-ID, from-tag, and CSeq from the
|
||||
* original request. Some SIP implementations will not process the new request
|
||||
* since the CSeq is the same as the original request. Incrementing it here
|
||||
* fixes the interop issue
|
||||
*/
|
||||
cseq = pjsip_msg_find_hdr((*new_request)->msg, PJSIP_H_CSEQ, NULL);
|
||||
ast_assert(cseq != NULL);
|
||||
++cseq->cseq;
|
||||
return 0;
|
||||
case PJSIP_ENOCREDENTIAL:
|
||||
ast_log(LOG_WARNING, "Unable to create request with auth."
|
||||
|
|
Loading…
Reference in New Issue