fix(mesh): set Meshtastic hop limit and show LoRa pill
This commit is contained in:
parent
c2c4b5af7d
commit
a91814641e
@ -856,8 +856,22 @@ fn packet_to_inbound_frame(
|
|||||||
contacts: &mut HashMap<u32, ParsedContact>,
|
contacts: &mut HashMap<u32, ParsedContact>,
|
||||||
peer_pubkeys: &mut HashMap<u32, Vec<u8>>,
|
peer_pubkeys: &mut HashMap<u32, Vec<u8>>,
|
||||||
) -> Option<InboundFrame> {
|
) -> Option<InboundFrame> {
|
||||||
let packet = parse_mesh_packet(data)?;
|
let Some(packet) = parse_mesh_packet(data) else {
|
||||||
|
debug!(
|
||||||
|
len = data.len(),
|
||||||
|
head = %hex::encode(&data[..data.len().min(16)]),
|
||||||
|
"Meshtastic FromRadio.packet did not parse into a decoded MeshPacket"
|
||||||
|
);
|
||||||
|
return None;
|
||||||
|
};
|
||||||
if packet.portnum != TEXT_MESSAGE_APP || packet.payload.is_empty() {
|
if packet.portnum != TEXT_MESSAGE_APP || packet.payload.is_empty() {
|
||||||
|
debug!(
|
||||||
|
from = ?packet.from.map(|n| format!("!{:08x}", n)),
|
||||||
|
portnum = packet.portnum,
|
||||||
|
payload_len = packet.payload.len(),
|
||||||
|
pki = packet.pki_encrypted,
|
||||||
|
"Meshtastic packet ignored because it is not a text payload"
|
||||||
|
);
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
if packet_is_stale(packet.rx_time) {
|
if packet_is_stale(packet.rx_time) {
|
||||||
@ -870,6 +884,10 @@ fn packet_to_inbound_frame(
|
|||||||
}
|
}
|
||||||
let from = packet.from.unwrap_or(0);
|
let from = packet.from.unwrap_or(0);
|
||||||
if Some(from) == local_node_num {
|
if Some(from) == local_node_num {
|
||||||
|
debug!(
|
||||||
|
from = format!("!{:08x}", from),
|
||||||
|
"Ignoring Meshtastic local echo packet"
|
||||||
|
);
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
info!(
|
info!(
|
||||||
@ -1132,6 +1150,12 @@ fn encode_mesh_packet(to: u32, portnum: u32, payload: &[u8]) -> Vec<u8> {
|
|||||||
encode_len_field(4, &decoded, &mut packet);
|
encode_len_field(4, &decoded, &mut packet);
|
||||||
encode_fixed32_field(6, next_packet_id(), &mut packet);
|
encode_fixed32_field(6, next_packet_id(), &mut packet);
|
||||||
encode_fixed32_field(7, now_unix_secs(), &mut packet);
|
encode_fixed32_field(7, now_unix_secs(), &mut packet);
|
||||||
|
// Meshtastic treats an unset hop_limit as zero, i.e. direct-neighbor only.
|
||||||
|
// Set a normal mesh hop limit so stock-device DMs can route beyond one hop.
|
||||||
|
encode_varint_field_into(9, 3, &mut packet);
|
||||||
|
if to != BROADCAST_NUM {
|
||||||
|
encode_varint_field_into(10, 1, &mut packet);
|
||||||
|
}
|
||||||
packet
|
packet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1076,12 +1076,12 @@ function isEditedMessage(msg: MeshMessage): number | null {
|
|||||||
function isDeletedMessage(msg: MeshMessage): boolean {
|
function isDeletedMessage(msg: MeshMessage): boolean {
|
||||||
return msg.message_type === 'delete' || msg.typed_payload?.deleted === true
|
return msg.message_type === 'delete' || msg.typed_payload?.deleted === true
|
||||||
}
|
}
|
||||||
/// Short label for the per-message transport pill (Mesh / FIPS / Tor), or null
|
/// Short label for the per-message transport pill (LoRa / FIPS / Tor), or null
|
||||||
/// when the transport isn't known. Covers both meshcore and meshtastic since
|
/// when the transport isn't known. Covers both meshcore and meshtastic since
|
||||||
/// the field lives on the shared MeshMessage.
|
/// the field lives on the shared MeshMessage.
|
||||||
function transportLabel(msg: MeshMessage): string | null {
|
function transportLabel(msg: MeshMessage): string | null {
|
||||||
switch (msg.transport) {
|
switch (msg.transport) {
|
||||||
case 'lora': return 'Mesh'
|
case 'lora': return 'LoRa'
|
||||||
case 'fips': return 'FIPS'
|
case 'fips': return 'FIPS'
|
||||||
case 'tor': return 'Tor'
|
case 'tor': return 'Tor'
|
||||||
default: return null
|
default: return null
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user