Files
deconnect/internal/domains/deconnector/handle.go

48 lines
947 B
Go
Raw Normal View History

2026-05-26 16:32:55 +03:00
package deconnector
import (
"bufio"
"net"
"net/http"
)
func (d *Deconnector) Handle(clientConn net.Conn) {
upstreamURL, err := d.dialer.UpstreamURL()
if err != nil {
d.app.Logger().WithError(err).Error("failed to get upstream URL")
return
}
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(clientConn, req.Host, upstreamURL)
} else {
d.handleDeconnect(clientConn, req, upstreamURL)
}
} else {
req.RequestURI = ""
if req.URL.Host == "" {
req.URL.Host = req.Host
}
2026-05-26 18:39:45 +03:00
2026-05-26 16:32:55 +03:00
req.URL.Scheme = "http"
d.app.Logger().
WithField("method", req.Method).
WithField("url", req.URL).
Info("Forwarding HTTP request")
d.forwardHTTP(clientConn, req, upstreamURL)
}
}