aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoritchyonion <itchyonion@torproject.org>2023-01-04 15:25:52 -0800
committeritchyonion <itchyonion@torproject.org>2023-01-30 09:10:15 -0800
commit990fcb41274f8d983c23b035636a22e4491290d8 (patch)
treea592f89b41840716f1edde801e0df0052edd6e24
parent66269c07d8a3968cd468797f9bb278b6bac65aba (diff)
downloadsnowflake-990fcb41274f8d983c23b035636a22e4491290d8.tar.gz
snowflake-990fcb41274f8d983c23b035636a22e4491290d8.zip
Filter out non stun: server addresses in ParseIceServers
-rw-r--r--client/lib/lib_test.go17
-rw-r--r--client/lib/snowflake.go21
2 files changed, 21 insertions, 17 deletions
diff --git a/client/lib/lib_test.go b/client/lib/lib_test.go
index 93fe0ad..d53482c 100644
--- a/client/lib/lib_test.go
+++ b/client/lib/lib_test.go
@@ -190,22 +190,13 @@ func TestICEServerParser(t *testing.T) {
length int
}{
{
- []string{"stun:stun.l.google.com:19302"},
- [][]string{[]string{"stun:stun.l.google.com:19302"}},
- 1,
- },
- {
- []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{"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"}},
+ []string{"stun:stun.l.google.com:19302", "stun:stun.ekiga.net"},
+ [][]string{[]string{"stun:stun.l.google.com:19302"}, []string{"stun:stun.ekiga.net:3478"}},
2,
},
{
- []string{"stun:stun1.l.google.com:19302", "stun.ekiga.net", "stun:stun.example.com:1234/path?query", "https://example.com"},
+ []string{"stun:stun1.l.google.com:19302", "stun.ekiga.net", "stun:stun.example.com:1234/path?query",
+ "https://example.com", "turn:relay.metered.ca:80?transport=udp"},
[][]string{[]string{"stun:stun1.l.google.com:19302"}},
1,
},
diff --git a/client/lib/snowflake.go b/client/lib/snowflake.go
index 5d19c55..cc0005c 100644
--- a/client/lib/snowflake.go
+++ b/client/lib/snowflake.go
@@ -31,6 +31,7 @@ import (
"log"
"math/rand"
"net"
+ "net/url"
"strings"
"time"
@@ -268,13 +269,25 @@ func parseIceServers(addresses []string) []webrtc.ICEServer {
if len(addresses) == 0 {
return nil
}
- for _, url := range addresses {
- url = strings.TrimSpace(url)
+ for _, address := range addresses {
+ address = strings.TrimSpace(address)
+
+ // ice.ParseURL recognizes many types of ICE servers,
+ // but we only support stun over UDP currently
+ u, err := url.Parse(address)
+ if err != nil {
+ log.Printf("Warning: Parsing ICE server %v resulted in error: %v, skipping", address, err)
+ continue
+ }
+ if u.Scheme != "stun" {
+ log.Printf("Warning: Only stun: (STUN over UDP) servers are supported currently, skipping %v", address)
+ continue
+ }
// add default port, other sanity checks
- parsedURL, err := ice.ParseURL(url)
+ parsedURL, err := ice.ParseURL(address)
if err != nil {
- log.Printf("Warning: Parsing ICE server %v resulted in error: %v, skipping", url, err)
+ log.Printf("Warning: Parsing ICE server %v resulted in error: %v, skipping", address, err)
continue
}