diff --git a/pproxy/proto.py b/pproxy/proto.py index eb40287..1f32a5a 100644 --- a/pproxy/proto.py +++ b/pproxy/proto.py @@ -359,6 +359,8 @@ async def http_channel(self, reader, writer, stat_bytes, stat_conn): class HTTPOnly(HTTP): async def connect(self, reader_remote, writer_remote, rauth, host_name, port, myhost, **kw): + if port == 443: # TODO: Is there a better way to detect HTTPS protocol? + return await super().connect(reader_remote, writer_remote, rauth, host_name, port, myhost, **kw) buffer = bytearray() HOST_NAME = re.compile('\r\nHost: ([^\r\n]+)\r\n', re.I) def write(data, o=writer_remote.write): @@ -616,12 +618,21 @@ def abort(self): self.close() ssl.connection_made(Transport()) async def channel(): + read_size=65536 + buffer=None + if hasattr(ssl,'get_buffer'): + buffer=ssl.get_buffer(read_size) try: while not reader.at_eof() and not ssl._app_transport._closed: - data = await reader.read(65536) + data = await reader.read(read_size) if not data: break - ssl.data_received(data) + if buffer!=None: + data_len=len(data) + buffer[:data_len]=data + ssl.buffer_updated(data_len) + else: + ssl.data_received(data) except Exception: pass finally: