Skip to content
Snippets Groups Projects
Commit 96f2ee86 authored by Joshua Colp's avatar Joshua Colp
Browse files

pjsip: Add patch to allow all transports to be destroyed.

If a transport is created with the same transport type, source
IP address, and source port as one that already exists the old
transport is moved into a linked list called "tp_list".

If this old transport is later shutdown it will not be destroyed
as the process checks whether the transport is valid or not. This
check does not look at the "tp_list" when making the determination
causing the transport to not be destroyed.

This change updates the logic to query not just the main storage
method for transports but also the "tp_list".

Upstream issue https://trac.pjsip.org/repos/ticket/2061

ASTERISK-27411

Change-Id: Ic5c2bb60226df0ef1c8851359ed8d4cd64469429
parent 15d3c5f3
No related branches found
No related tags found
No related merge requests found
diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c
index e4bec24..a39b56e 100644
--- a/pjsip/src/pjsip/sip_transport.c
+++ b/pjsip/src/pjsip/sip_transport.c
@@ -957,7 +957,21 @@ static pj_bool_t is_transport_valid(pjsip_tpmgr *tpmgr, pjsip_transport *tp,
const pjsip_transport_key *key,
int key_len)
{
- return (pj_hash_get(tpmgr->table, key, key_len, NULL) == (void*)tp);
+ transport *tp_iter;
+
+ if (pj_hash_get(tpmgr->table, key, key_len, NULL) == (void*)tp) {
+ return PJ_TRUE;
+ }
+
+ tp_iter = tpmgr->tp_list.next;
+ while (tp_iter != &tpmgr->tp_list) {
+ if (tp_iter->tp == tp) {
+ return PJ_TRUE;
+ }
+ tp_iter = tp_iter->next;
+ }
+
+ return PJ_FALSE;
}
/*
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment