diff --git a/infra/conf/router.go b/infra/conf/router.go index 9bfc3aeb..a93da6b1 100644 --- a/infra/conf/router.go +++ b/infra/conf/router.go @@ -460,6 +460,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) { type RawFieldRule struct { RouterRule Domain *StringList `json:"domain"` + Domains *StringList `json:"domains"` IP *StringList `json:"ip"` Port *PortList `json:"port"` Network *NetworkList `json:"network"` @@ -500,6 +501,16 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) { } } + if rawFieldRule.Domains != nil { + for _, domain := range *rawFieldRule.Domains { + rules, err := parseDomainRule(domain) + if err != nil { + return nil, newError("failed to parse domain rule: ", domain).Base(err) + } + rule.Domain = append(rule.Domain, rules...) + } + } + if rawFieldRule.IP != nil { geoipList, err := toCidrList(*rawFieldRule.IP) if err != nil { diff --git a/transport/internet/http/hub.go b/transport/internet/http/hub.go index 76388b5f..de20b635 100644 --- a/transport/internet/http/hub.go +++ b/transport/internet/http/hub.go @@ -2,10 +2,8 @@ package http import ( "context" - "fmt" "io" "net/http" - "os" "strings" "time" @@ -37,7 +35,6 @@ func (l *Listener) Addr() net.Addr { func (l *Listener) Close() error { if l.locker != nil { - fmt.Fprintln(os.Stderr, "RELEASE LOCK") l.locker.Release() } return l.server.Close() @@ -89,11 +86,11 @@ func (l *Listener) ServeHTTP(writer http.ResponseWriter, request *http.Request) } } - forwardedAddrs := http_proto.ParseXForwardedFor(request.Header) - if len(forwardedAddrs) > 0 && forwardedAddrs[0].Family().IsIP() { + forwardedAddress := http_proto.ParseXForwardedFor(request.Header) + if len(forwardedAddress) > 0 && forwardedAddress[0].Family().IsIP() { remoteAddr = &net.TCPAddr{ - IP: forwardedAddrs[0].IP(), - Port: int(0), + IP: forwardedAddress[0].IP(), + Port: 0, } } @@ -165,7 +162,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti Net: "unix", }, streamSettings.SocketSettings) if err != nil { - newError("failed to listen on ", address).Base(err).WriteToLog(session.ExportIDToError(ctx)) + newError("failed to listen on ", address).Base(err).AtError().WriteToLog(session.ExportIDToError(ctx)) return } locker := ctx.Value(address.Domain()) @@ -178,7 +175,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti Port: int(port), }, streamSettings.SocketSettings) if err != nil { - newError("failed to listen on ", address, ":", port).Base(err).WriteToLog(session.ExportIDToError(ctx)) + newError("failed to listen on ", address, ":", port).Base(err).AtError().WriteToLog(session.ExportIDToError(ctx)) return } } @@ -186,12 +183,12 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti if config == nil { err = server.Serve(streamListener) if err != nil { - newError("stoping serving H2C").Base(err).WriteToLog(session.ExportIDToError(ctx)) + newError("stopping serving H2C").Base(err).WriteToLog(session.ExportIDToError(ctx)) } } else { err = server.ServeTLS(streamListener, "", "") if err != nil { - newError("stoping serving TLS").Base(err).WriteToLog(session.ExportIDToError(ctx)) + newError("stopping serving TLS").Base(err).WriteToLog(session.ExportIDToError(ctx)) } } }()