X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmeta.c;h=e1e1c677ca81fbd75c7c061794f9db13971015de;hp=fa475dfb758d32f3c69a4d201f0125c5d230bf9c;hb=69158563e9f790777eb27aeb8484a86d12385af4;hpb=f75dcef72a81a337e847adf0bae54198894f65b9 diff --git a/src/meta.c b/src/meta.c index fa475dfb..e1e1c677 100644 --- a/src/meta.c +++ b/src/meta.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. - $Id: meta.c,v 1.1.2.29 2002/09/09 21:24:34 guus Exp $ + $Id: meta.c,v 1.1.2.33 2003/03/19 11:45:05 guus Exp $ */ #include "config.h" @@ -39,11 +39,12 @@ #include "system.h" #include "protocol.h" -int send_meta(connection_t * c, char *buffer, int length) +int send_meta(connection_t *c, char *buffer, int length) { char *bufp; int outlen; char outbuf[MAXBUFSIZE]; + int result; cp(); @@ -58,16 +59,23 @@ int send_meta(connection_t * c, char *buffer, int length) } else bufp = buffer; - if(write(c->socket, bufp, length) < 0) { - syslog(LOG_ERR, _("Sending meta data to %s (%s) failed: %s"), c->name, - c->hostname, strerror(errno)); - return -1; + while(length) { + result = write(c->socket, bufp, length); + if(result <= 0) { + if(errno == EINTR) + continue; + syslog(LOG_ERR, _("Sending meta data to %s (%s) failed: %s"), c->name, + c->hostname, strerror(errno)); + return -1; + } + bufp += result; + length -= result; } - + return 0; } -void broadcast_meta(connection_t * from, char *buffer, int length) +void broadcast_meta(connection_t *from, char *buffer, int length) { avl_node_t *node; connection_t *c; @@ -82,9 +90,10 @@ void broadcast_meta(connection_t * from, char *buffer, int length) } } -int receive_meta(connection_t * c) +int receive_meta(connection_t *c) { - int x, l = sizeof(x); + int x; + socklen_t l = sizeof(x); int oldlen, i; int lenin, reqlen; int decrypted = 0; @@ -136,8 +145,7 @@ int receive_meta(connection_t * c) /* Decrypt */ if(c->status.decryptin && !decrypted) { - EVP_DecryptUpdate(c->inctx, inbuf, &lenin, c->buffer + oldlen, - lenin); + EVP_DecryptUpdate(c->inctx, inbuf, &lenin, c->buffer + oldlen, lenin); memcpy(c->buffer + oldlen, inbuf, lenin); decrypted = 1; }