mirror of
https://github.com/meshcore-dev/meshcore-cli.git
synced 2026-04-20 22:13:48 +00:00
let some extraction work to the lib
This commit is contained in:
parent
db59c48b3f
commit
ed1c1d5897
2 changed files with 10 additions and 56 deletions
|
|
@ -20,8 +20,7 @@ license-files = ["LICEN[CS]E*"]
|
||||||
dependencies = [ "meshcore >= 2.2.15",
|
dependencies = [ "meshcore >= 2.2.15",
|
||||||
"bleak >= 0.22",
|
"bleak >= 0.22",
|
||||||
"prompt_toolkit >= 3.0.50",
|
"prompt_toolkit >= 3.0.50",
|
||||||
"requests >= 2.28.0",
|
"requests >= 2.28.0" ]
|
||||||
"pycryptodome" ]
|
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/fdlamotte/meshcore-cli"
|
Homepage = "https://github.com/fdlamotte/meshcore-cli"
|
||||||
|
|
|
||||||
|
|
@ -232,58 +232,11 @@ process_event_message.timestamp=""
|
||||||
async def handle_log_rx(event):
|
async def handle_log_rx(event):
|
||||||
mc = handle_log_rx.mc
|
mc = handle_log_rx.mc
|
||||||
|
|
||||||
pkt = bytes().fromhex(event.payload["payload"])
|
payload_type = event.payload["payload_type"]
|
||||||
pbuf = io.BytesIO(pkt)
|
|
||||||
header = pbuf.read(1)[0]
|
|
||||||
route_type = header & 0x03
|
|
||||||
payload_type = (header & 0x3c) >> 2
|
|
||||||
payload_ver = (header & 0xc0) >> 6
|
|
||||||
|
|
||||||
transport_code = None
|
|
||||||
if route_type == 0x00 or route_type == 0x03: # has transport code
|
|
||||||
transport_code = pbuf.read(4) # discard transport code
|
|
||||||
|
|
||||||
path_byte = pbuf.read(1)[0]
|
|
||||||
path_hash_size = ((path_byte & 0xC0) >> 6) + 1
|
|
||||||
path_len = (path_byte & 0x3F)
|
|
||||||
# here path_len is number of hops, not number of bytes
|
|
||||||
|
|
||||||
path = pbuf.read(path_len*path_hash_size).hex() # Beware of traces where pathes are mixed
|
|
||||||
|
|
||||||
try :
|
|
||||||
route_typename = ROUTE_TYPENAMES[route_type]
|
|
||||||
except IndexError:
|
|
||||||
logger.debug(f"Unknown route type {route_type}")
|
|
||||||
route_typename = "UNK"
|
|
||||||
|
|
||||||
try :
|
|
||||||
payload_typename = PAYLOAD_TYPENAMES[payload_type]
|
|
||||||
except IndexError:
|
|
||||||
logger.debug(f"Unknown payload type {payload_type}")
|
|
||||||
payload_typename = "UNK"
|
|
||||||
|
|
||||||
pkt_payload = pbuf.read()
|
|
||||||
|
|
||||||
event.payload["header"] = header
|
|
||||||
event.payload["route_type"] = route_type
|
|
||||||
event.payload["route_typename"] = route_typename
|
|
||||||
event.payload["payload_type"] = payload_type
|
|
||||||
event.payload["payload_typename"]= payload_typename
|
|
||||||
|
|
||||||
event.payload["payload_ver"] = payload_ver
|
|
||||||
|
|
||||||
if not transport_code is None:
|
|
||||||
event.payload["transport_code"] = transport_code.hex()
|
|
||||||
|
|
||||||
event.payload["path_len"] = path_len
|
|
||||||
event.payload["path_hash_size"] = path_hash_size
|
|
||||||
event.payload["path"] = path
|
|
||||||
|
|
||||||
event.payload["pkt_payload"] = pkt_payload.hex()
|
|
||||||
|
|
||||||
if payload_type == 0x05: # flood msg / channel
|
if payload_type == 0x05: # flood msg / channel
|
||||||
if handle_log_rx.channel_echoes:
|
if handle_log_rx.channel_echoes:
|
||||||
pk_buf = io.BytesIO(pkt_payload)
|
pk_buf = io.BytesIO(event.payload["pkt_payload"])
|
||||||
chan_hash = pk_buf.read(1).hex()
|
chan_hash = pk_buf.read(1).hex()
|
||||||
cipher_mac = pk_buf.read(2)
|
cipher_mac = pk_buf.read(2)
|
||||||
msg = pk_buf.read() # until the end of buffer
|
msg = pk_buf.read() # until the end of buffer
|
||||||
|
|
@ -311,9 +264,9 @@ async def handle_log_rx(event):
|
||||||
|
|
||||||
if chan_name != "" :
|
if chan_name != "" :
|
||||||
width = os.get_terminal_size().columns
|
width = os.get_terminal_size().columns
|
||||||
cars = width - 13 - len(path) - len(chan_name) - 1
|
cars = width - 13 - len(event.payload["path"]) - len(chan_name) - 1
|
||||||
dispmsg = message.replace("\n","")[0:cars]
|
dispmsg = message.replace("\n","")[0:cars]
|
||||||
txt = f"{ANSI_LIGHT_GRAY}{chan_name} {ANSI_DGREEN}{dispmsg+(cars-len(dispmsg))*' '} {ANSI_YELLOW}[{path}]{ANSI_LIGHT_GRAY}{event.payload['snr']:6,.2f}{event.payload['rssi']:4}{ANSI_END}"
|
txt = f"{ANSI_LIGHT_GRAY}{chan_name} {ANSI_DGREEN}{dispmsg+(cars-len(dispmsg))*' '} {ANSI_YELLOW}[{event.payload['path']}]{ANSI_LIGHT_GRAY}{event.payload['snr']:6,.2f}{event.payload['rssi']:4}{ANSI_END}"
|
||||||
if handle_message.above:
|
if handle_message.above:
|
||||||
print_above(txt)
|
print_above(txt)
|
||||||
else:
|
else:
|
||||||
|
|
@ -321,7 +274,7 @@ async def handle_log_rx(event):
|
||||||
|
|
||||||
elif payload_type == 0x04: # Advert
|
elif payload_type == 0x04: # Advert
|
||||||
if handle_log_rx.advert_echoes:
|
if handle_log_rx.advert_echoes:
|
||||||
pk_buf = io.BytesIO(pkt_payload)
|
pk_buf = io.BytesIO(event.payload['pkt_payload'])
|
||||||
adv_key = pk_buf.read(32).hex()
|
adv_key = pk_buf.read(32).hex()
|
||||||
adv_timestamp = int.from_bytes(pk_buf.read(4), "little", signed=False)
|
adv_timestamp = int.from_bytes(pk_buf.read(4), "little", signed=False)
|
||||||
signature = pk_buf.read(64).hex()
|
signature = pk_buf.read(64).hex()
|
||||||
|
|
@ -362,13 +315,14 @@ async def handle_log_rx(event):
|
||||||
txt = f"{ANSI_LIGHT_GRAY}Advert for{ANSI_END} {adv_name}{ANSI_GREEN}/{CONTACT_TYPENAMES[adv_type]}{ts_str}{ANSI_END}"
|
txt = f"{ANSI_LIGHT_GRAY}Advert for{ANSI_END} {adv_name}{ANSI_GREEN}/{CONTACT_TYPENAMES[adv_type]}{ts_str}{ANSI_END}"
|
||||||
if not adv_lat is None:
|
if not adv_lat is None:
|
||||||
txt += f" {ANSI_LIGHT_GRAY}coords: {adv_lat},{adv_lon}"
|
txt += f" {ANSI_LIGHT_GRAY}coords: {adv_lat},{adv_lon}"
|
||||||
txt += f" {ANSI_YELLOW}path: [{path}] {ANSI_LIGHT_GRAY}snr: {event.payload['snr']:.2f}dB{ANSI_END}"
|
txt += f" {ANSI_YELLOW}path: [{event.payload['path']}] {ANSI_LIGHT_GRAY}snr: {event.payload['snr']:.2f}dB{ANSI_END}"
|
||||||
|
|
||||||
if handle_message.above:
|
if handle_message.above:
|
||||||
print_above(txt)
|
print_above(txt)
|
||||||
else:
|
else:
|
||||||
print(txt)
|
print(txt)
|
||||||
|
|
||||||
|
event.payload["pkt_payload"] = event.payload["pkt_payload"].hex() # convert for json serialization
|
||||||
|
|
||||||
if handle_log_rx.json_log_rx: # json mode ... raw dump
|
if handle_log_rx.json_log_rx: # json mode ... raw dump
|
||||||
msg = json.dumps(event.payload)
|
msg = json.dumps(event.payload)
|
||||||
|
|
@ -1717,7 +1671,8 @@ async def set_channel (mc, chan, name, key=None):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
info = res.payload
|
info = res.payload
|
||||||
info["channel_hash"] = SHA256.new(info["channel_secret"]).hexdigest()[0:2]
|
if not "channel_hash" in info:
|
||||||
|
info["channel_hash"] = SHA256.new(info["channel_secret"]).hexdigest()[0:2]
|
||||||
info["channel_secret"] = info["channel_secret"].hex()
|
info["channel_secret"] = info["channel_secret"].hex()
|
||||||
|
|
||||||
if hasattr(mc,'channels') :
|
if hasattr(mc,'channels') :
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue