firmware/src/plugins/RoutingPlugin.cpp

61 lines
1.5 KiB
C++
Raw Normal View History

2021-02-17 05:06:23 +00:00
#include "RoutingPlugin.h"
#include "MeshService.h"
#include "NodeDB.h"
#include "Router.h"
#include "configuration.h"
#include "main.h"
RoutingPlugin *routingPlugin;
2021-02-21 04:59:47 +00:00
bool RoutingPlugin::handleReceivedProtobuf(const MeshPacket &mp, const Routing *r)
2021-02-17 05:06:23 +00:00
{
2021-02-21 04:59:47 +00:00
router->sniffReceived(&mp, r);
// FIXME - move this to a non promsicious PhoneAPI plugin?
if (mp.to == NODENUM_BROADCAST || mp.to == nodeDB.getNodeNum()) {
printPacket("Delivering rx packet", &mp);
service.handleFromRadio(&mp);
}
2021-02-17 05:06:23 +00:00
return false; // Let others look at this message also if they want
}
MeshPacket *RoutingPlugin::allocReply()
{
assert(0); // 1.2 refactoring fixme, Not sure if anything needs this yet?
// return allocDataProtobuf(u);
return NULL;
}
void RoutingPlugin::sendAckNak(Routing_Error err, NodeNum to, PacketId idFrom)
{
Routing c = Routing_init_default;
if (!err) {
c.success_id = idFrom;
} else {
c.fail_id = idFrom;
// Also send back the error reason
c.error_reason = err;
}
auto p = allocDataProtobuf(c);
p->priority = MeshPacket_Priority_ACK;
p->hop_limit = 0; // Assume just immediate neighbors for now
p->to = to;
DEBUG_MSG("Sending an err=%d,to=0x%x,idFrom=0x%x,id=0x%x\n", err, to, idFrom, p->id);
router->sendLocal(p); // we sometimes send directly to the local node
}
RoutingPlugin::RoutingPlugin()
2021-02-21 06:03:44 +00:00
: ProtobufPlugin("routing", PortNum_ROUTING_APP, Routing_fields)
2021-02-17 05:06:23 +00:00
{
isPromiscuous = true;
}