Add missing cleanup functions in close_network_connections().
[oweals/tinc.git] / src / protocol_misc.c
index ea71d6bfbc0e81217b9a9b815413d0647e5d4dee..52e97e5448193f9260a86d605e80e4996cebd89b 100644 (file)
@@ -1,7 +1,7 @@
 /*
     protocol_misc.c -- handle the meta-protocol, miscellaneous functions
-    Copyright (C) 1999-2005 Ivo Timmermans <ivo@tinc-vpn.org>,
-                  2000-2005 Guus Sliepen <guus@tinc-vpn.org>
+    Copyright (C) 1999-2005 Ivo Timmermans,
+                  2000-2006 Guus Sliepen <guus@tinc-vpn.org>
 
     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
@@ -31,6 +31,8 @@
 #include "protocol.h"
 #include "utils.h"
 
+int maxoutbufsize = 0;
+
 /* Status and error notification routines */
 
 bool send_status(connection_t *c, int statusno, const char *statusstring)
@@ -153,12 +155,15 @@ bool send_tcppacket(connection_t *c, vpn_packet_t *packet)
 {
        cp();
 
-       /* Evil hack. */
+       /* If there already is a lot of data in the outbuf buffer, discard this packet. */
+
+       if(c->outbuflen > maxoutbufsize)
+               return true;
 
        if(!send_request(c, "%d %hd", PACKET, packet->len))
                return false;
 
-       return send_meta(c, packet->data, packet->len);
+       return send_meta(c, (char *)packet->data, packet->len);
 }
 
 bool tcppacket_h(connection_t *c)