X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Froute.c;h=52e7a69d4785058d942ae8da0789158182f8392b;hb=f2ca99f9cec8d3a4a153163351fcd25545e50d83;hp=5eed418c07e2fa75cf54ccbeb4c492054a2d17b0;hpb=2c9e02be099753999a3eab55bd2fed4ab4470f2b;p=meshlink diff --git a/src/route.c b/src/route.c index 5eed418c..52e7a69d 100644 --- a/src/route.c +++ b/src/route.c @@ -24,6 +24,7 @@ #include "net.h" #include "route.h" #include "utils.h" +#include "libmeshlink.h" rmode_t routing_mode = RMODE_ROUTER; fmode_t forwarding_mode = FMODE_INTERNAL; @@ -60,7 +61,32 @@ static bool checklength(node_t *source, vpn_packet_t *packet, length_t length) { return true; } -void route(node_t *source, vpn_packet_t *packet) { - // TODO: route on name or key - logger(DEBUG_TRAFFIC, LOG_WARNING, "Saverio prints packet %s ", packet->data + 46); +void route(node_t *source,vpn_packet_t *packet) { + // TODO: route on name or key + + node_t* owner = NULL; + tincpackethdr* hdr = (tincpackethdr*)packet->data; + owner = lookup_node(hdr->destination); + if (owner == NULL) { + //Lookup failed + logger(DEBUG_TRAFFIC, LOG_WARNING, "Cant lookup the owner of a packet in the route() function. This should never happen \n"); + return; + } + + if (owner == myself ) { + //TODO: implement sending received data from meshlink library to the application + logger(DEBUG_TRAFFIC, LOG_WARNING, "I received a packet for me with payload: %s \n", packet->data + 46); + return; + } + + if(!owner->status.reachable) { + //TODO: check what to do here, not just print a warning + logger(DEBUG_TRAFFIC, LOG_WARNING, "The owner of a packet in the route() function is unreachable. Dropping packet. \n"); + return; + } + + //TODO: I skipped here a lot of checks ! + + send_packet(owner,packet); + return; }