Attribution for Timothy Redaelli.
[tinc] / src / net_packet.c
index cf42a3d..44ab55d 100644 (file)
@@ -2,6 +2,7 @@
     net_packet.c -- Handles in- and outgoing VPN packets
     Copyright (C) 1998-2005 Ivo Timmermans,
                   2000-2010 Guus Sliepen <guus@tinc-vpn.org>
+                  2010      Timothy Redaelli <timothy@redaelli.eu>
 
     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
@@ -26,7 +27,9 @@
 #include <openssl/pem.h>
 #include <openssl/hmac.h>
 
+#ifdef HAVE_ZLIB
 #include <zlib.h>
+#endif
 
 #ifdef HAVE_LZO
 #include LZO1X_H
@@ -152,7 +155,10 @@ 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) {
-       if(level == 10) {
+       if(level == 0) {
+               memcpy(dest, source, len);
+               return len;
+       } else if(level == 10) {
 #ifdef HAVE_LZO
                lzo_uint lzolen = MAXSIZE;
                lzo1x_1_compress(source, len, dest, &lzolen, lzo_wrkmem);
@@ -161,10 +167,12 @@ static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t l
                return -1;
 #endif
        } else if(level < 10) {
+#ifdef HAVE_ZLIB
                unsigned long destlen = MAXSIZE;
                if(compress2(dest, &destlen, source, len, level) == Z_OK)
                        return destlen;
                else
+#endif
                        return -1;
        } else {
 #ifdef HAVE_LZO
@@ -180,7 +188,10 @@ static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t l
 }
 
 static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
-       if(level > 9) {
+       if(level == 0) {
+               memcpy(dest, source, len);
+               return len;
+       } else if(level > 9) {
 #ifdef HAVE_LZO
                lzo_uint lzolen = MAXSIZE;
                if(lzo1x_decompress_safe(source, len, dest, &lzolen, NULL) == LZO_E_OK)
@@ -188,14 +199,17 @@ static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t
                else
 #endif
                        return -1;
-       } else {
+       }
+#ifdef HAVE_ZLIB
+       else {
                unsigned long destlen = MAXSIZE;
                if(uncompress(dest, &destlen, source, len) == Z_OK)
                        return destlen;
                else
                        return -1;
        }
-       
+#endif
+
        return -1;
 }
 
@@ -352,7 +366,9 @@ static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
        vpn_packet_t *outpkt;
        int origlen;
        int outlen, outpad;
+#if defined(SOL_IP) && defined(IP_TOS)
        static int priority = 0;
+#endif
        int origpriority;
        int sock;