skip already None datamodel, auto-ungzip body
This commit is contained in:
@@ -104,6 +104,9 @@ def handle_packet(glob: dict) -> None:
|
|||||||
result.action = Action.REJECT
|
result.action = Action.REJECT
|
||||||
result.matched_by = filter.name
|
result.matched_by = filter.name
|
||||||
return result.set_result()
|
return result.set_result()
|
||||||
|
if cache_call[data_type] is None:
|
||||||
|
skip_call = True
|
||||||
|
break
|
||||||
final_params.append(cache_call[data_type])
|
final_params.append(cache_call[data_type])
|
||||||
|
|
||||||
if skip_call:
|
if skip_call:
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ class InternalCallbackHandler():
|
|||||||
url: str|None = None
|
url: str|None = None
|
||||||
_url_buffer: bytes = b""
|
_url_buffer: bytes = b""
|
||||||
headers: dict[str, str] = {}
|
headers: dict[str, str] = {}
|
||||||
|
lheaders: dict[str, str] = {} # Lowercase headers
|
||||||
_header_fields: dict[bytes, bytes] = {}
|
_header_fields: dict[bytes, bytes] = {}
|
||||||
has_begun: bool = False
|
has_begun: bool = False
|
||||||
body: bytes = None
|
body: bytes = None
|
||||||
@@ -53,6 +54,7 @@ class InternalCallbackHandler():
|
|||||||
def on_headers_complete(self):
|
def on_headers_complete(self):
|
||||||
self.headers_complete = True
|
self.headers_complete = True
|
||||||
self.headers = self._header_fields
|
self.headers = self._header_fields
|
||||||
|
self.lheaders = {k.lower(): v for k, v in self._header_fields.items()}
|
||||||
self._header_fields = {}
|
self._header_fields = {}
|
||||||
self._current_header_field = b""
|
self._current_header_field = b""
|
||||||
self._current_header_value = b""
|
self._current_header_value = b""
|
||||||
@@ -65,6 +67,14 @@ class InternalCallbackHandler():
|
|||||||
def on_message_complete(self):
|
def on_message_complete(self):
|
||||||
self.body = self._body_buffer
|
self.body = self._body_buffer
|
||||||
self._body_buffer = b""
|
self._body_buffer = b""
|
||||||
|
try:
|
||||||
|
if "gzip" in self.content_encoding.lower():
|
||||||
|
import gzip
|
||||||
|
import io
|
||||||
|
with gzip.GzipFile(fileobj=io.BytesIO(self.body)) as f:
|
||||||
|
self.body = f.read()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error decompressing gzip: {e}: skipping", flush=True)
|
||||||
self.message_complete = True
|
self.message_complete = True
|
||||||
|
|
||||||
def on_status(self, status: bytes):
|
def on_status(self, status: bytes):
|
||||||
@@ -75,6 +85,18 @@ class InternalCallbackHandler():
|
|||||||
self.status = self._status_buffer.decode(errors="ignore")
|
self.status = self._status_buffer.decode(errors="ignore")
|
||||||
self._status_buffer = b""
|
self._status_buffer = b""
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user_agent(self) -> str:
|
||||||
|
return self.lheaders.get("user-agent", "")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def content_encoding(self) -> str:
|
||||||
|
return self.lheaders.get("content-encoding", "")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def content_type(self) -> str:
|
||||||
|
return self.lheaders.get("content-type", "")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def keep_alive(self) -> bool:
|
def keep_alive(self) -> bool:
|
||||||
return self.should_keep_alive
|
return self.should_keep_alive
|
||||||
@@ -126,6 +148,14 @@ class InternalBasicHttpMetaClass:
|
|||||||
def headers(self) -> dict[str, str]:
|
def headers(self) -> dict[str, str]:
|
||||||
return self._parser.headers
|
return self._parser.headers
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user_agent(self) -> str:
|
||||||
|
return self._parser.user_agent
|
||||||
|
|
||||||
|
@property
|
||||||
|
def content_encoding(self) -> str:
|
||||||
|
return self._parser.content_encoding
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_begun(self) -> bool:
|
def has_begun(self) -> bool:
|
||||||
return self._parser.has_begun
|
return self._parser.has_begun
|
||||||
@@ -162,6 +192,9 @@ class InternalBasicHttpMetaClass:
|
|||||||
def method(self) -> str|None:
|
def method(self) -> str|None:
|
||||||
return self._parser.method_parsed
|
return self._parser.method_parsed
|
||||||
|
|
||||||
|
def get_header(self, header: str, default=None) -> str:
|
||||||
|
return self._parser.lheaders.get(header.lower(), default)
|
||||||
|
|
||||||
def _packet_to_stream(self, internal_data: DataStreamCtx):
|
def _packet_to_stream(self, internal_data: DataStreamCtx):
|
||||||
return self.should_upgrade and self._parser._save_body
|
return self.should_upgrade and self._parser._save_body
|
||||||
|
|
||||||
@@ -172,7 +205,7 @@ class InternalBasicHttpMetaClass:
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
self._parser.execute(internal_data.current_pkt.data)
|
self._parser.execute(internal_data.current_pkt.data)
|
||||||
if self._parser.headers_complete and len(self._parser._body_buffer) == self._parser.content_length_parsed:
|
if not self._parser.message_complete and self._parser.headers_complete and len(self._parser._body_buffer) == self._parser.content_length_parsed:
|
||||||
self._parser.on_message_complete()
|
self._parser.on_message_complete()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.raised_error = True
|
self.raised_error = True
|
||||||
|
|||||||
Reference in New Issue
Block a user