X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=src%2Froute.c;h=e4007b4715a9d99093863d4cf6b9b50cf6501222;hb=6a6d41f91a838fa3fa2584ba936677771d86a5d0;hp=5d967dc3c937dcbfd76119dd59b220ebcdd766d9;hpb=1ffa0e102dc0d036241ee1ea2a13df42526c0872;p=meshlink diff --git a/src/route.c b/src/route.c index 5d967dc3..e4007b47 100644 --- a/src/route.c +++ b/src/route.c @@ -1,7 +1,6 @@ /* route.c -- routing - Copyright (C) 2000-2005 Ivo Timmermans, - 2000-2013 Guus Sliepen + Copyright (C) 2014 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,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; @@ -32,7 +32,6 @@ bool decrement_ttl = false; bool directonly = false; bool priorityinheritance = false; int macexpire = 600; -bool overwrite_mac = false; mac_t mymac = {{0xFE, 0xFD, 0, 0, 0, 0}}; bool pcap = false; @@ -60,6 +59,33 @@ 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); + (recv_callback)(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; }