Fix NodeInfo suppression logic to ensure suppression only applies to external requests (#9947)

* Fix NodeInfo suppression logic to ensure suppression only applies to external requests

* Ensure NodeInfo reply suppression logic to only apply for external requests which are actually nodeinfo packets
This commit is contained in:
Ben Meadors
2026-03-19 08:15:38 -05:00
committed by GitHub
parent ea3386f34a
commit e4c5bfd161

View File

@@ -30,7 +30,8 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes
auto p = *pptr;
if (mp.decoded.want_response) {
// Suppress replies to senders we've replied to recently (12H window)
if (mp.decoded.want_response && !isFromUs(&mp)) {
const NodeNum sender = getFrom(&mp);
const uint32_t now = mp.rx_time ? mp.rx_time : getTime();
auto it = lastNodeInfoSeen.find(sender);
@@ -119,7 +120,13 @@ void NodeInfoModule::sendOurNodeInfo(NodeNum dest, bool wantReplies, uint8_t cha
meshtastic_MeshPacket *NodeInfoModule::allocReply()
{
if (suppressReplyForCurrentRequest) {
// Only apply suppression when actually replying to someone else's request, not for periodic broadcasts.
const bool isReplyingToExternalRequest = currentRequest &&
currentRequest->which_payload_variant == meshtastic_MeshPacket_decoded_tag &&
currentRequest->decoded.portnum == meshtastic_PortNum_NODEINFO_APP &&
currentRequest->decoded.want_response && !isFromUs(currentRequest);
if (suppressReplyForCurrentRequest && isReplyingToExternalRequest) {
LOG_DEBUG("Skip send NodeInfo since we heard the requester <12h ago");
ignoreRequest = true;
suppressReplyForCurrentRequest = false;