X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Froute.c;fp=src%2Froute.c;h=0000000000000000000000000000000000000000;hb=de1fbdf4403ea2a78f14925ffcc113198d87fc9d;hp=f7a728dc80278cac5ed62f2912f6b163428a534c;hpb=b8d9f9f97b63565bfe56c248428a49bc3f6a1e47;p=meshlink diff --git a/src/route.c b/src/route.c deleted file mode 100644 index f7a728dc..00000000 --- a/src/route.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - route.c -- routing - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "system.h" - -#include "logger.h" -#include "meshlink_internal.h" -#include "net.h" -#include "route.h" -#include "utils.h" - -bool decrement_ttl = false; - -static bool checklength(node_t *source, vpn_packet_t *packet, uint16_t length) { - if(packet->len < length) { - logger(source->mesh, MESHLINK_WARNING, "Got too short packet from %s", source->name); - return false; - } else { - return true; - } -} - -void route(meshlink_handle_t *mesh, node_t *source, vpn_packet_t *packet) { - // TODO: route on name or key - - node_t *owner = NULL; - node_t *via = NULL; - meshlink_packethdr_t *hdr = (meshlink_packethdr_t *) packet->data; - owner = lookup_node(mesh, (char *)hdr->destination); - logger(mesh, MESHLINK_DEBUG, "Routing packet from \"%s\" to \"%s\"\n", hdr->source, hdr->destination); - - //Check Lenght - if(!checklength(source, packet, sizeof(*hdr))) { - return; - } - - if(owner == NULL) { - //Lookup failed - logger(mesh, MESHLINK_WARNING, "Cant lookup the owner of a packet in the route() function. This should never happen!\n"); - logger(mesh, MESHLINK_WARNING, "Destination was: %s\n", hdr->destination); - return; - } - - if(owner == mesh->self) { - const void *payload = packet->data + sizeof(*hdr); - size_t len = packet->len - sizeof(*hdr); - - char hex[len * 2 + 1]; - - if(mesh->log_level >= MESHLINK_DEBUG) { - bin2hex(payload, hex, len); // don't do this unless it's going to be logged - } - - logger(mesh, MESHLINK_DEBUG, "I received a packet for me with payload: %s\n", hex); - - if(mesh->receive_cb) { - mesh->receive_cb(mesh, (meshlink_node_t *)source, payload, len); - } - - return; - } - - if(!owner->status.reachable) { - //TODO: check what to do here, not just print a warning - logger(mesh, MESHLINK_WARNING, "The owner of a packet in the route() function is unreachable. Dropping packet.\n"); - return; - } - - via = (owner->via == mesh->self) ? owner->nexthop : owner->via; - - if(via == source) { - logger(mesh, MESHLINK_ERROR, "Routing loop for packet from %s!", source->name); - return; - } - - send_packet(mesh, owner, packet); - return; -}