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

Refactor trafficrwc to wrappers

tags/0.9
9seconds 8 лет назад
Родитель
Сommit
7f01c03cb7
3 измененных файлов: 44 добавлений и 4 удалений
  1. 2
    2
      proxy/server.go
  2. 40
    0
      wrappers/timeoutrwc.go
  3. 2
    2
      wrappers/trafficrwc.go

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

113
 
113
 
114
 func (s *Server) getClientStream(ctx context.Context, cancel context.CancelFunc, conn net.Conn, socketID string) (io.ReadWriteCloser, int16, error) {
114
 func (s *Server) getClientStream(ctx context.Context, cancel context.CancelFunc, conn net.Conn, socketID string) (io.ReadWriteCloser, int16, error) {
115
 	wConn := wrappers.NewTimeoutRWC(conn, s.readTimeout, s.writeTimeout)
115
 	wConn := wrappers.NewTimeoutRWC(conn, s.readTimeout, s.writeTimeout)
116
-	wConn = newTrafficReadWriteCloser(wConn, s.stats.addIncomingTraffic, s.stats.addOutgoingTraffic)
116
+	wConn = wrappers.NewTrafficRWC(wConn, s.stats.addIncomingTraffic, s.stats.addOutgoingTraffic)
117
 	frame, err := obfuscated2.ExtractFrame(wConn)
117
 	frame, err := obfuscated2.ExtractFrame(wConn)
118
 	if err != nil {
118
 	if err != nil {
119
 		return nil, 0, errors.Annotate(err, "Cannot create client stream")
119
 		return nil, 0, errors.Annotate(err, "Cannot create client stream")
137
 		return nil, errors.Annotate(err, "Cannot dial")
137
 		return nil, errors.Annotate(err, "Cannot dial")
138
 	}
138
 	}
139
 	wConn := wrappers.NewTimeoutRWC(socket, s.readTimeout, s.writeTimeout)
139
 	wConn := wrappers.NewTimeoutRWC(socket, s.readTimeout, s.writeTimeout)
140
-	wConn = newTrafficReadWriteCloser(wConn, s.stats.addIncomingTraffic, s.stats.addOutgoingTraffic)
140
+	wConn = wrappers.NewTrafficRWC(wConn, s.stats.addIncomingTraffic, s.stats.addOutgoingTraffic)
141
 
141
 
142
 	obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame()
142
 	obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame()
143
 	if n, err := socket.Write(frame); err != nil || n != len(frame) {
143
 	if n, err := socket.Write(frame); err != nil || n != len(frame) {

+ 40
- 0
wrappers/timeoutrwc.go Просмотреть файл

1
+package wrappers
2
+
3
+import (
4
+	"io"
5
+	"net"
6
+	"time"
7
+)
8
+
9
+// TimeoutReadWriteCloser sets timeouts for read/write into underlying
10
+// network connection.
11
+type TimeoutReadWriteCloser struct {
12
+	conn         net.Conn
13
+	readTimeout  time.Duration
14
+	writeTimeout time.Duration
15
+}
16
+
17
+// Read reads from connection
18
+func (t *TimeoutReadWriteCloser) Read(p []byte) (int, error) {
19
+	t.conn.SetReadDeadline(time.Now().Add(t.readTimeout)) // nolint: errcheck, gas
20
+	return t.conn.Read(p)
21
+}
22
+
23
+// Write writes into connection.
24
+func (t *TimeoutReadWriteCloser) Write(p []byte) (int, error) {
25
+	t.conn.SetWriteDeadline(time.Now().Add(t.writeTimeout)) // nolint: errcheck, gas
26
+	return t.conn.Write(p)
27
+}
28
+
29
+// Close closes underlying connection.
30
+func (t *TimeoutReadWriteCloser) Close() error {
31
+	return t.conn.Close()
32
+}
33
+
34
+func NewTimeoutRWC(conn net.Conn, readTimeout, writeTimeout time.Duration) io.ReadWriteCloser {
35
+	return &TimeoutReadWriteCloser{
36
+		conn:         conn,
37
+		readTimeout:  readTimeout,
38
+		writeTimeout: writeTimeout,
39
+	}
40
+}

proxy/trafficrwc.go → wrappers/trafficrwc.go Просмотреть файл

1
-package proxy
1
+package wrappers
2
 
2
 
3
 import "io"
3
 import "io"
4
 
4
 
29
 	return t.conn.Close()
29
 	return t.conn.Close()
30
 }
30
 }
31
 
31
 
32
-func newTrafficReadWriteCloser(conn io.ReadWriteCloser, readCallback, writeCallback func(int)) io.ReadWriteCloser {
32
+func NewTrafficRWC(conn io.ReadWriteCloser, readCallback, writeCallback func(int)) io.ReadWriteCloser {
33
 	return &TrafficReadWriteCloser{
33
 	return &TrafficReadWriteCloser{
34
 		conn:          conn,
34
 		conn:          conn,
35
 		readCallback:  readCallback,
35
 		readCallback:  readCallback,

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