X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fnet_packet.c;h=29f4fb8e59aebfcd900c99b5230db87335c2913e;hb=a7ef599e6bdd8730c5a949d4c1727c38d5b6ff9e;hp=5631a939716cdfb064aa724c821dfab256cf78d3;hpb=11bf251190cb84a9d127bd8b940279413c5313b4;p=meshlink diff --git a/src/net_packet.c b/src/net_packet.c index 5631a939..29f4fb8e 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -30,6 +30,7 @@ #include "digest.h" #include "graph.h" #include "logger.h" +#include "meshlink_internal.h" #include "net.h" #include "netutl.h" #include "protocol.h" @@ -163,7 +164,7 @@ void send_mtu_probe(node_t *n) { send_mtu_probe_handler(n); } -static void mtu_probe_h(node_t *n, vpn_packet_t *packet, length_t len) { +static void mtu_probe_h(node_t *n, vpn_packet_t *packet, uint16_t len) { logger(DEBUG_TRAFFIC, LOG_INFO, "Got MTU probe length %d from %s (%s)", packet->len, n->name, n->hostname); if(!packet->data[0]) { @@ -230,7 +231,7 @@ static void mtu_probe_h(node_t *n, vpn_packet_t *packet, length_t len) { } } -static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) { +static uint16_t compress_packet(uint8_t *dest, const uint8_t *source, uint16_t len, int level) { if(level == 0) { memcpy(dest, source, len); return len; @@ -251,7 +252,7 @@ static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t l return -1; } -static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) { +static uint16_t uncompress_packet(uint8_t *dest, const uint8_t *source, uint16_t len, int level) { if(level == 0) { memcpy(dest, source, len); return len; @@ -462,16 +463,16 @@ bool send_sptps_data(void *handle, uint8_t type, const char *data, size_t len) { /* Send it via TCP if it is a handshake packet, TCPOnly is in use, or this packet is larger than the MTU. */ - if(type >= SPTPS_HANDSHAKE || ((myself->options | to->options) & OPTION_TCPONLY) || (type != PKT_PROBE && len > to->minmtu)) { + if(type >= SPTPS_HANDSHAKE || ((mesh->self->options | to->options) & OPTION_TCPONLY) || (type != PKT_PROBE && len > to->minmtu)) { char buf[len * 4 / 3 + 5]; b64encode(data, buf, len); /* If no valid key is known yet, send the packets using ANS_KEY requests, to ensure we get to learn the reflexive UDP address. */ if(!to->status.validkey) { - to->incompression = myself->incompression; - return send_request(to->nexthop->connection, "%d %s %s %s -1 -1 -1 %d", ANS_KEY, myself->name, to->name, buf, to->incompression); + to->incompression = mesh->self->incompression; + return send_request(to->nexthop->connection, "%d %s %s %s -1 -1 -1 %d", ANS_KEY, mesh->self->name, to->name, buf, to->incompression); } else { - return send_request(to->nexthop->connection, "%d %s %s %d %s", REQ_KEY, myself->name, to->name, REQ_SPTPS, buf); + return send_request(to->nexthop->connection, "%d %s %s %d %s", REQ_KEY, mesh->self->name, to->name, REQ_SPTPS, buf); } } @@ -535,7 +536,7 @@ bool receive_sptps_record(void *handle, uint8_t type, const char *data, uint16_t } if(type & PKT_COMPRESSED) { - length_t ulen = uncompress_packet(inpkt.data, (const uint8_t *)data, len, from->incompression); + uint16_t ulen = uncompress_packet(inpkt.data, (const uint8_t *)data, len, from->incompression); if(ulen < 0) { return false; } else { @@ -558,7 +559,7 @@ bool receive_sptps_record(void *handle, uint8_t type, const char *data, uint16_t void send_packet(node_t *n, vpn_packet_t *packet) { node_t *via; - if(n == myself) { + if(n == mesh->self) { n->out_packets++; n->out_bytes += packet->len; // TODO: send to application @@ -585,8 +586,8 @@ void send_packet(node_t *n, vpn_packet_t *packet) { void broadcast_packet(const node_t *from, vpn_packet_t *packet) { // Always give ourself a copy of the packet. - if(from != myself) - send_packet(myself, packet); + if(from != mesh->self) + send_packet(mesh->self, packet); logger(DEBUG_TRAFFIC, LOG_INFO, "Broadcasting packet of %d bytes from %s (%s)", packet->len, from->name, from->hostname); @@ -601,8 +602,8 @@ static node_t *try_harder(const sockaddr_t *from, const vpn_packet_t *pkt) { bool hard = false; static time_t last_hard_try = 0; - for splay_each(edge_t, e, edge_weight_tree) { - if(!e->to->status.reachable || e->to == myself) + for splay_each(edge_t, e, mesh->edges) { + if(!e->to->status.reachable || e->to == mesh->self) continue; if(sockaddrcmp_noport(from, &e->address)) {