From 3b40f2b5c3e42f296c43808401eb473d197e3022 Mon Sep 17 00:00:00 2001 From: Tim Vergenz Date: Thu, 14 Mar 2024 16:33:47 -0400 Subject: [PATCH 1/2] wip: handle chunked encoding in /Discover POST body --- opendrop/server.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/opendrop/server.py b/opendrop/server.py index 9fe3f80..054dee4 100644 --- a/opendrop/server.py +++ b/opendrop/server.py @@ -163,8 +163,19 @@ def do_GET(self): self.wfile.write(body) def handle_discover(self): - content_length = int(self.headers["Content-Length"]) - post_data = self.rfile.read(content_length) + if content_length := self.headers.get("Content-Length"): + post_data = self.rfile.read(int(content_length)) + elif self.headers.get("Transfer-Encoding") == "chunked": + post_data = bytearray() + while True: + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding#chunked_encoding + chunk_size = int(self.rfile.readline().rstrip(b"\r\n"),) + if chunk_size == 0: # end of chunks + self.rfile.read() # consume rest of the input + break + chunk_bytes = self.rfile.read(chunk_size) + post_data.extend(chunk_bytes) + assert self.rfile.read(2) == b"\r\n" AirDropUtil.write_debug( self.config, post_data, "receive_discover_request.plist" From c1ef8d59dc37f0eda8592e6a6450bfe254c7a371 Mon Sep 17 00:00:00 2001 From: Tim Vergenz Date: Thu, 14 Mar 2024 16:37:11 -0400 Subject: [PATCH 2/2] raise exception otherwise --- opendrop/server.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opendrop/server.py b/opendrop/server.py index 054dee4..6ff813f 100644 --- a/opendrop/server.py +++ b/opendrop/server.py @@ -176,6 +176,9 @@ def handle_discover(self): chunk_bytes = self.rfile.read(chunk_size) post_data.extend(chunk_bytes) assert self.rfile.read(2) == b"\r\n" + else: + raise Exception(f"Can't handle post body! Headers: {self.headers}") + AirDropUtil.write_debug( self.config, post_data, "receive_discover_request.plist"