cleanup SSL handling
This commit is contained in:
@@ -847,7 +847,7 @@ async def ws_serve(websocket, path):
|
|||||||
|
|
||||||
ws_connections[websocket] = path
|
ws_connections[websocket] = path
|
||||||
remote_address = websocket.remote_address
|
remote_address = websocket.remote_address
|
||||||
if verbose: print(f"DBG ws_serve: {remote_address}")
|
if verbose: print(f"DBG ws_serve: {remote_address}: {path}")
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
name = await websocket.recv()
|
name = await websocket.recv()
|
||||||
@@ -866,10 +866,11 @@ async def ws_serve(websocket, path):
|
|||||||
await websocket.send(jmsg)
|
await websocket.send(jmsg)
|
||||||
|
|
||||||
if verbose: print(f"DBG ws_serve: close {remote_address}")
|
if verbose: print(f"DBG ws_serve: close {remote_address}")
|
||||||
try:
|
await websocket.wait_closed()
|
||||||
del ws_connections[websocket]
|
# try:
|
||||||
except Exception as e:
|
# del ws_connections[websocket]
|
||||||
print(f"warning: failed to delete websocket: {e}")
|
# except Exception as e:
|
||||||
|
# print(f"warning: failed to delete websocket: {e}")
|
||||||
|
|
||||||
def websocketupdater():
|
def websocketupdater():
|
||||||
loop.run_forever()
|
loop.run_forever()
|
||||||
@@ -879,15 +880,19 @@ def msg_to_websockets(typ: str, msg: str):
|
|||||||
jmsg = json.dumps({'type': typ, 'data': msg})
|
jmsg = json.dumps({'type': typ, 'data': msg})
|
||||||
to_close = []
|
to_close = []
|
||||||
for ws in ws_connections:
|
for ws in ws_connections:
|
||||||
|
if ws.closed:
|
||||||
|
to_close.append(ws)
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
asyncio.run(ws.send(jmsg))
|
asyncio.run_coroutine_threadsafe(ws.send(jmsg), loop)
|
||||||
except Exception:
|
except Exception:
|
||||||
to_close.append(ws)
|
to_close.append(ws)
|
||||||
print("ws.send exception: closed")
|
print("ws.send exception: closed")
|
||||||
|
|
||||||
for ws in to_close:
|
for ws in to_close:
|
||||||
ws.close()
|
asyncio.run_coroutine_threadsafe(ws.wait_closed(), loop)
|
||||||
del ws_connections[ws]
|
if ws in ws_connections:
|
||||||
|
del ws_connections[ws]
|
||||||
#
|
#
|
||||||
# Main
|
# Main
|
||||||
#
|
#
|
||||||
@@ -1119,19 +1124,20 @@ except:
|
|||||||
print(("failed to start server on %s:%s" % (hbd_host, hbd_port)))
|
print(("failed to start server on %s:%s" % (hbd_host, hbd_port)))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
#
|
||||||
loop = asyncio.get_event_loop()
|
loop=asyncio.new_event_loop()
|
||||||
|
asyncio.set_event_loop(loop)
|
||||||
|
|
||||||
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||||
wss_pem = pathlib.Path(WSS_PEM)
|
wss_pem = pathlib.Path(WSS_PEM)
|
||||||
wss_key = pathlib.Path(WSS_KEY)
|
wss_key = pathlib.Path(WSS_KEY)
|
||||||
|
|
||||||
ssl_context.load_cert_chain(wss_pem, keyfile=wss_key)
|
ssl_context.load_cert_chain(wss_pem, keyfile=wss_key)
|
||||||
wss_start_server = websockets.serve(ws_serve, hbd_host, WSSPORT, ssl=ssl_context)
|
wss_start_server = websockets.serve(ws_serve, hbd_host, WSSPORT,
|
||||||
|
ssl=ssl_context, loop=loop, subprotocols="hbd")
|
||||||
loop.run_until_complete(wss_start_server)
|
loop.run_until_complete(wss_start_server)
|
||||||
|
|
||||||
ws_start_server = websockets.serve(ws_serve, hbd_host, WSPORT, loop = loop)
|
ws_start_server = websockets.serve(ws_serve, hbd_host, WSPORT,
|
||||||
|
loop = loop, subprotocols="hbd")
|
||||||
loop.run_until_complete(ws_start_server)
|
loop.run_until_complete(ws_start_server)
|
||||||
|
|
||||||
servthread = threading.Thread(target=serv.serve_forever)
|
servthread = threading.Thread(target=serv.serve_forever)
|
||||||
|
|||||||
Reference in New Issue
Block a user