Преглед на файлове

Switch to golangci-lint

tags/0.11
9seconds преди 7 години
родител
ревизия
c1b862c1e9

+ 12
- 0
.golangci.toml Целия файл

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 Целия файл

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

+ 2
- 0
.travis.yml Целия файл

10
   - master
10
   - master
11
 
11
 
12
 script:
12
 script:
13
+  - make prepare
14
+  - make all
13
   - make lint
15
   - make lint
14
   - make test
16
   - make test
15
 
17
 

+ 44
- 4
Gopkg.lock Целия файл

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

+ 11
- 10
Makefile Целия файл

1
 ROOT_DIR     := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
1
 ROOT_DIR     := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
2
 IMAGE_NAME   := mtg
2
 IMAGE_NAME   := mtg
3
 APP_NAME     := $(IMAGE_NAME)
3
 APP_NAME     := $(IMAGE_NAME)
4
-GOMETALINTER := gometalinter
5
 
4
 
6
 VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor")
5
 VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor")
7
 CC_BINARIES  := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
6
 CC_BINARIES  := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
8
 APP_DEPS     := version.go $(VENDOR_FILES)
7
 APP_DEPS     := version.go $(VENDOR_FILES)
9
 
8
 
9
+GOLANGCI_LINT_VERSION := v1.9.1
10
+
10
 COMMON_BUILD_FLAGS := -ldflags="-s -w"
11
 COMMON_BUILD_FLAGS := -ldflags="-s -w"
11
 
12
 
12
 # -----------------------------------------------------------------------------
13
 # -----------------------------------------------------------------------------
31
 version.go:
32
 version.go:
32
 	@go generate main.go
33
 	@go generate main.go
33
 
34
 
34
-vendor: Gopkg.lock Gopkg.toml install-cli
35
+vendor: Gopkg.lock Gopkg.toml install-dep
35
 	@dep ensure
36
 	@dep ensure
36
 
37
 
37
 # -----------------------------------------------------------------------------
38
 # -----------------------------------------------------------------------------
50
 	@rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)"
51
 	@rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)"
51
 
52
 
52
 .PHONY: test
53
 .PHONY: test
53
-test: vendor install-cli version.go
54
+test: vendor version.go
54
 	@go test -v ./...
55
 	@go test -v ./...
55
 
56
 
56
 .PHONY: lint
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
 .PHONY: clean
61
 .PHONY: clean
61
 clean:
62
 clean:
67
 docker:
68
 docker:
68
 	@docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)"
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
 .PHONY: install-dep
74
 .PHONY: install-dep
74
 install-dep:
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
 .PHONY: install-lint
78
 .PHONY: install-lint
78
 install-lint:
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 Целия файл

