diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 984f448f..666f79fc 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -414,7 +414,7 @@ bool MyMesh::isLooped(const mesh::Packet* packet, const uint8_t max_counters[]) } void MyMesh::sendFloodReply(mesh::Packet* packet, unsigned long delay_millis, uint8_t path_hash_size) { - if (recv_pkt_region) { // if _request_ packet scope is known, send reply with same scope + if (recv_pkt_region && !recv_pkt_region->isWildcard()) { // if _request_ packet scope is known, send reply with same scope TransportKey scope; if (region_map.getTransportKeysFor(*recv_pkt_region, &scope, 1) > 0) { sendFloodScoped(scope, packet, delay_millis, path_hash_size); diff --git a/examples/simple_room_server/MyMesh.cpp b/examples/simple_room_server/MyMesh.cpp index 75097d44..145fb0fd 100644 --- a/examples/simple_room_server/MyMesh.cpp +++ b/examples/simple_room_server/MyMesh.cpp @@ -716,7 +716,7 @@ void MyMesh::sendFloodScoped(const TransportKey& scope, mesh::Packet* pkt, uint3 } void MyMesh::sendFloodReply(mesh::Packet* packet, unsigned long delay_millis, uint8_t path_hash_size) { - if (recv_pkt_region) { // if _request_ packet scope is known, send reply with same scope + if (recv_pkt_region && !recv_pkt_region->isWildcard()) { // if _request_ packet scope is known, send reply with same scope TransportKey scope; if (region_map.getTransportKeysFor(*recv_pkt_region, &scope, 1) > 0) { sendFloodScoped(scope, packet, delay_millis, path_hash_size); diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index 9eb355ac..0ee7c55d 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -948,12 +948,14 @@ void CommonCLI::handleRegionCmd(char* command, char* reply) { if (strcmp(parts[2], "") == 0) { _region_map->setDefaultRegion(NULL); _callbacks->onDefaultRegionChanged(NULL); + _callbacks->saveRegions(); // persist in one atomic step sprintf(reply, " default scope is now "); } else { auto def = _region_map->findByNamePrefix(parts[2]); if (def) { _region_map->setDefaultRegion(def); _callbacks->onDefaultRegionChanged(def); + _callbacks->saveRegions(); // persist in one atomic step sprintf(reply, " default scope is now %s", def->name); } else { strcpy(reply, "Err - unknown region"); diff --git a/src/helpers/RegionMap.h b/src/helpers/RegionMap.h index 88cb6b72..5eb14429 100644 --- a/src/helpers/RegionMap.h +++ b/src/helpers/RegionMap.h @@ -16,6 +16,8 @@ struct RegionEntry { uint16_t parent; uint8_t flags; char name[31]; + + bool isWildcard() const { return id == 0; } }; class RegionMap {