mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-05-14 00:51:12 +03:00
42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
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
|
|
}
|