Don't try to send MTU probes to unreachable nodes.
[oweals/tinc.git] / src / meta.c
index e376c33ba716ea9204e6d94bca36fd5b700a0c8b..b59f15b09443f47596d8e60454686e262c5298b7 100644 (file)
@@ -1,7 +1,7 @@
 /*
     meta.c -- handle the meta communication
-    Copyright (C) 2000-2005 Guus Sliepen <guus@tinc-vpn.org>,
-                  2000-2005 Ivo Timmermans <ivo@tinc-vpn.org>
+    Copyright (C) 2000-2006 Guus Sliepen <guus@tinc-vpn.org>,
+                  2000-2005 Ivo Timmermans
 
     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
@@ -41,6 +41,11 @@ bool send_meta(connection_t *c, const char *buffer, int length)
 
        cp();
 
+       if(!c) {
+               logger(LOG_ERR, _("send_meta() called with NULL pointer!"));
+               abort();
+       }
+
        ifdebug(META) logger(LOG_DEBUG, _("Sending %d bytes of metadata to %s (%s)"), length,
                           c->name, c->hostname);
 
@@ -60,8 +65,8 @@ bool send_meta(connection_t *c, const char *buffer, int length)
 
        /* Add our data to buffer */
        if(c->status.encryptout) {
-               result = EVP_EncryptUpdate(c->outctx, c->outbuf + c->outbufstart + c->outbuflen,
-                               &outlen, buffer, length);
+               result = EVP_EncryptUpdate(c->outctx, (unsigned char *)c->outbuf + c->outbufstart + c->outbuflen,
+                               &outlen, (unsigned char *)buffer, length);
                if(!result || outlen < length) {
                        logger(LOG_ERR, _("Error while encrypting metadata to %s (%s): %s"),
                                        c->name, c->hostname, ERR_error_string(ERR_get_error(), NULL));
@@ -94,10 +99,12 @@ bool flush_meta(connection_t *c)
                                                   c->name, c->hostname);
                        } else if(errno == EINTR) {
                                continue;
+#ifdef EWOULDBLOCK
                        } else if(errno == EWOULDBLOCK) {
                                ifdebug(CONNECTIONS) logger(LOG_DEBUG, _("Flushing %d bytes to %s (%s) would block"),
                                                c->outbuflen, c->name, c->hostname);
                                return true;
+#endif
                        } else {
                                logger(LOG_ERR, _("Flushing meta data to %s (%s) failed: %s"), c->name,
                                           c->hostname, strerror(errno));
@@ -169,7 +176,7 @@ bool receive_meta(connection_t *c)
                /* Decrypt */
 
                if(c->status.decryptin && !decrypted) {
-                       result = EVP_DecryptUpdate(c->inctx, inbuf, &lenout, c->buffer + oldlen, lenin);
+                       result = EVP_DecryptUpdate(c->inctx, (unsigned char *)inbuf, &lenout, (unsigned char *)c->buffer + oldlen, lenin);
                        if(!result || lenout != lenin) {
                                logger(LOG_ERR, _("Error while decrypting metadata from %s (%s): %s"),
                                                c->name, c->hostname, ERR_error_string(ERR_get_error(), NULL));