世界 3 年之前
父节点
当前提交
fc6ae4d4e7

+ 2 - 0
.github/linters/.golangci.yml

@@ -2,6 +2,8 @@ run:
   timeout: 5m
   skip-files:
     - generated.*
+    - .*_test.go
+    - proxy/vlite/*
 
 issues:
   new: true

+ 3 - 1
app/log/command/command.go

@@ -4,11 +4,13 @@ package command
 
 import (
 	"context"
+
+	grpc "google.golang.org/grpc"
+
 	core "github.com/v2fly/v2ray-core/v5"
 	"github.com/v2fly/v2ray-core/v5/app/log"
 	"github.com/v2fly/v2ray-core/v5/common"
 	cmlog "github.com/v2fly/v2ray-core/v5/common/log"
-	grpc "google.golang.org/grpc"
 )
 
 // LoggerServer is the implemention of LoggerService

+ 55 - 55
app/router/strategy_leastload_test.go

@@ -7,64 +7,64 @@ import (
 /*
 Split into multiple package, need to be tested separately
 
-func TestSelectLeastLoad(t *testing.T) {
-	settings := &StrategyLeastLoadConfig{
-		HealthCheck: &HealthPingConfig{
-			SamplingCount: 10,
-		},
-		Expected: 1,
-		MaxRTT:   int64(time.Millisecond * time.Duration(800)),
-	}
-	strategy := NewLeastLoadStrategy(settings)
-	// std 40
-	strategy.PutResult("a", time.Millisecond*time.Duration(60))
-	strategy.PutResult("a", time.Millisecond*time.Duration(140))
-	strategy.PutResult("a", time.Millisecond*time.Duration(60))
-	strategy.PutResult("a", time.Millisecond*time.Duration(140))
-	// std 60
-	strategy.PutResult("b", time.Millisecond*time.Duration(40))
-	strategy.PutResult("b", time.Millisecond*time.Duration(160))
-	strategy.PutResult("b", time.Millisecond*time.Duration(40))
-	strategy.PutResult("b", time.Millisecond*time.Duration(160))
-	// std 0, but >MaxRTT
-	strategy.PutResult("c", time.Millisecond*time.Duration(1000))
-	strategy.PutResult("c", time.Millisecond*time.Duration(1000))
-	strategy.PutResult("c", time.Millisecond*time.Duration(1000))
-	strategy.PutResult("c", time.Millisecond*time.Duration(1000))
-	expected := "a"
-	actual := strategy.SelectAndPick([]string{"a", "b", "c", "untested"})
-	if actual != expected {
-		t.Errorf("expected: %v, actual: %v", expected, actual)
+	func TestSelectLeastLoad(t *testing.T) {
+		settings := &StrategyLeastLoadConfig{
+			HealthCheck: &HealthPingConfig{
+				SamplingCount: 10,
+			},
+			Expected: 1,
+			MaxRTT:   int64(time.Millisecond * time.Duration(800)),
+		}
+		strategy := NewLeastLoadStrategy(settings)
+		// std 40
+		strategy.PutResult("a", time.Millisecond*time.Duration(60))
+		strategy.PutResult("a", time.Millisecond*time.Duration(140))
+		strategy.PutResult("a", time.Millisecond*time.Duration(60))
+		strategy.PutResult("a", time.Millisecond*time.Duration(140))
+		// std 60
+		strategy.PutResult("b", time.Millisecond*time.Duration(40))
+		strategy.PutResult("b", time.Millisecond*time.Duration(160))
+		strategy.PutResult("b", time.Millisecond*time.Duration(40))
+		strategy.PutResult("b", time.Millisecond*time.Duration(160))
+		// std 0, but >MaxRTT
+		strategy.PutResult("c", time.Millisecond*time.Duration(1000))
+		strategy.PutResult("c", time.Millisecond*time.Duration(1000))
+		strategy.PutResult("c", time.Millisecond*time.Duration(1000))
+		strategy.PutResult("c", time.Millisecond*time.Duration(1000))
+		expected := "a"
+		actual := strategy.SelectAndPick([]string{"a", "b", "c", "untested"})
+		if actual != expected {
+			t.Errorf("expected: %v, actual: %v", expected, actual)
+		}
 	}
-}
 
-func TestSelectLeastLoadWithCost(t *testing.T) {
-	settings := &StrategyLeastLoadConfig{
-		HealthCheck: &HealthPingConfig{
-			SamplingCount: 10,
-		},
-		Costs: []*StrategyWeight{
-			{Match: "a", Value: 9},
-		},
-		Expected: 1,
-	}
-	strategy := NewLeastLoadStrategy(settings, nil)
-	// std 40, std+c 120
-	strategy.PutResult("a", time.Millisecond*time.Duration(60))
-	strategy.PutResult("a", time.Millisecond*time.Duration(140))
-	strategy.PutResult("a", time.Millisecond*time.Duration(60))
-	strategy.PutResult("a", time.Millisecond*time.Duration(140))
-	// std 60
-	strategy.PutResult("b", time.Millisecond*time.Duration(40))
-	strategy.PutResult("b", time.Millisecond*time.Duration(160))
-	strategy.PutResult("b", time.Millisecond*time.Duration(40))
-	strategy.PutResult("b", time.Millisecond*time.Duration(160))
-	expected := "b"
-	actual := strategy.SelectAndPick([]string{"a", "b", "untested"})
-	if actual != expected {
-		t.Errorf("expected: %v, actual: %v", expected, actual)
+	func TestSelectLeastLoadWithCost(t *testing.T) {
+		settings := &StrategyLeastLoadConfig{
+			HealthCheck: &HealthPingConfig{
+				SamplingCount: 10,
+			},
+			Costs: []*StrategyWeight{
+				{Match: "a", Value: 9},
+			},
+			Expected: 1,
+		}
+		strategy := NewLeastLoadStrategy(settings, nil)
+		// std 40, std+c 120
+		strategy.PutResult("a", time.Millisecond*time.Duration(60))
+		strategy.PutResult("a", time.Millisecond*time.Duration(140))
+		strategy.PutResult("a", time.Millisecond*time.Duration(60))
+		strategy.PutResult("a", time.Millisecond*time.Duration(140))
+		// std 60
+		strategy.PutResult("b", time.Millisecond*time.Duration(40))
+		strategy.PutResult("b", time.Millisecond*time.Duration(160))
+		strategy.PutResult("b", time.Millisecond*time.Duration(40))
+		strategy.PutResult("b", time.Millisecond*time.Duration(160))
+		expected := "b"
+		actual := strategy.SelectAndPick([]string{"a", "b", "untested"})
+		if actual != expected {
+			t.Errorf("expected: %v, actual: %v", expected, actual)
+		}
 	}
-}
 */
 func TestSelectLeastExpected(t *testing.T) {
 	strategy := &LeastLoadStrategy{

+ 1 - 1
common/environment/envctx/env.go

@@ -7,7 +7,7 @@ const (
 )
 
 func ContextWithEnvironment(ctx context.Context, environment interface{}) context.Context {
-	return context.WithValue(ctx, environmentKey, environment) //nolint: revive
+	return context.WithValue(ctx, environmentKey, environment) //nolint: revive,staticcheck
 }
 
 func EnvironmentFromContext(ctx context.Context) interface{} {

+ 3 - 3
common/strmatcher/matchergroup_ac_automation.go

@@ -216,9 +216,9 @@ func (ac *ACAutomatonMatcherGroup) MatchAny(input string) bool {
 }
 
 // Letter-Digit-Hyphen (LDH) subset (https://tools.ietf.org/html/rfc952):
-//   * Letters A to Z (no distinction is made between uppercase and lowercase)
-//   * Digits 0 to 9
-//   * Hyphens(-) and Periods(.)
+//   - Letters A to Z (no distinction is made between uppercase and lowercase)
+//   - Digits 0 to 9
+//   - Hyphens(-) and Periods(.)
 //
 // If for future the strmatcher are used for other scenarios than domain,
 // we could add a new Charset interface to represent variable charsets.

+ 6 - 6
common/strmatcher/strmatcher.go

@@ -15,7 +15,7 @@ const (
 )
 
 // Matcher is the interface to determine a string matches a pattern.
-//   * This is a basic matcher to represent a certain kind of match semantic(full, substr, domain or regex).
+//   - This is a basic matcher to represent a certain kind of match semantic(full, substr, domain or regex).
 type Matcher interface {
 	// Type returns the matcher's type.
 	Type() Type
@@ -34,8 +34,8 @@ type Matcher interface {
 
 // MatcherGroup is an advanced type of matcher to accept a bunch of basic Matchers (of certain type, not all matcher types).
 // For example:
-//   * FullMatcherGroup accepts FullMatcher and uses a hash table to facilitate lookup.
-//   * DomainMatcherGroup accepts DomainMatcher and uses a trie to optimize both memory consumption and lookup speed.
+//   - FullMatcherGroup accepts FullMatcher and uses a hash table to facilitate lookup.
+//   - DomainMatcherGroup accepts DomainMatcher and uses a trie to optimize both memory consumption and lookup speed.
 type MatcherGroup interface {
 	// Match returns all matched matchers with their corresponding values.
 	Match(input string) []uint32
@@ -46,9 +46,9 @@ type MatcherGroup interface {
 
 // IndexMatcher is a general type of matcher thats accepts all kinds of basic matchers.
 // It should:
-//   * Accept all Matcher types with no exception.
-//   * Optimize string matching with a combination of MatcherGroups.
-//   * Obey certain priority order specification when returning matched Matchers.
+//   - Accept all Matcher types with no exception.
+//   - Optimize string matching with a combination of MatcherGroups.
+//   - Obey certain priority order specification when returning matched Matchers.
 type IndexMatcher interface {
 	// Size returns number of matchers added to IndexMatcher.
 	Size() uint32

+ 4 - 3
context.go

@@ -26,7 +26,8 @@ func MustFromContext(ctx context.Context) *Instance {
 	return v
 }
 
-/* toContext returns ctx from the given context, or creates an Instance if the context doesn't find that.
+/*
+	toContext returns ctx from the given context, or creates an Instance if the context doesn't find that.
 
 It is unsupported to use this function to create a context that is suitable to invoke V2Ray's internal component
 in third party code, you shouldn't use //go:linkname to alias of this function into your own package and
@@ -34,7 +35,6 @@ use this function in your third party code.
 
 For third party code, usage enabled by creating a context to interact with V2Ray's internal component is unsupported,
 and may break at any time.
-
 */
 func toContext(ctx context.Context, v *Instance) context.Context {
 	if FromContext(ctx) != v {
@@ -43,7 +43,8 @@ func toContext(ctx context.Context, v *Instance) context.Context {
 	return ctx
 }
 
-/*ToBackgroundDetachedContext create a detached context from another context
+/*
+ToBackgroundDetachedContext create a detached context from another context
 Internal API
 */
 func ToBackgroundDetachedContext(ctx context.Context) context.Context {

+ 0 - 1
infra/conf/merge/merge.go

@@ -11,7 +11,6 @@ Merge Rules:
 - Simple values (string, number, boolean) are overwritten, others are merged
 - Elements with same "tag" (or "_tag") in an array will be merged
 - Add "_priority" property to array elements will help sort the
-
 */
 package merge
 

+ 1 - 1
infra/conf/v5cfg/common.go

@@ -14,7 +14,7 @@ import (
 func loadHeterogeneousConfigFromRawJSON(interfaceType, name string, rawJSON json.RawMessage) (proto.Message, error) {
 	fsdef := envimpl.NewDefaultFileSystemDefaultImpl()
 	ctx := envctx.ContextWithEnvironment(context.TODO(), fsdef)
-	if rawJSON == nil || len(rawJSON) == 0 {
+	if len(rawJSON) == 0 {
 		rawJSON = []byte("{}")
 	}
 	return registry.LoadImplementationByAlias(ctx, interfaceType, name, []byte(rawJSON))

+ 2 - 1
proxy/vmess/outbound/outbound.go

@@ -6,6 +6,8 @@ import (
 	"context"
 	"crypto/hmac"
 	"crypto/sha256"
+	"hash/crc64"
+
 	core "github.com/v2fly/v2ray-core/v5"
 	"github.com/v2fly/v2ray-core/v5/common"
 	"github.com/v2fly/v2ray-core/v5/common/buf"
@@ -23,7 +25,6 @@ import (
 	"github.com/v2fly/v2ray-core/v5/proxy/vmess/encoding"
 	"github.com/v2fly/v2ray-core/v5/transport"
 	"github.com/v2fly/v2ray-core/v5/transport/internet"
-	"hash/crc64"
 )
 
 // Handler is an outbound connection handler for VMess protocol.

+ 3 - 1
proxy/vmess/validator.go

@@ -252,7 +252,9 @@ func (v *TimedUserValidator) BurnTaintFuse(userHash []byte) error {
 	return ErrNotFound
 }
 
-/* ShouldShowLegacyWarn will return whether a Legacy Warning should be shown
+/*
+	ShouldShowLegacyWarn will return whether a Legacy Warning should be shown
+
 Not guaranteed to only return true once for every inbound, but it is okay.
 */
 func (v *TimedUserValidator) ShouldShowLegacyWarn() bool {

+ 3 - 2
transport/internet/kcp/kcp.go

@@ -1,8 +1,9 @@
 // Package kcp - A Fast and Reliable ARQ Protocol
 //
 // Acknowledgement:
-//    skywind3000@github for inventing the KCP protocol
-//    xtaci@github for translating to Golang
+//
+//	skywind3000@github for inventing the KCP protocol
+//	xtaci@github for translating to Golang
 package kcp
 
 //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen

+ 8 - 4
transport/internet/system_dns_android.go

@@ -10,13 +10,17 @@ import (
 
 const SystemDNS = "8.8.8.8:53"
 
-/* DNSResolverFunc
-   This is a temporary API and is subject to removal at any time.
+/*
+DNSResolverFunc
+
+	This is a temporary API and is subject to removal at any time.
 */
 type DNSResolverFunc func() *net.Resolver
 
-/* NewDNSResolver
-   This is a temporary API and is subject to removal at any time.
+/*
+NewDNSResolver
+
+	This is a temporary API and is subject to removal at any time.
 */
 var NewDNSResolver DNSResolverFunc = func() *net.Resolver {
 	return &net.Resolver{

+ 2 - 1
transport/internet/websocket/ws.go

@@ -1,4 +1,5 @@
-/*Package websocket implements Websocket transport
+/*
+Package websocket implements Websocket transport
 
 Websocket transport implements an HTTP(S) compliable, surveillance proof transport method with plausible deniability.
 */