Просмотр исходного кода

FIX: tcppm may not work with parent proxy

z3APA3A 9 лет назад
Родитель
Сommit
d40e5d458c
4 измененных файлов с 11 добавлено и 13 удалено
  1. 3 4
      src/auth.c
  2. 1 0
      src/proxy.h
  3. 3 6
      src/sockgetchar.c
  4. 4 3
      src/sockmap.c

+ 3 - 4
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;

+ 1 - 0
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

+ 3 - 6
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;

+ 4 - 3
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 <fcntl.h>
@@ -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