Przeglądaj źródła

Switch to golangci-lint

tags/0.11
9seconds 7 lat temu
rodzic
commit
c1b862c1e9

+ 12
- 0
.golangci.toml Wyświetl plik

@@ -0,0 +1,12 @@
1
+[run]
2
+concurrency = 4
3
+deadline = "2m"
4
+tests = true
5
+skip-dirs = ["vendor"]
6
+skip-files = ["version.go"]
7
+
8
+[output]
9
+format = "colored-line-number"
10
+
11
+[linters]
12
+enable-all = true

+ 0
- 4
.gometalinter.json Wyświetl plik

@@ -1,4 +0,0 @@
1
-{
2
-    "aggregate": true,
3
-    "vendor": true
4
-}

+ 2
- 0
.travis.yml Wyświetl plik

@@ -10,6 +10,8 @@ go:
10 10
   - master
11 11
 
12 12
 script:
13
+  - make prepare
14
+  - make all
13 15
   - make lint
14 16
   - make test
15 17
 

+ 44
- 4
Gopkg.lock Wyświetl plik

@@ -3,74 +3,97 @@
3 3
 
4 4
 [[projects]]
5 5
   branch = "master"
6
+  digest = "1:45a787c1adea69a03a5384865b307c7a72bb28bd5844bd57679d889a726a588b"
6 7
   name = "github.com/alecthomas/template"
7 8
   packages = [
8 9
     ".",
9
-    "parse"
10
+    "parse",
10 11
   ]
12
+  pruneopts = "UT"
11 13
   revision = "a0175ee3bccc567396460bf5acd36800cb10c49c"
12 14
 
13 15
 [[projects]]
14 16
   branch = "master"
17
+  digest = "1:c198fdc381e898e8fb62b8eb62758195091c313ad18e52a3067366e1dda2fb3c"
15 18
   name = "github.com/alecthomas/units"
16 19
   packages = ["."]
20
+  pruneopts = "UT"
17 21
   revision = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a"
18 22
 
19 23
 [[projects]]
24
+  digest = "1:a8d622a8049a4aa420e1c509873bb85d4c45c5107f420d922f919bfcb8d08694"
20 25
   name = "github.com/beevik/ntp"
21 26
   packages = ["."]
27
+  pruneopts = "UT"
22 28
   revision = "62c80a04de2086884d8296004b6d74ee1846c582"
23 29
   version = "v0.2.0"
24 30
 
25 31
 [[projects]]
32
+  digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39"
26 33
   name = "github.com/davecgh/go-spew"
27 34
   packages = ["spew"]
35
+  pruneopts = "UT"
28 36
   revision = "346938d642f2ec3594ed81d874461961cd0faa76"
29 37
   version = "v1.1.0"
30 38
 
31 39
 [[projects]]
32 40
   branch = "master"
41
+  digest = "1:6f9339c912bbdda81302633ad7e99a28dfa5a639c864061f1929510a9a64aa74"
33 42
   name = "github.com/dustin/go-humanize"
34 43
   packages = ["."]
44
+  pruneopts = "UT"
35 45
   revision = "9f541cc9db5d55bce703bd99987c9d5cb8eea45e"
36 46
 
37 47
 [[projects]]
38 48
   branch = "master"
49
+  digest = "1:70107cf7ee5eb9e3c3dabe65bcb220bff22ee42e32d9b7fca988e16b8727cacc"
39 50
   name = "github.com/juju/errors"
40 51
   packages = ["."]
52
+  pruneopts = "UT"
41 53
   revision = "c7d06af17c68cd34c835053720b21f6549d9b0ee"
42 54
 
43 55
 [[projects]]
56
+  digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe"
44 57
   name = "github.com/pmezard/go-difflib"
45 58
   packages = ["difflib"]
59
+  pruneopts = "UT"
46 60
   revision = "792786c7400a136282c1664665ae0a8db921c6c2"
47 61
   version = "v1.0.0"
48 62
 
49 63
 [[projects]]
64
+  digest = "1:274f67cb6fed9588ea2521ecdac05a6d62a8c51c074c1fccc6a49a40ba80e925"
50 65
   name = "github.com/satori/go.uuid"
51 66
   packages = ["."]
67
+  pruneopts = "UT"
52 68
   revision = "f58768cc1a7a7e77a3bd49e98cdd21419399b6a3"
53 69
   version = "v1.2.0"
