X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fprotocol.c;h=f36538e382899ca4f4d3a27ff4267899fb64f185;hp=1d91d088ff1cc932bda325ff7f30fcf6be5f0847;hb=afe4bf62eccab76c75e5a661fb2c16f1391a8417;hpb=4712d8f92e63e86e835ffb624d6399343ee568ea diff --git a/src/protocol.c b/src/protocol.c index 1d91d088..f36538e3 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -68,7 +68,7 @@ bool check_id(const char *id) { bool send_request(connection_t *c, const char *format, ...) { va_list args; char buffer[MAXBUFSIZE]; - int len, request; + int len, request = 0; /* Use vsnprintf instead of vxasprintf: faster, no memory fragmentation, cleanup is automatic, and there is a limit on the @@ -125,6 +125,20 @@ void forward_request(connection_t *from) { bool receive_request(connection_t *c) { int request; + if(proxytype == PROXY_HTTP && c->allow_request == ID) { + if(!c->buffer[0] || c->buffer[0] == '\r') + return true; + if(!strncasecmp(c->buffer, "HTTP/1.1 ", 9)) { + if(!strncmp(c->buffer + 9, "200", 3)) { + logger(LOG_DEBUG, "Proxy request granted"); + return true; + } else { + logger(LOG_DEBUG, "Proxy request rejected: %s", c->buffer + 9); + return false; + } + } + } + if(sscanf(c->buffer, "%d", &request) == 1) { if((request < 0) || (request >= LAST) || !request_handlers[request]) { ifdebug(META)