diff --git a/.golangci.toml b/.golangci.toml new file mode 100644 index 0000000..0ada8a9 --- /dev/null +++ b/.golangci.toml @@ -0,0 +1,12 @@ +[run] +concurrency = 4 +deadline = "2m" +tests = true +skip-dirs = ["vendor"] +skip-files = ["version.go"] + +[output] +format = "colored-line-number" + +[linters] +enable-all = true diff --git a/.gometalinter.json b/.gometalinter.json deleted file mode 100644 index 70ab300..0000000 --- a/.gometalinter.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "aggregate": true, - "vendor": true -} diff --git a/.travis.yml b/.travis.yml index 4a23bda..c9ed246 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,8 @@ go: - master script: + - make prepare + - make all - make lint - make test diff --git a/Gopkg.lock b/Gopkg.lock index ae140a0..83ef60f 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -3,74 +3,97 @@ [[projects]] branch = "master" + digest = "1:45a787c1adea69a03a5384865b307c7a72bb28bd5844bd57679d889a726a588b" name = "github.com/alecthomas/template" packages = [ ".", - "parse" + "parse", ] + pruneopts = "UT" revision = "a0175ee3bccc567396460bf5acd36800cb10c49c" [[projects]] branch = "master" + digest = "1:c198fdc381e898e8fb62b8eb62758195091c313ad18e52a3067366e1dda2fb3c" name = "github.com/alecthomas/units" packages = ["."] + pruneopts = "UT" revision = "2efee857e7cfd4f3d0138cc3cbb1b4966962b93a" [[projects]] + digest = "1:a8d622a8049a4aa420e1c509873bb85d4c45c5107f420d922f919bfcb8d08694" name = "github.com/beevik/ntp" packages = ["."] + pruneopts = "UT" revision = "62c80a04de2086884d8296004b6d74ee1846c582" version = "v0.2.0" [[projects]] + digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" name = "github.com/davecgh/go-spew" packages = ["spew"] + pruneopts = "UT" revision = "346938d642f2ec3594ed81d874461961cd0faa76" version = "v1.1.0" [[projects]] branch = "master" + digest = "1:6f9339c912bbdda81302633ad7e99a28dfa5a639c864061f1929510a9a64aa74" name = "github.com/dustin/go-humanize" packages = ["."] + pruneopts = "UT" revision = "9f541cc9db5d55bce703bd99987c9d5cb8eea45e" [[projects]] branch = "master" + digest = "1:70107cf7ee5eb9e3c3dabe65bcb220bff22ee42e32d9b7fca988e16b8727cacc" name = "github.com/juju/errors" packages = ["."] + pruneopts = "UT" revision = "c7d06af17c68cd34c835053720b21f6549d9b0ee" [[projects]] + digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" name = "github.com/pmezard/go-difflib" packages = ["difflib"] + pruneopts = "UT" revision = "792786c7400a136282c1664665ae0a8db921c6c2" version = "v1.0.0" [[projects]] + digest = "1:274f67cb6fed9588ea2521ecdac05a6d62a8c51c074c1fccc6a49a40ba80e925" name = "github.com/satori/go.uuid" packages = ["."] + pruneopts = "UT" revision = "f58768cc1a7a7e77a3bd49e98cdd21419399b6a3" version = "v1.2.0" [[projects]] + digest = "1:18752d0b95816a1b777505a97f71c7467a8445b8ffb55631a7bf779f6ba4fa83" name = "github.com/stretchr/testify" packages = ["assert"] + pruneopts = "UT" revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" version = "v1.2.2" [[projects]] + digest = "1:3c1a69cdae3501bf75e76d0d86dc6f2b0a7421bc205c0cb7b96b19eed464a34d" name = "go.uber.org/atomic" packages = ["."] + pruneopts = "UT" revision = "1ea20fb1cbb1cc08cbd0d913a96dead89aa18289" version = "v1.3.2" [[projects]] + digest = "1:60bf2a5e347af463c42ed31a493d817f8a72f102543060ed992754e689805d1a" name = "go.uber.org/multierr" packages = ["."] + pruneopts = "UT" revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a" version = "v1.1.0" [[projects]] + digest = "1:e6d865f90ef1178c14bdb49ea9f244bfcb28c06ea9773dc077492032632de0b8" name = "go.uber.org/zap" packages = [ ".", @@ -78,37 +101,54 @@ "internal/bufferpool", "internal/color", "internal/exit", - "zapcore" + "zapcore", ] + pruneopts = "UT" revision = "eeedf312bc6c57391d84767a4cd413f02a917974" version = "v1.8.0" [[projects]] branch = "master" + digest = "1:656046288ed20c53157025a0915f176cad9340ac515501c427806a6f76023d75" name = "golang.org/x/net" packages = [ "bpf", "internal/iana", "internal/socket", - "ipv4" + "ipv4", ] + pruneopts = "UT" revision = "d0887baf81f4598189d4e12a37c6da86f0bba4d0" [[projects]] + digest = "1:c06d9e11d955af78ac3bbb26bd02e01d2f61f689e1a3bce2ef6fb683ef8a7f2d" name = "gopkg.in/alecthomas/kingpin.v2" packages = ["."] + pruneopts = "UT" revision = "947dcec5ba9c011838740e680966fd7087a71d0d" version = "v2.2.6" [[projects]] + digest = "1:38b469493eb173db9c03321d64adcad4c7991ea0a19b5edc5bdc094f0e8c7384" name = "gopkg.in/alexcesaro/statsd.v2" packages = ["."] + pruneopts = "UT" revision = "7fea3f0d2fab1ad973e641e51dba45443a311a90" version = "v2.0.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "7fad0f62feb7737b064d85cc4333a1a3e9298faec2afd864b4404f515fc7f17c" + input-imports = [ + "github.com/beevik/ntp", + "github.com/dustin/go-humanize", + "github.com/juju/errors", + "github.com/satori/go.uuid", + "github.com/stretchr/testify/assert", + "go.uber.org/zap", + "go.uber.org/zap/zapcore", + "gopkg.in/alecthomas/kingpin.v2", + "gopkg.in/alexcesaro/statsd.v2", + ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/Makefile b/Makefile index ea7705f..2f4f1e5 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,13 @@ ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) IMAGE_NAME := mtg APP_NAME := $(IMAGE_NAME) -GOMETALINTER := gometalinter VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor") CC_BINARIES := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}") APP_DEPS := version.go $(VENDOR_FILES) +GOLANGCI_LINT_VERSION := v1.9.1 + COMMON_BUILD_FLAGS := -ldflags="-s -w" # ----------------------------------------------------------------------------- @@ -31,7 +32,7 @@ ccbuilds: version.go: @go generate main.go -vendor: Gopkg.lock Gopkg.toml install-cli +vendor: Gopkg.lock Gopkg.toml install-dep @dep ensure # ----------------------------------------------------------------------------- @@ -50,12 +51,12 @@ crosscompile-dir: @rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)" .PHONY: test -test: vendor install-cli version.go +test: vendor version.go @go test -v ./... .PHONY: lint -lint: vendor install-cli version.go - @$(GOMETALINTER) --deadline=2m ./... +lint: version.go + @golangci-lint run .PHONY: clean clean: @@ -67,14 +68,14 @@ clean: docker: @docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)" -.PHONY: install-cli -install-cli: install-dep install-lint +.PHONY: prepare +prepare: install-dep install-lint .PHONY: install-dep install-dep: - @go get github.com/golang/dep/cmd/dep + @go get -u github.com/golang/dep/cmd/dep .PHONY: install-lint install-lint: - @go get github.com/alecthomas/gometalinter && \ - $(GOMETALINTER) --install >/dev/null + @curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \ + | bash -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION) diff --git a/main.go b/main.go index 31f8c08..a3637ab 100644 --- a/main.go +++ b/main.go @@ -25,74 +25,90 @@ import ( var ( app = kingpin.New("mtg", "Simple MTPROTO proxy.") - debug = app.Flag("debug", "Run in debug mode."). + debug = app.Flag("debug", + "Run in debug mode."). Short('d'). Envar("MTG_DEBUG"). Bool() - verbose = app.Flag("verbose", "Run in verbose mode."). + verbose = app.Flag("verbose", + "Run in verbose mode."). Short('v'). Envar("MTG_VERBOSE"). Bool() - bindIP = app.Flag("bind-ip", "Which IP to bind to."). + bindIP = app.Flag("bind-ip", + "Which IP to bind to."). Short('b'). Envar("MTG_IP"). Default("127.0.0.1"). IP() - bindPort = app.Flag("bind-port", "Which port to bind to."). - Short('p'). - Envar("MTG_PORT"). - Default("3128"). - Uint16() + bindPort = app.Flag("bind-port", + "Which port to bind to."). + Short('p'). + Envar("MTG_PORT"). + Default("3128"). + Uint16() - publicIPv4 = app.Flag("public-ipv4", "Which IPv4 address is public."). - Short('4'). - Envar("MTG_IPV4"). - IP() - publicIPv4Port = app.Flag("public-ipv4-port", "Which IPv4 port is public. Default is 'bind-port' value."). - Envar("MTG_IPV4_PORT"). - Uint16() + publicIPv4 = app.Flag("public-ipv4", + "Which IPv4 address is public."). + Short('4'). + Envar("MTG_IPV4"). + IP() + publicIPv4Port = app.Flag("public-ipv4-port", + "Which IPv4 port is public. Default is 'bind-port' value."). + Envar("MTG_IPV4_PORT"). + Uint16() - publicIPv6 = app.Flag("public-ipv6", "Which IPv6 address is public."). - Short('6'). - Envar("MTG_IPV6"). - IP() - publicIPv6Port = app.Flag("public-ipv6-port", "Which IPv6 port is public. Default is 'bind-port' value."). - Envar("MTG_IPV6_PORT"). - Uint16() + publicIPv6 = app.Flag("public-ipv6", + "Which IPv6 address is public."). + Short('6'). + Envar("MTG_IPV6"). + IP() + publicIPv6Port = app.Flag("public-ipv6-port", + "Which IPv6 port is public. Default is 'bind-port' value."). + Envar("MTG_IPV6_PORT"). + Uint16() - statsIP = app.Flag("stats-ip", "Which IP bind stats server to."). + statsIP = app.Flag("stats-ip", + "Which IP bind stats server to."). Short('t'). Envar("MTG_STATS_IP"). Default("127.0.0.1"). IP() - statsPort = app.Flag("stats-port", "Which port bind stats to."). - Short('q'). - Envar("MTG_STATS_PORT"). - Default("3129"). - Uint16() + statsPort = app.Flag("stats-port", + "Which port bind stats to."). + Short('q'). + Envar("MTG_STATS_PORT"). + Default("3129"). + Uint16() - statsdIP = app.Flag("statsd-ip", "Which IP should we use for working with statsd."). - Envar("MTG_STATSD_IP"). - String() - statsdPort = app.Flag("statsd-port", "Which port should we use for working with statsd."). - Envar("MTG_STATSD_PORT"). - Default("8125"). - Uint16() - statsdNetwork = app.Flag("statsd-network", "Which network is used to work with statsd. Only 'tcp' and 'udp' are supported."). - Envar("MTG_STATSD_NETWORK"). - Default("udp"). - String() - statsdPrefix = app.Flag("statsd-prefix", "Which bucket prefix should we use for sending stats to statsd."). - Envar("MTG_STATSD_PREFIX"). - Default("mtg"). - String() - statsdTagsFormat = app.Flag("statsd-tags-format", "Which tag format should we use to send stats metrics. Valid options are 'datadog' and 'influxdb'."). - Envar("MTG_STATSD_TAGS_FORMAT"). - String() - statsdTags = app.Flag("statsd-tags", "Tags to use for working with statsd (specified as 'key=value')."). - Envar("MTG_STATSD_TAGS"). - StringMap() + statsdIP = app.Flag("statsd-ip", + "Which IP should we use for working with statsd."). + Envar("MTG_STATSD_IP"). + String() + statsdPort = app.Flag("statsd-port", + "Which port should we use for working with statsd."). + Envar("MTG_STATSD_PORT"). + Default("8125"). + Uint16() + statsdNetwork = app.Flag("statsd-network", + "Which network is used to work with statsd. Only 'tcp' and 'udp' are supported."). + Envar("MTG_STATSD_NETWORK"). + Default("udp"). + String() + statsdPrefix = app.Flag("statsd-prefix", + "Which bucket prefix should we use for sending stats to statsd."). + Envar("MTG_STATSD_PREFIX"). + Default("mtg"). + String() + statsdTagsFormat = app.Flag("statsd-tags-format", + "Which tag format should we use to send stats metrics. Valid options are 'datadog' and 'influxdb'."). + Envar("MTG_STATSD_TAGS_FORMAT"). + String() + statsdTags = app.Flag("statsd-tags", + "Tags to use for working with statsd (specified as 'key=value')."). + Envar("MTG_STATSD_TAGS"). + StringMap() secret = app.Arg("secret", "Secret of this proxy.").Required().String() adtag = app.Arg("adtag", "ADTag of the proxy.").String() @@ -150,7 +166,8 @@ func main() { zap.S().Warnw("Could not fetch time data from NTP") } else { if diff >= time.Second { - usage(fmt.Sprintf("You choose to use middle proxy but your clock drift (%s) is bigger than 1 second. Please, sync your time", diff)) + usage(fmt.Sprintf("You choose to use middle proxy but your clock drift (%s) "+ + "is bigger than 1 second. Please, sync your time", diff)) } go ntp.AutoUpdate() } diff --git a/mtproto/rpc/proxy_flags.go b/mtproto/rpc/proxy_flags.go index 0167162..c59d33f 100644 --- a/mtproto/rpc/proxy_flags.go +++ b/mtproto/rpc/proxy_flags.go @@ -9,13 +9,13 @@ type proxyRequestFlags uint32 const ( proxyRequestFlagsHasAdTag proxyRequestFlags = 0x8 - proxyRequestFlagsEncrypted = 0x2 - proxyRequestFlagsMagic = 0x1000 - proxyRequestFlagsExtMode2 = 0x20000 - proxyRequestFlagsIntermediate = 0x20000000 - proxyRequestFlagsAbdridged = 0x40000000 - proxyRequestFlagsQuickAck = 0x80000000 - proxyRequestFlagsPad = 0x8000000 + proxyRequestFlagsEncrypted proxyRequestFlags = 0x2 + proxyRequestFlagsMagic proxyRequestFlags = 0x1000 + proxyRequestFlagsExtMode2 proxyRequestFlags = 0x20000 + proxyRequestFlagsIntermediate proxyRequestFlags = 0x20000000 + proxyRequestFlagsAbdridged proxyRequestFlags = 0x40000000 + proxyRequestFlagsQuickAck proxyRequestFlags = 0x80000000 + proxyRequestFlagsPad proxyRequestFlags = 0x8000000 ) var proxyRequestFlagsEncryptedPrefix [8]byte diff --git a/mtproto/rpc/proxy_request.go b/mtproto/rpc/proxy_request.go index b377fbe..6250528 100644 --- a/mtproto/rpc/proxy_request.go +++ b/mtproto/rpc/proxy_request.go @@ -64,7 +64,8 @@ func (r *ProxyRequest) MakeHeader(message []byte) (*bytes.Buffer, fmt.Stringer) } // NewProxyRequest build new ProxyRequest data structure. -func NewProxyRequest(clientAddr, ownAddr *net.TCPAddr, opts *mtproto.ConnectionOpts, adTag []byte) (*ProxyRequest, error) { +func NewProxyRequest(clientAddr, ownAddr *net.TCPAddr, + opts *mtproto.ConnectionOpts, adTag []byte) (*ProxyRequest, error) { flags := proxyRequestFlagsHasAdTag | proxyRequestFlagsMagic | proxyRequestFlagsExtMode2 switch opts.ConnectionType { diff --git a/obfuscated2/obfuscated2_test.go b/obfuscated2/obfuscated2_test.go index c6b5c4a..aae91ee 100644 --- a/obfuscated2/obfuscated2_test.go +++ b/obfuscated2/obfuscated2_test.go @@ -47,8 +47,8 @@ func TestObfs2Full(t *testing.T) { clientFrame := generateFrame(mtproto.ConnectionTypeIntermediate) clientHasher := sha256.New() - clientHasher.Write(clientFrame.Key()) - clientHasher.Write(secret) + clientHasher.Write(clientFrame.Key()) // nolint: errcheck + clientHasher.Write(secret) // nolint: errcheck clientKey := clientHasher.Sum(nil) encryptor := makeStreamCipher(clientKey, clientFrame.IV()) @@ -58,8 +58,8 @@ func TestObfs2Full(t *testing.T) { invertedClientFrame := clientFrame.Invert() clientHasher = sha256.New() - clientHasher.Write(invertedClientFrame.Key()) - clientHasher.Write(secret) + clientHasher.Write(invertedClientFrame.Key()) // nolint: errcheck + clientHasher.Write(secret) // nolint: errcheck invertedClientKey := clientHasher.Sum(nil) clientDecryptor := makeStreamCipher(invertedClientKey, invertedClientFrame.IV()) diff --git a/proxy/proxy.go b/proxy/proxy.go index 3fba774..b8866b9 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -106,7 +106,8 @@ func (p *Proxy) getTelegramConn(opts *mtproto.ConnectionOpts, connID string) (wr return packetConn, nil } -func (p *Proxy) middlePipe(src wrappers.PacketReadCloser, dst io.WriteCloser, wait *sync.WaitGroup, hacks *mtproto.Hacks) { +func (p *Proxy) middlePipe(src wrappers.PacketReadCloser, dst io.WriteCloser, + wait *sync.WaitGroup, hacks *mtproto.Hacks) { defer func() { src.Close() // nolint: errcheck dst.Close() // nolint: errcheck diff --git a/stats/server.go b/stats/server.go index 8a111f9..8c59e46 100644 --- a/stats/server.go +++ b/stats/server.go @@ -13,7 +13,7 @@ import ( var instance *stats -// Start starts new statisitcs server. +// Start starts new statistics server. func Start(conf *config.Config) error { log := zap.S().Named("stats") diff --git a/telegram/direct.go b/telegram/direct.go index 0656a50..e5dd6cf 100644 --- a/telegram/direct.go +++ b/telegram/direct.go @@ -13,18 +13,18 @@ import ( var ( directV4Addresses = map[int16][]string{ - 0: []string{"149.154.175.50:443"}, - 1: []string{"149.154.167.51:443"}, - 2: []string{"149.154.175.100:443"}, - 3: []string{"149.154.167.91:443"}, - 4: []string{"149.154.171.5:443"}, + 0: {"149.154.175.50:443"}, + 1: {"149.154.167.51:443"}, + 2: {"149.154.175.100:443"}, + 3: {"149.154.167.91:443"}, + 4: {"149.154.171.5:443"}, } directV6Addresses = map[int16][]string{ - 0: []string{"[2001:b28:f23d:f001::a]:443"}, - 1: []string{"[2001:67c:04e8:f002::a]:443"}, - 2: []string{"[2001:b28:f23d:f003::a]:443"}, - 3: []string{"[2001:67c:04e8:f004::a]:443"}, - 4: []string{"[2001:b28:f23f:f005::a]:443"}, + 0: {"[2001:b28:f23d:f001::a]:443"}, + 1: {"[2001:67c:04e8:f002::a]:443"}, + 2: {"[2001:b28:f23d:f003::a]:443"}, + 3: {"[2001:67c:04e8:f004::a]:443"}, + 4: {"[2001:b28:f23f:f005::a]:443"}, } ) @@ -43,7 +43,8 @@ func (t *directTelegram) Dial(connID string, connOpts *mtproto.ConnectionOpts) ( return t.baseTelegram.dial(dc-1, connID, connOpts.ConnectionProto) } -func (t *directTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) { +func (t *directTelegram) Init(connOpts *mtproto.ConnectionOpts, + conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) { obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame(connOpts) if _, err := conn.Write(frame); err != nil { @@ -56,12 +57,14 @@ func (t *directTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.St // NewDirectTelegram returns Telegram instance which connects directly // to Telegram bypassing middleproxies. func NewDirectTelegram(conf *config.Config) Telegram { - return &directTelegram{baseTelegram{ - dialer: tgDialer{ - Dialer: net.Dialer{Timeout: telegramDialTimeout}, - conf: conf, + return &directTelegram{ + baseTelegram: baseTelegram{ + dialer: tgDialer{ + Dialer: net.Dialer{Timeout: telegramDialTimeout}, + conf: conf, + }, + v4Addresses: directV4Addresses, + v6Addresses: directV6Addresses, }, - v4Addresses: directV4Addresses, - v6Addresses: directV6Addresses, - }} + } } diff --git a/telegram/middle.go b/telegram/middle.go index 1724bf0..62ff4ba 100644 --- a/telegram/middle.go +++ b/telegram/middle.go @@ -20,7 +20,8 @@ type middleTelegram struct { conf *config.Config } -func (t *middleTelegram) Init(connOpts *mtproto.ConnectionOpts, conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) { +func (t *middleTelegram) Init(connOpts *mtproto.ConnectionOpts, + conn wrappers.StreamReadWriteCloser) (wrappers.Wrap, error) { rpcNonceConn := wrappers.NewMTProtoFrame(conn, rpc.SeqNoNonce) rpcNonceReq, err := t.sendRPCNonceRequest(rpcNonceConn) @@ -65,7 +66,8 @@ func (t *middleTelegram) sendRPCNonceRequest(conn io.Writer) (*rpc.NonceRequest, return rpcNonceReq, nil } -func (t *middleTelegram) receiveRPCNonceResponse(conn wrappers.PacketReader, req *rpc.NonceRequest) (*rpc.NonceResponse, error) { +func (t *middleTelegram) receiveRPCNonceResponse(conn wrappers.PacketReader, + req *rpc.NonceRequest) (*rpc.NonceResponse, error) { packet, err := conn.Read() if err != nil { return nil, errors.Annotate(err, "Cannot read RPC nonce response") @@ -91,7 +93,8 @@ func (t *middleTelegram) sendRPCHandshakeRequest(conn io.Writer) (*rpc.Handshake return req, nil } -func (t *middleTelegram) receiveRPCHandshakeResponse(conn wrappers.PacketReader, req *rpc.HandshakeRequest) (*rpc.HandshakeResponse, error) { +func (t *middleTelegram) receiveRPCHandshakeResponse(conn wrappers.PacketReader, + req *rpc.HandshakeRequest) (*rpc.HandshakeResponse, error) { packet, err := conn.Read() if err != nil { return nil, errors.Annotate(err, "Cannot read RPC handshake response") diff --git a/telegram/middle_caller.go b/telegram/middle_caller.go index bb5961a..f0e6721 100644 --- a/telegram/middle_caller.go +++ b/telegram/middle_caller.go @@ -38,7 +38,8 @@ type middleTelegramCaller struct { httpClient *http.Client } -func (t *middleTelegramCaller) Dial(connID string, connOpts *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) { +func (t *middleTelegramCaller) Dial(connID string, + connOpts *mtproto.ConnectionOpts) (wrappers.StreamReadWriteCloser, error) { dc := connOpts.DC if dc == 0 { dc = 1 diff --git a/telegram/telegram.go b/telegram/telegram.go index b6b34ef..05617d4 100644 --- a/telegram/telegram.go +++ b/telegram/telegram.go @@ -22,7 +22,8 @@ type baseTelegram struct { v6Addresses map[int16][]string } -func (b *baseTelegram) dial(dcIdx int16, connID string, proto mtproto.ConnectionProtocol) (wrappers.StreamReadWriteCloser, error) { +func (b *baseTelegram) dial(dcIdx int16, connID string, + proto mtproto.ConnectionProtocol) (wrappers.StreamReadWriteCloser, error) { addrs := make([]string, 2) if proto&mtproto.ConnectionProtocolIPv6 != 0 { diff --git a/wrappers/conn.go b/wrappers/conn.go index 408483a..da6097c 100644 --- a/wrappers/conn.go +++ b/wrappers/conn.go @@ -9,7 +9,7 @@ import ( "github.com/9seconds/mtg/stats" ) -// ConnPurpose is intented to be identifier of connection purpose. We +// ConnPurpose is intended to be identifier of connection purpose. We // sometimes want to treat client/telegram connection differently (for // logging for example). type ConnPurpose uint8 diff --git a/wrappers/mtproto_cipher.go b/wrappers/mtproto_cipher.go index bd26eb3..363ecd6 100644 --- a/wrappers/mtproto_cipher.go +++ b/wrappers/mtproto_cipher.go @@ -24,7 +24,8 @@ var emptyIP = [4]byte{0x00, 0x00, 0x00, 0x00} // NewMiddleProxyCipher creates new block cipher to proxy<->telegram // connection. -func NewMiddleProxyCipher(conn StreamReadWriteCloser, req *rpc.NonceRequest, resp *rpc.NonceResponse, secret []byte) StreamReadWriteCloser { +func NewMiddleProxyCipher(conn StreamReadWriteCloser, + req *rpc.NonceRequest, resp *rpc.NonceResponse, secret []byte) StreamReadWriteCloser { localAddr := conn.LocalAddr() remoteAddr := conn.RemoteAddr() @@ -37,7 +38,8 @@ func NewMiddleProxyCipher(conn StreamReadWriteCloser, req *rpc.NonceRequest, res return NewBlockCipher(conn, enc, dec) } -func deriveKeys(purpose cipherPurpose, req *rpc.NonceRequest, resp *rpc.NonceResponse, client *net.TCPAddr, remote *net.TCPAddr, secret []byte) ([]byte, []byte) { +func deriveKeys(purpose cipherPurpose, req *rpc.NonceRequest, resp *rpc.NonceResponse, + client, remote *net.TCPAddr, secret []byte) ([]byte, []byte) { message := bytes.Buffer{} message.Write(resp.Nonce[:]) message.Write(req.Nonce[:]) diff --git a/wrappers/mtproto_frame.go b/wrappers/mtproto_frame.go index 58a523c..27105e6 100644 --- a/wrappers/mtproto_frame.go +++ b/wrappers/mtproto_frame.go @@ -61,7 +61,8 @@ func (m *MTProtoFrame) Read() ([]byte, error) { // nolint: gocyclo "messageLength", messageLength, "sequence_number", m.readSeqNo, ) - if messageLength%4 != 0 || messageLength < mtprotoFrameMinMessageLength || messageLength > mtprotoFrameMaxMessageLength { + if messageLength%4 != 0 || messageLength < mtprotoFrameMinMessageLength || + messageLength > mtprotoFrameMaxMessageLength { return nil, errors.Errorf("Incorrect frame message length %d", messageLength) } diff --git a/wrappers/mtproto_proxy.go b/wrappers/mtproto_proxy.go index 1babb95..92ca00a 100644 --- a/wrappers/mtproto_proxy.go +++ b/wrappers/mtproto_proxy.go @@ -56,7 +56,7 @@ func (m *MTProtoProxy) Read() ([]byte, error) { case bytes.Equal(tag, rpc.TagSimpleAck): return m.readSimpleAck(packet) case bytes.Equal(tag, rpc.TagCloseExt): - return m.readCloseExt(packet) + return m.readCloseExt() } return nil, errors.Errorf("Unknown RPC answer %v", tag) @@ -91,7 +91,7 @@ func (m *MTProtoProxy) readSimpleAck(data []byte) ([]byte, error) { return data, nil } -func (m *MTProtoProxy) readCloseExt(data []byte) ([]byte, error) { +func (m *MTProtoProxy) readCloseExt() ([]byte, error) { m.logger.Debugw("Read RPC_CLOSE_EXT", "counter", m.readCounter) return nil, errors.New("Connection has been closed remotely by RPC call") @@ -150,7 +150,8 @@ func (m *MTProtoProxy) Close() error { } // NewMTProtoProxy creates new RPC wrapper. -func NewMTProtoProxy(conn PacketReadWriteCloser, connOpts *mtproto.ConnectionOpts, adTag []byte) (PacketReadWriteCloser, error) { +func NewMTProtoProxy(conn PacketReadWriteCloser, connOpts *mtproto.ConnectionOpts, + adTag []byte) (PacketReadWriteCloser, error) { req, err := rpc.NewProxyRequest(connOpts.ClientAddr, conn.LocalAddr(), connOpts, adTag) if err != nil { return nil, errors.Annotate(err, "Cannot create new RPC proxy request")