Просмотр исходного кода

Merge remote-tracking branch 'origin/master' into stable

tags/v1.0.5
9seconds 6 лет назад
Родитель
Сommit
e5b9c841cd
7 измененных файлов: 57 добавлений и 10 удалений
  1. 1
    1
      cli/proxy.go
  2. 47
    0
      config/config.go
  3. 1
    1
      go.mod
  4. 2
    0
      go.sum
  5. 2
    2
      proxy/proxy.go
  6. 1
    1
      telegram/base.go
  7. 3
    5
      utils/init_tcp.go

+ 1
- 1
cli/proxy.go Просмотреть файл

50
 
50
 
51
 	zap.S().Debugw("Configuration", "config", config.Printable())
51
 	zap.S().Debugw("Configuration", "config", config.Printable())
52
 
52
 
53
-	if len(config.C.AdTag) > 0 {
53
+	if config.C.MiddleProxyMode() {
54
 		zap.S().Infow("Use middle proxy connection to Telegram")
54
 		zap.S().Infow("Use middle proxy connection to Telegram")
55
 
55
 
56
 		diff, err := ntp.Fetch()
56
 		diff, err := ntp.Fetch()

+ 47
- 0
config/config.go Просмотреть файл

6
 	"encoding/json"
6
 	"encoding/json"
7
 	"errors"
7
 	"errors"
8
 	"fmt"
8
 	"fmt"
9
+	"math"
9
 	"net"
10
 	"net"
10
 
11
 
11
 	"github.com/alecthomas/units"
12
 	"github.com/alecthomas/units"
104
 	AdTag  []byte `json:"adtag"`
105
 	AdTag  []byte `json:"adtag"`
105
 }
106
 }
106
 
107
 
