Merge pull request #260 from 9seconds/go118-v1

Support of Go 1.18 for v1
This commit is contained in:
Sergey Arkhipov
2022-03-19 15:10:20 +03:00
committed by GitHub
38 changed files with 115 additions and 84 deletions
+3 -6
View File
@@ -30,10 +30,7 @@ jobs:
strategy:
matrix:
go_version:
- ~1.14
- ~1.15
- ~1.16
- ^1.17
- ^1.18
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -73,12 +70,12 @@ jobs:
- name: Run linter
uses: golangci/golangci-lint-action@v2
with:
version: v1.42.0
version: v1.45.0
docker:
name: Docker
runs-on: ubuntu-latest
timeout-minutes: 15
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v2
+1 -2
View File
@@ -3,11 +3,10 @@ concurrency = 4
deadline = "2m"
tests = true
skip-dirs = ["vendor"]
skip-files = ["version.go"]
[output]
format = "colored-line-number"
[linters]
enable-all = true
disable = ["gochecknoglobals", "gas", "gomnd", "goerr113", "exhaustivestruct"]
disable = ["thelper", "ireturn", "varnamelen", "gochecknoglobals", "gas", "goerr113", "exhaustivestruct", "containedctx"]
+1 -1
View File
@@ -1,7 +1,7 @@
###############################################################################
# BUILD STAGE
FROM golang:1.17-alpine AS build
FROM golang:1.18-alpine AS build
RUN set -x \
&& apk --no-cache --update add \
+10 -2
View File
@@ -4,7 +4,7 @@ APP_NAME := $(IMAGE_NAME)
CC_BINARIES := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
GOLANGCI_LINT_VERSION := v1.42.0
GOLANGCI_LINT_VERSION := v1.45.0
VERSION_GO := $(shell go version)
VERSION_DATE := $(shell date -Ru)
@@ -73,8 +73,12 @@ docker:
doc:
@$(GOTOOL) godoc -http 0.0.0.0:10000
.PHONY: fmt
fmt:
@$(GOTOOL) gofumpt -w -extra "$(ROOT_DIR)"
.PHONY: install-tools
install-tools: install-tools-lint install-tools-godoc
install-tools: install-tools-lint install-tools-godoc install-tools-gofumpt
.PHONY: install-tools-lint
install-tools-lint:
@@ -87,6 +91,10 @@ install-tools-godoc:
@mkdir -p "$(GOBIN)" || true && \
$(GOTOOL) go get -u golang.org/x/tools/cmd/godoc
.PHONY: install-tools-gofumpt
install-tools-gofumpt: .bin
@$(GOTOOL) go install mvdan.cc/gofumpt@latest
.PHONY: update-deps
upgrade-deps:
$go get -u && go mod tidy
+6 -6
View File
@@ -146,7 +146,7 @@ func (c *Config) adjustProxyValue(value int) int {
fvalue := float64(value)
newValue := fvalue * 2 * math.Log(float64(c.MultiplexPerConnection))
newValue := fvalue * 2 * math.Log(float64(c.MultiplexPerConnection)) // nolint: gomnd
newValue = math.Ceil(newValue)
newValue = math.Max(fvalue, newValue)
@@ -208,15 +208,15 @@ func Init(options ...Opt) error { // nolint: gocyclo, funlen, cyclop
case OptionTypeStatsdTags:
C.StatsdTags = opt.Value.(map[string]string) // nolint: forcetypeassert
case OptionTypeWriteBufferSize:
C.WriteBuffer = int(opt.Value.(units.Base2Bytes))
C.WriteBuffer = int(opt.Value.(units.Base2Bytes)) // nolint: forcetypeassert
case OptionTypeReadBufferSize:
C.ReadBuffer = int(opt.Value.(units.Base2Bytes))
C.ReadBuffer = int(opt.Value.(units.Base2Bytes)) // nolint: forcetypeassert
case OptionTypeCloakPort:
C.CloakPort = int(opt.Value.(uint16))
C.CloakPort = int(opt.Value.(uint16)) // nolint: forcetypeassert
case OptionTypeAntiReplayMaxSize:
C.AntiReplayMaxSize = int(opt.Value.(units.Base2Bytes))
C.AntiReplayMaxSize = int(opt.Value.(units.Base2Bytes)) // nolint: forcetypeassert
case OptionTypeMultiplexPerConnection:
C.MultiplexPerConnection = int(opt.Value.(uint))
C.MultiplexPerConnection = int(opt.Value.(uint)) // nolint: forcetypeassert
case OptionTypeNTPServers:
C.NTPServers = opt.Value.([]string) // nolint: forcetypeassert
if len(C.NTPServers) == 0 {
+1 -1
View File
@@ -26,7 +26,7 @@ func cloak(one, another io.ReadWriteCloser) {
another = rwc.NewPing(ctx, another, channelPing)
wg := &sync.WaitGroup{}
wg.Add(2)
wg.Add(2) // nolint: gomnd
go cloakPipe(one, another, wg)
+7 -4
View File
@@ -13,10 +13,10 @@ require (
github.com/smira/go-statsd v1.3.2
go.uber.org/multierr v1.7.0 // indirect
go.uber.org/zap v1.19.0
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
golang.org/x/net v0.0.0-20210525063256-abc453219eb5 // indirect
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40
golang.org/x/tools v0.1.0 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
golang.org/x/sys v0.0.0-20220318055525-2edf467146b5
golang.org/x/tools v0.1.10 // indirect
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6
)
@@ -28,5 +28,8 @@ require (
github.com/golang/protobuf v1.5.2 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/yuin/goldmark v1.4.10 // indirect
go.uber.org/atomic v1.9.0 // indirect
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
)
+12
View File
@@ -206,6 +206,8 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.10 h1:+WgKGo8CQrlMTRJpGCFCyNddOhW801TKC2QijVV9QVg=
github.com/yuin/goldmark v1.4.10/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -229,6 +231,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -260,6 +264,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -291,6 +297,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -347,6 +355,8 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220318055525-2edf467146b5 h1:saXMvIOKvRFwbOMicHXr0B1uwoxq9dGmLe5ExMES6c4=
golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -401,6 +411,8 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+1 -1
View File
@@ -18,7 +18,7 @@ func (h *hub) Register(req *protocol.TelegramRequest) (*ProxyConn, error) {
}
func (h *hub) getMux(req *protocol.TelegramRequest) *mux {
key := 32767 + int32(req.ClientProtocol.DC()) + 100000*int32(req.ClientProtocol.ConnectionProtocol())
key := 32767 + int32(req.ClientProtocol.DC()) + 100000*int32(req.ClientProtocol.ConnectionProtocol()) // nolint: gomnd
h.mutex.RLock()
m, ok := h.muxes[key]
+1 -1
View File
@@ -41,7 +41,7 @@ func (r *HandshakeResponse) Valid() error {
// NewHandshakeResponse constructs new handshake response from the given
// data.
func NewHandshakeResponse(data []byte) (*HandshakeResponse, error) {
if len(data) != 32 {
if len(data) != 32 { // nolint: gomnd
return nil, fmt.Errorf("incorrect handshake response length %d", len(data))
}
+5 -5
View File
@@ -29,17 +29,17 @@ func (r *NonceRequest) Bytes() []byte {
// NewNonceRequest builds new none request based on proxy secret.
func NewNonceRequest(proxySecret []byte) (*NonceRequest, error) {
nonce := make([]byte, 16)
keySelector := make([]byte, 4)
cryptoTS := make([]byte, 4)
nonce := make([]byte, 16) // nolint: gomnd
keySelector := make([]byte, 4) // nolint: gomnd
cryptoTS := make([]byte, 4) // nolint: gomnd
if _, err := rand.Read(nonce); err != nil {
return nil, fmt.Errorf("cannot generate nonce: %w", err)
}
copy(keySelector, proxySecret)
timestamp := time.Now().Truncate(time.Second).Unix() % 4294967296 // 256 ^ 4 - do not know how to name
// 256 ^ 4 - do not know how to name
timestamp := time.Now().Truncate(time.Second).Unix() % 4294967296 // nolint: gomnd
binary.LittleEndian.PutUint32(cryptoTS, uint32(timestamp))
return &NonceRequest{
+1 -1
View File
@@ -44,7 +44,7 @@ func (r *NonceResponse) Valid(req *NonceRequest) error {
// NewNonceResponse build new nonce response based on the given data.
func NewNonceResponse(data []byte) (*NonceResponse, error) {
if len(data) != 32 {
if len(data) != 32 { // nolint: gomnd
return nil, fmt.Errorf("unexpected message length %d", len(data))
}
+2 -2
View File
@@ -21,14 +21,14 @@ const (
var ProxyRequestFlagsEncryptedPrefix [8]byte
func (r ProxyRequestFlags) Bytes() []byte {
converted := make([]byte, 4)
converted := make([]byte, 4) // nolint: gomnd
binary.LittleEndian.PutUint32(converted, uint32(r))
return converted
}
func (r ProxyRequestFlags) String() string {
flags := make([]string, 0, 7)
flags := make([]string, 0, 7) // nolint: gomnd
if r&ProxyRequestFlagsHasAdTag != 0 {
flags = append(flags, "HAS_AD_TAG")
+1 -1
View File
@@ -24,7 +24,7 @@ type ProxyResponse struct {
func ParseProxyResponse(packet conntypes.Packet) (*ProxyResponse, error) {
var response ProxyResponse
if len(packet) < 4 {
if len(packet) < 4 { // nolint: gomnd
return nil, fmt.Errorf("incorrect packet length: %d", len(packet))
}
+5 -5
View File
@@ -47,17 +47,17 @@ func generateFrame(cp protocol.ClientProtocol) (fm Frame) {
continue
}
if data[0] == 0xef {
if data[0] == 0xef { // nolint: gomnd
continue
}
val := (uint32(data[3]) << 24) | (uint32(data[2]) << 16) | (uint32(data[1]) << 8) | uint32(data[0])
if val == 0x44414548 || val == 0x54534f50 || val == 0x20544547 || val == 0x4954504f || val == 0xeeeeeeee {
val := (uint32(data[3]) << 24) | (uint32(data[2]) << 16) | (uint32(data[1]) << 8) | uint32(data[0]) // nolint: gomnd, lll
if val == 0x44414548 || val == 0x54534f50 || val == 0x20544547 || val == 0x4954504f || val == 0xeeeeeeee { // nolint: lll
continue
}
val = (uint32(data[7]) << 24) | (uint32(data[6]) << 16) | (uint32(data[5]) << 8) | uint32(data[4])
if val == 0x00000000 {
val = (uint32(data[7]) << 24) | (uint32(data[6]) << 16) | (uint32(data[5]) << 8) | uint32(data[4]) // nolint: gomnd
if val == 0x00000000 { // nolint: gomnd
continue
}
+1 -1
View File
@@ -20,7 +20,7 @@ func directConnection(request *protocol.TelegramRequest) error {
defer telegramConnRaw.Close()
wg := &sync.WaitGroup{}
wg.Add(2)
wg.Add(2) // nolint: gomnd
go directPipe(telegramConnRaw, request.ClientConn, wg, request.Logger)
+3 -2
View File
@@ -32,7 +32,7 @@ func middleConnection(request *protocol.TelegramRequest) {
}
wg := &sync.WaitGroup{}
wg.Add(2)
wg.Add(2) // nolint: gomnd
go middlePipe(telegramConn, clientConn, wg, request.Logger)
@@ -44,7 +44,8 @@ func middleConnection(request *protocol.TelegramRequest) {
func middlePipe(dst conntypes.PacketAckWriteCloser,
src conntypes.PacketAckReadCloser,
wg *sync.WaitGroup,
logger *zap.SugaredLogger) {
logger *zap.SugaredLogger,
) {
defer func() {
dst.Close()
src.Close()
+1 -1
View File
@@ -32,7 +32,7 @@ func Init(ctx context.Context) error {
go func() {
<-ctx.Done()
srv.Shutdown(context.Background()) // nolint: errcheck
srv.Shutdown(context.Background()) // nolint: errcheck, contextcheck
}()
Stats = multiStats(stats)
+2 -1
View File
@@ -39,7 +39,8 @@ func (s *statsPrometheus) ClientDisconnected(connectionType conntypes.Connection
func (s *statsPrometheus) changeConnections(connectionType conntypes.ConnectionType,
addr *net.TCPAddr,
increment float64) {
increment float64,
) {
labels := [...]string{
"intermediate",
"ipv4",
+3 -3
View File
@@ -83,7 +83,7 @@ func (s *statsStatsd) ClientDisconnected(connectionType conntypes.ConnectionType
}
func (s *statsStatsd) changeConnections(connectionType conntypes.ConnectionType, addr *net.TCPAddr, increment int64) {
tags := make([]*statsStatsdTag, 0, 2)
tags := make([]*statsStatsdTag, 0, 2) // nolint: gomnd
switch connectionType {
case conntypes.ConnectionTypeAbridged:
@@ -194,8 +194,8 @@ func newStatsStatsd() Interface {
return &statsStatsd{
seen: make(map[string]struct{}),
client: statsd.NewClient(config.C.StatsdAddr.String(),
statsd.SendLoopCount(2),
statsd.ReconnectInterval(10*time.Second),
statsd.SendLoopCount(2), // nolint: gomnd
statsd.ReconnectInterval(10*time.Second), // nolint: gomnd
statsd.Logger(logger),
statsd.MetricPrefix(prefix),
statsd.TagStyle(config.C.StatsdTagsFormat),
+4 -4
View File
@@ -74,12 +74,12 @@ func getAddresses(url string) (map[conntypes.DC][]string, conntypes.DC, error) {
}
func addressesParseProxyFor(text string) (string, conntypes.DC, error) {
chunks := addressesProxyForSplitter.Split(text, 3)
chunks := addressesProxyForSplitter.Split(text, 3) // nolint: gomnd
if len(chunks) != 3 || chunks[0] != "proxy_for" {
return "", 0, fmt.Errorf("incorrect config %s", text)
}
dc, err := strconv.ParseInt(chunks[1], 10, 16)
dc, err := strconv.ParseInt(chunks[1], 10, 16) // nolint: gomnd
if err != nil {
return "", 0, fmt.Errorf("incorrect config '%s': %w", text, err)
}
@@ -93,14 +93,14 @@ func addressesParseProxyFor(text string) (string, conntypes.DC, error) {
}
func addressesParseDefault(text string) (conntypes.DC, error) {
chunks := addressesProxyForSplitter.Split(text, 2)
chunks := addressesProxyForSplitter.Split(text, 2) // nolint: gomnd
if len(chunks) != 2 || chunks[0] != "default" {
return 0, fmt.Errorf("incorrect config '%s'", text)
}
dcString := strings.TrimRight(chunks[1], ";")
dc, err := strconv.ParseInt(dcString, 10, 16)
dc, err := strconv.ParseInt(dcString, 10, 16) // nolint: gomnd
if err != nil {
return 0, fmt.Errorf("incorrect config '%s': %w", text, err)
}
+5 -3
View File
@@ -28,7 +28,8 @@ func (b *baseTelegram) Secret() []byte {
}
func (b *baseTelegram) dial(dc conntypes.DC,
protocol conntypes.ConnectionProtocol) (conntypes.StreamReadWriteCloser, error) {
protocol conntypes.ConnectionProtocol,
) (conntypes.StreamReadWriteCloser, error) {
for _, addr := range b.getAddresses(dc, protocol) {
conn, err := b.dialer.Dial("tcp", addr)
if err != nil {
@@ -50,7 +51,7 @@ func (b *baseTelegram) dial(dc conntypes.DC,
}
func (b *baseTelegram) getAddresses(dc conntypes.DC, protocol conntypes.ConnectionProtocol) []string {
addresses := make([]string, 0, 2)
addresses := make([]string, 0, 2) // nolint: gomnd
protos := []conntypes.ConnectionProtocol{
conntypes.ConnectionProtocolIPv6,
conntypes.ConnectionProtocolIPv4,
@@ -74,7 +75,8 @@ func (b *baseTelegram) getAddresses(dc conntypes.DC, protocol conntypes.Connecti
}
func (b *baseTelegram) chooseAddress(addresses map[conntypes.DC][]string,
dc, defaultDC conntypes.DC) string {
dc, defaultDC conntypes.DC,
) string {
addrs, ok := addresses[dc]
if !ok {
addrs = addresses[defaultDC]
+2 -1
View File
@@ -29,7 +29,8 @@ type directTelegram struct {
}
func (d *directTelegram) Dial(dc conntypes.DC,
protocol conntypes.ConnectionProtocol) (conntypes.StreamReadWriteCloser, error) {
protocol conntypes.ConnectionProtocol,
) (conntypes.StreamReadWriteCloser, error) {
switch {
case dc < 0:
dc = -dc
+2 -1
View File
@@ -63,7 +63,8 @@ func (m *middleTelegram) backgroundUpdate() {
}
func (m *middleTelegram) Dial(dc conntypes.DC,
protocol conntypes.ConnectionProtocol) (conntypes.StreamReadWriteCloser, error) {
protocol conntypes.ConnectionProtocol,
) (conntypes.StreamReadWriteCloser, error) {
if dc == 0 {
dc = conntypes.DCDefaultIdx
}
+2 -2
View File
@@ -36,7 +36,7 @@ func (s ServerHello) WelcomePacket() []byte {
}
recChangeCipher.WriteBytes(buf)
hostCert := make([]byte, 1024+mrand.Intn(3092)) // nolint: gosec
hostCert := make([]byte, 1024+mrand.Intn(3092)) // nolint: gosec, gomnd
rand.Read(hostCert) // nolint: errcheck
recData := Record{
@@ -67,7 +67,7 @@ func NewServerHello(clientHello *ClientHello) *ServerHello {
copy(rv.SessionID, clientHello.SessionID)
tail := bytes.NewBuffer(CipherSuiteType_TLS_AES_128_GCM_SHA256_Bytes)
tail.WriteByte(0x00) // no compression
tail.WriteByte(0x00) // nolint: gomnd // no compression
makeTLSExtensions(tail)
rv.Tail = RawBytes(tail.Bytes())
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"net"
)
func InitTCP(conn net.Conn, readBufferSize int, writeBufferSize int) error {
func InitTCP(conn net.Conn, readBufferSize, writeBufferSize int) error {
tcpConn := conn.(*net.TCPConn) // nolint: forcetypeassert
if err := tcpConn.SetNoDelay(true); err != nil {
+1 -1
View File
@@ -6,7 +6,7 @@ func ReverseBytes(data []byte) []byte {
rv := make([]byte, dataLen)
rv[dataLen/2] = data[dataLen/2]
for i := dataLen/2 - 1; i >= 0; i-- {
for i := dataLen/2 - 1; i >= 0; i-- { // nolint: gomnd
opp := dataLen - i - 1
rv[i], rv[opp] = data[opp], data[i]
}
+2 -2
View File
@@ -3,9 +3,9 @@ package utils
type Uint24 [3]byte
func ToUint24(number uint32) Uint24 {
return Uint24{byte(number), byte(number >> 8), byte(number >> 16)}
return Uint24{byte(number), byte(number >> 8), byte(number >> 16)} // nolint: gomnd
}
func FromUint24(number Uint24) uint32 {
return uint32(number[0]) + (uint32(number[1]) << 8) + (uint32(number[2]) << 16)
return uint32(number[0]) + (uint32(number[1]) << 8) + (uint32(number[2]) << 16) // nolint: gomnd
}
+6 -6
View File
@@ -50,7 +50,7 @@ func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funl
buf.Reset()
sum.Reset()
if _, err := io.CopyN(writer, w.parent, 4); err != nil {
if _, err := io.CopyN(writer, w.parent, 4); err != nil { // nolint: gomnd
return nil, fmt.Errorf("cannot read frame padding: %w", err)
}
@@ -72,7 +72,7 @@ func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funl
buf.Reset()
if _, err := io.CopyN(writer, w.parent, int64(messageLength)-4-4); err != nil {
if _, err := io.CopyN(writer, w.parent, int64(messageLength)-4-4); err != nil { // nolint: gomnd
return nil, fmt.Errorf("cannot read the message frame: %w", err)
}
@@ -88,7 +88,7 @@ func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funl
buf.Reset()
// write to buf, not to writer. This is because we are going to fetch
// crc32 checksum.
if _, err := io.CopyN(buf, w.parent, 4); err != nil {
if _, err := io.CopyN(buf, w.parent, 4); err != nil { // nolint: gomnd
return nil, fmt.Errorf("cannot read checksum: %w", err)
}
@@ -109,7 +109,7 @@ func (w *wrapperMtprotoFrame) Read() (conntypes.Packet, error) { // nolint: funl
}
func (w *wrapperMtprotoFrame) Write(p conntypes.Packet) error {
messageLength := 4 + 4 + len(p) + 4
messageLength := 4 + 4 + len(p) + 4 // nolint: gomnd
paddingLength := (aes.BlockSize - messageLength%aes.BlockSize) % aes.BlockSize
buf := &bytes.Buffer{}
@@ -119,8 +119,8 @@ func (w *wrapperMtprotoFrame) Write(p conntypes.Packet) error {
buf.Write(p)
checksum := crc32.ChecksumIEEE(buf.Bytes())
binary.Write(buf, binary.LittleEndian, checksum) // nolint: errcheck
buf.Write(bytes.Repeat(mtprotoFramePadding, paddingLength/4))
binary.Write(buf, binary.LittleEndian, checksum) // nolint: errcheck
buf.Write(bytes.Repeat(mtprotoFramePadding, paddingLength/4)) // nolint: gomnd
w.logger.Debugw("Write MTProto frame",
"length", len(p),
+3 -3
View File
@@ -39,9 +39,9 @@ func (w *wrapperClientAbridged) Read(acks *conntypes.ConnectionAcks) (conntypes.
}
if msgLength == clientAbridgedSmallPacketLength {
buf.Grow(3)
buf.Grow(3) // nolint: gomnd
if _, err := io.CopyN(&buf, w.parent, 3); err != nil {
if _, err := io.CopyN(&buf, w.parent, 3); err != nil { // nolint: gomnd
return nil, fmt.Errorf("cannot read correct message length: %w", err)
}
@@ -75,7 +75,7 @@ func (w *wrapperClientAbridged) Write(packet conntypes.Packet, acks *conntypes.C
return nil
}
packetLength := len(packet) / 4
packetLength := len(packet) / 4 // nolint: gomnd
switch {
case packetLength < clientAbridgedSmallPacketLength:
+2 -2
View File
@@ -20,9 +20,9 @@ type wrapperClientIntermediate struct {
func (w *wrapperClientIntermediate) Read(acks *conntypes.ConnectionAcks) (conntypes.Packet, error) {
buf := bytes.Buffer{}
buf.Grow(4)
buf.Grow(4) // nolint: gomnd
if _, err := io.CopyN(&buf, w.parent, 4); err != nil {
if _, err := io.CopyN(&buf, w.parent, 4); err != nil { // nolint: gomnd
return nil, fmt.Errorf("cannot read message length: %w", err)
}
@@ -20,7 +20,7 @@ func (w *wrapperClientIntermediateSecure) Read(acks *conntypes.ConnectionAcks) (
return nil, err
}
length := len(data) - (len(data) % 4)
length := len(data) - (len(data) % 4) // nolint: gomnd
return data[:length], nil
}
@@ -35,7 +35,7 @@ func (w *wrapperClientIntermediateSecure) Write(packet conntypes.Packet, acks *c
}
buf := &bytes.Buffer{}
paddingLength := rand.Intn(4) // nolint: gosec
paddingLength := rand.Intn(4) // nolint: gosec, gomnd
buf.Grow(4 + len(packet) + paddingLength)
+1 -1
View File
@@ -42,7 +42,7 @@ func (w *wrapperProxy) Write(packet conntypes.Packet, acks *conntypes.Connection
buf.Write(rpc.ProxyRequestProxyTag)
buf.WriteByte(byte(len(config.C.AdTag)))
buf.Write(config.C.AdTag)
buf.Write(make([]byte, (4-buf.Len()%4)%4))
buf.Write(make([]byte, (4-buf.Len()%4)%4)) // nolint: gomnd
buf.Grow(len(packet))
buf.Write(packet)
+2 -1
View File
@@ -70,7 +70,8 @@ func (w *wrapperBlockCipher) RemoteAddr() *net.TCPAddr {
}
func newBlockCipher(parent conntypes.StreamReadWriteCloser,
encryptor, decryptor cipher.BlockMode) conntypes.StreamReadWriteCloser {
encryptor, decryptor cipher.BlockMode,
) conntypes.StreamReadWriteCloser {
cipher := &wrapperBlockCipher{
parent: parent,
encryptor: encryptor,
+5 -4
View File
@@ -91,10 +91,11 @@ func (w *wrapperConn) RemoteAddr() *net.TCPAddr {
func newConn(parent net.Conn,
connID conntypes.ConnID,
purpose connPurpose) conntypes.StreamReadWriteCloser {
localAddr := *parent.LocalAddr().(*net.TCPAddr)
purpose connPurpose,
) conntypes.StreamReadWriteCloser {
localAddr := *parent.LocalAddr().(*net.TCPAddr) // nolint: forcetypeassert
if parent.RemoteAddr().(*net.TCPAddr).IP.To4() != nil {
if parent.RemoteAddr().(*net.TCPAddr).IP.To4() != nil { // nolint: forcetypeassert
if config.C.PublicIPv4.IP != nil {
localAddr.IP = config.C.PublicIPv4.IP
}
@@ -117,7 +118,7 @@ func newConn(parent net.Conn,
parent: parent,
connID: connID,
logger: logger,
remoteAddr: parent.RemoteAddr().(*net.TCPAddr),
remoteAddr: parent.RemoteAddr().(*net.TCPAddr), // nolint: forcetypeassert
localAddr: &localAddr,
}
}
+2 -1
View File
@@ -84,7 +84,8 @@ func (w *wrapperCtx) RemoteAddr() *net.TCPAddr {
func NewCtx(ctx context.Context,
cancel context.CancelFunc,
parent conntypes.StreamReadWriteCloser) conntypes.StreamReadWriteCloser {
parent conntypes.StreamReadWriteCloser,
) conntypes.StreamReadWriteCloser {
return &wrapperCtx{
parent: parent,
ctx: ctx,
+4 -2
View File
@@ -26,7 +26,8 @@ var mtprotoEmptyIP = [4]byte{0x00, 0x00, 0x00, 0x00}
func NewMiddleProxyCipher(parent conntypes.StreamReadWriteCloser,
req *rpc.NonceRequest,
resp *rpc.NonceResponse,
secret []byte) conntypes.StreamReadWriteCloser {
secret []byte,
) conntypes.StreamReadWriteCloser {
localAddr := parent.LocalAddr()
remoteAddr := parent.RemoteAddr()
@@ -53,7 +54,8 @@ func mtprotoDeriveKeys(purpose mtprotoCipherPurpose,
req *rpc.NonceRequest,
resp *rpc.NonceResponse,
client, remote *net.TCPAddr,
secret []byte) ([]byte, []byte) {
secret []byte,
) ([]byte, []byte) {
message := bytes.Buffer{}
message.Write(resp.Nonce)
+2 -1
View File
@@ -84,7 +84,8 @@ func (w *wrapperObfuscated2) Close() error {
}
func NewObfuscated2(socket conntypes.StreamReadWriteCloser,
encryptor, decryptor cipher.Stream) conntypes.StreamReadWriteCloser {
encryptor, decryptor cipher.Stream,
) conntypes.StreamReadWriteCloser {
return &wrapperObfuscated2{
parent: socket,
encryptor: encryptor,