Przeglądaj źródła

Refactor trafficrwc to wrappers

tags/0.9
9seconds 8 lat temu
rodzic
commit
7f01c03cb7
3 zmienionych plików z 44 dodań i 4 usunięć
  1. 2
    2
      proxy/server.go
  2. 40
    0
      wrappers/timeoutrwc.go
  3. 2
    2
      wrappers/trafficrwc.go

+ 2
- 2
proxy/server.go Wyświetl plik

@@ -113,7 +113,7 @@ func (s *Server) makeSocketID() string {
113 113
 
114 114
 func (s *Server) getClientStream(ctx context.Context, cancel context.CancelFunc, conn net.Conn, socketID string) (io.ReadWriteCloser, int16, error) {
115 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 117
 	frame, err := obfuscated2.ExtractFrame(wConn)
118 118
 	if err != nil {
119 119
 		return nil, 0, errors.Annotate(err, "Cannot create client stream")
@@ -137,7 +137,7 @@ func (s *Server) getTelegramStream(ctx context.Context, cancel context.CancelFun
137 137
 		return nil, errors.Annotate(err, "Cannot dial")
138 138
 	}
139 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 142
 	obfs2, frame := obfuscated2.MakeTelegramObfuscated2Frame()
143 143
 	if n, err := socket.Write(frame); err != nil || n != len(frame) {

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

@@ -0,0 +1,40 @@
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 Wyświetl plik

@@ -1,4 +1,4 @@
1
-package proxy
1
+package wrappers
2 2
 
3 3
 import "io"
4 4
 
@@ -29,7 +29,7 @@ func (t *TrafficReadWriteCloser) Close() error {
29 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 33
 	return &TrafficReadWriteCloser{
34 34
 		conn:          conn,
35 35
 		readCallback:  readCallback,

Ładowanie…
Anuluj
Zapisz