From 04057f187210d440db2ffdac688cbd3656d6e41c Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Sun, 15 Feb 2026 11:45:20 -0500 Subject: [PATCH 1/8] Add replace directive to use forked Pion ice library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Points to local Pion ice fork with 487 Role Conflict fix: github.com/bgardner8008/ice (branch: fix/handle-role-conflict-error-response) The fix handles STUN 487 Role Conflict error responses by: 1. Detecting the error in handleInboundErrorResponse 2. Switching ICE role (controlled ↔ controlling) 3. Retrying connectivity check with new role This implements RFC 8445 section 7.3.1.1 role conflict resolution. Related: MM-67602 Co-Authored-By: Claude Sonnet 4.5 --- go.mod | 11 +++++++---- go.sum | 20 ++++++++++---------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 963705f..872600a 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/pion/logging v0.2.4 github.com/pion/rtcp v1.2.16 github.com/pion/rtp v1.8.26 - github.com/pion/stun/v3 v3.0.0 + github.com/pion/stun/v3 v3.1.1 github.com/pion/webrtc/v4 v4.1.3 github.com/prometheus/client_golang v1.16.0 github.com/prometheus/procfs v0.11.0 @@ -57,14 +57,15 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pion/datachannel v1.5.10 // indirect - github.com/pion/dtls/v3 v3.0.6 // indirect - github.com/pion/mdns/v2 v2.0.7 // indirect + github.com/pion/dtls/v3 v3.0.10 // indirect + github.com/pion/mdns/v2 v2.1.0 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/sctp v1.8.39 // indirect github.com/pion/sdp/v3 v3.0.14 // indirect github.com/pion/srtp/v3 v3.0.6 // indirect github.com/pion/transport/v3 v3.1.1 // indirect - github.com/pion/turn/v4 v4.0.2 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect + github.com/pion/turn/v4 v4.1.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/plar/go-adaptive-radix-tree v1.0.4 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -87,3 +88,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/pion/ice/v4 => ../../pion/ice diff --git a/go.sum b/go.sum index 5678d2c..a56cb19 100644 --- a/go.sum +++ b/go.sum @@ -349,14 +349,12 @@ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1Gsh github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= -github.com/pion/dtls/v3 v3.0.6 h1:7Hkd8WhAJNbRgq9RgdNh1aaWlZlGpYTzdqjy9x9sK2E= -github.com/pion/dtls/v3 v3.0.6/go.mod h1:iJxNQ3Uhn1NZWOMWlLxEEHAN5yX7GyPvvKw04v9bzYU= -github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4= -github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= +github.com/pion/dtls/v3 v3.0.10 h1:k9ekkq1kaZoxnNEbyLKI8DI37j/Nbk1HWmMuywpQJgg= +github.com/pion/dtls/v3 v3.0.10/go.mod h1:YEmmBYIoBsY3jmG56dsziTv/Lca9y4Om83370CXfqJ8= github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= -github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= -github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= +github.com/pion/mdns/v2 v2.1.0 h1:3IJ9+Xio6tWYjhN6WwuY142P/1jA0D5ERaIqawg/fOY= +github.com/pion/mdns/v2 v2.1.0/go.mod h1:pcez23GdynwcfRU1977qKU0mDxSeucttSHbCSfFOd9A= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= @@ -369,12 +367,14 @@ github.com/pion/sdp/v3 v3.0.14 h1:1h7gBr9FhOWH5GjWWY5lcw/U85MtdcibTyt/o6RxRUI= github.com/pion/sdp/v3 v3.0.14/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4= github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY= -github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= -github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= +github.com/pion/stun/v3 v3.1.1 h1:CkQxveJ4xGQjulGSROXbXq94TAWu8gIX2dT+ePhUkqw= +github.com/pion/stun/v3 v3.1.1/go.mod h1:qC1DfmcCTQjl9PBaMa5wSn3x9IPmKxSdcCsxBcDBndM= github.com/pion/transport/v3 v3.1.1 h1:Tr684+fnnKlhPceU+ICdrw6KKkTms+5qHMgw6bIkYOM= github.com/pion/transport/v3 v3.1.1/go.mod h1:+c2eewC5WJQHiAA46fkMMzoYZSuGzA/7E2FPrOYHctQ= -github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps= -github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs= +github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= +github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= +github.com/pion/turn/v4 v4.1.4 h1:EU11yMXKIsK43FhcUnjLlrhE4nboHZq+TXBIi3QpcxQ= +github.com/pion/turn/v4 v4.1.4/go.mod h1:ES1DXVFKnOhuDkqn9hn5VJlSWmZPaRJLyBXoOeO/BmQ= github.com/pion/webrtc/v4 v4.1.3 h1:YZ67Boj9X/hk190jJZ8+HFGQ6DqSZ/fYP3sLAZv7c3c= github.com/pion/webrtc/v4 v4.1.3/go.mod h1:rsq+zQ82ryfR9vbb0L1umPJ6Ogq7zm8mcn9fcGnxomM= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= From bcdcdd5bd8e958fcbf177edbbd12cfcdca54bb85 Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Sun, 15 Feb 2026 12:34:26 -0500 Subject: [PATCH 2/8] Update Pion dependencies and use forked ice/interceptor packages - Update pion/webrtc from v4.1.3 to v4.2.6 to resolve transport v3/v4 conflict - Use pion/ice fork v4.2.0-role-conflict-fix with 487 Role Conflict fix - Use pion/interceptor fork v0.1.44-mm-mods with MM modifications and LoggerFactory support - Update pion/rtp from v1.8.26 to v1.10.1 - Remove pion/transport/v3 dependency (now only uses v4) The ice fork implements RFC 8445 section 7.3.1.1 role conflict resolution by detecting STUN 487 errors and switching ICE roles accordingly. Related: MM-67602 Co-Authored-By: Claude Sonnet 4.5 --- go.mod | 33 ++++++++++++++++----------------- go.sum | 50 ++++++++++++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 41 deletions(-) diff --git a/go.mod b/go.mod index 872600a..d14a480 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/mattermost/rtcd -go 1.23.6 +go 1.24.0 require ( git.mills.io/prologic/bitcask v1.0.2 @@ -11,23 +11,23 @@ require ( github.com/mattermost/logr/v2 v2.0.21 github.com/mattermost/mattermost/server/public v0.1.10 github.com/pborman/uuid v1.2.1 - github.com/pion/ice/v4 v4.0.10 - github.com/pion/interceptor v0.1.40 + github.com/pion/ice/v4 v4.2.0 + github.com/pion/interceptor v0.1.44 github.com/pion/logging v0.2.4 github.com/pion/rtcp v1.2.16 - github.com/pion/rtp v1.8.26 + github.com/pion/rtp v1.10.1 github.com/pion/stun/v3 v3.1.1 - github.com/pion/webrtc/v4 v4.1.3 + github.com/pion/webrtc/v4 v4.2.6 github.com/prometheus/client_golang v1.16.0 github.com/prometheus/procfs v0.11.0 github.com/stretchr/testify v1.11.1 github.com/vmihailenco/msgpack/v5 v5.4.1 - golang.org/x/crypto v0.39.0 - golang.org/x/sys v0.33.0 + golang.org/x/crypto v0.48.0 + golang.org/x/sys v0.41.0 golang.org/x/time v0.10.0 ) -replace github.com/pion/interceptor v0.1.40 => github.com/bgardner8008/interceptor v0.0.0-20251218215555-af6c9bfab967 +replace github.com/pion/interceptor v0.1.44 => github.com/bgardner8008/interceptor v0.1.44-mm-mods require ( github.com/abcum/lcp v0.0.0-20201209214815-7a3f3840be81 // indirect @@ -56,14 +56,13 @@ require ( github.com/oklog/run v1.1.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect - github.com/pion/datachannel v1.5.10 // indirect - github.com/pion/dtls/v3 v3.0.10 // indirect + github.com/pion/datachannel v1.6.0 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect github.com/pion/mdns/v2 v2.1.0 // indirect github.com/pion/randutil v0.1.0 // indirect - github.com/pion/sctp v1.8.39 // indirect - github.com/pion/sdp/v3 v3.0.14 // indirect - github.com/pion/srtp/v3 v3.0.6 // indirect - github.com/pion/transport/v3 v3.1.1 // indirect + github.com/pion/sctp v1.9.2 // indirect + github.com/pion/sdp/v3 v3.0.17 // indirect + github.com/pion/srtp/v3 v3.0.10 // indirect github.com/pion/transport/v4 v4.0.1 // indirect github.com/pion/turn/v4 v4.1.4 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -78,8 +77,8 @@ require ( github.com/wiggin77/srslog v1.0.1 // indirect github.com/wlynxg/anet v0.0.5 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/net v0.41.0 // indirect - golang.org/x/text v0.26.0 // indirect + golang.org/x/net v0.50.0 // indirect + golang.org/x/text v0.34.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect google.golang.org/grpc v1.70.0 // indirect google.golang.org/protobuf v1.36.4 // indirect @@ -89,4 +88,4 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace github.com/pion/ice/v4 => ../../pion/ice +replace github.com/pion/ice/v4 => github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix diff --git a/go.sum b/go.sum index a56cb19..26b40be 100644 --- a/go.sum +++ b/go.sum @@ -65,8 +65,10 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgardner8008/interceptor v0.0.0-20251218215555-af6c9bfab967 h1:nARMm5bWtaaovmoBwZDWChLyEPOSXD9HeaXmlREM9PA= -github.com/bgardner8008/interceptor v0.0.0-20251218215555-af6c9bfab967/go.mod h1:pSPR73X1vaG0G9Bw40HIeE6d4c+fos8MSpMnpz1fH7g= +github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix h1:i+bJyFVE5+HjJzfgSGIvSYWDoL01/x303jGTY8mxYjM= +github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix/go.mod h1:EgjBGxDgmd8xB0OkYEVFlzQuEI7kWSCFu+mULqaisy4= +github.com/bgardner8008/interceptor v0.1.44-mm-mods h1:yJrhAW8crfiwj5kRtxQQ1fW8v1SNxMaykcrGC47qsyA= +github.com/bgardner8008/interceptor v0.1.44-mm-mods/go.mod h1:4atVlBkcgXuUP+ykQF0qOCGU2j7pQzX2ofvPRFsY5RY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= @@ -347,10 +349,10 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= -github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= -github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= -github.com/pion/dtls/v3 v3.0.10 h1:k9ekkq1kaZoxnNEbyLKI8DI37j/Nbk1HWmMuywpQJgg= -github.com/pion/dtls/v3 v3.0.10/go.mod h1:YEmmBYIoBsY3jmG56dsziTv/Lca9y4Om83370CXfqJ8= +github.com/pion/datachannel v1.6.0 h1:XecBlj+cvsxhAMZWFfFcPyUaDZtd7IJvrXqlXD/53i0= +github.com/pion/datachannel v1.6.0/go.mod h1:ur+wzYF8mWdC+Mkis5Thosk+u/VOL287apDNEbFpsIk= +github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= +github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= github.com/pion/mdns/v2 v2.1.0 h1:3IJ9+Xio6tWYjhN6WwuY142P/1jA0D5ERaIqawg/fOY= @@ -359,14 +361,14 @@ github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/rtcp v1.2.16 h1:fk1B1dNW4hsI78XUCljZJlC4kZOPk67mNRuQ0fcEkSo= github.com/pion/rtcp v1.2.16/go.mod h1:/as7VKfYbs5NIb4h6muQ35kQF/J0ZVNz2Z3xKoCBYOo= -github.com/pion/rtp v1.8.26 h1:VB+ESQFQhBXFytD+Gk8cxB6dXeVf2WQzg4aORvAvAAc= -github.com/pion/rtp v1.8.26/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= -github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE= -github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= -github.com/pion/sdp/v3 v3.0.14 h1:1h7gBr9FhOWH5GjWWY5lcw/U85MtdcibTyt/o6RxRUI= -github.com/pion/sdp/v3 v3.0.14/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= -github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4= -github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY= +github.com/pion/rtp v1.10.1 h1:xP1prZcCTUuhO2c83XtxyOHJteISg6o8iPsE2acaMtA= +github.com/pion/rtp v1.10.1/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= +github.com/pion/sctp v1.9.2 h1:HxsOzEV9pWoeggv7T5kewVkstFNcGvhMPx0GvUOUQXo= +github.com/pion/sctp v1.9.2/go.mod h1:OTOlsQ5EDQ6mQ0z4MUGXt2CgQmKyafBEXhUVqLRB6G8= +github.com/pion/sdp/v3 v3.0.17 h1:9SfLAW/fF1XC8yRqQ3iWGzxkySxup4k4V7yN8Fs8nuo= +github.com/pion/sdp/v3 v3.0.17/go.mod h1:9tyKzznud3qiweZcD86kS0ff1pGYB3VX+Bcsmkx6IXo= +github.com/pion/srtp/v3 v3.0.10 h1:tFirkpBb3XccP5VEXLi50GqXhv5SKPxqrdlhDCJlZrQ= +github.com/pion/srtp/v3 v3.0.10/go.mod h1:3mOTIB0cq9qlbn59V4ozvv9ClW/BSEbRp4cY0VtaR7M= github.com/pion/stun/v3 v3.1.1 h1:CkQxveJ4xGQjulGSROXbXq94TAWu8gIX2dT+ePhUkqw= github.com/pion/stun/v3 v3.1.1/go.mod h1:qC1DfmcCTQjl9PBaMa5wSn3x9IPmKxSdcCsxBcDBndM= github.com/pion/transport/v3 v3.1.1 h1:Tr684+fnnKlhPceU+ICdrw6KKkTms+5qHMgw6bIkYOM= @@ -375,8 +377,8 @@ github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= github.com/pion/turn/v4 v4.1.4 h1:EU11yMXKIsK43FhcUnjLlrhE4nboHZq+TXBIi3QpcxQ= github.com/pion/turn/v4 v4.1.4/go.mod h1:ES1DXVFKnOhuDkqn9hn5VJlSWmZPaRJLyBXoOeO/BmQ= -github.com/pion/webrtc/v4 v4.1.3 h1:YZ67Boj9X/hk190jJZ8+HFGQ6DqSZ/fYP3sLAZv7c3c= -github.com/pion/webrtc/v4 v4.1.3/go.mod h1:rsq+zQ82ryfR9vbb0L1umPJ6Ogq7zm8mcn9fcGnxomM= +github.com/pion/webrtc/v4 v4.2.6 h1:e9H/du7PbYA2qMJkqKp9Ou2z5Igb/6qbKSeEeUCVv0M= +github.com/pion/webrtc/v4 v4.2.6/go.mod h1:+GAy0jwidoZAHsgjsx77sH09spnV0YWjpB3ROAXmz5A= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -548,8 +550,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -633,8 +635,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -717,8 +719,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -729,8 +731,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From ebef394f799b72c5bcb6094b59b5def994fd4c20 Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Tue, 17 Feb 2026 11:55:50 -0500 Subject: [PATCH 3/8] update to use v4.2.0-role-conflict-fix-v3 tag --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d14a480..bfdd347 100644 --- a/go.mod +++ b/go.mod @@ -88,4 +88,4 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace github.com/pion/ice/v4 => github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix +replace github.com/pion/ice/v4 => github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v3 diff --git a/go.sum b/go.sum index 26b40be..89f6694 100644 --- a/go.sum +++ b/go.sum @@ -65,8 +65,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix h1:i+bJyFVE5+HjJzfgSGIvSYWDoL01/x303jGTY8mxYjM= -github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix/go.mod h1:EgjBGxDgmd8xB0OkYEVFlzQuEI7kWSCFu+mULqaisy4= +github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v3 h1:hYT/fuOhyVk+/vTXszxudHiUn+0LhQ5T809We34hFH0= +github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v3/go.mod h1:7bSIiWQbXaNlSzETekiQ095c1Y95VIxHDsy42nz6NSQ= github.com/bgardner8008/interceptor v0.1.44-mm-mods h1:yJrhAW8crfiwj5kRtxQQ1fW8v1SNxMaykcrGC47qsyA= github.com/bgardner8008/interceptor v0.1.44-mm-mods/go.mod h1:4atVlBkcgXuUP+ykQF0qOCGU2j7pQzX2ofvPRFsY5RY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= From d35629a0b93870ebdd12b41945d0b231c8d5e61f Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Tue, 17 Feb 2026 14:38:56 -0500 Subject: [PATCH 4/8] update to latest -v4 pion ice fork with less verbose logging --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index bfdd347..0ee2b0d 100644 --- a/go.mod +++ b/go.mod @@ -88,4 +88,4 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect ) -replace github.com/pion/ice/v4 => github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v3 +replace github.com/pion/ice/v4 => github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v4 diff --git a/go.sum b/go.sum index 89f6694..b89386d 100644 --- a/go.sum +++ b/go.sum @@ -65,8 +65,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v3 h1:hYT/fuOhyVk+/vTXszxudHiUn+0LhQ5T809We34hFH0= -github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v3/go.mod h1:7bSIiWQbXaNlSzETekiQ095c1Y95VIxHDsy42nz6NSQ= +github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v4 h1:Ak20PRI5sSgD/YrynXKMr5E+lrhJ9RfQyGXH1gpieIQ= +github.com/bgardner8008/ice/v4 v4.2.0-role-conflict-fix-v4/go.mod h1:7bSIiWQbXaNlSzETekiQ095c1Y95VIxHDsy42nz6NSQ= github.com/bgardner8008/interceptor v0.1.44-mm-mods h1:yJrhAW8crfiwj5kRtxQQ1fW8v1SNxMaykcrGC47qsyA= github.com/bgardner8008/interceptor v0.1.44-mm-mods/go.mod h1:4atVlBkcgXuUP+ykQF0qOCGU2j7pQzX2ofvPRFsY5RY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= From f65dcaf55665f7653d0a3116c49a55b01d84a526 Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Tue, 17 Feb 2026 15:38:54 -0500 Subject: [PATCH 5/8] Use ICEAddressRewriteRules in place of deprecated SetNAT1To1IPs --- service/rtc/sfu.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/service/rtc/sfu.go b/service/rtc/sfu.go index 04d95dc..946f0b3 100644 --- a/service/rtc/sfu.go +++ b/service/rtc/sfu.go @@ -119,7 +119,12 @@ func (s *Server) initSettingEngine(loggerFactory logging.LoggerFactory) (webrtc. return webrtc.SettingEngine{}, fmt.Errorf("failed to generate addresses pairs: %w", err) } else if len(pairs) > 0 { s.log.Debug("generated remote/local addrs pairs", mlog.Any("pairs", pairs)) - sEngine.SetNAT1To1IPs(pairs, webrtc.ICECandidateTypeHost) + // Convert to new ICEAddressRewriteRules API (replaces deprecated SetNAT1To1IPs) + sEngine.SetICEAddressRewriteRules(webrtc.ICEAddressRewriteRule{ + External: pairs, + AsCandidateType: webrtc.ICECandidateTypeHost, + // Mode defaults to ICEAddressRewriteReplace for host candidates + }) } return sEngine, nil From ca987c70edc753ebf295e156aab936467f46757c Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Tue, 17 Feb 2026 15:52:00 -0500 Subject: [PATCH 6/8] add error checking to SetICEAddressRewriteRules --- service/rtc/sfu.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/service/rtc/sfu.go b/service/rtc/sfu.go index 946f0b3..ad9e52b 100644 --- a/service/rtc/sfu.go +++ b/service/rtc/sfu.go @@ -120,11 +120,13 @@ func (s *Server) initSettingEngine(loggerFactory logging.LoggerFactory) (webrtc. } else if len(pairs) > 0 { s.log.Debug("generated remote/local addrs pairs", mlog.Any("pairs", pairs)) // Convert to new ICEAddressRewriteRules API (replaces deprecated SetNAT1To1IPs) - sEngine.SetICEAddressRewriteRules(webrtc.ICEAddressRewriteRule{ + if err := sEngine.SetICEAddressRewriteRules(webrtc.ICEAddressRewriteRule{ External: pairs, AsCandidateType: webrtc.ICECandidateTypeHost, // Mode defaults to ICEAddressRewriteReplace for host candidates - }) + }); err != nil { + return webrtc.SettingEngine{}, fmt.Errorf("failed to set ICE address rewrite rules: %w", err) + } } return sEngine, nil From f3ad43c4af8a4b80f41858d8265dbf8e452d2b55 Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Tue, 17 Feb 2026 17:00:06 -0500 Subject: [PATCH 7/8] revert to using SetNAT1To1IPs for fear of breaking complicated ice host override configurations --- service/rtc/sfu.go | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/service/rtc/sfu.go b/service/rtc/sfu.go index ad9e52b..2fcbec4 100644 --- a/service/rtc/sfu.go +++ b/service/rtc/sfu.go @@ -119,14 +119,8 @@ func (s *Server) initSettingEngine(loggerFactory logging.LoggerFactory) (webrtc. return webrtc.SettingEngine{}, fmt.Errorf("failed to generate addresses pairs: %w", err) } else if len(pairs) > 0 { s.log.Debug("generated remote/local addrs pairs", mlog.Any("pairs", pairs)) - // Convert to new ICEAddressRewriteRules API (replaces deprecated SetNAT1To1IPs) - if err := sEngine.SetICEAddressRewriteRules(webrtc.ICEAddressRewriteRule{ - External: pairs, - AsCandidateType: webrtc.ICECandidateTypeHost, - // Mode defaults to ICEAddressRewriteReplace for host candidates - }); err != nil { - return webrtc.SettingEngine{}, fmt.Errorf("failed to set ICE address rewrite rules: %w", err) - } + //nolint:staticcheck // SA1019: Using deprecated SetNAT1To1IPs until SetICEAddressRewriteRules properly supports external/internal mappings + sEngine.SetNAT1To1IPs(pairs, webrtc.ICECandidateTypeHost) } return sEngine, nil From e38669900d5b49f2bf05240c8719cd00af825aba Mon Sep 17 00:00:00 2001 From: Bill Gardner Date: Wed, 18 Feb 2026 14:04:45 -0500 Subject: [PATCH 8/8] update to go 1.24.13 --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 0ee2b0d..b4cf0a4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/mattermost/rtcd -go 1.24.0 +go 1.24.13 require ( git.mills.io/prologic/bitcask v1.0.2