From: Saverio Proto Date: Sun, 13 Apr 2014 10:29:52 +0000 (+0200) Subject: Refactory of route() function to have just one like in tinc1.1 X-Git-Url: http://git.meshlink.io/?p=meshlink;a=commitdiff_plain;h=f2ca99f9cec8d3a4a153163351fcd25545e50d83 Refactory of route() function to have just one like in tinc1.1 --- diff --git a/src/libmeshlink.c b/src/libmeshlink.c index fd0857f6..aa1f9350 100644 --- a/src/libmeshlink.c +++ b/src/libmeshlink.c @@ -532,32 +532,6 @@ end: bool tinc_stop(); -bool route_meshlink(node_t *source,vpn_packet_t *packet) { - - printf("data %s\n",packet->data+14); - printf("data 46%s\n",packet->data+sizeof(tincpackethdr)); - node_t* owner = NULL; - - tincpackethdr* hdr = (tincpackethdr*)packet->data; - owner = lookup_node(hdr->destination); - - if (owner == NULL) { - //Lookup failed - printf("NULL\n"); - return false; - } - printf("lookupnode %s\n",owner->name); - - if(!owner->status.reachable) { - //Do some here - return false; - } - - //TODO: I skipped here a lot of checks ! - - send_packet(owner,packet); - -} // can be called from any thread bool tinc_send_packet(node_t *receiver, const char* buf, unsigned int len) { @@ -581,7 +555,7 @@ bool tinc_send_packet(node_t *receiver, const char* buf, unsigned int len) { myself->in_packets++; myself->in_bytes += packet.len; - route_meshlink(myself, &packet); + route(myself, &packet); return true; } 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; }