mirror of
https://github.com/pion/webrtc.git
synced 2025-10-30 10:16:36 +08:00
The parser included in the ice package strictly adheres to RFC 7064,
however, this can be problematic when attempting to use ICE server URLs
that were automatically generated by a third party.
Twilio, for example, has been seen to send the following in its list of
ICE servers:
stun:global.stun.twilio.com:3478?transport=udp
which would require user intervention to sanitise before passing to
Pion.
This patch side-steps this aspect of ice.ParseURL by pre-stripping any
queries that may be present so that we can allow URLs of this form.
30 lines
744 B
Go
30 lines
744 B
Go
package webrtc
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/pion/ice"
|
|
)
|
|
|
|
// getICEServers side-steps the strict parsing mode of the ice package
|
|
// (as defined in https://tools.ietf.org/html/rfc7064) by stripping any
|
|
// erroneous queries from "stun(s):" URLs before parsing.
|
|
func (c Configuration) getICEServers() (*[]*ice.URL, error) {
|
|
var iceServers []*ice.URL
|
|
for _, server := range c.ICEServers {
|
|
for _, rawURL := range server.URLs {
|
|
if strings.HasPrefix(rawURL, "stun") {
|
|
// strip the query from "stun(s):" if present
|
|
parts := strings.Split(rawURL, "?")
|
|
rawURL = parts[0]
|
|
}
|
|
url, err := ice.ParseURL(rawURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
iceServers = append(iceServers, url)
|
|
}
|
|
}
|
|
return &iceServers, nil
|
|
}
|