From d17906c2f183240b3d661cc3170574e24f617692 Mon Sep 17 00:00:00 2001 From: Fangliding Date: Sun, 20 Sep 2026 17:00:49 +0800 Subject: [PATCH] Optimize logger --- app/dispatcher/fakednssniffer.go | 2 +- app/dns/config.go | 2 +- app/dns/dnscommon.go | 4 +- app/dns/fakedns/fake.go | 6 +- app/dns/nameserver.go | 8 +-- app/dns/nameserver_fakedns.go | 4 +- app/log/log.go | 8 ++- app/proxyman/inbound/always.go | 2 +- app/proxyman/inbound/inbound.go | 2 +- app/proxyman/inbound/worker.go | 4 +- app/proxyman/outbound/handler.go | 4 +- app/reverse/portal.go | 4 +- app/router/config.go | 4 +- common/errors/errors.go | 76 +++++-------------------- common/errors/errors_test.go | 21 ++----- common/log/log.go | 46 +++++++-------- common/log/logger.go | 5 ++ common/mux/client.go | 2 +- common/mux/frame.go | 2 +- common/mux/server.go | 2 +- common/protocol/user.go | 2 +- common/type.go | 4 +- core/config.go | 8 +-- infra/conf/http.go | 4 +- infra/conf/lint.go | 2 +- infra/conf/loader.go | 4 +- infra/conf/serial/builder.go | 2 +- infra/conf/socks.go | 5 +- infra/conf/transport_method.go | 8 +-- proxy/http/server.go | 12 ++-- proxy/hysteria/client.go | 2 +- proxy/hysteria/server.go | 4 +- proxy/loopback/loopback.go | 2 +- proxy/shadowsocks/client.go | 4 +- proxy/shadowsocks/protocol.go | 4 +- proxy/shadowsocks/server.go | 6 +- proxy/shadowsocks_2022/inbound_multi.go | 2 +- proxy/socks/client.go | 2 +- proxy/socks/protocol.go | 4 +- proxy/trojan/client.go | 10 ++-- proxy/trojan/server.go | 24 ++++---- proxy/vless/account.go | 2 +- proxy/vless/inbound/inbound.go | 50 ++++++++-------- proxy/vless/outbound/outbound.go | 36 ++++++------ proxy/vmess/account.go | 2 +- proxy/vmess/encoding/client.go | 2 +- proxy/vmess/inbound/inbound.go | 4 +- proxy/vmess/outbound/outbound.go | 6 +- transport/internet/config.go | 2 +- transport/internet/dialer.go | 12 ++-- transport/internet/kcp/dialer.go | 2 +- transport/internet/reality/reality.go | 4 +- transport/internet/sockopt_darwin.go | 4 +- transport/internet/sockopt_freebsd.go | 4 +- transport/internet/sockopt_linux.go | 4 +- transport/internet/tcp/dialer.go | 8 +-- transport/internet/tcp/hub.go | 4 +- transport/internet/tcp_hub.go | 6 +- transport/internet/tls/config.go | 2 +- transport/internet/tls/config_other.go | 4 +- 60 files changed, 211 insertions(+), 270 deletions(-) diff --git a/app/dispatcher/fakednssniffer.go b/app/dispatcher/fakednssniffer.go index bed90877b..9476288c7 100644 --- a/app/dispatcher/fakednssniffer.go +++ b/app/dispatcher/fakednssniffer.go @@ -23,7 +23,7 @@ func newFakeDNSSniffer(ctx context.Context) (protocolSnifferWithMetadata, error) } if fakeDNSEngine == nil { - errNotInit := errors.New("FakeDNSEngine is not initialized, but such a sniffer is used").AtError() + errNotInit := errors.New("FakeDNSEngine is not initialized, but such a sniffer is used") return protocolSnifferWithMetadata{}, errNotInit } return protocolSnifferWithMetadata{protocolSniffer: func(ctx context.Context, bytes []byte) (SniffResult, error) { diff --git a/app/dns/config.go b/app/dns/config.go index 1f9ac0153..8b7160ba7 100644 --- a/app/dns/config.go +++ b/app/dns/config.go @@ -28,7 +28,7 @@ func toNetIP(addrs []net.Address) ([]net.IP, error) { if addr.Family().IsIP() { ips = append(ips, addr.IP()) } else { - return nil, errors.New("Failed to convert address", addr, "to Net IP.").AtWarning() + return nil, errors.New("Failed to convert address", addr, "to Net IP.") } } return ips, nil diff --git a/app/dns/dnscommon.go b/app/dns/dnscommon.go index 5ffae51be..10597d5b3 100644 --- a/app/dns/dnscommon.go +++ b/app/dns/dnscommon.go @@ -188,10 +188,10 @@ func parseResponse(payload []byte) (*IPRecord, error) { var parser dnsmessage.Parser h, err := parser.Start(payload) if err != nil { - return nil, errors.New("failed to parse DNS response").Base(err).AtWarning() + return nil, errors.New("failed to parse DNS response").Base(err) } if err := parser.SkipAllQuestions(); err != nil { - return nil, errors.New("failed to skip questions in DNS response").Base(err).AtWarning() + return nil, errors.New("failed to skip questions in DNS response").Base(err) } now := time.Now() diff --git a/app/dns/fakedns/fake.go b/app/dns/fakedns/fake.go index 1539e5130..e00f0ec6a 100644 --- a/app/dns/fakedns/fake.go +++ b/app/dns/fakedns/fake.go @@ -58,7 +58,7 @@ func NewFakeDNSHolder() (*Holder, error) { var err error if fkdns, err = NewFakeDNSHolderConfigOnly(nil); err != nil { - return nil, errors.New("Unable to create Fake Dns Engine").Base(err).AtError() + return nil, errors.New("Unable to create Fake Dns Engine").Base(err) } err = fkdns.initialize(dns.FakeIPv4Pool, 65535) if err != nil { @@ -80,13 +80,13 @@ func (fkdns *Holder) initialize(ipPoolCidr string, lruSize int) error { var err error if _, ipRange, err = net.ParseCIDR(ipPoolCidr); err != nil { - return errors.New("Unable to parse CIDR for Fake DNS IP assignment").Base(err).AtError() + return errors.New("Unable to parse CIDR for Fake DNS IP assignment").Base(err) } ones, bits := ipRange.Mask.Size() rooms := bits - ones if math.Log2(float64(lruSize)) >= float64(rooms) { - return errors.New("LRU size is bigger than subnet size").AtError() + return errors.New("LRU size is bigger than subnet size") } fkdns.domainToIP = cache.NewLru(lruSize) fkdns.ipRange = ipRange diff --git a/app/dns/nameserver.go b/app/dns/nameserver.go index 06882611f..0882d1e7d 100644 --- a/app/dns/nameserver.go +++ b/app/dns/nameserver.go @@ -84,7 +84,7 @@ func NewServer(ctx context.Context, dest net.Destination, dispatcher routing.Dis if dest.Network == net.Network_UDP { // UDP classic DNS mode return NewClassicNameServer(dest, dispatcher, disableCache, serveStale, serveExpiredTTL, clientIP), nil } - return nil, errors.New("No available name server could be created from ", dest).AtWarning() + return nil, errors.New("No available name server could be created from ", dest) } // NewClient creates a DNS client managing a name server with client IP, domain rules and expected IPs. @@ -102,7 +102,7 @@ func NewClient( // Create a new server for each client for now server, err := NewServer(ctx, ns.Address.AsDestination(), dispatcher, disableCache, serveStale, serveExpiredTTL, clientIP) if err != nil { - return errors.New("failed to create nameserver").Base(err).AtWarning() + return errors.New("failed to create nameserver").Base(err) } _, isLocalDNS := server.(*LocalNameServer) @@ -113,7 +113,7 @@ func NewClient( if len(ns.ExpectedIp) > 0 { expectedMatcher, err = geodata.IPReg.BuildIPMatcher(ns.ExpectedIp) if err != nil { - return errors.New("failed to create expected ip matcher").Base(err).AtWarning() + return errors.New("failed to create expected ip matcher").Base(err) } } @@ -122,7 +122,7 @@ func NewClient( if len(ns.UnexpectedIp) > 0 { unexpectedMatcher, err = geodata.IPReg.BuildIPMatcher(ns.UnexpectedIp) if err != nil { - return errors.New("failed to create unexpected ip matcher").Base(err).AtWarning() + return errors.New("failed to create unexpected ip matcher").Base(err) } } diff --git a/app/dns/nameserver_fakedns.go b/app/dns/nameserver_fakedns.go index bed11bd60..f2127c9e8 100644 --- a/app/dns/nameserver_fakedns.go +++ b/app/dns/nameserver_fakedns.go @@ -27,7 +27,7 @@ func (s *FakeDNSServer) IsDisableCache() bool { func (f *FakeDNSServer) QueryIP(ctx context.Context, domain string, opt dns.IPOption) ([]net.IP, uint32, error) { if f.fakeDNSEngine == nil { - return nil, 0, errors.New("Unable to locate a fake DNS Engine").AtError() + return nil, 0, errors.New("Unable to locate a fake DNS Engine") } var ips []net.Address @@ -39,7 +39,7 @@ func (f *FakeDNSServer) QueryIP(ctx context.Context, domain string, opt dns.IPOp netIP, err := toNetIP(ips) if err != nil { - return nil, 0, errors.New("Unable to convert IP to net ip").Base(err).AtError() + return nil, 0, errors.New("Unable to convert IP to net ip").Base(err) } errors.LogInfo(ctx, f.Name(), " got answer: ", domain, " -> ", ips) diff --git a/app/log/log.go b/app/log/log.go index 553862b17..4d923365b 100644 --- a/app/log/log.go +++ b/app/log/log.go @@ -89,10 +89,10 @@ func (g *Instance) startInternal() error { g.active = true if err := g.initAccessLogger(); err != nil { - return errors.New("failed to initialize access logger").Base(err).AtWarning() + return errors.New("failed to initialize access logger").Base(err) } if err := g.initErrorLogger(); err != nil { - return errors.New("failed to initialize error logger").Base(err).AtWarning() + return errors.New("failed to initialize error logger").Base(err) } return nil @@ -141,6 +141,10 @@ func (g *Instance) Handle(msg log.Message) { } } +func (g *Instance) Severity() log.Severity { + return g.config.ErrorLogLevel +} + // Close implements common.Closable.Close(). func (g *Instance) Close() error { errors.LogDebug(context.Background(), "Logger closing") diff --git a/app/proxyman/inbound/always.go b/app/proxyman/inbound/always.go index e0d6c0925..70edbef6c 100644 --- a/app/proxyman/inbound/always.go +++ b/app/proxyman/inbound/always.go @@ -66,7 +66,7 @@ func NewAlwaysOnInboundHandler(ctx context.Context, tag string, receiverConfig * } mss, err := internet.ToMemoryStreamConfig(receiverConfig.StreamSettings) if err != nil { - return nil, errors.New("failed to parse stream config").Base(err).AtWarning() + return nil, errors.New("failed to parse stream config").Base(err) } newCtx := session.ContextWithInbound(ctx, &session.Inbound{Tag: tag, Source: src}) diff --git a/app/proxyman/inbound/inbound.go b/app/proxyman/inbound/inbound.go index cec93dd48..411de8598 100644 --- a/app/proxyman/inbound/inbound.go +++ b/app/proxyman/inbound/inbound.go @@ -165,7 +165,7 @@ func NewHandler(ctx context.Context, config *core.InboundHandlerConfig) (inbound receiverSettings, ok := rawReceiverSettings.(*proxyman.ReceiverConfig) if !ok { - return nil, errors.New("not a ReceiverConfig").AtError() + return nil, errors.New("not a ReceiverConfig") } streamSettings := receiverSettings.StreamSettings diff --git a/app/proxyman/inbound/worker.go b/app/proxyman/inbound/worker.go index b91c9ec66..4a3bb6d55 100644 --- a/app/proxyman/inbound/worker.go +++ b/app/proxyman/inbound/worker.go @@ -142,7 +142,7 @@ func (w *tcpWorker) Start() error { go w.callback(conn) }) if err != nil { - return errors.New("failed to listen TCP on ", w.port).AtWarning().Base(err) + return errors.New("failed to listen TCP on ", w.port).Base(err) } w.hub = hub return nil @@ -528,7 +528,7 @@ func (w *dsWorker) Start() error { go w.callback(conn) }) if err != nil { - return errors.New("failed to listen Unix Domain Socket on ", w.address).AtWarning().Base(err) + return errors.New("failed to listen Unix Domain Socket on ", w.address).Base(err) } w.hub = hub return nil diff --git a/app/proxyman/outbound/handler.go b/app/proxyman/outbound/handler.go index 136796f2c..fe43c429f 100644 --- a/app/proxyman/outbound/handler.go +++ b/app/proxyman/outbound/handler.go @@ -87,7 +87,7 @@ func NewHandler(ctx context.Context, config *core.OutboundHandlerConfig) (outbou h.senderSettings = s mss, err := internet.ToMemoryStreamConfig(s.StreamSettings) if err != nil { - return nil, errors.New("failed to parse stream settings").Base(err).AtWarning() + return nil, errors.New("failed to parse stream settings").Base(err) } h.streamSettings = mss default: @@ -217,7 +217,7 @@ func (h *Handler) Dispatch(ctx context.Context, link *transport.Link) { if ob.Target.Network == net.Network_UDP && ob.Target.Port == 443 { switch h.udp443 { case "reject": - test(errors.New("XUDP rejected UDP/443 traffic").AtInfo()) + test(errors.New("XUDP rejected UDP/443 traffic")) return case "skip": goto out diff --git a/app/reverse/portal.go b/app/reverse/portal.go index 7e3f2cafd..0e595983f 100644 --- a/app/reverse/portal.go +++ b/app/reverse/portal.go @@ -68,13 +68,13 @@ func (p *Portal) HandleConnection(ctx context.Context, link *transport.Link) err outbounds := session.OutboundsFromContext(ctx) ob := outbounds[len(outbounds)-1] if ob == nil { - return errors.New("outbound metadata not found").AtError() + return errors.New("outbound metadata not found") } if isDomain(ob.Target, p.domain) { muxClient, err := mux.NewClientWorker(*link, mux.ClientStrategy{}) if err != nil { - return errors.New("failed to create mux client worker").Base(err).AtWarning() + return errors.New("failed to create mux client worker").Base(err) } worker, err := NewPortalWorker(muxClient) diff --git a/app/router/config.go b/app/router/config.go index 036b24ef5..c20e120d6 100644 --- a/app/router/config.go +++ b/app/router/config.go @@ -115,7 +115,7 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) { } if conds.Len() == 0 { - return nil, errors.New("this rule has no effective fields").AtWarning() + return nil, errors.New("this rule has no effective fields") } return conds, nil @@ -145,7 +145,7 @@ func (br *BalancingRule) Build(ohm outbound.Manager, dispatcher routing.Dispatch } s, ok := i.(*StrategyLeastLoadConfig) if !ok { - return nil, errors.New("not a StrategyLeastLoadConfig").AtError() + return nil, errors.New("not a StrategyLeastLoadConfig") } leastLoadStrategy := NewLeastLoadStrategy(s) return &Balancer{ diff --git a/common/errors/errors.go b/common/errors/errors.go index 7a35f2543..4a56e8b9a 100644 --- a/common/errors/errors.go +++ b/common/errors/errors.go @@ -18,17 +18,13 @@ type hasInnerError interface { Unwrap() error } -type hasSeverity interface { - Severity() log.Severity -} // Error is an error object with underlying error. type Error struct { - prefix []interface{} - message []interface{} - caller string - inner error - severity log.Severity + prefix []interface{} + message []interface{} + caller string + inner error } // Error implements error.Error(). @@ -69,46 +65,6 @@ func (err *Error) Base(e error) *Error { return err } -func (err *Error) atSeverity(s log.Severity) *Error { - err.severity = s - return err -} - -func (err *Error) Severity() log.Severity { - if err.inner == nil { - return err.severity - } - - if s, ok := err.inner.(hasSeverity); ok { - as := s.Severity() - if as < err.severity { - return as - } - } - - return err.severity -} - -// AtDebug sets the severity to debug. -func (err *Error) AtDebug() *Error { - return err.atSeverity(log.Severity_Debug) -} - -// AtInfo sets the severity to info. -func (err *Error) AtInfo() *Error { - return err.atSeverity(log.Severity_Info) -} - -// AtWarning sets the severity to warning. -func (err *Error) AtWarning() *Error { - return err.atSeverity(log.Severity_Warning) -} - -// AtError sets the severity to error. -func (err *Error) AtError() *Error { - return err.atSeverity(log.Severity_Error) -} - // String returns the string representation of this error. func (err *Error) String() string { return err.Error() @@ -132,9 +88,8 @@ func New(msg ...interface{}) *Error { details = details[:i] } return &Error{ - message: msg, - severity: log.Severity_Info, - caller: details, + message: msg, + caller: details, } } @@ -171,6 +126,9 @@ func LogErrorInner(ctx context.Context, inner error, msg ...interface{}) { } func doLog(ctx context.Context, inner error, severity log.Severity, msg ...interface{}) { + if log.GetSeverity() < severity { + return + } pc, _, _, _ := runtime.Caller(2) details := runtime.FuncForPC(pc).Name() if len(details) >= trim { @@ -181,10 +139,9 @@ func doLog(ctx context.Context, inner error, severity log.Severity, msg ...inter details = details[:i] } err := &Error{ - message: msg, - severity: severity, - caller: details, - inner: inner, + message: msg, + caller: details, + inner: inner, } if ctx != nil && ctx != context.Background() { id := uint32(c.IDFromContext(ctx)) @@ -193,7 +150,7 @@ func doLog(ctx context.Context, inner error, severity log.Severity, msg ...inter } } log.Record(&log.GeneralMessage{ - Severity: GetSeverity(err), + Severity: severity, Content: err, }) } @@ -218,10 +175,3 @@ L: return err } -// GetSeverity returns the actual severity of the error, including inner errors. -func GetSeverity(err error) log.Severity { - if s, ok := err.(hasSeverity); ok { - return s.Severity() - } - return log.Severity_Info -} diff --git a/common/errors/errors_test.go b/common/errors/errors_test.go index 3a1cb134f..a11eaac27 100644 --- a/common/errors/errors_test.go +++ b/common/errors/errors_test.go @@ -7,30 +7,21 @@ import ( "github.com/google/go-cmp/cmp" . "github.com/xtls/xray-core/common/errors" - "github.com/xtls/xray-core/common/log" ) func TestError(t *testing.T) { err := New("TestError") - if v := GetSeverity(err); v != log.Severity_Info { - t.Error("severity: ", v) + if v := err.Error(); !strings.Contains(v, "TestError") { + t.Error("error: ", v) } err = New("TestError2").Base(io.EOF) - if v := GetSeverity(err); v != log.Severity_Info { - t.Error("severity: ", v) + if v := err.Error(); !strings.Contains(v, "EOF") { + t.Error("error: ", v) } - err = New("TestError3").Base(io.EOF).AtWarning() - if v := GetSeverity(err); v != log.Severity_Warning { - t.Error("severity: ", v) - } - - err = New("TestError4").Base(io.EOF).AtWarning() - err = New("TestError5").Base(err) - if v := GetSeverity(err); v != log.Severity_Warning { - t.Error("severity: ", v) - } + err = New("TestError3").Base(io.EOF) + err = New("TestError4").Base(err) if v := err.Error(); !strings.Contains(v, "EOF") { t.Error("error: ", v) } diff --git a/common/log/log.go b/common/log/log.go index fbc2a509e..9759df273 100644 --- a/common/log/log.go +++ b/common/log/log.go @@ -1,7 +1,7 @@ package log // import "github.com/xtls/xray-core/common/log" import ( - "sync" + "sync/atomic" "github.com/xtls/xray-core/common/serial" ) @@ -29,36 +29,32 @@ func (m *GeneralMessage) String() string { // Record writes a message into log stream. func Record(msg Message) { - logHandler.Handle(msg) + if h := logHandler.Load(); h != nil { + (*h).Handle(msg) + } } -var logHandler syncHandler +type SeverityLogger interface { + Handler + Severity() Severity +} + +func GetSeverity() Severity { + if h := logHandler.Load(); h != nil { + if sh, ok := (*h).(SeverityLogger); ok { + return sh.Severity() + } + } + // log everything by default + return Severity_Debug +} + +var logHandler atomic.Pointer[Handler] // RegisterHandler registers a new handler as current log handler. Previous registered handler will be discarded. func RegisterHandler(handler Handler) { if handler == nil { panic("Log handler is nil") } - logHandler.Set(handler) -} - -type syncHandler struct { - sync.RWMutex - Handler -} - -func (h *syncHandler) Handle(msg Message) { - h.RLock() - defer h.RUnlock() - - if h.Handler != nil { - h.Handler.Handle(msg) - } -} - -func (h *syncHandler) Set(handler Handler) { - h.Lock() - defer h.Unlock() - - h.Handler = handler + logHandler.Store(&handler) } diff --git a/common/log/logger.go b/common/log/logger.go index 1b4eda864..ba0bb8dc2 100644 --- a/common/log/logger.go +++ b/common/log/logger.go @@ -68,6 +68,11 @@ func (l *serverityLogger) Handle(msg Message) { } } +func (l *serverityLogger) Severity() Severity { + return l.logLevel +} + + func (l *generalLogger) run() { defer l.access.Signal() diff --git a/common/mux/client.go b/common/mux/client.go index 283803312..0463be5fc 100644 --- a/common/mux/client.go +++ b/common/mux/client.go @@ -38,7 +38,7 @@ func (m *ClientManager) Dispatch(ctx context.Context, link *transport.Link) erro } } - return errors.New("unable to find an available mux client").AtWarning() + return errors.New("unable to find an available mux client") } type WorkerPicker interface { diff --git a/common/mux/frame.go b/common/mux/frame.go index f248fbdf6..f30195416 100644 --- a/common/mux/frame.go +++ b/common/mux/frame.go @@ -117,7 +117,7 @@ func (f *FrameMetadata) Unmarshal(reader io.Reader, readSourceAndLocal bool) err return err } if metaLen > 512 { - return errors.New("invalid metalen ", metaLen).AtError() + return errors.New("invalid metalen ", metaLen) } b := buf.New() diff --git a/common/mux/server.go b/common/mux/server.go index d1cdac113..c23a3789e 100644 --- a/common/mux/server.go +++ b/common/mux/server.go @@ -351,7 +351,7 @@ func (w *ServerWorker) handleFrame(ctx context.Context, reader *buf.BufferedRead err = w.handleStatusKeep(&meta, reader) default: status := meta.SessionStatus - return errors.New("unknown status: ", status).AtError() + return errors.New("unknown status: ", status) } if err != nil { diff --git a/common/protocol/user.go b/common/protocol/user.go index 75e8e6541..ebdcbf862 100644 --- a/common/protocol/user.go +++ b/common/protocol/user.go @@ -7,7 +7,7 @@ import ( func (u *User) GetTypedAccount() (Account, error) { if u.GetAccount() == nil { - return nil, errors.New("Account is missing").AtWarning() + return nil, errors.New("Account is missing") } rawAccount, err := u.Account.GetInstance() diff --git a/common/type.go b/common/type.go index 8ee8745c7..d3de166fe 100644 --- a/common/type.go +++ b/common/type.go @@ -16,7 +16,7 @@ var typeCreatorRegistry = make(map[reflect.Type]ConfigCreator) func RegisterConfig(config interface{}, configCreator ConfigCreator) error { configType := reflect.TypeOf(config) if _, found := typeCreatorRegistry[configType]; found { - return errors.New(configType.Name() + " is already registered").AtError() + return errors.New(configType.Name() + " is already registered") } typeCreatorRegistry[configType] = configCreator return nil @@ -27,7 +27,7 @@ func CreateObject(ctx context.Context, config interface{}) (interface{}, error) configType := reflect.TypeOf(config) creator, found := typeCreatorRegistry[configType] if !found { - return nil, errors.New(configType.String() + " is not registered").AtError() + return nil, errors.New(configType.String() + " is not registered") } return creator(ctx, config) } diff --git a/core/config.go b/core/config.go index 3ab2a3765..112035782 100644 --- a/core/config.go +++ b/core/config.go @@ -125,7 +125,7 @@ func LoadConfig(formatName string, input interface{}) (*Config, error) { } if f == "" { - return nil, errors.New("Failed to get format of ", file).AtWarning() + return nil, errors.New("Failed to get format of ", file) } if f == "protobuf" { @@ -142,7 +142,7 @@ func LoadConfig(formatName string, input interface{}) (*Config, error) { if len(v) == 1 { return configLoaderByName["protobuf"].Loader(v) } else { - return nil, errors.New("Only one protobuf config file is allowed").AtWarning() + return nil, errors.New("Only one protobuf config file is allowed") } } @@ -152,11 +152,11 @@ func LoadConfig(formatName string, input interface{}) (*Config, error) { if f, found := configLoaderByName[formatName]; found { return f.Loader(v) } else { - return nil, errors.New("Unable to load config in", formatName).AtWarning() + return nil, errors.New("Unable to load config in", formatName) } } - return nil, errors.New("Unable to load config").AtWarning() + return nil, errors.New("Unable to load config") } func loadProtobufConfig(data []byte) (*Config, error) { diff --git a/infra/conf/http.go b/infra/conf/http.go index 449b2bf2e..3e1482cb5 100644 --- a/infra/conf/http.go +++ b/infra/conf/http.go @@ -97,7 +97,7 @@ func (v *HTTPClientConfig) Build() (proto.Message, error) { user.Email = v.Email } else { if err := json.Unmarshal(rawUser, user); err != nil { - return nil, errors.New("failed to parse HTTP user").Base(err).AtError() + return nil, errors.New("failed to parse HTTP user").Base(err) } } account := new(HTTPAccount) @@ -106,7 +106,7 @@ func (v *HTTPClientConfig) Build() (proto.Message, error) { account.Password = v.Password } else { if err := json.Unmarshal(rawUser, account); err != nil { - return nil, errors.New("failed to parse HTTP account").Base(err).AtError() + return nil, errors.New("failed to parse HTTP account").Base(err) } } user.Account = serial.ToTypedMessage(account.Build()) diff --git a/infra/conf/lint.go b/infra/conf/lint.go index f8a6b38c1..90e276eb8 100644 --- a/infra/conf/lint.go +++ b/infra/conf/lint.go @@ -18,7 +18,7 @@ func RegisterConfigureFilePostProcessingStage(name string, stage ConfigureFilePo func PostProcessConfigureFile(conf *Config) error { for k, v := range configureFilePostProcessingStages { if err := v.Process(conf); err != nil { - return errors.New("Rejected by Postprocessing Stage ", k).AtError().Base(err) + return errors.New("Rejected by Postprocessing Stage ", k).Base(err) } } return nil diff --git a/infra/conf/loader.go b/infra/conf/loader.go index 1dc2de23b..36e3e1c77 100644 --- a/infra/conf/loader.go +++ b/infra/conf/loader.go @@ -13,7 +13,7 @@ type ConfigCreatorCache map[string]ConfigCreator func (v ConfigCreatorCache) RegisterCreator(id string, creator ConfigCreator) error { if _, found := v[id]; found { - return errors.New(id, " already registered.").AtError() + return errors.New(id, " already registered.") } v[id] = creator @@ -61,7 +61,7 @@ func (v *JSONConfigLoader) Load(raw []byte) (interface{}, string, error) { } rawID, found := obj[v.idKey] if !found { - return nil, "", errors.New(v.idKey, " not found in JSON context").AtError() + return nil, "", errors.New(v.idKey, " not found in JSON context") } var id string if err := json.Unmarshal(rawID, &id); err != nil { diff --git a/infra/conf/serial/builder.go b/infra/conf/serial/builder.go index 755b3469c..3154fce3c 100644 --- a/infra/conf/serial/builder.go +++ b/infra/conf/serial/builder.go @@ -30,7 +30,7 @@ func MergeConfigFromFiles(files []*core.ConfigSource) (string, error) { if j, ok := creflect.MarshalToJson(c, true); ok { return j, nil } - return "", errors.New("marshal to json failed.").AtError() + return "", errors.New("marshal to json failed.") } func mergeConfigs(files []*core.ConfigSource) (*conf.Config, error) { diff --git a/infra/conf/socks.go b/infra/conf/socks.go index 828584f18..33e290b7b 100644 --- a/infra/conf/socks.go +++ b/infra/conf/socks.go @@ -44,7 +44,6 @@ func (v *SocksServerConfig) Build() (proto.Message, error) { case AuthMethodUserPass: config.AuthType = socks.AuthType_PASSWORD default: - // errors.New("unknown socks auth method: ", v.AuthMethod, ". Default to noauth.").AtWarning().WriteToLog() config.AuthType = socks.AuthType_NO_AUTH } @@ -115,7 +114,7 @@ func (v *SocksClientConfig) Build() (proto.Message, error) { user.Email = v.Email } else { if err := json.Unmarshal(rawUser, user); err != nil { - return nil, errors.New("failed to parse Socks user").Base(err).AtError() + return nil, errors.New("failed to parse Socks user").Base(err) } } account := new(SocksAccount) @@ -124,7 +123,7 @@ func (v *SocksClientConfig) Build() (proto.Message, error) { account.Password = v.Password } else { if err := json.Unmarshal(rawUser, account); err != nil { - return nil, errors.New("failed to parse socks account").Base(err).AtError() + return nil, errors.New("failed to parse socks account").Base(err) } } user.Account = serial.ToTypedMessage(account.Build()) diff --git a/infra/conf/transport_method.go b/infra/conf/transport_method.go index f6ae7ff74..6a7e2870e 100644 --- a/infra/conf/transport_method.go +++ b/infra/conf/transport_method.go @@ -121,7 +121,7 @@ func (v *AuthenticatorRequest) Build() (*http.RequestConfig, error) { for _, key := range headerNames { value := v.Headers[key] if value == nil { - return nil, errors.New("empty HTTP header value: " + key).AtError() + return nil, errors.New("empty HTTP header value: " + key) } config.Header = append(config.Header, &http.Header{ Name: key, @@ -189,7 +189,7 @@ func (v *AuthenticatorResponse) Build() (*http.ResponseConfig, error) { for _, key := range headerNames { value := v.Headers[key] if value == nil { - return nil, errors.New("empty HTTP header value: " + key).AtError() + return nil, errors.New("empty HTTP header value: " + key) } config.Header = append(config.Header, &http.Header{ Name: key, @@ -239,11 +239,11 @@ func (c *TCPConfig) Build() (proto.Message, error) { if len(c.HeaderConfig) > 0 { headerConfig, _, err := tcpHeaderLoader.Load(c.HeaderConfig) if err != nil { - return nil, errors.New("invalid TCP header config").Base(err).AtError() + return nil, errors.New("invalid TCP header config").Base(err) } ts, err := headerConfig.(Buildable).Build() if err != nil { - return nil, errors.New("invalid TCP header config").Base(err).AtError() + return nil, errors.New("invalid TCP header config").Base(err) } config.HeaderSettings = serial.ToTypedMessage(ts) } diff --git a/proxy/http/server.go b/proxy/http/server.go index c164542e9..b89c67c0e 100644 --- a/proxy/http/server.go +++ b/proxy/http/server.go @@ -115,11 +115,7 @@ Start: request, err := http.ReadRequest(reader) if err != nil { - trace := errors.New("failed to read http request").Base(err) - if errors.Cause(err) != io.EOF && !isTimeout(errors.Cause(err)) { - trace.AtWarning() - } - return trace + return errors.New("failed to read http request").Base(err) } if len(s.config.Accounts) > 0 { @@ -147,7 +143,7 @@ Start: } dest, err := http_proto.ParseHost(host, defaultPort) if err != nil { - return errors.New("malformed proxy host: ", host).AtWarning().Base(err) + return errors.New("malformed proxy host: ", host).Base(err) } ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{ From: conn.RemoteAddr(), @@ -262,7 +258,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri requestWriter := buf.NewBufferedWriter(link.Writer) common.Must(requestWriter.SetBuffered(false)) if err := request.Write(requestWriter); err != nil { - return errors.New("failed to write whole request").Base(err).AtWarning() + return errors.New("failed to write whole request").Base(err) } return nil } @@ -299,7 +295,7 @@ func (s *Server) handlePlainHTTP(ctx context.Context, request *http.Request, wri response.Header.Set("Proxy-Connection", "close") } if err := response.Write(writer); err != nil { - return errors.New("failed to write response").Base(err).AtWarning() + return errors.New("failed to write response").Base(err) } return nil } diff --git a/proxy/hysteria/client.go b/proxy/hysteria/client.go index 5b602c342..55e15fb85 100644 --- a/proxy/hysteria/client.go +++ b/proxy/hysteria/client.go @@ -62,7 +62,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter conn, err := dialer.Dial(hysteria.ContextWithDatagram(ctx, target.Network == net.Network_UDP), c.server.Destination) if err != nil { - return errors.New("failed to find an available destination").AtWarning().Base(err) + return errors.New("failed to find an available destination").Base(err) } defer conn.Close() errors.LogInfo(ctx, "tunneling request to ", target, " via ", target.Network, ":", c.server.Destination.NetAddr()) diff --git a/proxy/hysteria/server.go b/proxy/hysteria/server.go index 1e54b654b..8debcc182 100644 --- a/proxy/hysteria/server.go +++ b/proxy/hysteria/server.go @@ -40,11 +40,11 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Server, error) { for _, user := range config.Users { u, err := user.ToMemoryUser() if err != nil { - return nil, errors.New("failed to get hysteria user").Base(err).AtError() + return nil, errors.New("failed to get hysteria user").Base(err) } if err := validator.Add(u); err != nil { - return nil, errors.New("failed to add user").Base(err).AtError() + return nil, errors.New("failed to add user").Base(err) } } diff --git a/proxy/loopback/loopback.go b/proxy/loopback/loopback.go index 185496474..bf830e2e7 100644 --- a/proxy/loopback/loopback.go +++ b/proxy/loopback/loopback.go @@ -56,7 +56,7 @@ func (l *Loopback) init(config *Config, dispatcherInstance routing.Dispatcher) e if config.Sniffing.GetEnabled() { request, err := proxyman.BuildSniffingRequest(config.Sniffing) if err != nil { - return errors.New("failed to build loopback sniffing request").Base(err).AtError() + return errors.New("failed to build loopback sniffing request").Base(err) } l.sniffingRequest = request } diff --git a/proxy/shadowsocks/client.go b/proxy/shadowsocks/client.go index 29cb04566..02ec72579 100644 --- a/proxy/shadowsocks/client.go +++ b/proxy/shadowsocks/client.go @@ -71,7 +71,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter return nil }) if err != nil { - return errors.New("failed to find an available destination").AtWarning().Base(err) + return errors.New("failed to find an available destination").Base(err) } errors.LogInfo(ctx, "tunneling request to ", destination, " via ", network, ":", server.Destination.NetAddr()) @@ -124,7 +124,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } if err = buf.CopyOnceTimeout(link.Reader, bodyWriter, time.Millisecond*100); err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { - return errors.New("failed to write A request payload").Base(err).AtWarning() + return errors.New("failed to write A request payload").Base(err) } if err := bufferedWriter.SetBuffered(false); err != nil { diff --git a/proxy/shadowsocks/protocol.go b/proxy/shadowsocks/protocol.go index 88006cded..354983f65 100644 --- a/proxy/shadowsocks/protocol.go +++ b/proxy/shadowsocks/protocol.go @@ -98,7 +98,7 @@ func ReadTCPSession(validator *Validator, reader io.Reader) (*protocol.RequestHe iv := append([]byte(nil), buffer.BytesTo(ivLen)...) r, err = account.Cipher.NewDecryptionReader(account.Key, iv, reader) if err != nil { - return nil, nil, drain.WithError(drainer, reader, errors.New("failed to initialize decoding stream").Base(err).AtError()) + return nil, nil, drain.WithError(drainer, reader, errors.New("failed to initialize decoding stream").Base(err)) } } } @@ -146,7 +146,7 @@ func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Wri w, err := account.Cipher.NewEncryptionWriter(account.Key, iv, writer) if err != nil { - return nil, errors.New("failed to create encoding stream").Base(err).AtError() + return nil, errors.New("failed to create encoding stream").Base(err) } header := buf.New() diff --git a/proxy/shadowsocks/server.go b/proxy/shadowsocks/server.go index 360ea38c8..7c965b9f6 100644 --- a/proxy/shadowsocks/server.go +++ b/proxy/shadowsocks/server.go @@ -34,11 +34,11 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Server, error) { for _, user := range config.Users { u, err := user.ToMemoryUser() if err != nil { - return nil, errors.New("failed to get shadowsocks user").Base(err).AtError() + return nil, errors.New("failed to get shadowsocks user").Base(err) } if err := validator.Add(u); err != nil { - return nil, errors.New("failed to add user").Base(err).AtError() + return nil, errors.New("failed to add user").Base(err) } } @@ -200,7 +200,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn stat.Connection, dis func (s *Server) handleConnection(ctx context.Context, conn stat.Connection, dispatcher routing.Dispatcher) error { sessionPolicy := s.policyManager.ForLevel(0) if err := conn.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return errors.New("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err) } bufferedReader := buf.BufferedReader{Reader: buf.NewReader(conn)} diff --git a/proxy/shadowsocks_2022/inbound_multi.go b/proxy/shadowsocks_2022/inbound_multi.go index d6d68c09a..be7a8f2ba 100644 --- a/proxy/shadowsocks_2022/inbound_multi.go +++ b/proxy/shadowsocks_2022/inbound_multi.go @@ -59,7 +59,7 @@ func NewMultiServer(ctx context.Context, config *MultiUserServerConfig) (*MultiU } u, err := user.ToMemoryUser() if err != nil { - return nil, errors.New("failed to get shadowsocks user").Base(err).AtError() + return nil, errors.New("failed to get shadowsocks user").Base(err) } memUsers = append(memUsers, u) } diff --git a/proxy/socks/client.go b/proxy/socks/client.go index eac3f35b8..aa14f8f69 100644 --- a/proxy/socks/client.go +++ b/proxy/socks/client.go @@ -105,7 +105,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter } udpRequest, err := ClientHandshake(request, conn, conn) if err != nil { - return errors.New("failed to establish connection to server").AtWarning().Base(err) + return errors.New("failed to establish connection to server").Base(err) } if udpRequest != nil { if udpRequest.Address == net.AnyIP || udpRequest.Address == net.AnyIPv6 { diff --git a/proxy/socks/protocol.go b/proxy/socks/protocol.go index 5d4cfd9d9..d71c0fb1e 100644 --- a/proxy/socks/protocol.go +++ b/proxy/socks/protocol.go @@ -458,10 +458,10 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i } if b.Byte(0) != socks5Version { - return nil, errors.New("unexpected server version: ", b.Byte(0)).AtWarning() + return nil, errors.New("unexpected server version: ", b.Byte(0)) } if b.Byte(1) != authByte { - return nil, errors.New("auth method not supported.").AtWarning() + return nil, errors.New("auth method not supported.") } if authByte == authPassword { diff --git a/proxy/trojan/client.go b/proxy/trojan/client.go index 4af8c019d..abbf3ee7f 100644 --- a/proxy/trojan/client.go +++ b/proxy/trojan/client.go @@ -69,7 +69,7 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter return nil }) if err != nil { - return errors.New("failed to find an available destination").AtWarning().Base(err) + return errors.New("failed to find an available destination").Base(err) } errors.LogInfo(ctx, "tunneling request to ", destination, " via ", server.Destination.NetAddr()) @@ -116,21 +116,21 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter // write some request payload to buffer if err = buf.CopyOnceTimeout(link.Reader, bodyWriter, time.Millisecond*100); err != nil && err != buf.ErrNotTimeoutReader && err != buf.ErrReadTimeout { - return errors.New("failed to write A request payload").Base(err).AtWarning() + return errors.New("failed to write A request payload").Base(err) } // Flush; bufferWriter.WriteMultiBuffer now is bufferWriter.writer.WriteMultiBuffer if err = bufferWriter.SetBuffered(false); err != nil { - return errors.New("failed to flush payload").Base(err).AtWarning() + return errors.New("failed to flush payload").Base(err) } // Send header if not sent yet if _, err = connWriter.Write([]byte{}); err != nil { - return err.(*errors.Error).AtWarning() + return err } if err = buf.Copy(link.Reader, bodyWriter, buf.UpdateActivity(timer)); err != nil { - return errors.New("failed to transfer request payload").Base(err).AtInfo() + return errors.New("failed to transfer request payload").Base(err) } return nil diff --git a/proxy/trojan/server.go b/proxy/trojan/server.go index d5979e529..8fd19beb2 100644 --- a/proxy/trojan/server.go +++ b/proxy/trojan/server.go @@ -47,11 +47,11 @@ func NewServer(ctx context.Context, config *ServerConfig) (*Server, error) { for _, user := range config.Users { u, err := user.ToMemoryUser() if err != nil { - return nil, errors.New("failed to get trojan user").Base(err).AtError() + return nil, errors.New("failed to get trojan user").Base(err) } if err := validator.Add(u); err != nil { - return nil, errors.New("failed to add user").Base(err).AtError() + return nil, errors.New("failed to add user").Base(err) } } @@ -151,7 +151,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con sessionPolicy := s.policyManager.ForLevel(0) if err := conn.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return errors.New("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err) } first := buf.FromBytes(make([]byte, buf.Size)) @@ -219,7 +219,7 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn stat.Con destination := clientReader.Target if err := conn.SetReadDeadline(time.Time{}); err != nil { - return errors.New("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err) } inbound := session.InboundFromContext(ctx) @@ -402,7 +402,7 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S } apfb := napfb[name] if apfb == nil { - return errors.New(`failed to find the default "name" config`).AtWarning() + return errors.New(`failed to find the default "name" config`) } if apfb[alpn] == nil { @@ -410,7 +410,7 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S } pfb := apfb[alpn] if pfb == nil { - return errors.New(`failed to find the default "alpn" config`).AtWarning() + return errors.New(`failed to find the default "alpn" config`) } path := "" @@ -444,7 +444,7 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S } fb := pfb[path] if fb == nil { - return errors.New(`failed to find the default "path" config`).AtWarning() + return errors.New(`failed to find the default "path" config`) } ctx, cancel := context.WithCancel(ctx) @@ -460,7 +460,7 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S } return nil }); err != nil { - return errors.New("failed to dial to " + fb.Dest).Base(err).AtWarning() + return errors.New("failed to dial to " + fb.Dest).Base(err) } defer conn.Close() @@ -520,11 +520,11 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S common.Must2(pro.Write([]byte{byte(p1 >> 8), byte(p1), byte(p2 >> 8), byte(p2)})) } if err := serverWriter.WriteMultiBuffer(buf.MultiBuffer{pro}); err != nil { - return errors.New("failed to set PROXY protocol v", fb.Xver).Base(err).AtWarning() + return errors.New("failed to set PROXY protocol v", fb.Xver).Base(err) } } if err := buf.Copy(reader, serverWriter, buf.UpdateActivity(timer)); err != nil { - return errors.New("failed to fallback request payload").Base(err).AtInfo() + return errors.New("failed to fallback request payload").Base(err) } return nil } @@ -534,7 +534,7 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S getResponse := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) if err := buf.Copy(serverReader, writer, buf.UpdateActivity(timer)); err != nil { - return errors.New("failed to deliver response payload").Base(err).AtInfo() + return errors.New("failed to deliver response payload").Base(err) } return nil } @@ -542,7 +542,7 @@ func (s *Server) fallback(ctx context.Context, err error, sessionPolicy policy.S if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), task.OnSuccess(getResponse, task.Close(writer))); err != nil { common.Must(common.Interrupt(serverReader)) common.Must(common.Interrupt(serverWriter)) - return errors.New("fallback ends").Base(err).AtInfo() + return errors.New("fallback ends").Base(err) } return nil diff --git a/proxy/vless/account.go b/proxy/vless/account.go index 2f617149d..b773faa28 100644 --- a/proxy/vless/account.go +++ b/proxy/vless/account.go @@ -12,7 +12,7 @@ import ( func (a *Account) AsAccount() (protocol.Account, error) { id, err := uuid.ParseString(a.Id) if err != nil { - return nil, errors.New("failed to parse ID").Base(err).AtError() + return nil, errors.New("failed to parse ID").Base(err) } return &MemoryAccount{ ID: protocol.NewID(id), diff --git a/proxy/vless/inbound/inbound.go b/proxy/vless/inbound/inbound.go index 2d10a0060..d6a9d8efa 100644 --- a/proxy/vless/inbound/inbound.go +++ b/proxy/vless/inbound/inbound.go @@ -61,10 +61,10 @@ func init() { for _, user := range c.Users { u, err := user.ToMemoryUser() if err != nil { - return nil, errors.New("failed to get VLESS user").Base(err).AtError() + return nil, errors.New("failed to get VLESS user").Base(err) } if err := validator.Add(u); err != nil { - return nil, errors.New("failed to initiate user").Base(err).AtError() + return nil, errors.New("failed to initiate user").Base(err) } } @@ -110,7 +110,7 @@ func New(ctx context.Context, config *Config, dc dns.Client, validator vless.Val } handler.decryption = &encryption.ServerInstance{} if err := handler.decryption.Init(nfsSKeysBytes, config.XorMode, config.SecondsFrom, config.SecondsTo, config.Padding); err != nil { - return nil, errors.New("failed to use decryption").Base(err).AtError() + return nil, errors.New("failed to use decryption").Base(err) } } @@ -128,7 +128,7 @@ func New(ctx context.Context, config *Config, dc dns.Client, validator vless.Val /* if fb.Path != "" { if r, err := regexp.Compile(fb.Path); err != nil { - return nil, errors.New("invalid path regexp").Base(err).AtError() + return nil, errors.New("invalid path regexp").Base(err) } else { handler.regexps[fb.Path] = r } @@ -274,13 +274,13 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if h.decryption != nil { var err error if connection, err = h.decryption.Handshake(connection, nil); err != nil { - return errors.New("ML-KEM-768 handshake failed").Base(err).AtInfo() + return errors.New("ML-KEM-768 handshake failed").Base(err) } } sessionPolicy := h.policyManager.ForLevel(0) if err := connection.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return errors.New("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err) } first := buf.FromBytes(make([]byte, buf.Size)) @@ -352,7 +352,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } apfb := napfb[name] if apfb == nil { - return errors.New(`failed to find the default "name" config`).AtWarning() + return errors.New(`failed to find the default "name" config`) } if apfb[alpn] == nil { @@ -360,7 +360,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } pfb := apfb[alpn] if pfb == nil { - return errors.New(`failed to find the default "alpn" config`).AtWarning() + return errors.New(`failed to find the default "alpn" config`) } path := "" @@ -369,7 +369,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if lines := bytes.Split(firstBytes, []byte{'\r', '\n'}); len(lines) > 1 { if s := bytes.Split(lines[0], []byte{' '}); len(s) == 3 { if len(s[0]) < 8 && len(s[1]) > 0 && len(s[2]) == 8 { - errors.New("realPath = " + string(s[1])).AtInfo().WriteToLog(sid) + errors.New("realPath = " + string(s[1])).WriteToLog(sid) for _, fb := range pfb { if fb.Path != "" && h.regexps[fb.Path].Match(s[1]) { path = fb.Path @@ -409,7 +409,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } fb := pfb[path] if fb == nil { - return errors.New(`failed to find the default "path" config`).AtWarning() + return errors.New(`failed to find the default "path" config`) } ctx, cancel := context.WithCancel(ctx) @@ -425,7 +425,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s } return nil }); err != nil { - return errors.New("failed to dial to " + fb.Dest).Base(err).AtWarning() + return errors.New("failed to dial to " + fb.Dest).Base(err) } defer conn.Close() @@ -485,11 +485,11 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s pro.Write([]byte{byte(p1 >> 8), byte(p1), byte(p2 >> 8), byte(p2)}) } if err := serverWriter.WriteMultiBuffer(buf.MultiBuffer{pro}); err != nil { - return errors.New("failed to set PROXY protocol v", fb.Xver).Base(err).AtWarning() + return errors.New("failed to set PROXY protocol v", fb.Xver).Base(err) } } if err := buf.Copy(reader, serverWriter, buf.UpdateActivity(timer)); err != nil { - return errors.New("failed to fallback request payload").Base(err).AtInfo() + return errors.New("failed to fallback request payload").Base(err) } return nil } @@ -499,7 +499,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s getResponse := func() error { defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) if err := buf.Copy(serverReader, writer, buf.UpdateActivity(timer)); err != nil { - return errors.New("failed to deliver response payload").Base(err).AtInfo() + return errors.New("failed to deliver response payload").Base(err) } return nil } @@ -507,7 +507,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), task.OnSuccess(getResponse, task.Close(writer))); err != nil { common.Interrupt(serverReader) common.Interrupt(serverWriter) - return errors.New("fallback ends").Base(err).AtInfo() + return errors.New("fallback ends").Base(err) } return nil } @@ -519,7 +519,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s Status: log.AccessRejected, Reason: err, }) - err = errors.New("invalid request from ", connection.RemoteAddr()).Base(err).AtInfo() + err = errors.New("invalid request from ", connection.RemoteAddr()).Base(err) } return err } @@ -555,7 +555,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s inbound.CanSpliceCopy = 2 switch request.Command { case protocol.RequestCommandUDP: - return errors.New(requestAddons.Flow + " doesn't support UDP").AtWarning() + return errors.New(requestAddons.Flow + " doesn't support UDP") case protocol.RequestCommandMux, protocol.RequestCommandRvs: inbound.CanSpliceCopy = 3 fallthrough // we will break Mux connections that contain TCP requests @@ -570,7 +570,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s p = uintptr(unsafe.Pointer(commonConn)) } else if tlsConn, ok := iConn.(*tls.Conn); ok { if tlsConn.ConnectionState().Version != gotls.VersionTLS13 { - return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version).AtWarning() + return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version) } t = reflect.TypeOf(tlsConn.Conn).Elem() p = uintptr(unsafe.Pointer(tlsConn.Conn)) @@ -578,7 +578,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s t = reflect.TypeOf(realityConn.Conn).Elem() p = uintptr(unsafe.Pointer(realityConn.Conn)) } else { - return errors.New("XTLS only supports TLS and REALITY directly for now.").AtWarning() + return errors.New("XTLS only supports TLS and REALITY directly for now.") } i, _ := t.FieldByName("input") r, _ := t.FieldByName("rawInput") @@ -586,15 +586,15 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s rawInput = (*bytes.Buffer)(unsafe.Pointer(p + r.Offset)) } } else { - return errors.New("account " + account.ID.String() + " is not able to use the flow " + requestAddons.Flow).AtWarning() + return errors.New("account " + account.ID.String() + " is not able to use the flow " + requestAddons.Flow) } case "": inbound.CanSpliceCopy = 3 if account.Flow == vless.XRV && (request.Command == protocol.RequestCommandTCP || isMuxAndNotXUDP(request, first)) { - return errors.New("account " + account.ID.String() + " is rejected since the client flow is empty. Note that the pure TLS proxy has certain TLS in TLS characters.").AtWarning() + return errors.New("account " + account.ID.String() + " is rejected since the client flow is empty. Note that the pure TLS proxy has certain TLS in TLS characters.") } default: - return errors.New("unknown request flow " + requestAddons.Flow).AtWarning() + return errors.New("unknown request flow " + requestAddons.Flow) } if request.Command != protocol.RequestCommandMux { @@ -617,7 +617,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s bufferWriter := buf.NewBufferedWriter(buf.NewWriter(connection)) if err := encoding.EncodeResponseHeader(bufferWriter, request, responseAddons); err != nil { - return errors.New("failed to encode response header").Base(err).AtWarning() + return errors.New("failed to encode response header").Base(err) } clientWriter := encoding.EncodeBodyAddons(bufferWriter, request, requestAddons, trafficState, false, ctx, connection, nil) bufferWriter.SetFlushNext() @@ -654,11 +654,11 @@ func (r *Reverse) Tag() string { func (r *Reverse) NewMux(ctx context.Context, link *transport.Link, observer features.Feature) error { muxClient, err := mux.NewClientWorker(*link, mux.ClientStrategy{}) if err != nil { - return errors.New("failed to create mux client worker").Base(err).AtWarning() + return errors.New("failed to create mux client worker").Base(err) } worker, err := reverse.NewPortalWorker(muxClient) if err != nil { - return errors.New("failed to create portal worker").Base(err).AtWarning() + return errors.New("failed to create portal worker").Base(err) } r.picker.AddWorker(worker) if burstObs, ok := observer.(extension.BurstObservatory); ok { diff --git a/proxy/vless/outbound/outbound.go b/proxy/vless/outbound/outbound.go index 6a013dae2..56a2fd04e 100644 --- a/proxy/vless/outbound/outbound.go +++ b/proxy/vless/outbound/outbound.go @@ -73,7 +73,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) { } server, err := protocol.NewServerSpecFromPB(config.Vnext) if err != nil { - return nil, errors.New("failed to get server spec").Base(err).AtError() + return nil, errors.New("failed to get server spec").Base(err) } v := core.MustFromContext(ctx) @@ -93,7 +93,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) { } handler.encryption = &encryption.ClientInstance{} if err := handler.encryption.Init(nfsPKeysBytes, a.XorMode, a.Seconds, a.Padding); err != nil { - return nil, errors.New("failed to use encryption").Base(err).AtError() + return nil, errors.New("failed to use encryption").Base(err) } } @@ -106,7 +106,7 @@ func New(ctx context.Context, config *Config) (*Handler, error) { if sc := a.Reverse.Sniffing; sc != nil && sc.Enabled { request, err := proxymanConfig.BuildSniffingRequest(sc) if err != nil { - return nil, errors.New("failed to build reverse sniffing request").Base(err).AtError() + return nil, errors.New("failed to build reverse sniffing request").Base(err) } rvsCtx = session.ContextWithContent(rvsCtx, &session.Content{ SniffingRequest: request, @@ -149,7 +149,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte outbounds := session.OutboundsFromContext(ctx) ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() && ob.Target.Address.String() != "v1.rvs.cool" { - return errors.New("target not specified").AtError() + return errors.New("target not specified") } ob.Name = "vless" @@ -178,7 +178,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte for { connTime := <-h.preConns if connTime == nil { - return errors.New("closed handler").AtWarning() + return errors.New("closed handler") } if time.Now().Before(connTime.Expire) { conn = connTime.Conn @@ -197,7 +197,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } return nil }); err != nil { - return errors.New("failed to find an available destination").Base(err).AtWarning() + return errors.New("failed to find an available destination").Base(err) } } defer conn.Close() @@ -209,7 +209,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte if h.encryption != nil { var err error if conn, err = h.encryption.Handshake(conn); err != nil { - return errors.New("ML-KEM-768 handshake failed").Base(err).AtInfo() + return errors.New("ML-KEM-768 handshake failed").Base(err) } } @@ -223,7 +223,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte command = protocol.RequestCommandMux case "v1.rvs.cool": if target.Network != net.Network_Unknown { - return errors.New("nice try baby").AtError() + return errors.New("nice try baby") } command = protocol.RequestCommandRvs } @@ -256,7 +256,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte switch request.Command { case protocol.RequestCommandUDP: if !allowUDP443 && request.Port == 443 { - return errors.New("XTLS rejected UDP/443 traffic").AtInfo() + return errors.New("XTLS rejected UDP/443 traffic") } case protocol.RequestCommandMux: fallthrough // let server break Mux connections that contain TCP requests @@ -279,7 +279,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte t = reflect.TypeOf(realityConn.Conn).Elem() p = uintptr(unsafe.Pointer(realityConn.Conn)) } else { - return errors.New("XTLS only supports TLS and REALITY directly for now.").AtWarning() + return errors.New("XTLS only supports TLS and REALITY directly for now.") } i, _ := t.FieldByName("input") r, _ := t.FieldByName("rawInput") @@ -321,7 +321,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte bufferWriter := buf.NewBufferedWriter(buf.NewWriter(conn)) if err := encoding.EncodeRequestHeader(bufferWriter, request, requestAddons); err != nil { - return errors.New("failed to encode request header").Base(err).AtWarning() + return errors.New("failed to encode request header").Base(err) } // default: serverWriter := bufferWriter @@ -350,23 +350,23 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } // Flush; bufferWriter.WriteMultiBuffer now is bufferWriter.writer.WriteMultiBuffer if err := bufferWriter.SetBuffered(false); err != nil { - return errors.New("failed to write A request payload").Base(err).AtWarning() + return errors.New("failed to write A request payload").Base(err) } if requestAddons.Flow == vless.XRV { if tlsConn, ok := iConn.(*tls.Conn); ok { if tlsConn.ConnectionState().Version != gotls.VersionTLS13 { - return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version).AtWarning() + return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, tlsConn.ConnectionState().Version) } } else if utlsConn, ok := iConn.(*tls.UConn); ok { if utlsConn.ConnectionState().Version != utls.VersionTLS13 { - return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, utlsConn.ConnectionState().Version).AtWarning() + return errors.New(`failed to use `+requestAddons.Flow+`, found outer tls version `, utlsConn.ConnectionState().Version) } } } err := buf.Copy(clientReader, serverWriter, buf.UpdateActivity(timer)) if err != nil { - return errors.New("failed to transfer request payload").Base(err).AtInfo() + return errors.New("failed to transfer request payload").Base(err) } // Indicates the end of request payload. @@ -381,7 +381,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte responseAddons, err := encoding.DecodeResponseHeader(conn, request) if err != nil { - return errors.New("failed to decode response header").Base(err).AtInfo() + return errors.New("failed to decode response header").Base(err) } // default: serverReader := buf.NewReader(conn) @@ -405,7 +405,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } if err != nil { - return errors.New("failed to transfer response payload").Base(err).AtInfo() + return errors.New("failed to transfer response payload").Base(err) } return nil @@ -416,7 +416,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte } if err := task.Run(ctx, postRequest, task.OnSuccess(getResponse, task.Close(clientWriter))); err != nil { - return errors.New("connection ends").Base(err).AtInfo() + return errors.New("connection ends").Base(err) } return nil diff --git a/proxy/vmess/account.go b/proxy/vmess/account.go index a7a1b78ef..a2b7210b1 100644 --- a/proxy/vmess/account.go +++ b/proxy/vmess/account.go @@ -49,7 +49,7 @@ func (a *MemoryAccount) ToProto() proto.Message { func (a *Account) AsAccount() (protocol.Account, error) { id, err := uuid.ParseString(a.Id) if err != nil { - return nil, errors.New("failed to parse ID").Base(err).AtError() + return nil, errors.New("failed to parse ID").Base(err) } protoID := protocol.NewID(id) var AuthenticatedLength, NoTerminationSignal bool diff --git a/proxy/vmess/encoding/client.go b/proxy/vmess/encoding/client.go index e5b38d391..2890fc7b1 100644 --- a/proxy/vmess/encoding/client.go +++ b/proxy/vmess/encoding/client.go @@ -209,7 +209,7 @@ func (c *ClientSession) DecodeResponseHeader(reader io.Reader) (*protocol.Respon defer buffer.Release() if _, err := buffer.ReadFullFrom(c.responseReader, 4); err != nil { - return nil, errors.New("failed to read response header").Base(err).AtWarning() + return nil, errors.New("failed to read response header").Base(err) } if buffer.Byte(0) != c.responseHeader { diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index e084a881e..03006ead1 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -227,7 +227,7 @@ func transferResponse(timer signal.ActivityUpdater, session *encoding.ServerSess func (h *Handler) Process(ctx context.Context, network net.Network, connection stat.Connection, dispatcher routing.Dispatcher) error { sessionPolicy := h.policyManager.ForLevel(0) if err := connection.SetReadDeadline(time.Now().Add(sessionPolicy.Timeouts.Handshake)); err != nil { - return errors.New("unable to set read deadline").Base(err).AtWarning() + return errors.New("unable to set read deadline").Base(err) } iConn := stat.TryUnwrapStatsConn(connection) @@ -247,7 +247,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s Status: log.AccessRejected, Reason: err, }) - err = errors.New("invalid request from ", connection.RemoteAddr()).Base(err).AtInfo() + err = errors.New("invalid request from ", connection.RemoteAddr()).Base(err) } return err } diff --git a/proxy/vmess/outbound/outbound.go b/proxy/vmess/outbound/outbound.go index db5f94abb..a475dac92 100644 --- a/proxy/vmess/outbound/outbound.go +++ b/proxy/vmess/outbound/outbound.go @@ -60,7 +60,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte outbounds := session.OutboundsFromContext(ctx) ob := outbounds[len(outbounds)-1] if !ob.Target.IsValid() { - return errors.New("target not specified").AtError() + return errors.New("target not specified") } ob.Name = "vmess" ob.CanSpliceCopy = 3 @@ -78,7 +78,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte return nil }) if err != nil { - return errors.New("failed to find an available destination").Base(err).AtWarning() + return errors.New("failed to find an available destination").Base(err) } defer conn.Close() @@ -154,7 +154,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte writer := buf.NewBufferedWriter(buf.NewWriter(conn)) if err := session.EncodeRequestHeader(request, writer); err != nil { - return errors.New("failed to encode request").Base(err).AtWarning() + return errors.New("failed to encode request").Base(err) } bodyWriter, err := session.EncodeRequestBody(request, writer) diff --git a/transport/internet/config.go b/transport/internet/config.go index 5762655b2..9edd2fbf7 100644 --- a/transport/internet/config.go +++ b/transport/internet/config.go @@ -27,7 +27,7 @@ var strategy = [11][3]byte{ func RegisterProtocolConfigCreator(name string, creator ConfigCreator) error { if _, found := globalTransportConfigCreatorCache[name]; found { - return errors.New("protocol ", name, " is already registered").AtError() + return errors.New("protocol ", name, " is already registered") } globalTransportConfigCreatorCache[name] = creator return nil diff --git a/transport/internet/dialer.go b/transport/internet/dialer.go index 475d0ff95..6d7b905db 100644 --- a/transport/internet/dialer.go +++ b/transport/internet/dialer.go @@ -38,7 +38,7 @@ var transportDialerCache = make(map[string]dialFunc) // RegisterTransportDialer registers a Dialer with given name. func RegisterTransportDialer(protocol string, dialer dialFunc) error { if _, found := transportDialerCache[protocol]; found { - return errors.New(protocol, " dialer already registered").AtError() + return errors.New(protocol, " dialer already registered") } transportDialerCache[protocol] = dialer return nil @@ -58,7 +58,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *MemoryStrea protocol := streamSettings.ProtocolName dialer := transportDialerCache[protocol] if dialer == nil { - return nil, errors.New(protocol, " dialer not registered").AtError() + return nil, errors.New(protocol, " dialer not registered") } return dialer(ctx, dest, streamSettings) } @@ -66,7 +66,7 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *MemoryStrea if dest.Network == net.Network_UDP { udpDialer := transportDialerCache["udp"] if udpDialer == nil { - return nil, errors.New("UDP dialer not registered").AtError() + return nil, errors.New("UDP dialer not registered") } return udpDialer(ctx, dest, streamSettings) } @@ -86,7 +86,7 @@ var ( func LookupForIP(domain string, strategy DomainStrategy, localAddr net.Address) ([]net.IP, error) { if dnsClient == nil { - return nil, errors.New("DNS client not initialized").AtError() + return nil, errors.New("DNS client not initialized") } ips, _, err := dnsClient.LookupIP(domain, dns.IPOption{ @@ -269,11 +269,11 @@ func DialSystem(ctx context.Context, dest net.Destination, sockopt *SocketConfig if len(sockopt.DialerProxy) > 0 { if obm == nil { - return nil, errors.New("there is no outbound manager for dialerProxy").AtError() + return nil, errors.New("there is no outbound manager for dialerProxy") } h := obm.GetHandler(sockopt.DialerProxy) if h == nil { - return nil, errors.New("there is no outbound handler for dialerProxy").AtError() + return nil, errors.New("there is no outbound handler for dialerProxy") } return redirect(ctx, dest, sockopt.DialerProxy, h), nil } diff --git a/transport/internet/kcp/dialer.go b/transport/internet/kcp/dialer.go index 175998ec7..c416cb025 100644 --- a/transport/internet/kcp/dialer.go +++ b/transport/internet/kcp/dialer.go @@ -53,7 +53,7 @@ func DialKCP(ctx context.Context, dest net.Destination, streamSettings *internet conn, err := internet.DialSystem(ctx, dest, streamSettings.SocketSettings) if err != nil { - return nil, errors.New("failed to dial to dest: ", err).AtWarning().Base(err) + return nil, errors.New("failed to dial to dest: ", err).Base(err) } if streamSettings.UdpmaskManager != nil { diff --git a/transport/internet/reality/reality.go b/transport/internet/reality/reality.go index 50b2e02f7..1407151b5 100644 --- a/transport/internet/reality/reality.go +++ b/transport/internet/reality/reality.go @@ -132,7 +132,7 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati uConn.ServerName = utlsConfig.ServerName fingerprint := tls.GetFingerprint(config.Fingerprint) if fingerprint == nil { - return nil, errors.New("REALITY: failed to get fingerprint").AtError() + return nil, errors.New("REALITY: failed to get fingerprint") } uConn.UConn = utls.UClient(c, utlsConfig, *fingerprint) { @@ -271,7 +271,7 @@ func UClient(c net.Conn, config *Config, ctx context.Context, dest net.Destinati // Do not close the connection }() time.Sleep(time.Duration(crypto.RandBetween(config.SpiderY[8], config.SpiderY[9])) * time.Millisecond) // return - return nil, errors.New("REALITY: processed invalid connection").AtWarning() + return nil, errors.New("REALITY: processed invalid connection") } return uConn, nil } diff --git a/transport/internet/sockopt_darwin.go b/transport/internet/sockopt_darwin.go index 73a85d8ff..2ac78ab4a 100644 --- a/transport/internet/sockopt_darwin.go +++ b/transport/internet/sockopt_darwin.go @@ -288,14 +288,14 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) func setReuseAddr(fd uintptr) error { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEADDR, 1); err != nil { - return errors.New("failed to set SO_REUSEADDR").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEADDR").Base(err) } return nil } func setReusePort(fd uintptr) error { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil { - return errors.New("failed to set SO_REUSEPORT").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEPORT").Base(err) } return nil } diff --git a/transport/internet/sockopt_freebsd.go b/transport/internet/sockopt_freebsd.go index 635c25da3..f373408d1 100644 --- a/transport/internet/sockopt_freebsd.go +++ b/transport/internet/sockopt_freebsd.go @@ -224,7 +224,7 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) func setReuseAddr(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil { - return errors.New("failed to set SO_REUSEADDR").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEADDR").Base(err) } return nil } @@ -232,7 +232,7 @@ func setReuseAddr(fd uintptr) error { func setReusePort(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, soReUsePortLB, 1); err != nil { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, soReUsePort, 1); err != nil { - return errors.New("failed to set SO_REUSEPORT").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEPORT").Base(err) } } return nil diff --git a/transport/internet/sockopt_linux.go b/transport/internet/sockopt_linux.go index 36c4decfd..7c614d9fb 100644 --- a/transport/internet/sockopt_linux.go +++ b/transport/internet/sockopt_linux.go @@ -234,14 +234,14 @@ func applyInboundSocketOptions(network string, fd uintptr, config *SocketConfig) func setReuseAddr(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil { - return errors.New("failed to set SO_REUSEADDR").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEADDR").Base(err) } return nil } func setReusePort(fd uintptr) error { if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil { - return errors.New("failed to set SO_REUSEPORT").Base(err).AtWarning() + return errors.New("failed to set SO_REUSEPORT").Base(err) } return nil } diff --git a/transport/internet/tcp/dialer.go b/transport/internet/tcp/dialer.go index 92fa7557f..6ca5bd4c2 100644 --- a/transport/internet/tcp/dialer.go +++ b/transport/internet/tcp/dialer.go @@ -86,14 +86,14 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me } if err != nil { if isFromMitmVerify { - return nil, errors.New("MITM freedom RAW TLS: failed to verify Domain Fronting certificate from " + mitmServerName).Base(err).AtWarning() + return nil, errors.New("MITM freedom RAW TLS: failed to verify Domain Fronting certificate from " + mitmServerName).Base(err) } return nil, err } negotiatedProtocol := conn.(tls.Interface).NegotiatedProtocol() if isFromMitmAlpn && !mitmAlpn11 && negotiatedProtocol != "h2" { conn.Close() - return nil, errors.New("MITM freedom RAW TLS: unexpected Negotiated Protocol (" + negotiatedProtocol + ") with " + mitmServerName).AtWarning() + return nil, errors.New("MITM freedom RAW TLS: unexpected Negotiated Protocol (" + negotiatedProtocol + ") with " + mitmServerName) } } else if config := reality.ConfigFromStreamSettings(streamSettings); config != nil { if conn, err = reality.UClient(conn, config, ctx, dest); err != nil { @@ -105,11 +105,11 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me if tcpSettings.HeaderSettings != nil { headerConfig, err := tcpSettings.HeaderSettings.GetInstance() if err != nil { - return nil, errors.New("failed to get header settings").Base(err).AtError() + return nil, errors.New("failed to get header settings").Base(err) } auth, err := internet.CreateConnectionAuthenticator(headerConfig) if err != nil { - return nil, errors.New("failed to create header authenticator").Base(err).AtError() + return nil, errors.New("failed to create header authenticator").Base(err) } conn = auth.Client(conn) } diff --git a/transport/internet/tcp/hub.go b/transport/internet/tcp/hub.go index c68d55dd9..64a4a6f56 100644 --- a/transport/internet/tcp/hub.go +++ b/transport/internet/tcp/hub.go @@ -82,11 +82,11 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, streamSe if tcpSettings.HeaderSettings != nil { headerConfig, err := tcpSettings.HeaderSettings.GetInstance() if err != nil { - return nil, errors.New("invalid header settings").Base(err).AtError() + return nil, errors.New("invalid header settings").Base(err) } auth, err := internet.CreateConnectionAuthenticator(headerConfig) if err != nil { - return nil, errors.New("invalid header settings.").Base(err).AtError() + return nil, errors.New("invalid header settings.").Base(err) } l.authConfig = auth } diff --git a/transport/internet/tcp_hub.go b/transport/internet/tcp_hub.go index 31183368a..1f613d0e5 100644 --- a/transport/internet/tcp_hub.go +++ b/transport/internet/tcp_hub.go @@ -12,7 +12,7 @@ var transportListenerCache = make(map[string]ListenFunc) func RegisterTransportListener(protocol string, listener ListenFunc) error { if _, found := transportListenerCache[protocol]; found { - return errors.New(protocol, " listener already registered.").AtError() + return errors.New(protocol, " listener already registered.") } transportListenerCache[protocol] = listener return nil @@ -40,7 +40,7 @@ func ListenUnix(ctx context.Context, address net.Address, settings *MemoryStream protocol := settings.ProtocolName listenFunc := transportListenerCache[protocol] if listenFunc == nil { - return nil, errors.New(protocol, " unix listener not registered.").AtError() + return nil, errors.New(protocol, " unix listener not registered.") } listener, err := listenFunc(ctx, address, net.Port(0), settings, handler) if err != nil { @@ -72,7 +72,7 @@ func ListenTCP(ctx context.Context, address net.Address, port net.Port, settings protocol := settings.ProtocolName listenFunc := transportListenerCache[protocol] if listenFunc == nil { - return nil, errors.New(protocol, " listener not registered.").AtError() + return nil, errors.New(protocol, " listener not registered.") } listener, err := listenFunc(ctx, address, port, settings, handler) if err != nil { diff --git a/transport/internet/tls/config.go b/transport/internet/tls/config.go index 9038cd281..f33e829c1 100644 --- a/transport/internet/tls/config.go +++ b/transport/internet/tls/config.go @@ -39,7 +39,7 @@ func (c *Config) loadSelfCertPool() (*x509.CertPool, error) { root := x509.NewCertPool() for _, cert := range c.Certificate { if !root.AppendCertsFromPEM(cert.Certificate) { - return nil, errors.New("failed to append cert").AtWarning() + return nil, errors.New("failed to append cert") } } return root, nil diff --git a/transport/internet/tls/config_other.go b/transport/internet/tls/config_other.go index efd18c933..994723bfe 100644 --- a/transport/internet/tls/config_other.go +++ b/transport/internet/tls/config_other.go @@ -44,11 +44,11 @@ func (c *Config) getCertPool() (*x509.CertPool, error) { pool, err := x509.SystemCertPool() if err != nil { - return nil, errors.New("system root").AtWarning().Base(err) + return nil, errors.New("system root").Base(err) } for _, cert := range c.Certificate { if !pool.AppendCertsFromPEM(cert.Certificate) { - return nil, errors.New("append cert to root").AtWarning().Base(err) + return nil, errors.New("append cert to root").Base(err) } } return pool, nil