Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
asterisk
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Voice
asterisk
Commits
e7a6e640
Commit
e7a6e640
authored
7 years ago
by
Jenkins2
Committed by
Gerrit Code Review
7 years ago
Browse files
Options
Downloads
Plain Diff
Merge "pjsip: Ignore state changes from old transactions."
parents
30658e71
0b532367
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
third-party/pjproject/patches/0050-dont_terminate_session_early.patch
+71
-0
71 additions, 0 deletions
...pjproject/patches/0050-dont_terminate_session_early.patch
with
71 additions
and
0 deletions
third-party/pjproject/patches/0050-dont_terminate_session_early.patch
0 → 100644
+
71
−
0
View file @
e7a6e640
commit ca0b723e92bd76bbda1bbd14477a829eaeeb675e
Author: Joshua Colp <jcolp@digium.com>
Date: Wed Dec 13 10:58:57 2017 +0000
Ignore transport error on completed transaction.
Don't disconnect call if transport error happens on transaction that is not initial INVITE transaction.
Scenario:
DNS lookup returning two servers.
Sending INVITE to first server over TCP.
Response received with code 503 (Service Unavailable).
Failover to second server, sending second INVITE after restarting the session.
TCP connection for the first INVITE getting disconnected and causing call disconnection (while second INVITE is still outstanding).
This is a backport of 5714 from upstream PJSIP.
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index ac4d1949..0173cb4c 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -4254,8 +4254,7 @@
static void inv_on_state_calling( pjsip_inv_session *inv, pjsip_event *e)
if ((tsx->status_code == PJSIP_SC_CALL_TSX_DOES_NOT_EXIST &&
tsx->method.id != PJSIP_CANCEL_METHOD) ||
tsx->status_code == PJSIP_SC_REQUEST_TIMEOUT ||
- tsx->status_code == PJSIP_SC_TSX_TIMEOUT ||
- tsx->status_code == PJSIP_SC_TSX_TRANSPORT_ERROR)
+ tsx->status_code == PJSIP_SC_TSX_TIMEOUT)
{
inv_set_cause(inv, tsx->status_code, &tsx->status_text);
inv_set_state(inv, PJSIP_INV_STATE_DISCONNECTED, e);
diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c
index 7ac3d1b7..d52b12a7 100644
--- a/pjsip/src/pjsip/sip_transaction.c
+++ b/pjsip/src/pjsip/sip_transaction.c
@@ -2044,9 +2044,14 @@
static void transport_callback(void *token, pjsip_tx_data *tdata,
*/
lock_timer(tsx);
tsx->transport_err = (pj_status_t)-sent;
- tsx_cancel_timer(tsx, &tsx->timeout_timer);
- tsx_schedule_timer(tsx, &tsx->timeout_timer, &delay,
- TRANSPORT_ERR_TIMER);
+ /* Don't cancel timeout timer if tsx state is already
+ * PJSIP_TSX_STATE_COMPLETED (see #2076).
+ */
+ if (tsx->state < PJSIP_TSX_STATE_COMPLETED) {
+ tsx_cancel_timer(tsx, &tsx->timeout_timer);
+ tsx_schedule_timer(tsx, &tsx->timeout_timer, &delay,
+ TRANSPORT_ERR_TIMER);
+ }
unlock_timer(tsx);
}
@@ -2077,9 +2082,14 @@
static void tsx_tp_state_callback( pjsip_transport *tp,
*/
lock_timer(tsx);
tsx->transport_err = info->status;
- tsx_cancel_timer(tsx, &tsx->timeout_timer);
- tsx_schedule_timer(tsx, &tsx->timeout_timer, &delay,
- TRANSPORT_ERR_TIMER);
+ /* Don't cancel timeout timer if tsx state is already
+ * PJSIP_TSX_STATE_COMPLETED (see #2076).
+ */
+ if (tsx->state < PJSIP_TSX_STATE_COMPLETED) {
+ tsx_cancel_timer(tsx, &tsx->timeout_timer);
+ tsx_schedule_timer(tsx, &tsx->timeout_timer, &delay,
+ TRANSPORT_ERR_TIMER);
+ }
unlock_timer(tsx);
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment