package xhttp import ( "net/http" "strings" "github.com/sagernet/sing-box/common/xray/net" "github.com/sagernet/sing-box/common/xray/signal/done" ) type httpSession struct { uploadQueue *uploadQueue // for as long as the GET request is not opened by the client, this will be // open ("undone"), and the session may be expired within a certain TTL. // after the client connects, this becomes "done" and the session lives as // long as the GET request. isFullyConnected *done.Instance } func parseXForwardedFor(header http.Header) []net.Address { xff := header.Get("X-Forwarded-For") if xff == "" { return nil } list := strings.Split(xff, ",") addrs := make([]net.Address, 0, len(list)) for _, proxy := range list { addrs = append(addrs, net.ParseAddress(proxy)) } return addrs } func isValidHTTPHost(request string, config string) bool { r := strings.ToLower(request) c := strings.ToLower(config) if strings.Contains(r, ":") { h, _, _ := net.SplitHostPort(r) return h == c } return r == c }