108
+func (c *Config) ClientReadBuffer() int {
109
+	return c.ReadBuffer
110
+}
111
+
112
+func (c *Config) ClientWriteBuffer() int {
113
+	return c.WriteBuffer
114
+}
115
+
116
+func (c *Config) MiddleProxyMode() bool {
117
+	return len(c.AdTag) > 0
118
+}
119
+
120
+func (c *Config) ProxyReadBuffer() int {
121
+	value := c.ReadBuffer
122
+
123
+	if c.MiddleProxyMode() {
124
+		value = c.adjustProxyValue(value)
125
+	}
126
+
127
+	return value
128
+}
129
+
130
+func (c *Config) ProxyWriteBuffer() int {
131
+	value := c.WriteBuffer
132
+
133
+	if c.MiddleProxyMode() {
134
+		value = c.adjustProxyValue(value)
135
+	}
136
+
137
+	return value
138
+}
139
+
140
+func (c *Config) adjustProxyValue(value int) int {
141
+	if c.MultiplexPerConnection == 0 {
142
+		return value
143
+	}
144
+
145
+	fvalue := float64(value)
146
+
147
+	newValue := fvalue * 2 * math.Log(float64(c.MultiplexPerConnection))
148
+	newValue = math.Ceil(newValue)
149
+	newValue = math.Max(fvalue, newValue)
150
+
151
+	return int(newValue)
152
+}
153
+
107
 type Opt struct {
154
 type Opt struct {
108
 	Option OptionType
155
 	Option OptionType
109
 	Value  interface{}
156
 	Value  interface{}

+ 1
- 1
go.mod Просмотреть файл

14
 	golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59
14
 	golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59
15
 	golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
15
 	golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
16
 	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
16
 	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
17
-	golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd
17
+	golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775
18
 	golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458 // indirect
18
 	golang.org/x/tools v0.0.0-20200319210407-521f4a0cd458 // indirect
19
 	gopkg.in/alecthomas/kingpin.v2 v2.2.6
19
 	gopkg.in/alecthomas/kingpin.v2 v2.2.6
20
 	honnef.co/go/tools v0.0.1-2020.1.3 // indirect
20
 	honnef.co/go/tools v0.0.1-2020.1.3 // indirect

+ 2
- 0
go.sum Просмотреть файл

156
 golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
156
 golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
157
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
157
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
158
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
158
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
159
+golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 h1:TC0v2RSO1u2kn1ZugjrFXkRZAEaqMN/RW+OTZkBzmLE=
160
+golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
159
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
161
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
160
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
162
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
161
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
163
 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=

+ 2
- 2
proxy/proxy.go Просмотреть файл

51
 	connID := conntypes.NewConnID()
51
 	connID := conntypes.NewConnID()
52
 	logger := p.Logger.With("connection_id", connID)
52
 	logger := p.Logger.With("connection_id", connID)
53
 
53
 
54
-	if err := utils.InitTCP(conn); err != nil {
54
+	if err := utils.InitTCP(conn, config.C.ClientReadBuffer(), config.C.ClientWriteBuffer()); err != nil {
55
 		logger.Errorw("Cannot initialize client TCP connection", "error", err)
55
 		logger.Errorw("Cannot initialize client TCP connection", "error", err)
56
 		return
56
 		return
57
 	}
57
 	}
90
 
90
 
91
 	err = nil
91
 	err = nil
92
 
92
 
93
-	if len(config.C.AdTag) > 0 {
93
+	if config.C.MiddleProxyMode() {
94
 		middleConnection(req)
94
 		middleConnection(req)
95
 	} else {
95
 	} else {
96
 		err = directConnection(req)
96
 		err = directConnection(req)

+ 1
- 1
telegram/base.go Просмотреть файл

37
 			continue
37
 			continue
38
 		}
38
 		}
39
 
39
 
40
-		if err := utils.InitTCP(conn); err != nil {
40
+		if err := utils.InitTCP(conn, config.C.ProxyReadBuffer(), config.C.ProxyWriteBuffer()); err != nil {
41
 			b.logger.Infow("Cannot initialize TCP socket", "address", addr, "error", err)
41
 			b.logger.Infow("Cannot initialize TCP socket", "address", addr, "error", err)
42
 			continue
42
 			continue
43
 		}
43
 		}

+ 3
- 5
utils/init_tcp.go Просмотреть файл

4
 	"fmt"
4
 	"fmt"
5
 	"net"
5
 	"net"
6
 	"time"
6
 	"time"
7
-
8
-	"github.com/9seconds/mtg/config"
9
 )
7
 )
10
 
8
 
11
 const tcpKeepAlivePingPeriod = 2 * time.Second
9
 const tcpKeepAlivePingPeriod = 2 * time.Second
12
 
10
 
13
-func InitTCP(conn net.Conn) error {
11
+func InitTCP(conn net.Conn, readBufferSize int, writeBufferSize int) error {
14
 	tcpConn := conn.(*net.TCPConn)
12
 	tcpConn := conn.(*net.TCPConn)
15
 
13
 
16
 	if err := tcpConn.SetNoDelay(true); err != nil {
14
 	if err := tcpConn.SetNoDelay(true); err != nil {
17
 		return fmt.Errorf("cannot set TCP_NO_DELAY: %w", err)
15
 		return fmt.Errorf("cannot set TCP_NO_DELAY: %w", err)
18
 	}
16
 	}
19
 
17
 
20
-	if err := tcpConn.SetReadBuffer(config.C.ReadBuffer); err != nil {
18
+	if err := tcpConn.SetReadBuffer(readBufferSize); err != nil {
21
 		return fmt.Errorf("cannot set read buffer size: %w", err)
19
 		return fmt.Errorf("cannot set read buffer size: %w", err)
22
 	}
20
 	}
23
 
21
 
24
-	if err := tcpConn.SetWriteBuffer(config.C.WriteBuffer); err != nil {
22
+	if err := tcpConn.SetWriteBuffer(writeBufferSize); err != nil {
25
 		return fmt.Errorf("cannot set write buffer size: %w", err)
23
 		return fmt.Errorf("cannot set write buffer size: %w", err)
26
 	}
24
 	}
27
 
25
 

Загрузка…
Отмена
Сохранить