From c7ccaa38f9e31b492efd01d4852e5e0482d3452e Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Thu, 2 May 2024 11:12:08 +0100 Subject: [PATCH] add server side support for extra data based client id --- server/lib/http.go | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/server/lib/http.go b/server/lib/http.go index a667f7b..c003d97 100644 --- a/server/lib/http.go +++ b/server/lib/http.go @@ -7,11 +7,13 @@ import ( "crypto/rand" "crypto/sha256" "encoding/binary" + "encoding/hex" "fmt" "io" "log" "net" "net/http" + "strings" "sync" "time" @@ -108,10 +110,16 @@ func (handler *httpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Pass the address of client as the remote address of incoming connection clientIPParam := r.URL.Query().Get("client_ip") addr := clientAddr(clientIPParam) - clientTransport := r.URL.Query().Get("protocol") + protocol := r.URL.Query().Get("protocol") + + clientTransport := "t" + + if protocol != "" { + clientTransport = fmt.Sprintf("%c", protocol[0]) + } if clientTransport == "u" { - err = handler.turboTunnelUDPLikeMode(conn, addr) + err = handler.turboTunnelUDPLikeMode(conn, addr, protocol) if err != nil && err != io.EOF { log.Println(err) return @@ -231,21 +239,19 @@ func (handler *httpHandler) turbotunnelMode(conn net.Conn, addr net.Addr) error return nil } -func (handler *httpHandler) turboTunnelUDPLikeMode(conn net.Conn, addr net.Addr) error { - packetConnIDCon := packetConnIDConnServer{Conn: conn} +func (handler *httpHandler) turboTunnelUDPLikeMode(conn net.Conn, addr net.Addr, protocol string) error { var packet [1600]byte - n, err := packetConnIDCon.Read(packet[:]) - if err != nil { - return fmt.Errorf("reading ClientID: %v", err) - } - clientID, err := packetConnIDCon.GetClientID() + + clientID := turbotunnel.ClientID{} + compoments := strings.Split(protocol, " ") + _, err := hex.Decode(clientID[:], []byte(compoments[1])) if err != nil { return fmt.Errorf("reading ClientID: %v", err) } + clientIDAddrMap.Set(clientID, addr) pconn := handler.lookupPacketConn(clientID) - pconn.QueueIncoming(packet[:n], clientID) var wg sync.WaitGroup wg.Add(2) done := make(chan struct{}) @@ -253,7 +259,7 @@ func (handler *httpHandler) turboTunnelUDPLikeMode(conn net.Conn, addr net.Addr) defer wg.Done() defer close(done) // Signal the write loop to finish for { - n, err := packetConnIDCon.Read(packet[:]) + n, err := conn.Read(packet[:]) if err != nil { log.Println(err) return @@ -272,7 +278,7 @@ func (handler *httpHandler) turboTunnelUDPLikeMode(conn net.Conn, addr net.Addr) if !ok { return } - _, err := packetConnIDCon.Write(p) + _, err := conn.Write(p) pconn.Restore(p) if err != nil { log.Println(err)