Add UDP Like transport mode to snowflake

This commit is contained in:
Shelikhoo 2023-12-12 14:43:30 +00:00 committed by WofWca
parent fa122efb61
commit 457c4fbf15
8 changed files with 275 additions and 5 deletions

View file

@ -343,7 +343,7 @@ func (sf *SnowflakeProxy) datachannelHandler(conn *webRTCConn, remoteAddr net.Ad
relayURL = sf.RelayURL
}
wsConn, err := connectToRelay(relayURL, remoteAddr)
wsConn, err := connectToRelay(relayURL, remoteAddr, conn.GetConnectionProtocol())
if err != nil {
log.Print(err)
return
@ -354,7 +354,11 @@ func (sf *SnowflakeProxy) datachannelHandler(conn *webRTCConn, remoteAddr net.Ad
log.Printf("datachannelHandler ends")
}
func connectToRelay(relayURL string, remoteAddr net.Addr) (*websocketconn.Conn, error) {
func connectToRelay(
relayURL string,
remoteAddr net.Addr,
webrtcConnProtocol string,
) (*websocketconn.Conn, error) {
u, err := url.Parse(relayURL)
if err != nil {
return nil, fmt.Errorf("invalid relay url: %s", err)
@ -370,6 +374,12 @@ func connectToRelay(relayURL string, remoteAddr net.Addr) (*websocketconn.Conn,
log.Printf("no remote address given in websocket")
}
if webrtcConnProtocol != "" {
q := u.Query()
q.Set("protocol", webrtcConnProtocol)
u.RawQuery = q.Encode()
}
ws, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
return nil, fmt.Errorf("error dialing relay: %s = %s", u.String(), err)
@ -451,6 +461,7 @@ func (sf *SnowflakeProxy) makePeerConnectionFromOffer(
pr, pw := io.Pipe()
conn := newWebRTCConn(pc, dc, pr, sf.bytesLogger)
conn.SetConnectionProtocol(dc.Protocol())
dc.SetBufferedAmountLowThreshold(bufferedAmountLowThreshold)