54 70
 
55 71
 [[projects]]
72
+  digest = "1:18752d0b95816a1b777505a97f71c7467a8445b8ffb55631a7bf779f6ba4fa83"
56 73
   name = "github.com/stretchr/testify"
57 74
   packages = ["assert"]
75
+  pruneopts = "UT"
58 76
   revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686"
59 77
   version = "v1.2.2"
60 78
 
61 79
 [[projects]]
80
+  digest = "1:3c1a69cdae3501bf75e76d0d86dc6f2b0a7421bc205c0cb7b96b19eed464a34d"
62 81
   name = "go.uber.org/atomic"
63 82
   packages = ["."]
83
+  pruneopts = "UT"
64 84
   revision = "1ea20fb1cbb1cc08cbd0d913a96dead89aa18289"
65 85
   version = "v1.3.2"
66 86
 
67 87
 [[projects]]
88
+  digest = "1:60bf2a5e347af463c42ed31a493d817f8a72f102543060ed992754e689805d1a"
68 89
   name = "go.uber.org/multierr"
69 90
   packages = ["."]
91
+  pruneopts = "UT"
70 92
   revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a"
71 93
   version = "v1.1.0"
72 94
 
73 95
 [[projects]]
96
+  digest = "1:e6d865f90ef1178c14bdb49ea9f244bfcb28c06ea9773dc077492032632de0b8"
74 97
   name = "go.uber.org/zap"
75 98
   packages = [
76 99
     ".",
@@ -78,37 +101,54 @@
78 101
     "internal/bufferpool",
79 102
     "internal/color",
80 103
     "internal/exit",
81
-    "zapcore"
104
+    "zapcore",
82 105
   ]
106
+  pruneopts = "UT"
83 107
   revision = "eeedf312bc6c57391d84767a4cd413f02a917974"
84 108
   version = "v1.8.0"
85 109
 
86 110
 [[projects]]
87 111
   branch = "master"
112
+  digest = "1:656046288ed20c53157025a0915f176cad9340ac515501c427806a6f76023d75"
88 113
   name = "golang.org/x/net"
89 114
   packages = [
90 115
     "bpf",
91 116
     "internal/iana",
92 117
     "internal/socket",
93
-    "ipv4"
118
+    "ipv4",
94 119
   ]
120
+  pruneopts = "UT"
95 121
   revision = "d0887baf81f4598189d4e12a37c6da86f0bba4d0"
96 122
 
97 123
 [[projects]]
124
+  digest = "1:c06d9e11d955af78ac3bbb26bd02e01d2f61f689e1a3bce2ef6fb683ef8a7f2d"
98 125
   name = "gopkg.in/alecthomas/kingpin.v2"
99 126
   packages = ["."]
127
+  pruneopts = "UT"
100 128
   revision = "947dcec5ba9c011838740e680966fd7087a71d0d"
101 129
   version = "v2.2.6"
102 130
 
103 131
 [[projects]]
132
+  digest = "1:38b469493eb173db9c03321d64adcad4c7991ea0a19b5edc5bdc094f0e8c7384"
104 133
   name = "gopkg.in/alexcesaro/statsd.v2"
105 134
   packages = ["."]
135
+  pruneopts = "UT"
106 136
   revision = "7fea3f0d2fab1ad973e641e51dba45443a311a90"
107 137
   version = "v2.0.0"
108 138
 
109 139
 [solve-meta]
110 140
   analyzer-name = "dep"
111 141
   analyzer-version = 1
112
-  inputs-digest = "7fad0f62feb7737b064d85cc4333a1a3e9298faec2afd864b4404f515fc7f17c"
142
+  input-imports = [
143
+    "github.com/beevik/ntp",
144
+    "github.com/dustin/go-humanize",
145
+    "github.com/juju/errors",
146
+    "github.com/satori/go.uuid",
147
+    "github.com/stretchr/testify/assert",
148
+    "go.uber.org/zap",
149
+    "go.uber.org/zap/zapcore",
150
+    "gopkg.in/alecthomas/kingpin.v2",
151
+    "gopkg.in/alexcesaro/statsd.v2",
152
+  ]
113 153
   solver-name = "gps-cdcl"
114 154
   solver-version = 1

+ 11
- 10
Makefile Wyświetl plik

@@ -1,12 +1,13 @@
1 1
 ROOT_DIR     := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
2 2
 IMAGE_NAME   := mtg
