From c5d680342b33c24ffe6a4a5e85d70376de4660e0 Mon Sep 17 00:00:00 2001 From: WofWca Date: Thu, 5 Sep 2024 16:05:44 +0400 Subject: [PATCH] refactor: separate function for `connectToRelay` This should make the code easier to glance over, to understand that relay connection is performed from inside the datachannel handler. --- proxy/lib/snowflake.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/proxy/lib/snowflake.go b/proxy/lib/snowflake.go index 7cdc87c..6643196 100644 --- a/proxy/lib/snowflake.go +++ b/proxy/lib/snowflake.go @@ -348,10 +348,21 @@ func (sf *SnowflakeProxy) datachannelHandler(conn *webRTCConn, remoteAddr net.Ad relayURL = sf.RelayURL } + wsConn, err := connectToRelay(relayURL, remoteAddr) + if err != nil { + log.Print(err) + return + } + defer wsConn.Close() + + copyLoop(conn, wsConn, sf.shutdown) + log.Printf("datachannelHandler ends") +} + +func connectToRelay(relayURL string, remoteAddr net.Addr) (*websocketconn.Conn, error) { u, err := url.Parse(relayURL) if err != nil { - log.Printf("invalid relay url: %s", err) - return + return nil, fmt.Errorf("invalid relay url: %s", err) } if remoteAddr != nil { @@ -366,15 +377,12 @@ func (sf *SnowflakeProxy) datachannelHandler(conn *webRTCConn, remoteAddr net.Ad ws, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { - log.Printf("error dialing relay: %s = %s", u.String(), err) - return + return nil, fmt.Errorf("error dialing relay: %s = %s", u.String(), err) } wsConn := websocketconn.New(ws) log.Printf("Connected to relay: %v", relayURL) - defer wsConn.Close() - copyLoop(conn, wsConn, sf.shutdown) - log.Printf("datachannelHandler ends") + return wsConn, nil } type dataChannelHandlerWithRelayURL struct {