diff options
| author | Private Island Networks <opensource@privateisland.tech> | 2026-04-22 12:00:41 -0400 |
|---|---|---|
| committer | Private Island Networks <opensource@privateisland.tech> | 2026-04-22 12:00:41 -0400 |
| commit | d3fba38214ffc204fb02afdc74657b95c2722bfe (patch) | |
| tree | 0c1022b80421a63a60559494e520ad6d68a3000f | |
| parent | 926e5b9cb55045ddb5298937d29eb5e739bdf168 (diff) | |
| -rwxr-xr-x | constants.py | 2 | ||||
| -rwxr-xr-x | main.py | 48 | ||||
| -rw-r--r-- | static/css/base.css | 15 | ||||
| -rw-r--r-- | static/js/base.js | 2 | ||||
| -rw-r--r-- | static/js/ws.js | 26 | ||||
| -rw-r--r-- | templates/mle.html | 10 |
6 files changed, 68 insertions, 35 deletions
diff --git a/constants.py b/constants.py index a277507..50fdaaa 100755 --- a/constants.py +++ b/constants.py @@ -66,7 +66,7 @@ PORT_PC = 10 PORT_UNDEFINED = -1 -MSG_FORMAT_BASIC = 0 +MSG_FORMAT_INFO = 0 MSG_FORMAT_CONTROLLER = 1 MSG_FORMAT_MLE = 2 @@ -33,7 +33,6 @@ import platform from socket import socket, AF_INET, SOCK_DGRAM from time import sleep import json -# from websockets.asyncio.server import serve from constants import * @@ -46,7 +45,7 @@ LOG_PATH = PROJECT_ROOT + '/logs' ws_key = web.AppKey("ws_key", dict[str, web.WebSocketResponse]) -async def _parse_pkt(app, pkt): +async def _parse_ctl_pkt(app, pkt): """ Parse a Wireshark received packet""" # Drop unwanted packets @@ -84,6 +83,7 @@ async def _parse_pkt(app, pkt): port = PORT_UNDEFINED message["format"] = MSG_FORMAT_CONTROLLER + message["num_cmds"] = 1 message["time"] = pkt.frame_info.get_field("frame.time_relative").__str__()[0:6] message['port'] = port message['type'] = msg_type @@ -93,6 +93,40 @@ async def _parse_pkt(app, pkt): return message +async def _parse_mle_pkt(app, pkt): + """ Parse a Wireshark received packet""" + + # Drop unwanted packets + if not (pkt.ip.src == app['ipaddr_betsy']): + return None + + try: + data = pkt.data.data.__str__() + except: + if DEBUG: + print('non MLE msg received') + return None + + message = dict() + + try: + msg_type = MSG_TYPE_MAP[int(data[0:2],16)] + msg_token = '0x' + data[2:4] + msg_data = '0x' + data[4::] + except Exception as e: + print("mapping error:", str(e)) + pass + + # TODO: add logic to determine the source of the MLE packet + + message["format"] = MSG_FORMAT_MLE + message["num_cmds"] = 1 + message["time"] = pkt.frame_info.get_field("frame.time_relative").__str__()[0:6] + message['type'] = msg_type + message['token'] = msg_token + message['data'] = msg_data + + return message async def home(request): data = request.match_info.get('data', "") @@ -153,9 +187,9 @@ async def controller(request): int(data.get('token'),16).to_bytes(1), int(data.get('address'),16).to_bytes(2), int(data.get('data'),16).to_bytes(4)) - send_pkt = await _parse_pkt(request.app, q_cont.get(block=True)) + send_pkt = await _parse_ctl_pkt(request.app, q_cont.get(block=True)) if send_pkt['type'] == "READ": - rcv_pkt = await _parse_pkt(request.app, q_cont.get(block=True)) + rcv_pkt = await _parse_ctl_pkt(request.app, q_cont.get(block=True)) except Exception as e: print(str(e)) result = STATUS.ERROR_SERVER @@ -258,7 +292,7 @@ async def get_icon(request): raise aiohttp.web.HTTPNotFound() -# WebSocket handle +# WebSocket for MLE async def wslogger(request): ws = web.WebSocketResponse() await ws.prepare(request) # onopen is called in the browser @@ -282,8 +316,8 @@ async def wslogger(request): num_pkts = num_pkts + 1 if DEBUG: - print('get from Q:', num_pkts) - message = await _parse_pkt(request.app, pkt) + print('get from MLE Q:', num_pkts) + message = await _parse_mle_pkt(request.app, pkt) if message: await ws.send_json(message) diff --git a/static/css/base.css b/static/css/base.css index 702a034..3cbdc0c 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -217,6 +217,18 @@ div#betsy { flex-basis: 300px; } +.mc-log-col-token { + padding: 1em 0px; + color: green; + flex-basis: 200px; +} + +.mc-log-col-data { + padding: 1em 0px; + color: blue; + flex-basis: 400px; +} + @media ( min-width : 80em) { .mc-log-col-pc { flex-basis: 600px; @@ -224,6 +236,9 @@ div#betsy { .mc-log-col-phy0 { flex-basis: 600px; } + .mc-log-col-data { + flex-basis: 600px; + } } .mc-table-striped thead th { diff --git a/static/js/base.js b/static/js/base.js index 2920c25..f3d74d2 100644 --- a/static/js/base.js +++ b/static/js/base.js @@ -38,7 +38,7 @@ const PORT_PHY1 = 1; const PORT_PHY2 = 2; const PORT_PC = 10; -const MSG_FORMAT_BASIC = 0; +const MSG_FORMAT_INFO = 0; const MSG_FORMAT_CONTROLLER = 1; const MSG_FORMAT_MLE = 2; diff --git a/static/js/ws.js b/static/js/ws.js index bc814ff..664c729 100644 --- a/static/js/ws.js +++ b/static/js/ws.js @@ -73,7 +73,7 @@ socket.onmessage = function(event) { let num_msgs = 0; let msg = JSON.parse(event.data); - if (msg.format == MSG_FORMAT_BASIC) { + if (msg.format == MSG_FORMAT_INFO) { if (typeof msg['mode'] !== "undefined") { console.log("mode: ", msg['mode']); update_mode(msg['mode']); @@ -102,26 +102,12 @@ socket.onmessage = function(event) { } num_msgs += 1; - console.log("From server:", num_msgs, ': ', msg); + console.log("From server:", msg.data.substring(0,48)); - if (msg.port == PORT_PC) { - log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' + - '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' + - '<div class="mc-log-col-phy0"></div>' + - '<div class="mc-log-col-phy1"></div></div>'; - } - else if (msg.port == PORT_PHY0) { - log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' + - '<div class="mc-log-col-pc"></div>' + - '<div class="mc-log-col-phy0">' + log_msg(msg) + - '</div><div class="mc-log-col-phy1"></div></div>'; - } - else if (msg.port == PORT_PHY1) { - log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' + - '<div class="mc-log-col-pc"></div>' + - '<div class="mc-log-col-phy0"></div>' + - '<div class="mc-log-col-phy1">' + log_msg(msg) + '</div></div>'; - } + log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col mc-log-col-time">' + msg.time + '</div>' + + '<div class="mc-log-col mc-log-col-token">' + msg.token + '</div>' + + '<div class="mc-log-col mc-log-col-data">' + msg.data.substring(0,48) + '</div>' + + '</div>'; // socket.send("request"); state = "Request" diff --git a/templates/mle.html b/templates/mle.html index b7bc632..c2c5209 100644 --- a/templates/mle.html +++ b/templates/mle.html @@ -28,12 +28,10 @@ <div id="mc-log-hdr"> <div class="mc-log-col mc-log-col-time" style="border: 0px solid green;">Time</div> - <div class="mc-log-col mc-log-col-pc" - style="border: 0px solid green;">PHY0</div> - <div class="mc-log-col mc-log-col-phy0" - style="border: 0px solid green;">PHY1</div> - <div class="mc-log-col mc-log-col-phy1" - style="border: 0px solid green;">PHY2</div> + <div class="mc-log-col mc-log-col-token" + style="border: 0px solid green;">Token</div> + <div class="mc-log-col mc-log-col-data" + style="border: 0px solid green;">Data</div> </div> <div id="mc-log"> |



