X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Froute.c;h=f09a1041f1f8aca3561a49001fc74680180462af;hb=fb7b6e7a0c966a88a682f656ca1caeb9a0583c5b;hp=28fdfa894112c284a8aba3b087d7144c849d27aa;hpb=158cbe99f972a1613b7d4d95abfe5fe48e019e67;p=meshlink diff --git a/src/route.c b/src/route.c index 28fdfa89..f09a1041 100644 --- a/src/route.c +++ b/src/route.c @@ -23,6 +23,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; @@ -58,6 +59,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 +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; }