X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmeta.c;h=1b3424606771b813aa3a15c096a8ad751eaafbcc;hp=21400f298ab15e1ae83db3115f852e1f910f509d;hb=2a3e343c7228d5f07176e4b404d895c7adc5bdf9;hpb=92b8abc921dd15b710f67335562210eb713fbb39 diff --git a/src/meta.c b/src/meta.c index 21400f29..1b342460 100644 --- a/src/meta.c +++ b/src/meta.c @@ -94,15 +94,13 @@ bool flush_meta(connection_t *c) { c->name, c->hostname); } else if(errno == EINTR) { continue; -#ifdef EWOULDBLOCK - } else if(errno == EWOULDBLOCK) { + } else if(sockwouldblock(sockerrno)) { 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)); + c->hostname, sockstrerror(sockerrno)); } return false; @@ -149,11 +147,11 @@ bool receive_meta(connection_t *c) { if(!lenin || !errno) { ifdebug(CONNECTIONS) logger(LOG_NOTICE, "Connection closed by %s (%s)", c->name, c->hostname); - } else if(errno == EINTR) + } else if(sockwouldblock(sockerrno)) return true; else logger(LOG_ERR, "Metadata socket read error for %s (%s): %s", - c->name, c->hostname, strerror(errno)); + c->name, c->hostname, sockstrerror(sockerrno)); return false; } @@ -179,7 +177,15 @@ bool receive_meta(connection_t *c) { if(c->tcplen) { if(c->tcplen <= c->buflen) { - receive_tcppacket(c, c->buffer, c->tcplen); + if(proxytype == PROXY_SOCKS4 && c->allow_request == ID) { + if(c->buffer[0] == 0 && c->buffer[1] == 0x5a) { + logger(LOG_DEBUG, "Proxy request granted"); + } else { + logger(LOG_ERR, "Proxy request rejected"); + return false; + } + } else + receive_tcppacket(c, c->buffer, c->tcplen); c->buflen -= c->tcplen; lenin -= c->tcplen - oldlen;