Explorar el Código

Refactor trafficrwc to wrappers

tags/0.9
9seconds hace 8 años
padre
commit
7f01c03cb7
Se han modificado 3 ficheros con 44 adiciones y 4 borrados
  1. 2
    2
      proxy/server.go
  2. 40
    0
      wrappers/timeoutrwc.go
  3. 2
    2
      wrappers/trafficrwc.go

+ 2
- 2
proxy/server.go Ver fichero

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 Ver fichero

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 Ver fichero

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,

Loading…
Cancelar
Guardar