Skip to content

Commit ef163aa

Browse files
committed
fix
1 parent ea9b4fd commit ef163aa

File tree

1 file changed

+9
-19
lines changed

1 file changed

+9
-19
lines changed

pproxy/server.py

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,12 @@
66
UDP_LIMIT = 30
77
DUMMY = lambda s: s
88

9-
class ProxyReader(asyncio.StreamReader):
10-
def __init__(self, o=None):
11-
if o:
12-
for n in dir(o):
13-
if not n.startswith('__'):
14-
setattr(self, n, getattr(o, n))
15-
else:
16-
super(self).__init__()
17-
def read_w(self, n):
18-
return asyncio.wait_for(self.read(n), timeout=SOCKET_TIMEOUT)
19-
def read_n(self, n):
20-
return asyncio.wait_for(self.readexactly(n), timeout=SOCKET_TIMEOUT)
21-
def read_until(self, s):
22-
return asyncio.wait_for(self.readuntil(s), timeout=SOCKET_TIMEOUT)
23-
def rollback(self, s):
24-
self._buffer.__setitem__(slice(0, 0), s)
9+
def patch_StreamReader(c=asyncio.StreamReader):
10+
c.read_w = lambda self, n: asyncio.wait_for(self.read(n), timeout=SOCKET_TIMEOUT)
11+
c.read_n = lambda self, n: asyncio.wait_for(self.readexactly(n), timeout=SOCKET_TIMEOUT)
12+
c.read_until = lambda self, s: asyncio.wait_for(self.readuntil(s), timeout=SOCKET_TIMEOUT)
13+
c.rollback = lambda self, s: self._buffer.__setitem__(slice(0, 0), s)
14+
patch_StreamReader()
2515

2616
class AuthTable(object):
2717
_auth = {}
@@ -68,7 +58,7 @@ def schedule(rserver, salgorithm, host_name, port):
6858

6959
async def stream_handler(reader, writer, unix, lbind, protos, rserver, cipher, sslserver, debug=0, authtime=86400*30, block=None, salgorithm='fa', verbose=DUMMY, modstat=lambda u,r,h:lambda i:DUMMY, **kwargs):
7060
try:
71-
reader, writer = proto.sslwrap(ProxyReader(reader), writer, sslserver, True, None, verbose)
61+
reader, writer = proto.sslwrap(reader, writer, sslserver, True, None, verbose)
7262
if unix:
7363
remote_ip, server_ip, remote_text = 'local', None, 'unix_local'
7464
else:
@@ -231,7 +221,7 @@ async def open_connection(self, host, port, local_addr, lbind, timeout=SOCKET_TI
231221
reader, writer = await asyncio.wait_for(wait, timeout=timeout)
232222
except Exception as ex:
233223
raise
234-
return ProxyReader(reader), writer
224+
return reader, writer
235225
async def prepare_connection(self, reader_remote, writer_remote, host, port):
236226
return reader_remote, writer_remote
237227
async def tcp_connect(self, host, port, local_addr=None, lbind=None):
@@ -532,7 +522,7 @@ async def handler(reader, writer, **kw):
532522
auth = b'\x01'+auth
533523
if auth:
534524
try:
535-
assert auth == (await asyncio.wait_for(reader.readexactly(len(auth)), timeout=SOCKET_TIMEOUT))
525+
assert auth == (await reader.read_n(len(auth)))
536526
except Exception:
537527
return
538528
await self.conn.put((reader, writer))

0 commit comments

Comments
 (0)