diff --git a/zephcore/app/RepeaterMesh.cpp b/zephcore/app/RepeaterMesh.cpp index 792dcee..3f63939 100644 --- a/zephcore/app/RepeaterMesh.cpp +++ b/zephcore/app/RepeaterMesh.cpp @@ -635,7 +635,10 @@ uint32_t RepeaterMesh::getDirectRetransmitDelay(const mesh::Packet* packet) { return computeAdaptiveDirectDelay(packet); } -bool RepeaterMesh::filterRecvFloodPacket(mesh::Packet* pkt) { +mesh::DispatcherAction RepeaterMesh::onRecvPacket(mesh::Packet* pkt) { + // Determine the request packet's region so sendFloodReply() can echo the same + // scope. Runs for every packet (not just floods) so recv_pkt_region is cleared + // for direct packets instead of inheriting the last flood's region. if (pkt->getRouteType() == ROUTE_TYPE_TRANSPORT_FLOOD) { recv_pkt_region = region_map.findMatch(pkt, REGION_DENY_FLOOD); } else if (pkt->getRouteType() == ROUTE_TYPE_FLOOD) { @@ -647,7 +650,7 @@ bool RepeaterMesh::filterRecvFloodPacket(mesh::Packet* pkt) { } else { recv_pkt_region = nullptr; } - return false; + return Mesh::onRecvPacket(pkt); } void RepeaterMesh::onAnonDataRecv(mesh::Packet* packet, const uint8_t* secret, const mesh::Identity& sender, uint8_t* data, size_t len) { diff --git a/zephcore/app/RepeaterMesh.h b/zephcore/app/RepeaterMesh.h index 448d6c7..a9b6407 100644 --- a/zephcore/app/RepeaterMesh.h +++ b/zephcore/app/RepeaterMesh.h @@ -179,7 +179,7 @@ protected: return _prefs.multi_acks; } - bool filterRecvFloodPacket(mesh::Packet* pkt) override; + mesh::DispatcherAction onRecvPacket(mesh::Packet* pkt) override; void onAnonDataRecv(mesh::Packet* packet, const uint8_t* secret, const mesh::Identity& sender, uint8_t* data, size_t len) override; int searchPeersByHash(const uint8_t* hash) override; diff --git a/zephcore/app/RoomServerMesh.cpp b/zephcore/app/RoomServerMesh.cpp index b567776..1c932bf 100644 --- a/zephcore/app/RoomServerMesh.cpp +++ b/zephcore/app/RoomServerMesh.cpp @@ -411,7 +411,10 @@ uint32_t RoomServerMesh::getDirectRetransmitDelay(const mesh::Packet* packet) { return computeAdaptiveDirectDelay(packet); } -bool RoomServerMesh::filterRecvFloodPacket(mesh::Packet* pkt) { +mesh::DispatcherAction RoomServerMesh::onRecvPacket(mesh::Packet* pkt) { + // Determine the request packet's region so sendFloodReply() can echo the same + // scope. Runs for every packet (not just floods) so recv_pkt_region is cleared + // for direct packets instead of inheriting the last flood's region. if (pkt->getRouteType() == ROUTE_TYPE_TRANSPORT_FLOOD) { recv_pkt_region = region_map.findMatch(pkt, REGION_DENY_FLOOD); } else if (pkt->getRouteType() == ROUTE_TYPE_FLOOD) { @@ -423,7 +426,7 @@ bool RoomServerMesh::filterRecvFloodPacket(mesh::Packet* pkt) { } else { recv_pkt_region = nullptr; } - return false; + return Mesh::onRecvPacket(pkt); } void RoomServerMesh::onAnonDataRecv(mesh::Packet* packet, const uint8_t* secret, const mesh::Identity& sender, uint8_t* data, size_t len) { diff --git a/zephcore/app/RoomServerMesh.h b/zephcore/app/RoomServerMesh.h index bd33813..4066785 100644 --- a/zephcore/app/RoomServerMesh.h +++ b/zephcore/app/RoomServerMesh.h @@ -148,7 +148,7 @@ protected: return _prefs.multi_acks; } - bool filterRecvFloodPacket(mesh::Packet* pkt) override; + mesh::DispatcherAction onRecvPacket(mesh::Packet* pkt) override; void onAdvertRecv(mesh::Packet* packet, const mesh::Identity& id, uint32_t timestamp, const uint8_t* app_data, size_t app_data_len) override; void onAnonDataRecv(mesh::Packet* packet, const uint8_t* secret, const mesh::Identity& sender, uint8_t* data, size_t len) override; diff --git a/zephcore/helpers/RegionMap.cpp b/zephcore/helpers/RegionMap.cpp index c8affec..adbd873 100644 --- a/zephcore/helpers/RegionMap.cpp +++ b/zephcore/helpers/RegionMap.cpp @@ -114,7 +114,7 @@ bool RegionMap::save(const char* path) { } fs_close(&file); LOG_INF("Saved %d regions to %s", num_regions, filepath); - return true; + return success; } RegionEntry* RegionMap::putRegion(const char* name, uint16_t parent_id, uint16_t id) {