From 5b5c34a8cd13d947c491563b84dd3b493bf4b1cc Mon Sep 17 00:00:00 2001 From: braams Date: Tue, 31 Oct 2023 02:47:01 +0400 Subject: [PATCH] Added ability to enable nat traversal and set rport if via address has .invalid domain (rfc 7118 support) --- sippy/sip_transaction_manager.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sippy/sip_transaction_manager.go b/sippy/sip_transaction_manager.go index 1d00cc9..b43b922 100644 --- a/sippy/sip_transaction_manager.go +++ b/sippy/sip_transaction_manager.go @@ -139,6 +139,12 @@ func check1918(host string) bool { return false } +const invalidSuffix = ".invalid" + +func check7118(host string) bool { + return strings.HasSuffix(host, invalidSuffix) +} + func (self *sipTransactionManager) rcache_put(checksum string, entry *sipTMRetransmitO) { self.rcache_lock.Lock() defer self.rcache_lock.Unlock() @@ -334,7 +340,7 @@ func (self *sipTransactionManager) process_request(rtime *sippy_time.MonoTime, d } ahost, aport := via0.GetAddr(self.config) rhost, rport := address.Host.String(), address.Port.String() - if self.nat_traversal && rport != aport && check1918(ahost) { + if self.nat_traversal && rport != aport && (check1918(ahost) || check7118(ahost)) { req.nated = true } if ahost != rhost { @@ -756,3 +762,7 @@ func (self *sipTransactionManager) rtid_put(key *sippy_header.RTID, value *sippy defer self.rtid2tid_lock.Unlock() self.rtid2tid[*key] = value } + +func (self *sipTransactionManager) SetNatTraversal(nat_traversal bool) { + self.nat_traversal = nat_traversal +}