diff options
author | itchyonion <itchyonion@torproject.org> | 2022-12-06 15:52:59 -0800 |
---|---|---|
committer | itchyonion <itchyonion@torproject.org> | 2023-01-30 09:10:15 -0800 |
commit | a6a18c1a9b004bda644b0b790ca756af0c6b1e51 (patch) | |
tree | 59af6d39d9574366594022dbf29a4cf2f9a0ece8 /client | |
parent | b443e99417714a6d74c1cb8c6f5746b6dbd6fe1c (diff) | |
download | snowflake-a6a18c1a9b004bda644b0b790ca756af0c6b1e51.tar.gz snowflake-a6a18c1a9b004bda644b0b790ca756af0c6b1e51.zip |
Parse ICE servers with pion/ice library function
Diffstat (limited to 'client')
-rw-r--r-- | client/lib/lib_test.go | 13 | ||||
-rw-r--r-- | client/lib/snowflake.go | 11 |
2 files changed, 19 insertions, 5 deletions
diff --git a/client/lib/lib_test.go b/client/lib/lib_test.go index e1b6427..93fe0ad 100644 --- a/client/lib/lib_test.go +++ b/client/lib/lib_test.go @@ -195,15 +195,20 @@ func TestICEServerParser(t *testing.T) { 1, }, { - []string{"stun:stun.l.google.com:19302", "stun.ekiga.net"}, - [][]string{[]string{"stun:stun.l.google.com:19302"}, []string{"stun.ekiga.net"}}, + []string{"stun:stun.l.google.com", "stuns:stun.ekiga.net"}, + [][]string{[]string{"stun:stun.l.google.com:3478"}, []string{"stuns:stun.ekiga.net:5349"}}, 2, }, { - []string{"stun:stun.l.google.com:19302", "stun.ekiga.net"}, - [][]string{[]string{"stun:stun.l.google.com:19302"}, []string{"stun.ekiga.net"}}, + []string{"stuns:stun.l.google.com:19302", "turn:relay.metered.ca:80"}, + [][]string{[]string{"stuns:stun.l.google.com:19302"}, []string{"turn:relay.metered.ca:80?transport=udp"}}, 2, }, + { + []string{"stun:stun1.l.google.com:19302", "stun.ekiga.net", "stun:stun.example.com:1234/path?query", "https://example.com"}, + [][]string{[]string{"stun:stun1.l.google.com:19302"}}, + 1, + }, } { servers := parseIceServers(test.input) diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go index c587e6d..5d19c55 100644 --- a/client/lib/snowflake.go +++ b/client/lib/snowflake.go @@ -37,6 +37,7 @@ import ( "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/nat" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/turbotunnel" + "github.com/pion/ice/v2" "github.com/pion/webrtc/v3" "github.com/xtaci/kcp-go/v5" "github.com/xtaci/smux" @@ -269,8 +270,16 @@ func parseIceServers(addresses []string) []webrtc.ICEServer { } for _, url := range addresses { url = strings.TrimSpace(url) + + // add default port, other sanity checks + parsedURL, err := ice.ParseURL(url) + if err != nil { + log.Printf("Warning: Parsing ICE server %v resulted in error: %v, skipping", url, err) + continue + } + servers = append(servers, webrtc.ICEServer{ - URLs: []string{url}, + URLs: []string{parsedURL.String()}, }) } return servers |