mirror of
https://github.com/SunBK201/UA3F.git
synced 2025-12-20 19:00:23 +00:00
refactor: streamline http request forwarding
This commit is contained in:
parent
47566f9223
commit
f7bca9cf0a
@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -132,12 +131,12 @@ func (s *Server) ProcessLR(c *ConnLink) (err error) {
|
|||||||
req = s.Rewriter.Rewrite(req, c.LAddr, c.RAddr, decision)
|
req = s.Rewriter.Rewrite(req, c.LAddr, c.RAddr, decision)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = ForwardHTTP(c.RConn, req); err != nil {
|
if err := req.Write(c.RConn); err != nil {
|
||||||
err = fmt.Errorf("ForwardHTTP: %w", err)
|
return fmt.Errorf("req.Write: %w", err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.Header.Get("Upgrade") == "websocket" && req.Header.Get("Connection") == "Upgrade" {
|
if req.Header.Get("Upgrade") == "websocket" && req.Header.Get("Connection") == "Upgrade" {
|
||||||
c.LogInfo("websocket upgrade detected, switch to direct proxy")
|
c.LogInfo("websocket upgrade detected, switch to direct forward")
|
||||||
statistics.AddConnection(&statistics.ConnectionRecord{
|
statistics.AddConnection(&statistics.ConnectionRecord{
|
||||||
Protocol: sniff.WebSocket,
|
Protocol: sniff.WebSocket,
|
||||||
SrcAddr: c.LAddr,
|
SrcAddr: c.LAddr,
|
||||||
@ -147,14 +146,3 @@ func (s *Server) ProcessLR(c *ConnLink) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ForwardHTTP(dst net.Conn, req *http.Request) error {
|
|
||||||
if err := req.Write(dst); err != nil {
|
|
||||||
return fmt.Errorf("req.Write: %w", err)
|
|
||||||
}
|
|
||||||
err := req.Body.Close()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("req.Body.Close: %w", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|||||||
@ -123,9 +123,8 @@ func (s *Server) rewriteAndForward(target net.Conn, req *http.Request, dstAddr,
|
|||||||
if decision.ShouldRewrite() {
|
if decision.ShouldRewrite() {
|
||||||
req = s.Rewriter.Rewrite(req, srcAddr, dstAddr, decision)
|
req = s.Rewriter.Rewrite(req, srcAddr, dstAddr, decision)
|
||||||
}
|
}
|
||||||
if err = base.ForwardHTTP(target, req); err != nil {
|
if err := req.Write(target); err != nil {
|
||||||
err = fmt.Errorf("base.ForwardHTTP: %w", err)
|
return fmt.Errorf("req.Write: %w", err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user