package deconnector import ( "bufio" "context" "net" "net/http" ) func (d *Deconnector) Handle(ctx context.Context, clientConn net.Conn) { defer clientConn.Close() req, err := http.ReadRequest(bufio.NewReader(clientConn)) if err != nil { d.app.Logger().WithError(err).Error("failed to read request") return } if req.Method == http.MethodConnect { _, port, _ := net.SplitHostPort(req.Host) if port == "443" { d.handleTunnel(ctx, clientConn, req.Host) } else { d.handleDeconnect(ctx, clientConn, req) } } else { req.RequestURI = "" if req.URL.Host == "" { req.URL.Host = req.Host } req.URL.Scheme = "http" d.app.Logger(). WithField("method", req.Method). WithField("url", req.URL). Info("Forwarding HTTP request") d.forwardHTTP(ctx, clientConn, req) } }