From b1e29232ea988f1cc3cff55de42fac3a5e47fc21 Mon Sep 17 00:00:00 2001 From: Shubham Kulkarni Date: Tue, 28 Apr 2020 20:53:19 +0530 Subject: [PATCH] example_test.py: Override SimpleHTTPRequestHandler to catch broken pipe exception --- .../ota/advanced_https_ota/example_test.py | 32 ++++++++++++++++++- .../ota/native_ota_example/example_test.py | 26 ++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/examples/system/ota/advanced_https_ota/example_test.py b/examples/system/ota/advanced_https_ota/example_test.py index 69dca1b8e..0638595e5 100644 --- a/examples/system/ota/advanced_https_ota/example_test.py +++ b/examples/system/ota/advanced_https_ota/example_test.py @@ -95,10 +95,34 @@ def get_ca_cert(ota_image_dir): return server_file, key_file +def https_request_handler(): + """ + Returns a request handler class that handles broken pipe exception + """ + class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): + def finish(self): + try: + if not self.wfile.closed: + self.wfile.flush() + self.wfile.close() + except socket.error: + pass + self.rfile.close() + + def handle(self): + try: + BaseHTTPServer.BaseHTTPRequestHandler.handle(self) + except socket.error: + pass + + return RequestHandler + + def start_https_server(ota_image_dir, server_ip, server_port): server_file, key_file = get_ca_cert(ota_image_dir) + requestHandler = https_request_handler() httpd = BaseHTTPServer.HTTPServer((server_ip, server_port), - SimpleHTTPServer.SimpleHTTPRequestHandler) + requestHandler) httpd.socket = ssl.wrap_socket(httpd.socket, keyfile=key_file, @@ -123,6 +147,12 @@ def redirect_handler_factory(url): self.send_header('Location', url) self.end_headers() + def handle(self): + try: + BaseHTTPServer.BaseHTTPRequestHandler.handle(self) + except socket.error: + pass + return RedirectHandler diff --git a/examples/system/ota/native_ota_example/example_test.py b/examples/system/ota/native_ota_example/example_test.py index 6934eabf3..68f820227 100644 --- a/examples/system/ota/native_ota_example/example_test.py +++ b/examples/system/ota/native_ota_example/example_test.py @@ -95,10 +95,34 @@ def get_ca_cert(ota_image_dir): return server_file, key_file +def https_request_handler(): + """ + Returns a request handler class that handles broken pipe exception + """ + class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): + def finish(self): + try: + if not self.wfile.closed: + self.wfile.flush() + self.wfile.close() + except socket.error: + pass + self.rfile.close() + + def handle(self): + try: + BaseHTTPServer.BaseHTTPRequestHandler.handle(self) + except socket.error: + pass + + return RequestHandler + + def start_https_server(ota_image_dir, server_ip, server_port): server_file, key_file = get_ca_cert(ota_image_dir) + requestHandler = https_request_handler() httpd = BaseHTTPServer.HTTPServer((server_ip, server_port), - SimpleHTTPServer.SimpleHTTPRequestHandler) + requestHandler) httpd.socket = ssl.wrap_socket(httpd.socket, keyfile=key_file,