3 3
 APP_NAME     := $(IMAGE_NAME)
4
-GOMETALINTER := gometalinter
5 4
 
6 5
 VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor")
7 6
 CC_BINARIES  := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
8 7
 APP_DEPS     := version.go $(VENDOR_FILES)
9 8
 
9
+GOLANGCI_LINT_VERSION := v1.9.1
10
+
10 11
 COMMON_BUILD_FLAGS := -ldflags="-s -w"
11 12
 
12 13
 # -----------------------------------------------------------------------------
@@ -31,7 +32,7 @@ ccbuilds:
31 32
 version.go:
32 33
 	@go generate main.go
33 34
 
34
-vendor: Gopkg.lock Gopkg.toml install-cli
35
+vendor: Gopkg.lock Gopkg.toml install-dep
35 36
 	@dep ensure
36 37
 
37 38
 # -----------------------------------------------------------------------------
@@ -50,12 +51,12 @@ crosscompile-dir:
50 51
 	@rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)"
51 52
 
52 53
 .PHONY: test
53
-test: vendor install-cli version.go
54
+test: vendor version.go
54 55
 	@go test -v ./...
55 56
 
56 57
 .PHONY: lint
57
-lint: vendor install-cli version.go
58
-	@$(GOMETALINTER) --deadline=2m ./...
58
+lint: version.go
59
+	@golangci-lint run
59 60
 
60 61
 .PHONY: clean
61 62
 clean:
@@ -67,14 +68,14 @@ clean:
67 68
 docker:
68 69
 	@docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)"
69 70
 
70
-.PHONY: install-cli
71
-install-cli: install-dep install-lint
71
+.PHONY: prepare
72
+prepare: install-dep install-lint
72 73
 
73 74
 .PHONY: install-dep
74 75
 install-dep:
75
-	@go get github.com/golang/dep/cmd/dep
76
+	@go get -u github.com/golang/dep/cmd/dep
76 77
 
77 78
 .PHONY: install-lint
78 79
 install-lint:
79
-	@go get github.com/alecthomas/gometalinter && \
80
-		$(GOMETALINTER) --install >/dev/null
80
+	@curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \
81
+		| bash -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION)

+ 71
- 54
main.go Wyświetl plik

