From 28581b17389a483b65ad84dab771d9f724718590 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Thu, 2 Feb 2017 00:36:40 +0300 Subject: [PATCH] FIX: tcppm may not work with parent proxy --- src/auth.c | 7 +++---- src/proxy.h | 1 + src/sockgetchar.c | 9 +++------ src/sockmap.c | 7 ++++--- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/auth.c b/src/auth.c index 6c567e0..51fa303 100644 --- a/src/auth.c +++ b/src/auth.c @@ -19,10 +19,9 @@ int clientnegotiate(struct chain * redir, struct clientparam * param, struct soc user = redir->extuser; pass = redir->extpass; - if (param->srvinbuf < 4096){ - if(param->srvbuf)myfree(param->srvbuf); - param->srvbuf = myalloc(4096); - param->srvbufsize = 4096; + if (!param->srvbufsize){ + param->srvbufsize = SRVBUFSIZE; + param->srvbuf = myalloc(param->srvbufsize); } buf = param->srvbuf; username = buf + 2048; diff --git a/src/proxy.h b/src/proxy.h index 9c1cdf7..7ec460d 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -42,6 +42,7 @@ #define UDPBUFSIZE 16384 #define TCPBUFSIZE 8192 +#define SRVBUFSIZE (param->srv->bufsize?param->srv->bufsize:((param->service == S_UDPPM)?UDPBUFSIZE:TCPBUFSIZE)) #ifdef _WIN32 diff --git a/src/sockgetchar.c b/src/sockgetchar.c index af9e281..7259c0d 100644 --- a/src/sockgetchar.c +++ b/src/sockgetchar.c @@ -7,9 +7,6 @@ #include "proxy.h" -#define BUFSIZE (param->srv->bufsize?param->srv->bufsize:((param->service == S_UDPPM)?UDPBUFSIZE:TCPBUFSIZE)) - - int socksend(SOCKET sock, unsigned char * buf, int bufsize, int to){ int sent = 0; int res; @@ -75,8 +72,8 @@ int sockgetcharcli(struct clientparam * param, int timeosec, int timeousec){ int len; if(!param->clibuf){ - if(!(param->clibuf = myalloc(BUFSIZE))) return 0; - param->clibufsize = BUFSIZE; + if(!(param->clibuf = myalloc(SRVBUFSIZE))) return 0; + param->clibufsize = SRVBUFSIZE; param->clioffset = param->cliinbuf = 0; } if(param->cliinbuf && param->clioffset < param->cliinbuf){ @@ -137,7 +134,7 @@ int sockgetcharsrv(struct clientparam * param, int timeosec, int timeousec){ int bufsize; if(!param->srvbuf){ - bufsize = BUFSIZE; + bufsize = SRVBUFSIZE; if(param->ndatfilterssrv > 0 && bufsize < 32768) bufsize = 32768; if(!(param->srvbuf = myalloc(bufsize))) return 0; param->srvbufsize = bufsize; diff --git a/src/sockmap.c b/src/sockmap.c index a2cd9b2..1ec4d2f 100644 --- a/src/sockmap.c +++ b/src/sockmap.c @@ -8,8 +8,6 @@ #include "proxy.h" -#define BUFSIZE (param->srv->bufsize?param->srv->bufsize:((param->service == S_UDPPM)?UDPBUFSIZE:TCPBUFSIZE)) - int sockmap(struct clientparam * param, int timeo){ int res=0; uint64_t sent=0, received=0; @@ -21,13 +19,16 @@ int sockmap(struct clientparam * param, int timeo){ FILTER_ACTION action; int retcode = 0; - bufsize = BUFSIZE; + bufsize = SRVBUFSIZE; minsize = (param->service == S_UDPPM || param->service == S_TCPPM)? bufsize - 1 : (bufsize>>2); fds[0].fd = param->clisock; fds[1].fd = param->remsock; + + if(param->cliinbuf == param->clioffset) param->cliinbuf = param->clioffset = 0; + if(param->srvinbuf == param->srvoffset) param->srvinbuf = param->srvoffset = 0; #if DEBUGLEVEL > 2 (*param->srv->logfunc)(param, "Starting sockets mapping"); #endif