25
 var (
25
 var (
26
 	app = kingpin.New("mtg", "Simple MTPROTO proxy.")
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
 		Short('d').
30
 		Short('d').
30
 		Envar("MTG_DEBUG").
31
 		Envar("MTG_DEBUG").
31
 		Bool()
32
 		Bool()
32
-	verbose = app.Flag("verbose", "Run in verbose mode.").
33
+	verbose = app.Flag("verbose",
34
+		"Run in verbose mode.").
33
 		Short('v').
35
 		Short('v').
34
 		Envar("MTG_VERBOSE").
36
 		Envar("MTG_VERBOSE").
35
 		Bool()
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
 		Short('b').
41
 		Short('b').
39
 		Envar("MTG_IP").
42
 		Envar("MTG_IP").
40
 		Default("127.0.0.1").
43
 		Default("127.0.0.1").
41
 		IP()
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
 		Short('t').
74
 		Short('t').
66
 		Envar("MTG_STATS_IP").
75
 		Envar("MTG_STATS_IP").
67
 		Default("127.0.0.1").
76
 		Default("127.0.0.1").
68
 		IP()
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
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
113
 	secret = app.Arg("secret", "Secret of this proxy.").Required().String()
98
 	adtag  = app.Arg("adtag", "ADTag of the proxy.").String()
114
 	adtag  = app.Arg("adtag", "ADTag of the proxy.").String()
150
 			zap.S().Warnw("Could not fetch time data from NTP")
166
 			zap.S().Warnw("Could not fetch time data from NTP")
151
 		} else {
167
 		} else {
152
 			if diff >= time.Second {
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
 			go ntp.AutoUpdate()
172
 			go ntp.AutoUpdate()
156
 		}
173
 		}

+ 7
- 7
mtproto/rpc/proxy_flags.go Целия файл

9
 
9
 
10
 const (
10
 const (
11
 	proxyRequestFlagsHasAdTag     proxyRequestFlags = 0x8
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
 var proxyRequestFlagsEncryptedPrefix [8]byte
21
 var proxyRequestFlagsEncryptedPrefix [8]byte

+ 2
- 1
mtproto/rpc/proxy_request.go Целия файл

64
 }
64
 }
65
 
65
 
66
 // NewProxyRequest build new ProxyRequest data structure.
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
 	flags := proxyRequestFlagsHasAdTag | proxyRequestFlagsMagic | proxyRequestFlagsExtMode2
69
 	flags := proxyRequestFlagsHasAdTag | proxyRequestFlagsMagic | proxyRequestFlagsExtMode2
69
 
70
 
70
 	switch opts.ConnectionType {
71
 	switch opts.ConnectionType {

+ 4
- 4
obfuscated2/obfuscated2_test.go Целия файл

47
 
47
 
48
 	clientFrame := generateFrame(mtproto.ConnectionTypeIntermediate)
48
 	clientFrame := generateFrame(mtproto.ConnectionTypeIntermediate)
49
 	clientHasher := sha256.New()
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
 	clientKey := clientHasher.Sum(nil)
52
 	clientKey := clientHasher.Sum(nil)
53
 
53
 
54
 	encryptor := makeStreamCipher(clientKey, clientFrame.IV())
54
 	encryptor := makeStreamCipher(clientKey, clientFrame.IV())
58
 
58
 
59
 	invertedClientFrame := clientFrame.Invert()
59
 	invertedClientFrame := clientFrame.Invert()
60
 	clientHasher = sha256.New()
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
 	invertedClientKey := clientHasher.Sum(nil)
63
 	invertedClientKey := clientHasher.Sum(nil)
64
 	clientDecryptor := makeStreamCipher(invertedClientKey, invertedClientFrame.IV())
64
 	clientDecryptor := makeStreamCipher(invertedClientKey, invertedClientFrame.IV())
65
 
65
 

+ 2
- 1
proxy/proxy.go Целия файл

106
 	return packetConn, nil
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
 	defer func() {
111
 	defer func() {
111
 		src.Close() // nolint: errcheck
112
 		src.Close() // nolint: errcheck
112
 		dst.Close() // nolint: errcheck
113
 		dst.Close() // nolint: errcheck

+ 1
- 1
stats/server.go Целия файл

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

+ 21
- 18
telegram/direct.go Целия файл

13
 
13
 
14
 var (
14
 var (
15
 	directV4Addresses = map[int16][]string{
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
 	directV6Addresses = map[int16][]string{
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
 	return t.baseTelegram.dial(dc-1, connID, connOpts.ConnectionProto)
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
 	obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame(connOpts)
48
 	obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame(connOpts)
48
 
49
 
49
 	if _, err := conn.Write(frame); err != nil {
50
 	if _, err := conn.Write(frame); err != nil {
56
 // NewDirectTelegram returns Telegram instance which connects directly
57
 // NewDirectTelegram returns Telegram instance which connects directly
57
 // to Telegram bypassing middleproxies.
58
 // to Telegram bypassing middleproxies.
58
 func NewDirectTelegram(conf *config.Config) Telegram {
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 Целия файл

20
 	conf *config.Config
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
 	rpcNonceConn := wrappers.NewMTProtoFrame(conn, rpc.SeqNoNonce)
25
 	rpcNonceConn := wrappers.NewMTProtoFrame(conn, rpc.SeqNoNonce)
25
 
26
 
26
 	rpcNonceReq, err := t.sendRPCNonceRequest(rpcNonceConn)
27
 	rpcNonceReq, err := t.sendRPCNonceRequest(rpcNonceConn)
65
 	return rpcNonceReq, nil
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
 	packet, err := conn.Read()
71
 	packet, err := conn.Read()
70
 	if err != nil {
72
 	if err != nil {
71
 		return nil, errors.Annotate(err, "Cannot read RPC nonce response")
73
 		return nil, errors.Annotate(err, "Cannot read RPC nonce response")
91
 	return req, nil
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
 	packet, err := conn.Read()
98
 	packet, err := conn.Read()
96
 	if err != nil {
99
 	if err != nil {
97
 		return nil, errors.Annotate(err, "Cannot read RPC handshake response")
100
 		return nil, errors.Annotate(err, "Cannot read RPC handshake response")

+ 2
- 1
telegram/middle_caller.go Целия файл

38
 	httpClient  *http.Client
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
 	dc := connOpts.DC
43
 	dc := connOpts.DC
43
 	if dc == 0 {
44
 	if dc == 0 {
44
 		dc = 1
45
 		dc = 1

+ 2
- 1
telegram/telegram.go Целия файл

22
 	v6Addresses map[int16][]string
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
 	addrs := make([]string, 2)
27
 	addrs := make([]string, 2)
27
 
28
 
28
 	if proto&mtproto.ConnectionProtocolIPv6 != 0 {
29
 	if proto&mtproto.ConnectionProtocolIPv6 != 0 {

+ 1
- 1
wrappers/conn.go Целия файл

9
 	"github.com/9seconds/mtg/stats"
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
 // sometimes want to treat client/telegram connection differently (for
13
 // sometimes want to treat client/telegram connection differently (for
14
 // logging for example).
14
 // logging for example).
15
 type ConnPurpose uint8
15
 type ConnPurpose uint8

+ 4
- 2
wrappers/mtproto_cipher.go Целия файл

24
 
24
 
25
 // NewMiddleProxyCipher creates new block cipher to proxy<->telegram
25
 // NewMiddleProxyCipher creates new block cipher to proxy<->telegram
26
 // connection.
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
 	localAddr := conn.LocalAddr()
29
 	localAddr := conn.LocalAddr()
29
 	remoteAddr := conn.RemoteAddr()
30
 	remoteAddr := conn.RemoteAddr()
30
 
31
 
37
 	return NewBlockCipher(conn, enc, dec)
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
 	message := bytes.Buffer{}
43
 	message := bytes.Buffer{}
42
 	message.Write(resp.Nonce[:])
44
 	message.Write(resp.Nonce[:])
43
 	message.Write(req.Nonce[:])
45
 	message.Write(req.Nonce[:])

+ 2
- 1
wrappers/mtproto_frame.go Целия файл

61
 		"messageLength", messageLength,
61
 		"messageLength", messageLength,
62
 		"sequence_number", m.readSeqNo,
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
 		return nil, errors.Errorf("Incorrect frame message length %d", messageLength)
66
 		return nil, errors.Errorf("Incorrect frame message length %d", messageLength)
66
 	}
67
 	}
67
 
68
 

+ 4
- 3
wrappers/mtproto_proxy.go Целия файл

56
 	case bytes.Equal(tag, rpc.TagSimpleAck):
56
 	case bytes.Equal(tag, rpc.TagSimpleAck):
57
 		return m.readSimpleAck(packet)
57
 		return m.readSimpleAck(packet)
58
 	case bytes.Equal(tag, rpc.TagCloseExt):
58
 	case bytes.Equal(tag, rpc.TagCloseExt):
59
-		return m.readCloseExt(packet)
59
+		return m.readCloseExt()
60
 	}
60
 	}
61
 
61
 
62
 	return nil, errors.Errorf("Unknown RPC answer %v", tag)
62
 	return nil, errors.Errorf("Unknown RPC answer %v", tag)
91
 	return data, nil
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
 	m.logger.Debugw("Read RPC_CLOSE_EXT", "counter", m.readCounter)
95
 	m.logger.Debugw("Read RPC_CLOSE_EXT", "counter", m.readCounter)
96
 
96
 
97
 	return nil, errors.New("Connection has been closed remotely by RPC call")
97
 	return nil, errors.New("Connection has been closed remotely by RPC call")
150
 }
150
 }
151
 
151
 
152
 // NewMTProtoProxy creates new RPC wrapper.
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
 	req, err := rpc.NewProxyRequest(connOpts.ClientAddr, conn.LocalAddr(), connOpts, adTag)
155
 	req, err := rpc.NewProxyRequest(connOpts.ClientAddr, conn.LocalAddr(), connOpts, adTag)
155
 	if err != nil {
156
 	if err != nil {
156
 		return nil, errors.Annotate(err, "Cannot create new RPC proxy request")
157
 		return nil, errors.Annotate(err, "Cannot create new RPC proxy request")

Loading…
Отказ
Запис