Przeglądaj źródła

Fix linters

tags/0.9
9seconds 7 lat temu
rodzic
commit
b0292e4ed9

+ 1
- 0
client/client.go Wyświetl plik

@@ -7,4 +7,5 @@ import (
7 7
 	"github.com/9seconds/mtg/config"
8 8
 )
9 9
 
10
+// Init has to initialize client connection based on given config.
10 11
 type Init func(net.Conn, *config.Config) (int16, io.ReadWriteCloser, error)

+ 1
- 0
client/direct.go Wyświetl plik

@@ -11,6 +11,7 @@ import (
11 11
 	"github.com/9seconds/mtg/wrappers"
12 12
 )
13 13
 
14
+// DirectInit initializes client to access Telegram bypassing middleproxies.
14 15
 func DirectInit(conn net.Conn, conf *config.Config) (int16, io.ReadWriteCloser, error) {
15 16
 	socket := wrappers.NewTimeoutRWC(conn, conf.TimeoutRead, conf.TimeoutWrite)
16 17
 	frame, err := obfuscated2.ExtractFrame(socket)

+ 2
- 0
telegram/direct.go Wyświetl plik

@@ -50,6 +50,8 @@ func (t *directTelegram) Init(conn io.ReadWriteCloser) (io.ReadWriteCloser, erro
50 50
 	return wrappers.NewStreamCipherRWC(conn, obfs2.Encryptor, obfs2.Decryptor), nil
51 51
 }
52 52
 
53
+// NewDirectTelegram returns Telegram instance which connects directly
54
+// to Telegram bypassing middleproxies.
53 55
 func NewDirectTelegram(conf *config.Config) Telegram {
54 56
 	return &directTelegram{baseTelegram{
55 57
 		dialer:      newDialer(conf),

+ 3
- 0
telegram/telegram.go Wyświetl plik

@@ -7,6 +7,9 @@ import (
7 7
 	"github.com/juju/errors"
8 8
 )
9 9
 
10
+// Telegram defines an interface to connect to Telegram. This
11
+// encapsulates logic of working with middleproxies or direct
12
+// connections.
10 13
 type Telegram interface {
11 14
 	Dial(int16) (io.ReadWriteCloser, error)
12 15
 	Init(io.ReadWriteCloser) (io.ReadWriteCloser, error)

+ 0
- 73
wrappers/blockcipherrwc.go Wyświetl plik

@@ -1,73 +0,0 @@
1
-package wrappers
2
-
3
-import (
4
-	"bytes"
5
-	"crypto/cipher"
6
-	"io"
7
-
8
-	"github.com/juju/errors"
9
-)
10
-
11
-type BlockCipherReadWriteCloser struct {
12
-	encryptor cipher.BlockMode
13
-	decryptor cipher.BlockMode
14
-	conn      io.ReadWriteCloser
15
-	buf       *bytes.Buffer
16
-}
17
-
18
-func (c *BlockCipherReadWriteCloser) Read(p []byte) (n int, err error) {
19
-	blockSize := c.decryptor.BlockSize()
20
-	if len(p) < blockSize {
21
-		return 0, errors.New("Cannot read less than blocksize")
22
-	}
23
-
24
-	n, err = c.conn.Read(p)
25
-	c.buf.Write(p[:n])
26
-
27
-	wantToRead := c.getFullBlocks(len(p), blockSize)
28
-	haveBlocks := c.getFullBlocks(c.buf.Len(), blockSize)
29
-	if haveBlocks < wantToRead {
30
-		wantToRead = haveBlocks
31
-	}
32
-	wantToRead *= blockSize
33
-
34
-	data := c.buf.Bytes()
35
-	c.decryptor.CryptBlocks(p, data[:wantToRead])
36
-	c.buf = bytes.NewBuffer(data[wantToRead:])
37
-
38
-	return wantToRead, err
39
-}
40
-
41
-func (c *BlockCipherReadWriteCloser) Write(p []byte) (n int, err error) {
42
-	blockSize := c.encryptor.BlockSize()
43
-	if len(p)%blockSize != 0 {
44
-		return 0, errors.New("Write size should be compatible with block size")
45
-	}
46
-
47
-	buf := make([]byte, len(p))
48
-	c.encryptor.CryptBlocks(buf, p)
49
-
50
-	return c.conn.Write(buf)
51
-}
52
-
53
-func (c *BlockCipherReadWriteCloser) Close() error {
54
-	return c.conn.Close()
55
-}
56
-
57
-func (c *BlockCipherReadWriteCloser) getFullBlocks(number, blockSize int) int {
58
-	blocks := number / blockSize
59
-
60
-	if blocks > 0 && number%blockSize != 0 {
61
-		blocks--
62
-	}
63
-
64
-	return blocks
65
-}
66
-
67
-func NewBlockCipherRWC(conn io.ReadWriteCloser, encryptor, decryptor cipher.BlockMode) io.ReadWriteCloser {
68
-	return &BlockCipherReadWriteCloser{
69
-		conn:      conn,
70
-		encryptor: encryptor,
71
-		decryptor: decryptor,
72
-	}
73
-}

+ 2
- 0
wrappers/ctxrwc.go Wyświetl plik

@@ -48,6 +48,8 @@ func (c *CtxReadWriteCloser) Close() error {
48 48
 	return c.conn.Close()
49 49
 }
50 50
 
51
+// NewCtxRWC returns ReadWriteCloser which respects given context,
52
+// cancellation etc.
51 53
 func NewCtxRWC(ctx context.Context, cancel context.CancelFunc, conn io.ReadWriteCloser) io.ReadWriteCloser {
52 54
 	return &CtxReadWriteCloser{
53 55
 		conn:   conn,

+ 1
- 0
wrappers/logrwc.go Wyświetl plik

@@ -36,6 +36,7 @@ func (l *LogReadWriteCloser) Close() error {
36 36
 	return err
37 37
 }
38 38
 
39
+// NewLogRWC wraps ReadWriteCloser with logger calls.
39 40
 func NewLogRWC(conn io.ReadWriteCloser, logger *zap.SugaredLogger, sockid string, name string) io.ReadWriteCloser {
40 41
 	return &LogReadWriteCloser{
41 42
 		conn:   conn,

+ 4
- 0
wrappers/streamcipherrwc.go Wyświetl plik

@@ -5,6 +5,8 @@ import (
5 5
 	"io"
6 6
 )
7 7
 
8
+// StreamCipherReadWriteCloser is a ReadWriteCloser which ciphers
9
+// incoming and outgoing data with givem cipher.Stream instances.
8 10
 type StreamCipherReadWriteCloser struct {
9 11
 	encryptor cipher.Stream
10 12
 	decryptor cipher.Stream
@@ -41,6 +43,8 @@ func (c *StreamCipherReadWriteCloser) Close() error {
41 43
 	return c.conn.Close()
42 44
 }
43 45
 
46
+// NewStreamCipherRWC returns wrapper which transparently
47
+// encrypts/decrypts traffic with obfuscated2 protocol.
44 48
 func NewStreamCipherRWC(conn io.ReadWriteCloser, encryptor, decryptor cipher.Stream) io.ReadWriteCloser {
45 49
 	return &StreamCipherReadWriteCloser{
46 50
 		conn:      conn,

+ 2
- 0
wrappers/timeoutrwc.go Wyświetl plik

@@ -31,6 +31,8 @@ func (t *TimeoutReadWriteCloser) Close() error {
31 31
 	return t.conn.Close()
32 32
 }
33 33
 
34
+// NewTimeoutRWC returns wrapper over net.Conn which sets deadlines for
35
+// every wrapped Read/Write.
34 36
 func NewTimeoutRWC(conn net.Conn, readTimeout, writeTimeout time.Duration) io.ReadWriteCloser {
35 37
 	return &TimeoutReadWriteCloser{
36 38
 		conn:         conn,

+ 1
- 0
wrappers/trafficrwc.go Wyświetl plik

@@ -29,6 +29,7 @@ func (t *TrafficReadWriteCloser) Close() error {
29 29
 	return t.conn.Close()
30 30
 }
31 31
 
32
+// NewTrafficRWC wraps ReadWriteCloser to have read/write callbacks.
32 33
 func NewTrafficRWC(conn io.ReadWriteCloser, readCallback, writeCallback func(int)) io.ReadWriteCloser {
33 34
 	return &TrafficReadWriteCloser{
34 35
 		conn:          conn,

Ładowanie…
Anuluj
Zapisz