mirror of
				https://github.com/pion/webrtc.git
				synced 2025-10-31 18:52:55 +08:00 
			
		
		
		
	 7243561f2f
			
		
	
	7243561f2f
	
	
	
		
			
			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
 | |
| }
 |