kopia lustrzana https://github.com/meshtastic/firmware
Update last_sent_by_id in FloodingRouter
rodzic
5c438ae792
commit
66c71250b8
|
@ -44,10 +44,13 @@ void FloodingRouter::sniffReceived(const meshtastic_MeshPacket *p, const meshtas
|
||||||
|
|
||||||
tosend->hop_limit--; // bump down the hop count
|
tosend->hop_limit--; // bump down the hop count
|
||||||
|
|
||||||
|
if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) {
|
||||||
// If it is a traceRoute request, update the route that it went via me
|
// If it is a traceRoute request, update the route that it went via me
|
||||||
if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag && traceRouteModule &&
|
if (traceRouteModule && traceRouteModule->wantPacket(p))
|
||||||
traceRouteModule->wantPacket(p)) {
|
|
||||||
traceRouteModule->updateRoute(tosend);
|
traceRouteModule->updateRoute(tosend);
|
||||||
|
// If it is a neighborInfo packet, update last_sent_by_id
|
||||||
|
if (neighborInfoModule && neighborInfoModule->wantPacket(p))
|
||||||
|
neighborInfoModule->updateLastSentById(tosend);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("Rebroadcasting received floodmsg to neighbors\n");
|
LOG_INFO("Rebroadcasting received floodmsg to neighbors\n");
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "PacketHistory.h"
|
#include "PacketHistory.h"
|
||||||
#include "Router.h"
|
#include "Router.h"
|
||||||
|
#include "modules/NeighborInfoModule.h"
|
||||||
#include "modules/TraceRouteModule.h"
|
#include "modules/TraceRouteModule.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -174,11 +174,29 @@ bool NeighborInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp,
|
||||||
{
|
{
|
||||||
printNeighborInfo("RECIEVED", np);
|
printNeighborInfo("RECIEVED", np);
|
||||||
updateNeighbors(mp, np);
|
updateNeighbors(mp, np);
|
||||||
np->last_sent_by_id = nodeDB.getNodeNum();
|
|
||||||
// Allow others to handle this packet
|
// Allow others to handle this packet
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copy the content of a current NeighborInfo packet into a new one and update the last_sent_by_id to our NodeNum
|
||||||
|
*/
|
||||||
|
void NeighborInfoModule::updateLastSentById(meshtastic_MeshPacket *p)
|
||||||
|
{
|
||||||
|
auto &incoming = p->decoded;
|
||||||
|
meshtastic_NeighborInfo scratch;
|
||||||
|
meshtastic_NeighborInfo *updated = NULL;
|
||||||
|
memset(&scratch, 0, sizeof(scratch));
|
||||||
|
pb_decode_from_bytes(incoming.payload.bytes, incoming.payload.size, &meshtastic_NeighborInfo_msg, &scratch);
|
||||||
|
updated = &scratch;
|
||||||
|
|
||||||
|
updated->last_sent_by_id = nodeDB.getNodeNum();
|
||||||
|
|
||||||
|
// Set updated last_sent_by_id to the payload of the to be flooded packet
|
||||||
|
p->decoded.payload.size =
|
||||||
|
pb_encode_to_bytes(p->decoded.payload.bytes, sizeof(p->decoded.payload.bytes), &meshtastic_NeighborInfo_msg, updated);
|
||||||
|
}
|
||||||
|
|
||||||
void NeighborInfoModule::resetNeighbors()
|
void NeighborInfoModule::resetNeighbors()
|
||||||
{
|
{
|
||||||
neighborState.neighbors_count = 0;
|
neighborState.neighbors_count = 0;
|
||||||
|
|
|
@ -20,6 +20,9 @@ class NeighborInfoModule : public ProtobufModule<meshtastic_NeighborInfo>, priva
|
||||||
|
|
||||||
bool saveProtoForModule();
|
bool saveProtoForModule();
|
||||||
|
|
||||||
|
// Let FloodingRouter call updateLastSentById upon rebroadcasting a NeighborInfo packet
|
||||||
|
friend class FloodingRouter;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Note: this holds our local info.
|
// Note: this holds our local info.
|
||||||
meshtastic_NeighborInfo neighborState;
|
meshtastic_NeighborInfo neighborState;
|
||||||
|
@ -58,6 +61,9 @@ class NeighborInfoModule : public ProtobufModule<meshtastic_NeighborInfo>, priva
|
||||||
/* update neighbors with subpacket sniffed from network */
|
/* update neighbors with subpacket sniffed from network */
|
||||||
void updateNeighbors(const meshtastic_MeshPacket &mp, meshtastic_NeighborInfo *np);
|
void updateNeighbors(const meshtastic_MeshPacket &mp, meshtastic_NeighborInfo *np);
|
||||||
|
|
||||||
|
/* update a NeighborInfo packet with our NodeNum as last_sent_by_id */
|
||||||
|
void updateLastSentById(meshtastic_MeshPacket *p);
|
||||||
|
|
||||||
void loadProtoForModule();
|
void loadProtoForModule();
|
||||||
|
|
||||||
/* Does our periodic broadcast */
|
/* Does our periodic broadcast */
|
||||||
|
|
Ładowanie…
Reference in New Issue