example_test.py: Override SimpleHTTPRequestHandler to catch broken pipe exception

This commit is contained in:
Shubham Kulkarni
2020-04-28 20:53:19 +05:30
parent a0a7051af3
commit b1e29232ea
2 changed files with 56 additions and 2 deletions

View File

@@ -95,10 +95,34 @@ def get_ca_cert(ota_image_dir):
return server_file, key_file 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): def start_https_server(ota_image_dir, server_ip, server_port):
server_file, key_file = get_ca_cert(ota_image_dir) server_file, key_file = get_ca_cert(ota_image_dir)
requestHandler = https_request_handler()
httpd = BaseHTTPServer.HTTPServer((server_ip, server_port), httpd = BaseHTTPServer.HTTPServer((server_ip, server_port),
SimpleHTTPServer.SimpleHTTPRequestHandler) requestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, httpd.socket = ssl.wrap_socket(httpd.socket,
keyfile=key_file, keyfile=key_file,
@@ -123,6 +147,12 @@ def redirect_handler_factory(url):
self.send_header('Location', url) self.send_header('Location', url)
self.end_headers() self.end_headers()
def handle(self):
try:
BaseHTTPServer.BaseHTTPRequestHandler.handle(self)
except socket.error:
pass
return RedirectHandler return RedirectHandler

View File

@@ -95,10 +95,34 @@ def get_ca_cert(ota_image_dir):
return server_file, key_file 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): def start_https_server(ota_image_dir, server_ip, server_port):
server_file, key_file = get_ca_cert(ota_image_dir) server_file, key_file = get_ca_cert(ota_image_dir)
requestHandler = https_request_handler()
httpd = BaseHTTPServer.HTTPServer((server_ip, server_port), httpd = BaseHTTPServer.HTTPServer((server_ip, server_port),
SimpleHTTPServer.SimpleHTTPRequestHandler) requestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, httpd.socket = ssl.wrap_socket(httpd.socket,
keyfile=key_file, keyfile=key_file,