mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-25 07:01:09 +00:00
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
28 lines
781 B
Diff
28 lines
781 B
Diff
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;
|
|
}
|
|
|
|
/*
|