X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmeta.c;h=fa32b896a6ca88c7bda2251c77ac09f629927de4;hp=31a387a07a31931599b3cbab0306c830989051aa;hb=d3f889c8076dff9c00ebfe1459cb36425f8da41d;hpb=52b842f8076d507d3a6ea07045d085ae21d1aa10 diff --git a/src/meta.c b/src/meta.c index 31a387a0..fa32b896 100644 --- a/src/meta.c +++ b/src/meta.c @@ -1,7 +1,7 @@ /* meta.c -- handle the meta communication - Copyright (C) 2000 Guus Sliepen , - 2000 Ivo Timmermans + Copyright (C) 2000,2001 Guus Sliepen , + 2000,2001 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 @@ -17,22 +17,33 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: meta.c,v 1.1.2.5 2000/10/21 11:52:06 guus Exp $ + $Id: meta.c,v 1.1.2.14 2001/01/07 17:08:57 guus Exp $ */ #include "config.h" #include +#include #include #include #include +#include +#include +/* This line must be below the rest for FreeBSD */ #include -#include + +#ifdef HAVE_OPENSSL_EVP_H +# include +#else +# include +#endif #include "net.h" +#include "connection.h" #include "system.h" +#include "protocol.h" -int send_meta(conn_list_t *cl, char *buffer, int length) +int send_meta(connection_t *cl, char *buffer, int length) { char outbuf[MAXBUFSIZE]; char *bufp; @@ -43,14 +54,15 @@ cp cl->name, cl->hostname, buffer); buffer[length-1]='\n'; - + if(cl->status.encryptout) { EVP_EncryptUpdate(cl->cipher_outctx, outbuf, &outlen, buffer, length); bufp = outbuf; + length = outlen; } else - bufp = buffer; + bufp = buffer; if(write(cl->meta_socket, bufp, length) < 0) { @@ -61,18 +73,21 @@ cp return 0; } -int broadcast_meta(conn_list_t *cl, char *buffer, int length) +void broadcast_meta(connection_t *cl, char *buffer, int length) { - conn_list_t *p; + avl_node_t *node; + connection_t *p; cp - for(p = conn_list; p != NULL; p = p->next) - if(p != cl && p->status.meta && p->status.active) - send_meta(p, buffer, length); + for(node = connection_tree->head; node; node = node->next) + { + p = (connection_t *)node->data; + if(p != cl && p->status.meta && p->status.active) + send_meta(p, buffer, length); + } cp - return 0; } -int receive_meta(conn_list_t *cl) +int receive_meta(connection_t *cl) { int x, l = sizeof(x); int oldlen, i; @@ -118,9 +133,9 @@ cp if(cl->status.decryptin) { - EVP_DecryptUpdate(cl->cipher_inctx, cl->buffer + cl->buflen, NULL, inbuf, lenin); + EVP_DecryptUpdate(cl->cipher_inctx, cl->buffer + cl->buflen, &lenin, inbuf, lenin); } - + oldlen = cl->buflen; cl->buflen += lenin; @@ -140,7 +155,7 @@ cp if(cl->reqlen) { - if(debug_lvl >= DEBUG_PROTOCOL) + if(debug_lvl >= DEBUG_META) syslog(LOG_DEBUG, _("Got request from %s (%s): %s"), cl->name, cl->hostname, cl->buffer); @@ -165,7 +180,6 @@ cp } cl->last_ping_time = time(NULL); - cl->want_ping = 0; cp return 0; }