diff --git a/.vscode/settings.json b/.vscode/settings.json index 16528e121..c633e79cc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,7 +10,8 @@ "--disable=gas", "--disable=gocyclo", "--disable=gosec", - "--disable=interfacer" + "--disable=interfacer", + "--deadline=5m" ], "go.formatTool": "goimports", diff --git a/app/commander/commander.go b/app/commander/commander.go index 41075bb09..9461e73a3 100644 --- a/app/commander/commander.go +++ b/app/commander/commander.go @@ -30,9 +30,9 @@ func NewCommander(ctx context.Context, config *Config) (*Commander, error) { tag: config.Tag, } - core.RequireFeatures(ctx, func(om outbound.Manager) { + common.Must(core.RequireFeatures(ctx, func(om outbound.Manager) { c.ohm = om - }) + })) for _, rawConfig := range config.Service { config, err := rawConfig.GetInstance() diff --git a/app/dns/hosts.go b/app/dns/hosts.go index 70e592993..c4dcdbc70 100644 --- a/app/dns/hosts.go +++ b/app/dns/hosts.go @@ -7,6 +7,7 @@ import ( "v2ray.com/core/features" ) +// StaticHosts represents static domain-ip mapping in DNS server. type StaticHosts struct { ips map[uint32][]net.IP matchers *strmatcher.MatcherGroup @@ -31,6 +32,7 @@ func toStrMatcher(t DomainMatchingType, domain string) (strmatcher.Matcher, erro return matcher, nil } +// NewStaticHosts creates a new StaticHosts instance. func NewStaticHosts(hosts []*Config_HostMapping, legacy map[string]*net.IPOrDomain) (*StaticHosts, error) { g := new(strmatcher.MatcherGroup) sh := &StaticHosts{ @@ -71,6 +73,7 @@ func NewStaticHosts(hosts []*Config_HostMapping, legacy map[string]*net.IPOrDoma return sh, nil } +// LookupIP returns IP address for the given domain, if exists in this StaticHosts. func (h *StaticHosts) LookupIP(domain string) []net.IP { id := h.matchers.Match(domain) if id == 0 { diff --git a/app/dns/server.go b/app/dns/server.go index 70de0e0b4..c4e1bd274 100644 --- a/app/dns/server.go +++ b/app/dns/server.go @@ -16,6 +16,7 @@ import ( "v2ray.com/core/features/routing" ) +// Server is a DNS rely server. type Server struct { sync.Mutex hosts *StaticHosts @@ -25,6 +26,7 @@ type Server struct { domainIndexMap map[uint32]uint32 } +// New creates a new DNS server with given configuration. func New(ctx context.Context, config *Config) (*Server, error) { server := &Server{ servers: make([]NameServerInterface, 0, len(config.NameServers)+len(config.NameServer)), @@ -55,9 +57,9 @@ func New(ctx context.Context, config *Config) (*Server, error) { idx := len(server.servers) server.servers = append(server.servers, nil) - core.RequireFeatures(ctx, func(d routing.Dispatcher) { + common.Must(core.RequireFeatures(ctx, func(d routing.Dispatcher) { server.servers[idx] = NewClassicNameServer(dest, d, server.clientIP) - }) + })) } } return len(server.servers) - 1 diff --git a/app/proxyman/command/command.go b/app/proxyman/command/command.go index aef371ae4..010a6ff9a 100755 --- a/app/proxyman/command/command.go +++ b/app/proxyman/command/command.go @@ -131,10 +131,10 @@ func (s *service) Register(server *grpc.Server) { hs := &handlerServer{ s: s.v, } - s.v.RequireFeatures(func(im inbound.Manager, om outbound.Manager) { + common.Must(s.v.RequireFeatures(func(im inbound.Manager, om outbound.Manager) { hs.ihm = im hs.ohm = om - }) + })) RegisterHandlerServiceServer(server, hs) } diff --git a/app/proxyman/outbound/outbound.go b/app/proxyman/outbound/outbound.go index 25a0aee74..5cf838c9b 100644 --- a/app/proxyman/outbound/outbound.go +++ b/app/proxyman/outbound/outbound.go @@ -135,6 +135,7 @@ func (m *Manager) RemoveHandler(ctx context.Context, tag string) error { return nil } +// Select implements outbound.HandlerSelector. func (m *Manager) Select(selectors []string) []string { m.access.RLock() defer m.access.RUnlock() diff --git a/app/reverse/bridge.go b/app/reverse/bridge.go index 10268f1c3..f823977c8 100644 --- a/app/reverse/bridge.go +++ b/app/reverse/bridge.go @@ -14,6 +14,7 @@ import ( "v2ray.com/core/transport/pipe" ) +// Bridge is a component in reverse proxy, that relays connections from Portal to local address. type Bridge struct { dispatcher routing.Dispatcher tag string @@ -22,6 +23,7 @@ type Bridge struct { monitorTask *task.Periodic } +// NewBridge creates a new Bridge instance. func NewBridge(config *BridgeConfig, dispatcher routing.Dispatcher) (*Bridge, error) { if len(config.Tag) == 0 { return nil, newError("bridge tag is empty") diff --git a/app/reverse/portal.go b/app/reverse/portal.go index 22b6ecb03..fb5f397ec 100644 --- a/app/reverse/portal.go +++ b/app/reverse/portal.go @@ -61,13 +61,13 @@ func (p *Portal) Close() error { return p.ohm.RemoveHandler(context.Background(), p.tag) } -func (s *Portal) HandleConnection(ctx context.Context, link *transport.Link) error { +func (p *Portal) HandleConnection(ctx context.Context, link *transport.Link) error { outboundMeta := session.OutboundFromContext(ctx) if outboundMeta == nil { return newError("outbound metadata not found").AtError() } - if isDomain(outboundMeta.Target, s.domain) { + if isDomain(outboundMeta.Target, p.domain) { muxClient, err := mux.NewClientWorker(*link, mux.ClientStrategy{}) if err != nil { return newError("failed to create mux client worker").Base(err).AtWarning() @@ -78,11 +78,11 @@ func (s *Portal) HandleConnection(ctx context.Context, link *transport.Link) err return newError("failed to create portal worker").Base(err) } - s.picker.AddWorker(worker) + p.picker.AddWorker(worker) return nil } - return s.client.Dispatch(ctx, link) + return p.client.Dispatch(ctx, link) } type Outbound struct { diff --git a/common/buf/readv_reader.go b/common/buf/readv_reader.go index 926a1c7fb..cca1a7c33 100644 --- a/common/buf/readv_reader.go +++ b/common/buf/readv_reader.go @@ -99,7 +99,7 @@ func (r *ReadVReader) readMulti() (MultiBuffer, error) { if nBytes <= 0 { break } - end := int32(nBytes) + end := nBytes if end > Size { end = Size } diff --git a/common/serial/typed_message.go b/common/serial/typed_message.go index 6f78506bb..e59d1d0da 100644 --- a/common/serial/typed_message.go +++ b/common/serial/typed_message.go @@ -7,7 +7,7 @@ import ( "github.com/golang/protobuf/proto" ) -// ToTypeMessage converts a proto Message into TypedMessage. +// ToTypedMessage converts a proto Message into TypedMessage. func ToTypedMessage(message proto.Message) *TypedMessage { if message == nil { return nil diff --git a/proxy/vmess/encoding/client.go b/proxy/vmess/encoding/client.go index 0df463ecc..c35f5e210 100644 --- a/proxy/vmess/encoding/client.go +++ b/proxy/vmess/encoding/client.go @@ -21,10 +21,10 @@ import ( ) func hashTimestamp(h hash.Hash, t protocol.Timestamp) []byte { - serial.WriteUint64(h, uint64(t)) - serial.WriteUint64(h, uint64(t)) - serial.WriteUint64(h, uint64(t)) - serial.WriteUint64(h, uint64(t)) + common.Must2(serial.WriteUint64(h, uint64(t))) + common.Must2(serial.WriteUint64(h, uint64(t))) + common.Must2(serial.WriteUint64(h, uint64(t))) + common.Must2(serial.WriteUint64(h, uint64(t))) return h.Sum(nil) }