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:
@@ -30,7 +30,8 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes
|
|||||||
|
|
||||||
auto p = *pptr;
|
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 NodeNum sender = getFrom(&mp);
|
||||||
const uint32_t now = mp.rx_time ? mp.rx_time : getTime();
|
const uint32_t now = mp.rx_time ? mp.rx_time : getTime();
|
||||||
auto it = lastNodeInfoSeen.find(sender);
|
auto it = lastNodeInfoSeen.find(sender);
|
||||||
@@ -119,7 +120,13 @@ void NodeInfoModule::sendOurNodeInfo(NodeNum dest, bool wantReplies, uint8_t cha
|
|||||||
|
|
||||||
meshtastic_MeshPacket *NodeInfoModule::allocReply()
|
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");
|
LOG_DEBUG("Skip send NodeInfo since we heard the requester <12h ago");
|
||||||
ignoreRequest = true;
|
ignoreRequest = true;
|
||||||
suppressReplyForCurrentRequest = false;
|
suppressReplyForCurrentRequest = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user