Added support for packet compression, thanks to Mark Glines.
authorGuus Sliepen <guus@tinc-vpn.org>
Mon, 11 Feb 2002 15:59:18 +0000 (15:59 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Mon, 11 Feb 2002 15:59:18 +0000 (15:59 +0000)
Add "Compression = <level>" to the host config files, where level can be
0 (off), or any integer between 1 (fast) and 9 (best).

THANKS
configure.in
doc/tinc.conf.5
doc/tinc.texi
m4/zlib.m4 [new file with mode: 0644]
po/nl.po
src/net.c
src/node.c
src/node.h
src/protocol.h
src/protocol_key.c

diff --git a/THANKS b/THANKS
index 0c50cf6..e4cfd6d 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -17,6 +17,7 @@ We would like to thank
  * Jamie Briggs (for finding a lot of socket leaks)
  * Armijn Hemel (for being our very own PR manager)
  * Jerome Etienne (for a thorough security analysis of tinc)
  * Jamie Briggs (for finding a lot of socket leaks)
  * Armijn Hemel (for being our very own PR manager)
  * Jerome Etienne (for a thorough security analysis of tinc)
+ * Mark Glines (for his compression patch) 
 
 for their help, support and ideas.  Thank you guys!
 
 
 for their help, support and ideas.  Thank you guys!
 
index df0f2bc..ec76e6d 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
 dnl Process this file with autoconf to produce a configure script.
 
-dnl $Id: configure.in,v 1.13.2.39 2002/02/10 21:57:51 guus Exp $
+dnl $Id: configure.in,v 1.13.2.40 2002/02/11 15:59:18 guus Exp $
 
 AC_INIT(src/tincd.c)
 AM_INIT_AUTOMAKE(tinc, 1.0-cvs)
 
 AC_INIT(src/tincd.c)
 AM_INIT_AUTOMAKE(tinc, 1.0-cvs)
@@ -94,6 +94,7 @@ AC_CACHE_SAVE
 dnl These are defined in files in m4/
 tinc_TUNTAP
 tinc_OPENSSL
 dnl These are defined in files in m4/
 tinc_TUNTAP
 tinc_OPENSSL
+tinc_ZLIB
 
 dnl Check if checkpoint tracing has to be enabled
 AC_ARG_ENABLE(tracing,
 
 dnl Check if checkpoint tracing has to be enabled
 AC_ARG_ENABLE(tracing,
index 547c75f..642cc6b 100644 (file)
@@ -216,6 +216,9 @@ Any cipher supported by OpenSSL is recognised.
 Furthermore, specifying
 .Qq none
 will turn off packet encryption.
 Furthermore, specifying
 .Qq none
 will turn off packet encryption.
+.It Va Compression Li = Ar level Pq 0
+This option sets the level of compression used for UDP packets.
+Possible values are 0 (off), 1 (fast) and any integer up to 9 (best).
 .It Va Digest Li = Ar digest Pq sha1
 The digest algorithm used to authenticate UDP packets.
 Any digest supported by OpenSSL is recognised.
 .It Va Digest Li = Ar digest Pq sha1
 The digest algorithm used to authenticate UDP packets.
 Any digest supported by OpenSSL is recognised.
index ca399d5..6bf9c1d 100644 (file)
@@ -1,5 +1,5 @@
 \input texinfo   @c -*-texinfo-*-
 \input texinfo   @c -*-texinfo-*-
-@c $Id: tinc.texi,v 1.8.4.19 2002/02/10 21:57:51 guus Exp $
+@c $Id: tinc.texi,v 1.8.4.20 2002/02/11 15:59:18 guus Exp $
 @c %**start of header
 @setfilename tinc.info
 @settitle tinc Manual
 @c %**start of header
 @setfilename tinc.info
 @settitle tinc Manual
@@ -18,7 +18,7 @@ Copyright @copyright{} 1998-2002 Ivo Timmermans
 <itimmermans@@bigfoot.com>, Guus Sliepen <guus@@sliepen.warande.net> and
 Wessel Dankers <wsl@@nl.linux.org>.
 
 <itimmermans@@bigfoot.com>, Guus Sliepen <guus@@sliepen.warande.net> and
 Wessel Dankers <wsl@@nl.linux.org>.
 
-$Id: tinc.texi,v 1.8.4.19 2002/02/10 21:57:51 guus Exp $
+$Id: tinc.texi,v 1.8.4.20 2002/02/11 15:59:18 guus Exp $
 
 Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
 
 Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -43,7 +43,7 @@ Copyright @copyright{} 1998-2002 Ivo Timmermans
 <itimmermans@@bigfoot.com>, Guus Sliepen <guus@@sliepen.warande.net> and
 Wessel Dankers <wsl@@nl.linux.org>.
 
 <itimmermans@@bigfoot.com>, Guus Sliepen <guus@@sliepen.warande.net> and
 Wessel Dankers <wsl@@nl.linux.org>.
 
-$Id: tinc.texi,v 1.8.4.19 2002/02/10 21:57:51 guus Exp $
+$Id: tinc.texi,v 1.8.4.20 2002/02/11 15:59:18 guus Exp $
 
 Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
 
 Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -865,6 +865,11 @@ not the one that is internal to the VPN.
 The symmetric cipher algorithm used to encrypt UDP packets.
 Any cipher supported by OpenSSL is recognized.
 
 The symmetric cipher algorithm used to encrypt UDP packets.
 Any cipher supported by OpenSSL is recognized.
 
+@cindex Compression
+@item Compression = <level> (0)
+This option sets the level of compression used for UDP packets.
+Possible values are 0 (off), 1 (fast) and any integer up to 9 (best).
+
 @cindex Digest
 @item Digest = <digest> (sha1)
 The digest algorithm used to authenticate UDP packets.
 @cindex Digest
 @item Digest = <digest> (sha1)
 The digest algorithm used to authenticate UDP packets.
diff --git a/m4/zlib.m4 b/m4/zlib.m4
new file mode 100644 (file)
index 0000000..8407838
--- /dev/null
@@ -0,0 +1,31 @@
+dnl Check to find the zlib headers/libraries
+
+AC_DEFUN(tinc_ZLIB,
+[
+  tinc_ac_save_CPPFLAGS="$CPPFLAGS"
+
+  AC_ARG_WITH(zlib-include,
+    [  --with-zlib-include=DIR  zlib headers directory],
+    [zlib_include="$withval"
+     CFLAGS="$CFLAGS -I$withval"
+     CPPFLAGS="$CPPFLAGS -I$withval"]
+  )
+
+  AC_ARG_WITH(zlib-lib,
+    [  --with-zlib-lib=DIR  zlib library directory],
+    [zlib_lib="$withval"
+     LIBS="$LIBS -L$withval"]
+  )
+
+  AC_CHECK_HEADERS(zlib.h,
+    [],
+    [AC_MSG_ERROR("zlib header files not found."); break]
+  )
+
+  CPPFLAGS="$tinc_ac_save_CPPFLAGS"
+
+  AC_CHECK_LIB(z, compress2,
+    [LIBS="$LIBS -lz"],
+    [AC_MSG_ERROR("zlib libraries not found.")]
+  )
+])
index 64895bf..776e36d 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: tinc 1.0-cvs\n"
 msgid ""
 msgstr ""
 "Project-Id-Version: tinc 1.0-cvs\n"
-"POT-Creation-Date: 2002-02-09 21:32+0100\n"
-"PO-Revision-Date: 2002-02-09 17:20+0100\n"
+"POT-Creation-Date: 2002-02-11 16:57+0100\n"
+"PO-Revision-Date: 2002-02-11 16:57+0100\n"
 "Last-Translator: Guus Sliepen <guus@sliepen.warande.net>\n"
 "Language-Team: Dutch <vertaling@nl.linux.org>\n"
 "MIME-Version: 1.0\n"
 "Last-Translator: Guus Sliepen <guus@sliepen.warande.net>\n"
 "Language-Team: Dutch <vertaling@nl.linux.org>\n"
 "MIME-Version: 1.0\n"
@@ -170,302 +170,315 @@ msgstr "Fout op metadata socket voor %s (%s) tijdens lezen: %m"
 msgid "Metadata read buffer overflow for %s (%s)"
 msgstr "Metadata leesbuffer overloop voor %s (%s)"
 
 msgid "Metadata read buffer overflow for %s (%s)"
 msgstr "Metadata leesbuffer overloop voor %s (%s)"
 
-#: src/net.c:111
+#: src/net.c:118
 #, c-format
 msgid "Got unauthenticated packet from %s (%s)"
 msgstr "Kreeg niet-geauthenticeerd pakket van %s (%s)"
 
 #, c-format
 msgid "Got unauthenticated packet from %s (%s)"
 msgstr "Kreeg niet-geauthenticeerd pakket van %s (%s)"
 
-#: src/net.c:134
+#: src/net.c:144
 #, c-format
 msgid "Got late or replayed packet from %s (%s), seqno %d"
 msgstr "Kreeg laat of gedupliceerd pakket van %s (%s), seqno %d"
 
 #, c-format
 msgid "Got late or replayed packet from %s (%s), seqno %d"
 msgstr "Kreeg laat of gedupliceerd pakket van %s (%s), seqno %d"
 
-#: src/net.c:162
+#: src/net.c:161
+#, c-format
+msgid "Error while uncompressing packet from %s (%s)"
+msgstr "Fout tijdens decomprimeren pakket van %s (%s)"
+
+#: src/net.c:188
 #, c-format
 msgid "Received packet of %d bytes from %s (%s)"
 msgstr "Ontvangst pakket van %d bytes van %s (%s)"
 
 #, c-format
 msgid "Received packet of %d bytes from %s (%s)"
 msgstr "Ontvangst pakket van %d bytes van %s (%s)"
 
-#: src/net.c:180
+#: src/net.c:210
 #, c-format
 msgid "No valid key known yet for %s (%s), queueing packet"
 msgstr ""
 "Nog geen geldige sleutel bekend voor %s (%s), pakket wordt in wachtrij gezet"
 
 #, c-format
 msgid "No valid key known yet for %s (%s), queueing packet"
 msgstr ""
 "Nog geen geldige sleutel bekend voor %s (%s), pakket wordt in wachtrij gezet"
 
-#: src/net.c:225
+#: src/net.c:235
+#, c-format
+msgid "Error while compressing packet to %s (%s)"
+msgstr "Fout tijdens comprimeren pakket naar %s (%s)"
+
+#: src/net.c:278
 #, c-format
 msgid "Error sending packet to %s (%s): %m"
 msgstr "Fout tijdens verzenden pakket naar %s (%s): %m"
 
 #, c-format
 msgid "Error sending packet to %s (%s): %m"
 msgstr "Fout tijdens verzenden pakket naar %s (%s): %m"
 
-#: src/net.c:240
+#: src/net.c:293
 #, c-format
 msgid "Sending packet of %d bytes to %s (%s)"
 msgstr "Verzending pakket van %d bytes naar %s (%s)"
 
 #, c-format
 msgid "Sending packet of %d bytes to %s (%s)"
 msgstr "Verzending pakket van %d bytes naar %s (%s)"
 
-#: src/net.c:247
+#: src/net.c:300
 msgid "Packet is looping back to us!"
 msgstr "Pakket komt terug naar ons!"
 
 msgid "Packet is looping back to us!"
 msgstr "Pakket komt terug naar ons!"
 
-#: src/net.c:256
+#: src/net.c:309
 #, c-format
 msgid "Node %s (%s) is not reachable"
 msgstr "Node %s (%s) is niet bereikbaar"
 
 #, c-format
 msgid "Node %s (%s) is not reachable"
 msgstr "Node %s (%s) is niet bereikbaar"
 
-#: src/net.c:264
+#: src/net.c:317
 #, c-format
 msgid "Sending packet to %s via %s (%s)"
 msgstr "Verzending pakket naar %s via %s (%s)"
 
 #, c-format
 msgid "Sending packet to %s via %s (%s)"
 msgstr "Verzending pakket naar %s via %s (%s)"
 
-#: src/net.c:284
+#: src/net.c:337
 #, c-format
 msgid "Broadcasting packet of %d bytes from %s (%s)"
 msgstr "Verspreiding pakket van %d bytes van %s (%s)"
 
 #, c-format
 msgid "Broadcasting packet of %d bytes from %s (%s)"
 msgstr "Verspreiding pakket van %d bytes van %s (%s)"
 
-#: src/net.c:301
+#: src/net.c:354
 #, c-format
 msgid "Flushing queue for %s (%s)"
 msgstr "Legen van wachtrij voor %s (%s)"
 
 #, c-format
 msgid "Flushing queue for %s (%s)"
 msgstr "Legen van wachtrij voor %s (%s)"
 
-#: src/net.c:326
+#: src/net.c:379
 #, c-format
 msgid "Creating metasocket failed: %m"
 msgstr "Aanmaak van metasocket mislukt: %m"
 
 #, c-format
 msgid "Creating metasocket failed: %m"
 msgstr "Aanmaak van metasocket mislukt: %m"
 
-#: src/net.c:334 src/net.c:380 src/net.c:407 src/net.c:987 src/process.c:258
+#: src/net.c:387 src/net.c:433 src/net.c:460 src/net.c:1091 src/process.c:258
 #: src/process.c:294
 #, c-format
 msgid "System call `%s' failed: %m"
 msgstr "Systeemaanroep `%s' mislukte: %m"
 
 #: src/process.c:294
 #, c-format
 msgid "System call `%s' failed: %m"
 msgstr "Systeemaanroep `%s' mislukte: %m"
 
-#: src/net.c:354
+#: src/net.c:407
 #, c-format
 msgid "Can't bind to interface %s: %m"
 msgstr "Kan niet aan interface %s binden: %m"
 
 #, c-format
 msgid "Can't bind to interface %s: %m"
 msgstr "Kan niet aan interface %s binden: %m"
 
-#: src/net.c:373
+#: src/net.c:426
 #, c-format
 msgid "Can't bind to port %hd/tcp: %m"
 msgstr "Kan niet aan poort %hd/tcp binden: %m"
 
 #, c-format
 msgid "Can't bind to port %hd/tcp: %m"
 msgstr "Kan niet aan poort %hd/tcp binden: %m"
 
-#: src/net.c:397
+#: src/net.c:450
 #, c-format
 msgid "Creating socket failed: %m"
 msgstr "Aanmaak socket mislukte: %m"
 
 #, c-format
 msgid "Creating socket failed: %m"
 msgstr "Aanmaak socket mislukte: %m"
 
-#: src/net.c:420
+#: src/net.c:473
 #, c-format
 msgid "Can't bind to port %hd/udp: %m"
 msgstr "Kan niet aan poort %hd/udp binden: %m"
 
 #, c-format
 msgid "Can't bind to port %hd/udp: %m"
 msgstr "Kan niet aan poort %hd/udp binden: %m"
 
-#: src/net.c:442
+#: src/net.c:495
 #, c-format
 msgid "Trying to re-establish outgoing connection in %d seconds"
 msgstr "Poging tot herstellen van uitgaande verbinding over %d seconden"
 
 #, c-format
 msgid "Trying to re-establish outgoing connection in %d seconds"
 msgstr "Poging tot herstellen van uitgaande verbinding over %d seconden"
 
-#: src/net.c:452
+#: src/net.c:505
 #, c-format
 msgid "Trying to connect to %s (%s)"
 msgstr "Poging tot verbinden met %s (%s)"
 
 #, c-format
 msgid "Trying to connect to %s (%s)"
 msgstr "Poging tot verbinden met %s (%s)"
 
-#: src/net.c:458
+#: src/net.c:511
 #, c-format
 msgid "Creating socket for %s port %d failed: %m"
 msgstr "Aanmaken socket voor %s poort %d mislukt: %m"
 
 #, c-format
 msgid "Creating socket for %s port %d failed: %m"
 msgstr "Aanmaken socket voor %s poort %d mislukt: %m"
 
-#: src/net.c:500
+#: src/net.c:553
 #, c-format
 msgid "%s port %hd: %m"
 msgstr "%s poort %hd: %m"
 
 #, c-format
 msgid "%s port %hd: %m"
 msgstr "%s poort %hd: %m"
 
-#: src/net.c:509
+#: src/net.c:562
 #, c-format
 msgid "fcntl for %s port %d: %m"
 msgstr "fcntl voor %s poort %d: %m"
 
 #, c-format
 msgid "fcntl for %s port %d: %m"
 msgstr "fcntl voor %s poort %d: %m"
 
-#: src/net.c:515
+#: src/net.c:568
 #, c-format
 msgid "Connected to %s port %hd"
 msgstr "Verbonden met %s poort %hd"
 
 #, c-format
 msgid "Connected to %s port %hd"
 msgstr "Verbonden met %s poort %hd"
 
-#: src/net.c:533
+#: src/net.c:586
 #, c-format
 msgid "Already connected to %s"
 msgstr "Reeds verbonden met %s"
 
 #, c-format
 msgid "Already connected to %s"
 msgstr "Reeds verbonden met %s"
 
-#: src/net.c:546
+#: src/net.c:599
 #, c-format
 msgid "No address specified for %s"
 msgstr "Geen adres gespecificeerd voor %s"
 
 #, c-format
 msgid "No address specified for %s"
 msgstr "Geen adres gespecificeerd voor %s"
 
-#: src/net.c:558
+#: src/net.c:611
 #, c-format
 msgid "Error looking up `%s': %m"
 msgstr "Fout bij het opzoeken van `%s': %m"
 
 #, c-format
 msgid "Error looking up `%s': %m"
 msgstr "Fout bij het opzoeken van `%s': %m"
 
-#: src/net.c:569
+#: src/net.c:622
 #, c-format
 msgid "Could not set up a meta connection to %s (%s)"
 msgstr "Kon geen metaverbinding aangaan met %s (%s)"
 
 #, c-format
 msgid "Could not set up a meta connection to %s (%s)"
 msgstr "Kon geen metaverbinding aangaan met %s (%s)"
 
-#: src/net.c:610
+#: src/net.c:664
 #, c-format
 msgid "Error reading RSA public key file `%s': %m"
 msgstr "Fout tijdens lezen RSA publieke sleutel bestand `%s': %m"
 
 #, c-format
 msgid "Error reading RSA public key file `%s': %m"
 msgstr "Fout tijdens lezen RSA publieke sleutel bestand `%s': %m"
 
-#: src/net.c:618
+#: src/net.c:674
 #, c-format
 msgid "Reading RSA public key file `%s' failed: %m"
 msgstr "Lezen RSA publieke sleutel bestand `%s' mislukt: %m"
 
 #, c-format
 msgid "Reading RSA public key file `%s' failed: %m"
 msgstr "Lezen RSA publieke sleutel bestand `%s' mislukt: %m"
 
-#: src/net.c:643
+#: src/net.c:702
 #, c-format
 msgid "No public key for %s specified!"
 msgstr "Geen publieke sleutel bekend voor %s gespecificeerd!"
 
 #, c-format
 msgid "No public key for %s specified!"
 msgstr "Geen publieke sleutel bekend voor %s gespecificeerd!"
 
-#: src/net.c:663
+#: src/net.c:728
 #, c-format
 msgid "Error reading RSA private key file `%s': %m"
 msgstr "Fout tijdens lezen RSA privé sleutel bestand `%s': %m"
 
 #, c-format
 msgid "Error reading RSA private key file `%s': %m"
 msgstr "Fout tijdens lezen RSA privé sleutel bestand `%s': %m"
 
-#: src/net.c:671
+#: src/net.c:738
 #, c-format
 msgid "Reading RSA private key file `%s' failed: %m"
 msgstr "Fout tijdens lezen RSA privé sleutel bestand `%s': %m"
 
 #, c-format
 msgid "Reading RSA private key file `%s' failed: %m"
 msgstr "Fout tijdens lezen RSA privé sleutel bestand `%s': %m"
 
-#
-#: src/net.c:678
-msgid "No private key for tinc daemon specified!"
-msgstr "Geen privé sleutel voor tinc daemon gespecificeerd!"
-
-#: src/net.c:699 src/net.c:700
+#: src/net.c:791 src/net.c:792
 msgid "MYSELF"
 msgstr "MIJZELF"
 
 msgid "MYSELF"
 msgstr "MIJZELF"
 
-#: src/net.c:707
+#: src/net.c:799
 msgid "Name for tinc daemon required!"
 msgstr "Naam voor tinc daemon verplicht!"
 
 msgid "Name for tinc daemon required!"
 msgstr "Naam voor tinc daemon verplicht!"
 
-#: src/net.c:713
+#: src/net.c:805
 msgid "Invalid name for myself!"
 msgstr "Ongelige naam voor mijzelf!"
 
 msgid "Invalid name for myself!"
 msgstr "Ongelige naam voor mijzelf!"
 
-#: src/net.c:727
+#: src/net.c:819
 msgid "Cannot open host configuration file for myself!"
 msgstr "Kan host configuratie bestand voor mijzelf niet openen!"
 
 msgid "Cannot open host configuration file for myself!"
 msgstr "Kan host configuratie bestand voor mijzelf niet openen!"
 
-#: src/net.c:793
+#: src/net.c:829
+msgid "Invalid public/private keypair!"
+msgstr "Ongeldig publiek/privé sleutelpaar!"
+
+#: src/net.c:884
 msgid "Invalid routing mode!"
 msgstr "Ongelige routing modus!"
 
 msgid "Invalid routing mode!"
 msgstr "Ongelige routing modus!"
 
-#: src/net.c:805
+#: src/net.c:896
 msgid "Unable to set up a listening TCP socket!"
 msgstr "Kon geen TCP luistersocket aanmaken!"
 
 msgid "Unable to set up a listening TCP socket!"
 msgstr "Kon geen TCP luistersocket aanmaken!"
 
-#: src/net.c:811
+#: src/net.c:902
 msgid "Unable to set up a listening UDP socket!"
 msgstr "Kon geen UDP luistersocket aanmaken!"
 
 msgid "Unable to set up a listening UDP socket!"
 msgstr "Kon geen UDP luistersocket aanmaken!"
 
-#: src/net.c:827
+#: src/net.c:918
 msgid "Unrecognized cipher type!"
 msgstr "Onbekend cipher type!"
 
 msgid "Unrecognized cipher type!"
 msgstr "Onbekend cipher type!"
 
-#: src/net.c:860
+#: src/net.c:951
 msgid "Unrecognized digest type!"
 msgstr "Onbekend digest type!"
 
 msgid "Unrecognized digest type!"
 msgstr "Onbekend digest type!"
 
-#: src/net.c:874
+#: src/net.c:965
 msgid "MAC length exceeds size of digest!"
 msgstr "MAC lengte is groter dan dat van digest!"
 
 msgid "MAC length exceeds size of digest!"
 msgstr "MAC lengte is groter dan dat van digest!"
 
-#: src/net.c:879
+#: src/net.c:970
 msgid "Bogus MAC length!"
 msgstr "Onzinnige MAC lengte!"
 
 msgid "Bogus MAC length!"
 msgstr "Onzinnige MAC lengte!"
 
-#: src/net.c:896
+#: src/net.c:984
+msgid "Bogus compression level!"
+msgstr "Onzinnig compressieniveau!"
+
+#: src/net.c:1000
 #, c-format
 msgid "Ready: listening on port %hd"
 msgstr "Gereed: luisterend op poort %hd"
 
 #, c-format
 msgid "Ready: listening on port %hd"
 msgstr "Gereed: luisterend op poort %hd"
 
-#: src/net.c:1000
+#: src/net.c:1104
 #, c-format
 msgid "Connection from %s port %d"
 msgstr "Verbinding van %s poort %d"
 
 #, c-format
 msgid "Connection from %s port %d"
 msgstr "Verbinding van %s poort %d"
 
-#: src/net.c:1045
+#: src/net.c:1149
 #, c-format
 msgid "This is a bug: %s:%d: %d:%m"
 msgstr "Dit is een programmeerfout: %s:%d: %d:%m"
 
 #, c-format
 msgid "This is a bug: %s:%d: %d:%m"
 msgstr "Dit is een programmeerfout: %s:%d: %d:%m"
 
-#: src/net.c:1051
+#: src/net.c:1155
 #, c-format
 msgid "Incoming data socket error: %s"
 msgstr "Fout op socket voor inkomend verkeer: %s"
 
 #, c-format
 msgid "Incoming data socket error: %s"
 msgstr "Fout op socket voor inkomend verkeer: %s"
 
-#: src/net.c:1057
+#: src/net.c:1161
 #, c-format
 msgid "Receiving packet failed: %m"
 msgstr "Ontvangst pakket mislukt: %m"
 
 #, c-format
 msgid "Receiving packet failed: %m"
 msgstr "Ontvangst pakket mislukt: %m"
 
-#: src/net.c:1065
+#: src/net.c:1169
 #, c-format
 msgid "Received UDP packet on port %hd from unknown source %x:%hd"
 msgstr "Ontvangst UDP pakket op poort %hd van onbekende oorsprong %x:%hd"
 
 #, c-format
 msgid "Received UDP packet on port %hd from unknown source %x:%hd"
 msgstr "Ontvangst UDP pakket op poort %hd van onbekende oorsprong %x:%hd"
 
-#: src/net.c:1088
+#: src/net.c:1192
 msgid "Purging unreachable nodes"
 msgstr "Verwijderen onbereikbare nodes"
 
 msgid "Purging unreachable nodes"
 msgstr "Verwijderen onbereikbare nodes"
 
-#: src/net.c:1098
+#: src/net.c:1202
 #, c-format
 msgid "Purging node %s (%s)"
 msgstr "Verwijdering node %s (%s)"
 
 #, c-format
 msgid "Purging node %s (%s)"
 msgstr "Verwijdering node %s (%s)"
 
-#: src/net.c:1152
+#: src/net.c:1256
 #, c-format
 msgid "Closing connection with %s (%s)"
 msgstr "Beëindigen verbinding met %s (%s)"
 
 #, c-format
 msgid "Closing connection with %s (%s)"
 msgstr "Beëindigen verbinding met %s (%s)"
 
-#: src/net.c:1223
+#: src/net.c:1327
 #, c-format
 msgid "%s (%s) didn't respond to PING"
 msgstr "%s (%s) antwoordde niet op ping"
 
 #, c-format
 msgid "%s (%s) didn't respond to PING"
 msgstr "%s (%s) antwoordde niet op ping"
 
-#: src/net.c:1236
+#: src/net.c:1340
 #, c-format
 msgid "Timeout from %s (%s) during authentication"
 msgstr "Timeout van %s (%s) tijdens authenticatie"
 
 #, c-format
 msgid "Timeout from %s (%s) during authentication"
 msgstr "Timeout van %s (%s) tijdens authenticatie"
 
-#: src/net.c:1257
+#: src/net.c:1361
 #, c-format
 msgid "Accepting a new connection failed: %m"
 msgstr "Aanname van nieuwe verbinding is mislukt: %m"
 
 #, c-format
 msgid "Accepting a new connection failed: %m"
 msgstr "Aanname van nieuwe verbinding is mislukt: %m"
 
-#: src/net.c:1265
+#: src/net.c:1369
 msgid "Closed attempted connection"
 msgstr "Aangenomen verbinding verbroken"
 
 msgid "Closed attempted connection"
 msgstr "Aangenomen verbinding verbroken"
 
-#: src/net.c:1288
+#: src/net.c:1392
 #, c-format
 msgid "Invalid name for outgoing connection in %s line %d"
 msgstr "Ongelige naam voor uitgaande verbinding in %s regel %d"
 
 #, c-format
 msgid "Invalid name for outgoing connection in %s line %d"
 msgstr "Ongelige naam voor uitgaande verbinding in %s regel %d"
 
-#: src/net.c:1384
+#: src/net.c:1488
 #, c-format
 msgid "Error while waiting for input: %m"
 msgstr "Fout tijdens wachten op invoer: %m"
 
 #, c-format
 msgid "Error while waiting for input: %m"
 msgstr "Fout tijdens wachten op invoer: %m"
 
-#: src/net.c:1391
+#: src/net.c:1495
 msgid "Rereading configuration file and restarting in 5 seconds"
 msgstr "Herlezen configuratiebestand en herstart in 5 seconden"
 
 msgid "Rereading configuration file and restarting in 5 seconds"
 msgstr "Herlezen configuratiebestand en herstart in 5 seconden"
 
-#: src/net.c:1398
+#: src/net.c:1502
 msgid "Unable to reread configuration file, exiting"
 msgstr "Kan configuratiebestand niet herlezen, beëindigen"
 
 msgid "Unable to reread configuration file, exiting"
 msgstr "Kan configuratiebestand niet herlezen, beëindigen"
 
-#: src/net.c:1430
+#: src/net.c:1534
 msgid "Regenerating symmetric key"
 msgstr "Hergenereren symmetrische sleutel"
 
 msgid "Regenerating symmetric key"
 msgstr "Hergenereren symmetrische sleutel"
 
-#: src/net.c:1440
+#: src/net.c:1544
 msgid "Flushing event queue"
 msgstr "Legen taakrij"
 
 msgid "Flushing event queue"
 msgstr "Legen taakrij"
 
@@ -1010,11 +1023,11 @@ msgstr "Nodes:"
 #: src/node.c:166
 #, c-format
 msgid ""
 #: src/node.c:166
 #, c-format
 msgid ""
-" %s at %s port %hd cipher %d digest %d maclength %d options %ld status %04x "
-"nexthop %s via %s"
+" %s at %s port %hd cipher %d digest %d maclength %d compression %d options %"
+"ld status %04x nexthop %s via %s"
 msgstr ""
 msgstr ""
-" %s op %s poort %hd cipher %d digest %d maclengte %d opties %ld status %04x "
-"nexthop %s via %s"
+" %s op %s poort %hd cipher %d digest %d maclengte %d compressie %d opties %"
+"ld status %04x nexthop %s via %s"
 
 #: src/node.c:171
 msgid "End of nodes."
 
 #: src/node.c:171
 msgid "End of nodes."
@@ -1043,69 +1056,69 @@ msgstr "Node %s (%s) werd bereikbaar"
 msgid "Node %s (%s) became unreachable"
 msgstr "Node %s (%s) is niet meer bereikbaar"
 
 msgid "Node %s (%s) became unreachable"
 msgstr "Node %s (%s) is niet meer bereikbaar"
 
-#: src/freebsd/device.c:69 src/linux/device.c:84 src/openbsd/device.c:73
+#: src/freebsd/device.c:69 src/linux/device.c:88 src/openbsd/device.c:73
 #: src/solaris/device.c:74
 #, c-format
 msgid "Could not open %s: %m"
 msgstr "Kon `%s' niet openen: %m"
 
 #: src/solaris/device.c:74
 #, c-format
 msgid "Could not open %s: %m"
 msgstr "Kon `%s' niet openen: %m"
 
-#: src/linux/device.c:109 src/linux/device.c:119
+#: src/linux/device.c:113 src/linux/device.c:123
 msgid "Linux tun/tap device"
 msgstr "Linux tun/tap apparaat"
 
 msgid "Linux tun/tap device"
 msgstr "Linux tun/tap apparaat"
 
-#: src/linux/device.c:117
+#: src/linux/device.c:121
 #, c-format
 msgid "Old ioctl() request was needed for %s"
 msgstr "Oud ioctl() verzoek was nodig voor %s"
 
 #, c-format
 msgid "Old ioctl() request was needed for %s"
 msgstr "Oud ioctl() verzoek was nodig voor %s"
 
-#: src/linux/device.c:126
+#: src/linux/device.c:130
 msgid "Linux ethertap device"
 msgstr "Linux ethertap apparaat"
 
 msgid "Linux ethertap device"
 msgstr "Linux ethertap apparaat"
 
-#: src/freebsd/device.c:86 src/linux/device.c:130 src/openbsd/device.c:89
-#: src/solaris/device.c:128
+#: src/freebsd/device.c:86 src/linux/device.c:134 src/openbsd/device.c:89
+#: src/solaris/device.c:131
 #, c-format
 msgid "%s is a %s"
 msgstr "%s is een %s"
 
 #, c-format
 msgid "%s is a %s"
 msgstr "%s is een %s"
 
-#: src/freebsd/device.c:107 src/linux/device.c:153 src/linux/device.c:163
-#: src/openbsd/device.c:110 src/solaris/device.c:145
+#: src/freebsd/device.c:107 src/linux/device.c:157 src/linux/device.c:167
+#: src/openbsd/device.c:110 src/solaris/device.c:148
 #, c-format
 msgid "Error while reading from %s %s: %m"
 msgstr "Fout tijdens lezen van %s %s: %m"
 
 #, c-format
 msgid "Error while reading from %s %s: %m"
 msgstr "Fout tijdens lezen van %s %s: %m"
 
-#: src/freebsd/device.c:116 src/linux/device.c:174 src/openbsd/device.c:125
-#: src/solaris/device.c:160
+#: src/freebsd/device.c:116 src/linux/device.c:178 src/openbsd/device.c:125
+#: src/solaris/device.c:163
 #, c-format
 msgid "Read packet of %d bytes from %s"
 msgstr "Pakket van %d bytes gelezen van %s"
 
 #, c-format
 msgid "Read packet of %d bytes from %s"
 msgstr "Pakket van %d bytes gelezen van %s"
 
-#: src/freebsd/device.c:127 src/linux/device.c:185 src/openbsd/device.c:138
-#: src/solaris/device.c:171
+#: src/freebsd/device.c:127 src/linux/device.c:189 src/openbsd/device.c:138
+#: src/solaris/device.c:174
 #, c-format
 msgid "Writing packet of %d bytes to %s"
 msgstr "Pakket van %d bytes geschreven naar %s"
 
 #, c-format
 msgid "Writing packet of %d bytes to %s"
 msgstr "Pakket van %d bytes geschreven naar %s"
 
-#: src/linux/device.c:192 src/linux/device.c:201 src/openbsd/device.c:148
-#: src/solaris/device.c:176
+#: src/linux/device.c:196 src/linux/device.c:205 src/openbsd/device.c:148
+#: src/solaris/device.c:179
 #, c-format
 msgid "Can't write to %s %s: %m"
 msgstr "Kan niet schrijven naar %s %s: %m"
 
 #, c-format
 msgid "Can't write to %s %s: %m"
 msgstr "Kan niet schrijven naar %s %s: %m"
 
-#: src/freebsd/device.c:143 src/linux/device.c:214 src/openbsd/device.c:159
-#: src/solaris/device.c:188
+#: src/freebsd/device.c:143 src/linux/device.c:218 src/openbsd/device.c:159
+#: src/solaris/device.c:191
 #, c-format
 msgid "Statistics for %s %s:"
 msgstr "Statistieken voor %s %s:"
 
 #, c-format
 msgid "Statistics for %s %s:"
 msgstr "Statistieken voor %s %s:"
 
-#: src/freebsd/device.c:144 src/linux/device.c:215 src/openbsd/device.c:160
-#: src/solaris/device.c:189
+#: src/freebsd/device.c:144 src/linux/device.c:219 src/openbsd/device.c:160
+#: src/solaris/device.c:192
 #, c-format
 msgid " total bytes in:  %10d"
 msgstr " totaal aantal bytes in:  %10d"
 
 #, c-format
 msgid " total bytes in:  %10d"
 msgstr " totaal aantal bytes in:  %10d"
 
-#: src/freebsd/device.c:145 src/linux/device.c:216 src/openbsd/device.c:161
-#: src/solaris/device.c:190
+#: src/freebsd/device.c:145 src/linux/device.c:220 src/openbsd/device.c:161
+#: src/solaris/device.c:193
 #, c-format
 msgid " total bytes out: %10d"
 msgstr " totaal aantal bytes uit: %10d"
 #, c-format
 msgid " total bytes out: %10d"
 msgstr " totaal aantal bytes uit: %10d"
@@ -1153,14 +1166,6 @@ msgstr "Kon PPA %d niet instellen: %m"
 msgid "Can't link TUN device to IP: %m"
 msgstr "Kan TUN apparaat niet koppelen aan IP: %m"
 
 msgid "Can't link TUN device to IP: %m"
 msgstr "Kan TUN apparaat niet koppelen aan IP: %m"
 
-#: src/solaris/device.c:116
+#: src/solaris/device.c:119
 msgid "Solaris tun device"
 msgstr "Solaris tun apparaat"
 msgid "Solaris tun device"
 msgstr "Solaris tun apparaat"
-
-#~ msgid "No digest, MAC length ignored"
-#~ msgstr "Geen digest, MAC lengte genegeerd"
-
-#~ msgid "Failed to setup all outgoing connections, will retry in %d seconds"
-#~ msgstr ""
-#~ "Poging tot maken van alle uitgaande verbinding faalde, nieuwe poging over "
-#~ "%d seconden"
index 7182953..c2170ac 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net.c,v 1.35.4.153 2002/02/11 14:20:21 guus Exp $
+    $Id: net.c,v 1.35.4.154 2002/02/11 15:59:18 guus Exp $
 */
 
 #include "config.h"
 */
 
 #include "config.h"
@@ -55,6 +55,8 @@
 #define RAND_pseudo_bytes RAND_bytes
 #endif
 
 #define RAND_pseudo_bytes RAND_bytes
 #endif
 
+#include <zlib.h>
+
 #include <utils.h>
 #include <xalloc.h>
 #include <avl_tree.h>
 #include <utils.h>
 #include <xalloc.h>
 #include <avl_tree.h>
@@ -96,11 +98,16 @@ int sigalrm = 0;
 
 void receive_udppacket(node_t *n, vpn_packet_t *inpkt)
 {
 
 void receive_udppacket(node_t *n, vpn_packet_t *inpkt)
 {
-  vpn_packet_t outpkt;
+  vpn_packet_t pkt1, pkt2;
+  vpn_packet_t *pkt[] = {&pkt1, &pkt2, &pkt1, &pkt2};
+  int nextpkt = 0;
+  vpn_packet_t *outpkt = pkt[0];
   int outlen, outpad;
   int outlen, outpad;
+  long int complen = MTU + 12;
   EVP_CIPHER_CTX ctx;
   char hmac[EVP_MAX_MD_SIZE];
 cp
   EVP_CIPHER_CTX ctx;
   char hmac[EVP_MAX_MD_SIZE];
 cp
+  /* Check the message authentication code */
 
   if(myself->digest && myself->maclength)
     {
 
   if(myself->digest && myself->maclength)
     {
@@ -117,30 +124,49 @@ cp
 
   if(myself->cipher)
   {
 
   if(myself->cipher)
   {
+    outpkt = pkt[nextpkt++];
+
     EVP_DecryptInit(&ctx, myself->cipher, myself->key, myself->key + myself->cipher->key_len);
     EVP_DecryptInit(&ctx, myself->cipher, myself->key, myself->key + myself->cipher->key_len);
-    EVP_DecryptUpdate(&ctx, (char *)&outpkt.seqno, &outlen, (char *)&inpkt->seqno, inpkt->len);
-    EVP_DecryptFinal(&ctx, (char *)&outpkt.seqno + outlen, &outpad);
-    outlen += outpad;
-    outpkt.len = outlen - sizeof(outpkt.seqno);
-  }
-  else
-  {
-    memcpy((char *)&outpkt.seqno, (char *)&inpkt->seqno, inpkt->len);
-    outpkt.len = inpkt->len - sizeof(outpkt.seqno);
+    EVP_DecryptUpdate(&ctx, (char *)&outpkt->seqno, &outlen, (char *)&inpkt->seqno, inpkt->len);
+    EVP_DecryptFinal(&ctx, (char *)&outpkt->seqno + outlen, &outpad);
+
+    outpkt->len = outlen + outpad;
+    inpkt = outpkt;
   }
 
   }
 
-  if (ntohl(outpkt.seqno) <= n->received_seqno)
+  /* Check the sequence number */
+
+  inpkt->len -= sizeof(inpkt->seqno);
+  inpkt->seqno = ntohl(inpkt->seqno);
+
+  if(inpkt->seqno <= n->received_seqno)
   {
   {
-    syslog(LOG_DEBUG, _("Got late or replayed packet from %s (%s), seqno %d"), n->name, n->hostname, ntohl(*(unsigned int *)&outpkt.seqno));
+    syslog(LOG_DEBUG, _("Got late or replayed packet from %s (%s), seqno %d"), n->name, n->hostname, inpkt->seqno);
     return;
   }
   
     return;
   }
   
-  n->received_seqno = ntohl(outpkt.seqno);
+  n->received_seqno = inpkt->seqno;
 
   if(n->received_seqno > MAX_SEQNO)
     keyexpires = 0;
 
 
   if(n->received_seqno > MAX_SEQNO)
     keyexpires = 0;
 
-  receive_packet(n, &outpkt);
+  /* Decompress the packet */
+  
+  if(myself->compression)
+  {
+    outpkt = pkt[nextpkt++];
+
+    if(uncompress(outpkt->data, &complen, inpkt->data, inpkt->len) != Z_OK)
+    {
+      syslog(LOG_ERR, _("Error while uncompressing packet from %s (%s)"), n->name, n->hostname);
+      return;
+    }
+    
+    outpkt->len = complen;
+    inpkt = outpkt;
+  }
+
+  receive_packet(n, inpkt);
 cp
 }
 
 cp
 }
 
@@ -167,8 +193,12 @@ cp
 
 void send_udppacket(node_t *n, vpn_packet_t *inpkt)
 {
 
 void send_udppacket(node_t *n, vpn_packet_t *inpkt)
 {
-  vpn_packet_t outpkt;
+  vpn_packet_t pkt1, pkt2;
+  vpn_packet_t *pkt[] = {&pkt1, &pkt2, &pkt1, &pkt2};
+  int nextpkt = 0;
+  vpn_packet_t *outpkt;
   int outlen, outpad;
   int outlen, outpad;
+  long int complen = MTU + 12;
   EVP_CIPHER_CTX ctx;
   struct sockaddr_in to;
   socklen_t tolen = sizeof(to);
   EVP_CIPHER_CTX ctx;
   struct sockaddr_in to;
   socklen_t tolen = sizeof(to);
@@ -190,37 +220,60 @@ cp
 
       if(!n->status.waitingforkey)
        send_req_key(n->nexthop->connection, myself, n);
 
       if(!n->status.waitingforkey)
        send_req_key(n->nexthop->connection, myself, n);
+
       return;
     }
 
       return;
     }
 
-  /* Encrypt the packet. */
+  /* Compress the packet */
+
+  if(n->compression)
+  {
+    outpkt = pkt[nextpkt++];
+
+    if(compress2(outpkt->data, &complen, inpkt->data, inpkt->len, n->compression) != Z_OK)
+    {
+      syslog(LOG_ERR, _("Error while compressing packet to %s (%s)"), n->name, n->hostname);
+      return;
+    }
+    
+    outpkt->len = complen;
+    inpkt = outpkt;
+  }
+
+  /* Add sequence number */
 
   inpkt->seqno = htonl(++(n->sent_seqno));
 
   inpkt->seqno = htonl(++(n->sent_seqno));
+  inpkt->len += sizeof(inpkt->seqno);
+
+  /* Encrypt the packet */
 
   if(n->cipher)
   {
 
   if(n->cipher)
   {
+    outpkt = pkt[nextpkt++];
+
     EVP_EncryptInit(&ctx, n->cipher, n->key, n->key + n->cipher->key_len);
     EVP_EncryptInit(&ctx, n->cipher, n->key, n->key + n->cipher->key_len);
-    EVP_EncryptUpdate(&ctx, (char *)&outpkt.seqno, &outlen, (char *)&inpkt->seqno, inpkt->len + sizeof(inpkt->seqno));
-    EVP_EncryptFinal(&ctx, (char *)&outpkt.seqno + outlen, &outpad);
-    outlen += outpad;
-  }
-  else
-  {
-    memcpy((char *)&outpkt.seqno, (char *)&inpkt->seqno, inpkt->len + sizeof(inpkt->seqno));
-    outlen = inpkt->len + sizeof(inpkt->seqno);
+    EVP_EncryptUpdate(&ctx, (char *)&outpkt->seqno, &outlen, (char *)&inpkt->seqno, inpkt->len);
+    EVP_EncryptFinal(&ctx, (char *)&outpkt->seqno + outlen, &outpad);
+
+    outpkt->len = outlen + outpad;
+    inpkt = outpkt;
   }
 
   }
 
+  /* Add the message authentication code */
+
   if(n->digest && n->maclength)
     {
   if(n->digest && n->maclength)
     {
-      HMAC(n->digest, n->key, n->keylength, (char *)&outpkt.seqno, outlen, (char *)&outpkt.seqno + outlen, &outpad);
-      outlen += n->maclength;
+      HMAC(n->digest, n->key, n->keylength, (char *)&inpkt->seqno, inpkt->len, (char *)&inpkt->seqno + inpkt->len, &outlen);
+      inpkt->len += n->maclength;
     }
 
     }
 
+  /* Send the packet */
+
   to.sin_family = AF_INET;
   to.sin_addr.s_addr = htonl(n->address);
   to.sin_port = htons(n->port);
 
   to.sin_family = AF_INET;
   to.sin_addr.s_addr = htonl(n->address);
   to.sin_port = htons(n->port);
 
-  if((sendto(udp_socket, (char *)&outpkt.seqno, outlen, 0, (const struct sockaddr *)&to, tolen)) < 0)
+  if((sendto(udp_socket, (char *)&inpkt->seqno, inpkt->len, 0, (const struct sockaddr *)&to, tolen)) < 0)
     {
       syslog(LOG_ERR, _("Error sending packet to %s (%s): %m"),
              n->name, n->hostname);
     {
       syslog(LOG_ERR, _("Error sending packet to %s (%s): %m"),
              n->name, n->hostname);
@@ -921,6 +974,19 @@ cp
     }
   else
     myself->maclength = 4;
     }
   else
     myself->maclength = 4;
+
+  /* Compression */
+
+  if(get_config_int(lookup_config(myself->connection->config_tree, "Compression"), &myself->compression))
+    {
+      if(myself->compression < 0 || myself->compression > 9)
+        {
+         syslog(LOG_ERR, _("Bogus compression level!"));
+         return -1;
+       }
+    }
+  else
+    myself->compression = 0;
 cp
   /* Done */
 
 cp
   /* Done */
 
index 5307ea6..2abd7fb 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: node.c,v 1.1.2.8 2002/02/10 21:57:54 guus Exp $
+    $Id: node.c,v 1.1.2.9 2002/02/11 15:59:18 guus Exp $
 */
 
 #include "config.h"
 */
 
 #include "config.h"
@@ -163,8 +163,8 @@ cp
   for(node = node_tree->head; node; node = node->next)
     {
       n = (node_t *)node->data;
   for(node = node_tree->head; node; node = node->next)
     {
       n = (node_t *)node->data;
-      syslog(LOG_DEBUG, _(" %s at %s port %hd cipher %d digest %d maclength %d options %ld status %04x nexthop %s via %s"),
-             n->name, n->hostname, n->port, n->cipher?n->cipher->nid:0, n->digest?n->digest->type:0, n->maclength, n->options,
+      syslog(LOG_DEBUG, _(" %s at %s port %hd cipher %d digest %d maclength %d compression %d options %ld status %04x nexthop %s via %s"),
+             n->name, n->hostname, n->port, n->cipher?n->cipher->nid:0, n->digest?n->digest->type:0, n->maclength, n->compression, n->options,
              n->status, n->nexthop?n->nexthop->name:"-", n->via?n->via->name:"-");
     }
     
              n->status, n->nexthop?n->nexthop->name:"-", n->via?n->via->name:"-");
     }
     
index 6d281e6..b662ccd 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: node.h,v 1.1.2.10 2002/02/10 21:57:54 guus Exp $
+    $Id: node.h,v 1.1.2.11 2002/02/11 15:59:18 guus Exp $
 */
 
 #ifndef __TINC_NODE_H__
 */
 
 #ifndef __TINC_NODE_H__
@@ -54,6 +54,8 @@ typedef struct node_t {
   const EVP_MD *digest;            /* Digest type for MAC */
   int maclength;                   /* Length of MAC */
 
   const EVP_MD *digest;            /* Digest type for MAC */
   int maclength;                   /* Length of MAC */
 
+  int compression;                 /* Compressionlevel, 0 = no compression */
+
   list_t *queue;                   /* Queue for packets awaiting to be encrypted */
 
   struct node_t *nexthop;          /* nearest node from us to him */
   list_t *queue;                   /* Queue for packets awaiting to be encrypted */
 
   struct node_t *nexthop;          /* nearest node from us to him */
index 5528b98..e1c8ca9 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: protocol.h,v 1.5.4.25 2002/02/10 21:57:54 guus Exp $
+    $Id: protocol.h,v 1.5.4.26 2002/02/11 15:59:18 guus Exp $
 */
 
 #ifndef __TINC_PROTOCOL_H__
 */
 
 #ifndef __TINC_PROTOCOL_H__
@@ -31,7 +31,7 @@
    incompatible version have different protocols.
  */
 
    incompatible version have different protocols.
  */
 
-#define PROT_CURRENT 12
+#define PROT_CURRENT 13
 
 /* Request numbers */
 
 
 /* Request numbers */
 
index 3c72c29..621bb1b 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: protocol_key.c,v 1.1.4.1 2002/02/11 10:05:58 guus Exp $
+    $Id: protocol_key.c,v 1.1.4.2 2002/02/11 15:59:18 guus Exp $
 */
 
 #include "config.h"
 */
 
 #include "config.h"
@@ -167,8 +167,8 @@ cp
   bin2hex(from->key, key, from->keylength);
   key[from->keylength * 2] = '\0';
 cp
   bin2hex(from->key, key, from->keylength);
   key[from->keylength * 2] = '\0';
 cp
-  return send_request(c, "%d %s %s %s %d %d %d", ANS_KEY,
-                      from->name, to->name, key, from->cipher?from->cipher->nid:0, from->digest?from->digest->type:0, from->maclength);
+  return send_request(c, "%d %s %s %s %d %d %d %d", ANS_KEY,
+                      from->name, to->name, key, from->cipher?from->cipher->nid:0, from->digest?from->digest->type:0, from->maclength, from->compression);
 }
 
 int ans_key_h(connection_t *c)
 }
 
 int ans_key_h(connection_t *c)
@@ -176,10 +176,10 @@ int ans_key_h(connection_t *c)
   char from_name[MAX_STRING_SIZE];
   char to_name[MAX_STRING_SIZE];
   char key[MAX_STRING_SIZE];
   char from_name[MAX_STRING_SIZE];
   char to_name[MAX_STRING_SIZE];
   char key[MAX_STRING_SIZE];
-  int cipher, digest, maclength;
+  int cipher, digest, maclength, compression;
   node_t *from, *to;
 cp
   node_t *from, *to;
 cp
-  if(sscanf(c->buffer, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING" %d %d %d", from_name, to_name, key, &cipher, &digest, &maclength) != 6)
+  if(sscanf(c->buffer, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING" %d %d %d %d", from_name, to_name, key, &cipher, &digest, &maclength, &compression) != 7)
     {
        syslog(LOG_ERR, _("Got bad %s from %s (%s)"), "ANS_KEY",
               c->name, c->hostname);
     {
        syslog(LOG_ERR, _("Got bad %s from %s (%s)"), "ANS_KEY",
               c->name, c->hostname);
@@ -265,6 +265,8 @@ cp
       from->digest = NULL;
       from->maclength = maclength;
     }
       from->digest = NULL;
       from->maclength = maclength;
     }
+
+  from->compression = compression;
   
   flush_queue(from);
 cp
   
   flush_queue(from);
 cp