From d40e5d458c4cf187459f805e2a06f716dfe9e301 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 74af5fe..1e2d773 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 9034b6a..a99f9b1 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 9744ff3..3691e47 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 2cf8389..4200e44 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)) - #ifdef WITHSPLICE #include @@ -303,13 +301,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