Set last byte to 0xFF if it ended at 0x00

As per an idea of @S5NC
This commit is contained in:
GUVWAF
2023-11-27 20:36:48 +01:00
parent 81f57b65e1
commit ef2c6eed05
5 changed files with 13 additions and 10 deletions

View File

@@ -19,7 +19,7 @@ ErrorCode NextHopRouter::send(meshtastic_MeshPacket *p)
bool NextHopRouter::shouldFilterReceived(const meshtastic_MeshPacket *p)
{
if (wasSeenRecently(p)) { // Note: this will also add a recent packet record
if (p->next_hop == (uint8_t)(getNodeNum() & 0xFF)) {
if (p->next_hop == nodeDB.getLastByteOfNodeNum(getNodeNum())) {
LOG_DEBUG("Ignoring incoming msg, because we've already seen it.\n");
} else {
LOG_DEBUG("Ignoring incoming msg, because we've already seen it and cancel any outgoing packets.\n");
@@ -51,7 +51,7 @@ void NextHopRouter::sniffReceived(const meshtastic_MeshPacket *p, const meshtast
if (config.device.role != meshtastic_Config_DeviceConfig_Role_CLIENT_MUTE) {
if ((p->to != getNodeNum()) && (getFrom(p) != getNodeNum())) {
if (p->next_hop == (uint8_t)(getNodeNum() & 0xFF)) {
if (p->next_hop == nodeDB.getLastByteOfNodeNum(getNodeNum())) {
meshtastic_MeshPacket *tosend = packetPool.allocCopy(*p); // keep a copy because we will be sending it
LOG_INFO("Relaying received next-hop message coming from %x\n", p->relay_node);

View File

@@ -824,10 +824,10 @@ void NodeDB::updateFrom(const meshtastic_MeshPacket &mp)
// If this packet didn't travel any hops, then it was sent directly to us, so we know what to use as next hop to this node
if (mp.original_hop_limit == mp.hop_limit) {
info->next_hop = (uint8_t)(mp.from & 0xFF);
info->next_hop = getLastByteOfNodeNum(mp.from);
} else if (mp.relay_node && (mp.original_hop_limit - mp.hop_limit == 1)) {
// This packet traveled one hop, so we can use the relay_node as next_hop
info->next_hop = (uint8_t)(mp.relay_node & 0xFF);
info->next_hop = getLastByteOfNodeNum(mp.relay_node);
}
}
}

View File

@@ -91,6 +91,9 @@ class NodeDB
/// @return our node number
NodeNum getNodeNum() { return myNodeInfo.my_node_num; }
// @return last byte of a NodeNum, 0xFF if it ended at 0x00
uint8_t getLastByteOfNodeNum(NodeNum num) { return (uint8_t)((num & 0xFF) ? (num & 0xFF) : 0xFF); }
/// if returns false, that means our node should send a DenyNodeNum response. If true, we think the number is okay for use
// bool handleWantNodeNum(NodeNum n);

View File

@@ -241,10 +241,10 @@ ErrorCode Router::send(meshtastic_MeshPacket *p)
p->from = getFrom(p);
// If we are the original transmitter, set the original hop limit
if (p->from == nodeDB.getNodeNum())
if (p->from == getNodeNum())
p->original_hop_limit = config.lora.hop_limit ? config.lora.hop_limit : HOP_RELIABLE;
p->relay_node = (uint8_t)(getNodeNum() & 0xFF); // set the current relayer to us
p->relay_node = nodeDB.getLastByteOfNodeNum(getNodeNum()); // set the relayer to us
// If the packet hasn't yet been encrypted, do so now (it might already be encrypted if we are just forwarding it)