@@ -25,74 +25,90 @@ import (
25 25
 var (
26 26
 	app = kingpin.New("mtg", "Simple MTPROTO proxy.")
27 27
 
28
-	debug = app.Flag("debug", "Run in debug mode.").
28
+	debug = app.Flag("debug",
29
+		"Run in debug mode.").
29 30
 		Short('d').
30 31
 		Envar("MTG_DEBUG").
31 32
 		Bool()
32
-	verbose = app.Flag("verbose", "Run in verbose mode.").
33
+	verbose = app.Flag("verbose",
34
+		"Run in verbose mode.").
33 35
 		Short('v').
34 36
 		Envar("MTG_VERBOSE").
35 37
 		Bool()
36 38
 
37
-	bindIP = app.Flag("bind-ip", "Which IP to bind to.").
39
+	bindIP = app.Flag("bind-ip",
40
+		"Which IP to bind to.").
38 41
 		Short('b').
39 42
 		Envar("MTG_IP").
40 43
 		Default("127.0.0.1").
41 44
 		IP()
42
-	bindPort = app.Flag("bind-port", "Which port to bind to.").
43
-			Short('p').
44
-			Envar("MTG_PORT").
45
-			Default("3128").
46
-			Uint16()
47
-
48
-	publicIPv4 = app.Flag("public-ipv4", "Which IPv4 address is public.").
49
-			Short('4').
50
-			Envar("MTG_IPV4").
51
-			IP()
52
-	publicIPv4Port = app.Flag("public-ipv4-port", "Which IPv4 port is public. Default is 'bind-port' value.").
53
-			Envar("MTG_IPV4_PORT").
54
-			Uint16()
55
-
56
-	publicIPv6 = app.Flag("public-ipv6", "Which IPv6 address is public.").
57
-			Short('6').
58
-			Envar("MTG_IPV6").
59
-			IP()
60
-	publicIPv6Port = app.Flag("public-ipv6-port", "Which IPv6 port is public. Default is 'bind-port' value.").
61
-			Envar("MTG_IPV6_PORT").
62
-			Uint16()
63
-
64
-	statsIP = app.Flag("stats-ip", "Which IP bind stats server to.").
45
+	bindPort = app.Flag("bind-port",
46
+		"Which port to bind to.").
47
+		Short('p').
48
+		Envar("MTG_PORT").
49
+		Default("3128").
50
+		Uint16()
51
+
52
+	publicIPv4 = app.Flag("public-ipv4",
53
+		"Which IPv4 address is public.").
54
+		Short('4').
55
+		Envar("MTG_IPV4").
56
+		IP()
57
+	publicIPv4Port = app.Flag("public-ipv4-port",
58
+		"Which IPv4 port is public. Default is 'bind-port' value.").
59
+		Envar("MTG_IPV4_PORT").
60
+		Uint16()
61
+
62
+	publicIPv6 = app.Flag("public-ipv6",
63
+		"Which IPv6 address is public.").
64
+		Short('6').
65
+		Envar("MTG_IPV6").
66
+		IP()
67
+	publicIPv6Port = app.Flag("public-ipv6-port",
68
+		"Which IPv6 port is public. Default is 'bind-port' value.").
69
+		Envar("MTG_IPV6_PORT").
70
+		Uint16()
71
+
72
+	statsIP = app.Flag("stats-ip",
73
+		"Which IP bind stats server to.").
65 74
 		Short('t').
66 75
 		Envar("MTG_STATS_IP").
67 76
 		Default("127.0.0.1").
68 77
 		IP()
69
-	statsPort = app.Flag("stats-port", "Which port bind stats to.").
70
-			Short('q').
71
-			Envar("MTG_STATS_PORT").
72
-			Default("3129").
73
-			Uint16()
74
-
75
-	statsdIP = app.Flag("statsd-ip", "Which IP should we use for working with statsd.").
76
-			Envar("MTG_STATSD_IP").
77
-			String()
78
-	statsdPort = app.Flag("statsd-port", "Which port should we use for working with statsd.").
79
-			Envar("MTG_STATSD_PORT").
80
-			Default("8125").
81
-			Uint16()
82
-	statsdNetwork = app.Flag("statsd-network", "Which network is used to work with statsd. Only 'tcp' and 'udp' are supported.").
83
-			Envar("MTG_STATSD_NETWORK").
84
-			Default("udp").
85
-			String()
86
-	statsdPrefix = app.Flag("statsd-prefix", "Which bucket prefix should we use for sending stats to statsd.").
87
-			Envar("MTG_STATSD_PREFIX").
88
-			Default("mtg").
89
-			String()
90
-	statsdTagsFormat = app.Flag("statsd-tags-format", "Which tag format should we use to send stats metrics. Valid options are 'datadog' and 'influxdb'.").
91
-				Envar("MTG_STATSD_TAGS_FORMAT").
92
-				String()
93
-	statsdTags = app.Flag("statsd-tags", "Tags to use for working with statsd (specified as 'key=value').").
94
-			Envar("MTG_STATSD_TAGS").
95
-			StringMap()
78
+	statsPort = app.Flag("stats-port",
79
+		"Which port bind stats to.").
80
+		Short('q').
81
+		Envar("MTG_STATS_PORT").
82
+		Default("3129").
83
+		Uint16()
84
+
85
+	statsdIP = app.Flag("statsd-ip",
86
+		"Which IP should we use for working with statsd.").
87
+		Envar("MTG_STATSD_IP").
88
+		String()
89
+	statsdPort = app.Flag("statsd-port",
90
+		"Which port should we use for working with statsd.").
91
+		Envar("MTG_STATSD_PORT").
92
+		Default("8125").
93
+		Uint16()
94
+	statsdNetwork = app.Flag("statsd-network",
95
+		"Which network is used to work with statsd. Only 'tcp' and 'udp' are supported.").
96
+		Envar("MTG_STATSD_NETWORK").
97
+		Default("udp").
98
+		String()
99
+	statsdPrefix = app.Flag("statsd-prefix",
100
+		"Which bucket prefix should we use for sending stats to statsd.").
101
+		Envar("MTG_STATSD_PREFIX").
102
+		Default("mtg").
103
+		String()
104
+	statsdTagsFormat = app.Flag("statsd-tags-format",
105
+		"Which tag format should we use to send stats metrics. Valid options are 'datadog' and 'influxdb'.").
106
+		Envar("MTG_STATSD_TAGS_FORMAT").
107
+		String()
108
+	statsdTags = app.Flag("statsd-tags",
109
+		"Tags to use for working with statsd (specified as 'key=value').").
110
+		Envar("MTG_STATSD_TAGS").
111
+		StringMap()
96 112
 
97 113
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
98 114
 	adtag  = app.Arg("adtag", "ADTag of the proxy.").String()
@@ -150,7 +166,8 @@ func main() {
150 166
 			zap.S().Warnw("Could not fetch time data from NTP")
151 167
 		} else {
152 168
 			if diff >= time.Second {
153
-				usage(fmt.Sprintf("You choose to use middle proxy but your clock drift (%s) is bigger than 1 second. Please, sync your time", diff))
169
+				usage(fmt.Sprintf("You choose to use middle proxy but your clock drift (%s) "+
170
+					"is bigger than 1 second. Please, sync your time", diff))
154 171
 			}
155 172
 			go ntp.AutoUpdate()
156 173
 		}

+ 7
- 7
mtproto/rpc/proxy_flags.go Wyświetl plik

@@ -9,13 +9,13 @@ type proxyRequestFlags uint32
9 9
 
10 10
 const (
11 11
 	proxyRequestFlagsHasAdTag     proxyRequestFlags = 0x8
12
-	proxyRequestFlagsEncrypted                      = 0x2
13
-	proxyRequestFlagsMagic                          = 0x1000
14
-	proxyRequestFlagsExtMode2                       = 0x20000
15
-	proxyRequestFlagsIntermediate                   = 0x20000000
16
-	proxyRequestFlagsAbdridged                      = 0x40000000
17
-	proxyRequestFlagsQuickAck                       = 0x80000000
18
-	proxyRequestFlagsPad                            = 0x8000000
12
+	proxyRequestFlagsEncrypted    proxyRequestFlags = 0x2
13
+	proxyRequestFlagsMagic        proxyRequestFlags = 0x1000
14
+	proxyRequestFlagsExtMode2     proxyRequestFlags = 0x20000
15
+	proxyRequestFlagsIntermediate proxyRequestFlags = 0x20000000
16
+	proxyRequestFlagsAbdridged    proxyRequestFlags = 0x40000000
17
+	proxyRequestFlagsQuickAck     proxyRequestFlags = 0x80000000
18
+	proxyRequestFlagsPad          proxyRequestFlags = 0x8000000
19 19
 )
20 20
 
21 21
 var proxyRequestFlagsEncryptedPrefix [8]byte

+ 2
- 1
mtproto/rpc/proxy_request.go Wyświetl plik

@@ -64,7 +64,8 @@ func (r *ProxyRequest) MakeHeader(message []byte) (*bytes.Buffer, fmt.Stringer)
64 64
 }
65 65
 
66 66
 // NewProxyRequest build new ProxyRequest data structure.
67
-func NewProxyRequest(clientAddr, ownAddr *net.TCPAddr, opts *mtproto.ConnectionOpts, adTag []byte) (*ProxyRequest, error) {
67
+func NewProxyRequest(clientAddr, ownAddr *net.TCPAddr,
68
+	opts *mtproto.ConnectionOpts, adTag []byte) (*ProxyRequest, error) {
68 69
 	flags := proxyRequestFlagsHasAdTag | proxyRequestFlagsMagic | proxyRequestFlagsExtMode2
69 70
 
70 71
 	switch opts.ConnectionType {

+ 4
- 4
obfuscated2/obfuscated2_test.go Wyświetl plik

@@ -47,8 +47,8 @@ func TestObfs2Full(t *testing.T) {
47 47
 
48 48
 	clientFrame := generateFrame(mtproto.ConnectionTypeIntermediate)
49 49
 	clientHasher := sha256.New()
50
-	clientHasher.Write(clientFrame.Key())
51
-	clientHasher.Write(secret)
50
+	clientHasher.Write(clientFrame.Key()) // nolint: errcheck
51
+	clientHasher.Write(secret)            // nolint: errcheck
52 52
 	clientKey := clientHasher.Sum(nil)
53 53
 
54 54
 	encryptor := makeStreamCipher(clientKey, clientFrame.IV())
@@ -58,8 +58,8 @@ func TestObfs2Full(t *testing.T) {
58 58
 
59 59
 	invertedClientFrame := clientFrame.Invert()
60 60
 	clientHasher = sha256.New()
61
-	clientHasher.Write(invertedClientFrame.Key())
62
-	clientHasher.Write(secret)
61
+	clientHasher.Write(invertedClientFrame.Key()) // nolint: errcheck
62
+	clientHasher.Write(secret)                    // nolint: errcheck
63 63
 	invertedClientKey := clientHasher.Sum(nil)
64 64
 	clientDecryptor := makeStreamCipher(invertedClientKey, invertedClientFrame.IV())
65 65
 

+ 2
- 1
proxy/proxy.go Wyświetl plik

@@ -106,7 +106,8 @@ func (p *Proxy) getTelegramConn(opts *mtproto.ConnectionOpts, connID string) (wr
106 106
 	return packetConn, nil
107 107
 }
108 108
 
109
-func (p *Proxy) middlePipe(src wrappers.PacketReadCloser, dst io.WriteCloser, wait *sync.WaitGroup, hacks *mtproto.Hacks) {
109
+func (p *Proxy) middlePipe(src wrappers.PacketReadCloser, dst io.WriteCloser,
110
+	wait *sync.WaitGroup, hacks *mtproto.Hacks) {
110 111
 	defer func() {
111 112
 		src.Close() // nolint: errcheck
112 113
 		dst.Close() // nolint: errcheck

+ 1
- 1
stats/server.go Wyświetl plik

@@ -13,7 +13,7 @@ import (
13 13
 
14 14
 var instance *stats
15 15
 
16
-// Start starts new statisitcs server.
16
+// Start starts new statistics server.
17 17
 func Start(conf *config.Config) error {
18 18
 	log := zap.S().Named("stats")
19 19
 

+ 21
- 18
telegram/direct.go Wyświetl plik

@@ -13,18 +13,18 @@ import (
13 13
 
14 14
 var (
15 15
 	directV4Addresses = map[int16][]string{
16
-		0: []string{"149.154.175.50:443"},
17
-		1: []string{"149.154.167.51:443"},
18
-		2: []string{"149.154.175.100:443"},
19
-		3: []string{"149.154.167.91:443"},
20
-		4: []string{"149.154.171.5:443"},
16
+		0: {"149.154.175.50:443"},
17
+		1: {"149.154.167.51:443"},
18
+		2: {"149.154.175.100:443"},
19
+		3: {"149.154.167.91:443"},
20
+		4: {"149.154.171.5:443"},
21 21
 	}
22 22
 	directV6Addresses = map[int16][]string{
23
-		0: []string{"[2001:b28:f23d:f001::a]:443"},
24
-		1: []string{"[2001:67c:04e8:f002::a]:443"},
25
-		2: []string{"[2001:b28:f23d:f003::a]:443"},
26
-		3: []string{"[2001:67c:04e8:f004::a]:443"},
27
-		4: []string{"[2001:b28:f23f:f005::a]:443"},
23
+		0: {"[2001:b28:f23d:f001::a]:443"},
24
+		1: {"[2001:67c:04e8:f002::a]:443"},
25
+		2: {"[2001:b28:f23d:f003::a]:443"},
26
+		3: {"[2001:67c:04e8:f004::a]:443"},
27
+		4: {"[2001:b28:f23f:f005::a]:443"},
28 28
 	}
29 29
 )
30 30
 
@@ -43,7 +43,8 @@ func (t *directTelegram) Dial(connID string, connOpts *mtproto.ConnectionOpts) (
43 43
 	return t.baseTelegram.dial(dc-1, connID, connOpts.ConnectionProto)
44 44
 }
45 45
 
46
-func (t *directTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) {
46
+func (t *directTelegram) Init(connOpts *mtproto.ConnectionOpts,
47
+	conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) {
47 48
 	obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame(connOpts)
48 49
 
49 50
 	if _, err := conn.Write(frame); err != nil {
@@ -56,12 +57,14 @@ func (t *directTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.St
56 57
 // NewDirectTelegram returns Telegram instance which connects directly
57 58
 // to Telegram bypassing middleproxies.
58 59
 func NewDirectTelegram(conf *config.Config) Telegram {
59
-	return &directTelegram{baseTelegram{
60
-		dialer: tgDialer{
61
-			Dialer: net.Dialer{Timeout: telegramDialTimeout},
62
-			conf:   conf,
60
+	return &directTelegram{
61
+		baseTelegram: baseTelegram{
62
+			dialer: tgDialer{
63
+				Dialer: net.Dialer{Timeout: telegramDialTimeout},
64
+				conf:   conf,
65
+			},
66
+			v4Addresses: directV4Addresses,
67
+			v6Addresses: directV6Addresses,
63 68
 		},
64
-		v4Addresses: directV4Addresses,
65
-		v6Addresses: directV6Addresses,
66
-	}}
69
+	}
67 70
 }

+ 6
- 3
telegram/middle.go Wyświetl plik

@@ -20,7 +20,8 @@ type middleTelegram struct {
20 20
 	conf *config.Config
21 21
 }
22 22
 
23
-func (t *middleTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) {
23
+func (t *middleTelegram) Init(connOpts *mtproto.ConnectionOpts,
24
+	conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) {
24 25
 	rpcNonceConn := wrappers.NewMTProtoFrame(conn, rpc.SeqNoNonce)
25 26
 
26 27
 	rpcNonceReq, err := t.sendRPCNonceRequest(rpcNonceConn)
@@ -65,7 +66,8 @@ func (t *middleTelegram) sendRPCNonceRequest(conn io.Writer) (*rpc.NonceRequest,
65 66
 	return rpcNonceReq, nil
66 67
 }
67 68
 
68
-func (t *middleTelegram) receiveRPCNonceResponse(conn wrappers.PacketReader, req *rpc.NonceRequest) (*rpc.NonceResponse, error) {
69
+func (t *middleTelegram) receiveRPCNonceResponse(conn wrappers.PacketReader,
70
+	req *rpc.NonceRequest) (*rpc.NonceResponse, error) {
69 71
 	packet, err := conn.Read()
70 72
 	if err != nil {
71 73
 		return nil, errors.Annotate(err, "Cannot read RPC nonce response")
@@ -91,7 +93,8 @@ func (t *middleTelegram) sendRPCHandshakeRequest(conn io.Writer) (*rpc.Handshake
91 93
 	return req, nil
92 94
 }
93 95
 
94
-func (t *middleTelegram) receiveRPCHandshakeResponse(conn wrappers.PacketReader, req *rpc.HandshakeRequest) (*rpc.HandshakeResponse, error) {
96
+func (t *middleTelegram) receiveRPCHandshakeResponse(conn wrappers.PacketReader,
97
+	req *rpc.HandshakeRequest) (*rpc.HandshakeResponse, error) {
95 98
 	packet, err := conn.Read()
96 99
 	if err != nil {
97 100
 		return nil, errors.Annotate(err, "Cannot read RPC handshake response")

+ 2
- 1
telegram/middle_caller.go Wyświetl plik

@@ -38,7 +38,8 @@ type middleTelegramCaller struct {
38 38
 	httpClient  *http.Client
39 39
 }
40 40
 
41
-func (t *middleTelegramCaller) Dial(connID string, connOpts *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) {
41
+func (t *middleTelegramCaller) Dial(connID string,
42
+	connOpts *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) {
42 43
 	dc := connOpts.DC
43 44
 	if dc == 0 {
44 45
 		dc = 1

+ 2
- 1
telegram/telegram.go Wyświetl plik

@@ -22,7 +22,8 @@ type baseTelegram struct {
22 22
 	v6Addresses map[int16][]string
23 23
 }
24 24
 
25
-func (b *baseTelegram) dial(dcIdx int16, connID string, proto mtproto.ConnectionProtocol) (wrappers.StreamReadWriteCloser, error) {
25
+func (b *baseTelegram) dial(dcIdx int16, connID string,
26
+	proto mtproto.ConnectionProtocol) (wrappers.StreamReadWriteCloser, error) {
26 27
 	addrs := make([]string, 2)
27 28
 
28 29
 	if proto&mtproto.ConnectionProtocolIPv6 != 0 {

+ 1
- 1
wrappers/conn.go Wyświetl plik

@@ -9,7 +9,7 @@ import (
9 9
 	"github.com/9seconds/mtg/stats"
10 10
 )
11 11
 
12
-// ConnPurpose is intented to be identifier of connection purpose. We
12
+// ConnPurpose is intended to be identifier of connection purpose. We
13 13
 // sometimes want to treat client/telegram connection differently (for
14 14
 // logging for example).
15 15
 type ConnPurpose uint8

+ 4
- 2
wrappers/mtproto_cipher.go Wyświetl plik

@@ -24,7 +24,8 @@ var emptyIP = [4]byte{0x00, 0x00, 0x00, 0x00}
24 24
 
25 25
 // NewMiddleProxyCipher creates new block cipher to proxy<->telegram
26 26
 // connection.
27
-func NewMiddleProxyCipher(conn StreamReadWriteCloser, req *rpc.NonceRequest, resp *rpc.NonceResponse, secret []byte) StreamReadWriteCloser {
27
+func NewMiddleProxyCipher(conn StreamReadWriteCloser,
28
+	req *rpc.NonceRequest, resp *rpc.NonceResponse, secret []byte) StreamReadWriteCloser {
28 29
 	localAddr := conn.LocalAddr()
29 30
 	remoteAddr := conn.RemoteAddr()
30 31
 
@@ -37,7 +38,8 @@ func NewMiddleProxyCipher(conn StreamReadWriteCloser, req *rpc.NonceRequest, res
37 38
 	return NewBlockCipher(conn, enc, dec)
38 39
 }
39 40
 
40
-func deriveKeys(purpose cipherPurpose, req *rpc.NonceRequest, resp *rpc.NonceResponse, client *net.TCPAddr, remote *net.TCPAddr, secret []byte) ([]byte, []byte) {
41
+func deriveKeys(purpose cipherPurpose, req *rpc.NonceRequest, resp *rpc.NonceResponse,
42
+	client, remote *net.TCPAddr, secret []byte) ([]byte, []byte) {
41 43
 	message := bytes.Buffer{}
42 44
 	message.Write(resp.Nonce[:])
43 45
 	message.Write(req.Nonce[:])

+ 2
- 1
wrappers/mtproto_frame.go Wyświetl plik

@@ -61,7 +61,8 @@ func (m *MTProtoFrame) Read() ([]byte, error) { // nolint: gocyclo
61 61
 		"messageLength", messageLength,
62 62
 		"sequence_number", m.readSeqNo,
63 63
 	)
64
-	if messageLength%4 != 0 || messageLength < mtprotoFrameMinMessageLength || messageLength > mtprotoFrameMaxMessageLength {
64
+	if messageLength%4 != 0 || messageLength < mtprotoFrameMinMessageLength ||
65
+		messageLength > mtprotoFrameMaxMessageLength {
65 66
 		return nil, errors.Errorf("Incorrect frame message length %d", messageLength)
66 67
 	}
67 68
 

+ 4
- 3
wrappers/mtproto_proxy.go Wyświetl plik

@@ -56,7 +56,7 @@ func (m *MTProtoProxy) Read() ([]byte, error) {
56 56
 	case bytes.Equal(tag, rpc.TagSimpleAck):
57 57
 		return m.readSimpleAck(packet)
58 58
 	case bytes.Equal(tag, rpc.TagCloseExt):
59
-		return m.readCloseExt(packet)
59
+		return m.readCloseExt()
60 60
 	}
61 61
 
62 62
 	return nil, errors.Errorf("Unknown RPC answer %v", tag)
@@ -91,7 +91,7 @@ func (m *MTProtoProxy) readSimpleAck(data []byte) ([]byte, error) {
91 91
 	return data, nil
92 92
 }
93 93
 
94
-func (m *MTProtoProxy) readCloseExt(data []byte) ([]byte, error) {
94
+func (m *MTProtoProxy) readCloseExt() ([]byte, error) {
95 95
 	m.logger.Debugw("Read RPC_CLOSE_EXT", "counter", m.readCounter)
96 96
 
97 97
 	return nil, errors.New("Connection has been closed remotely by RPC call")
@@ -150,7 +150,8 @@ func (m *MTProtoProxy) Close() error {
150 150
 }
151 151
 
152 152
 // NewMTProtoProxy creates new RPC wrapper.
153
-func NewMTProtoProxy(conn PacketReadWriteCloser, connOpts *mtproto.ConnectionOpts, adTag []byte) (PacketReadWriteCloser, error) {
153
+func NewMTProtoProxy(conn PacketReadWriteCloser, connOpts *mtproto.ConnectionOpts,
154
+	adTag []byte) (PacketReadWriteCloser, error) {
154 155
 	req, err := rpc.NewProxyRequest(connOpts.ClientAddr, conn.LocalAddr(), connOpts, adTag)
155 156
 	if err != nil {
156 157
 		return nil, errors.Annotate(err, "Cannot create new RPC proxy request")

Ładowanie…
Anuluj
Zapisz