Skip to content

Commit ea9b4fd

Browse files
committed
fix
1 parent 968f085 commit ea9b4fd

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

pproxy/proto.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ async def connect(self, reader_remote, writer_remote, rauth, host_name, port, **
5656
async def channel(self, reader, writer, stat_bytes, stat_conn):
5757
try:
5858
stat_conn(1)
59-
while True:
59+
while not reader.at_eof() and not writer.is_closing():
6060
data = await reader.read(65536)
6161
if not data:
6262
break
@@ -326,7 +326,7 @@ async def connect(self, reader_remote, writer_remote, rauth, host_name, port, my
326326
async def http_channel(self, reader, writer, stat_bytes, stat_conn):
327327
try:
328328
stat_conn(1)
329-
while True:
329+
while not reader.at_eof() and not writer.is_closing():
330330
data = await reader.read(65536)
331331
if not data:
332332
break
@@ -582,7 +582,7 @@ def abort(self):
582582
ssl.connection_made(Transport())
583583
async def channel():
584584
try:
585-
while True:
585+
while not reader.at_eof() and not ssl._app_transport.closed:
586586
data = await reader.read(65536)
587587
if not data:
588588
break
@@ -599,6 +599,8 @@ def write(self, data):
599599
ssl._app_transport.write(data)
600600
def drain(self):
601601
return writer.drain()
602+
def is_closing(self):
603+
return ssl._app_transport.closed
602604
def close(self):
603605
ssl._app_transport.close()
604606
return ssl_reader, Writer()

pproxy/server.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
class ProxyReader(asyncio.StreamReader):
1010
def __init__(self, o=None):
1111
if o:
12-
self.__dict__ = o.__dict__
12+
for n in dir(o):
13+
if not n.startswith('__'):
14+
setattr(self, n, getattr(o, n))
15+
else:
16+
super(self).__init__()
1317
def read_w(self, n):
1418
return asyncio.wait_for(self.read(n), timeout=SOCKET_TIMEOUT)
1519
def read_n(self, n):
@@ -321,9 +325,7 @@ async def drain():
321325
writer.get_extra_info = dict(peername=remote_addr, sockname=remote_addr).get
322326
writer.drain = drain
323327
closed = False
324-
def is_closing():
325-
return closed
326-
writer.is_closing = is_closing
328+
writer.is_closing = lambda: closed
327329
def close():
328330
nonlocal closed
329331
closed = True
@@ -403,7 +405,7 @@ def logtext(self, host, port):
403405
def patch_stream(self, ssh_reader, writer, host, port):
404406
reader = asyncio.StreamReader()
405407
async def channel():
406-
while not writer.is_closing():
408+
while not ssh_reader.at_eof() and not writer.is_closing():
407409
buf = await ssh_reader.read(65536)
408410
if not buf:
409411
break

0 commit comments

Comments
 (0)