mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 10:35:40 +08:00
Don't terminate connection on datagram sending issue in SOCKSv5 UDP ASSOCIATE
This commit is contained in:
parent
1fd759d327
commit
1075370594
15
src/socks.c
15
src/socks.c
@ -208,7 +208,7 @@ void * sockschild(struct clientparam* param) {
|
|||||||
*SAPORT(¶m->sinsl) = 0;
|
*SAPORT(¶m->sinsl) = 0;
|
||||||
if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,SASIZE(¶m->sinsl)))RETURN (12);
|
if(so._bind(param->remsock,(struct sockaddr *)¶m->sinsl,SASIZE(¶m->sinsl)))RETURN (12);
|
||||||
#if SOCKSTRACE > 0
|
#if SOCKSTRACE > 0
|
||||||
fprintf(stderr, "%hu binded to communicate with server\n", *SAPORT(¶m->sins));
|
fprintf(stderr, "%hu bound to communicate with server\n", *SAPORT(¶m->sins));
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -331,6 +331,7 @@ fflush(stderr);
|
|||||||
param->sinsr = param->req;
|
param->sinsr = param->req;
|
||||||
myfree(buf);
|
myfree(buf);
|
||||||
if(!(buf = myalloc(LARGEBUFSIZE))) {RETURN(21);}
|
if(!(buf = myalloc(LARGEBUFSIZE))) {RETURN(21);}
|
||||||
|
sin = param->sincr;
|
||||||
|
|
||||||
for(;;){
|
for(;;){
|
||||||
fds[0].fd = param->remsock;
|
fds[0].fd = param->remsock;
|
||||||
@ -387,10 +388,7 @@ fflush(stderr);
|
|||||||
|
|
||||||
sasize = sizeof(param->sinsr);
|
sasize = sizeof(param->sinsr);
|
||||||
if(len > (int)i){
|
if(len > (int)i){
|
||||||
if(socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf+i, len - i, conf.timeouts[SINGLEBYTE_L]*1000) <= 0){
|
socksendto(param->remsock, (struct sockaddr *)¶m->sinsr, buf+i, len - i, conf.timeouts[SINGLEBYTE_L]*1000);
|
||||||
param->res = 467;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
param->statscli64+=(len - i);
|
param->statscli64+=(len - i);
|
||||||
param->nwrites++;
|
param->nwrites++;
|
||||||
#if SOCKSTRACE > 1
|
#if SOCKSTRACE > 1
|
||||||
@ -413,7 +411,7 @@ fflush(stderr);
|
|||||||
sasize = sizeof(param->sinsr);
|
sasize = sizeof(param->sinsr);
|
||||||
buf[0]=buf[1]=buf[2]=0;
|
buf[0]=buf[1]=buf[2]=0;
|
||||||
buf[3]=(*SAFAMILY(¶m->sinsl) == AF_INET)?1:4;
|
buf[3]=(*SAFAMILY(¶m->sinsl) == AF_INET)?1:4;
|
||||||
if((len = so._recvfrom(param->remsock, (char *)buf+6+SAADDRLEN(¶m->sinsl), 65535 - 10, 0, (struct sockaddr *)¶m->sinsr, &sasize)) <= 0) {
|
if((len = so._recvfrom(param->remsock, (char *)buf+6+SAADDRLEN(¶m->sinsl), 65535 - (6+SAADDRLEN(¶m->sinsl)), 0, (struct sockaddr *)¶m->sinsr, &sasize)) <= 0) {
|
||||||
param->res = 468;
|
param->res = 468;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -422,10 +420,7 @@ fflush(stderr);
|
|||||||
memcpy(buf+4, SAADDR(¶m->sinsr), SAADDRLEN(¶m->sinsr));
|
memcpy(buf+4, SAADDR(¶m->sinsr), SAADDRLEN(¶m->sinsr));
|
||||||
memcpy(buf+4+SAADDRLEN(¶m->sinsr), SAPORT(¶m->sinsr), 2);
|
memcpy(buf+4+SAADDRLEN(¶m->sinsr), SAPORT(¶m->sinsr), 2);
|
||||||
sasize = sizeof(sin);
|
sasize = sizeof(sin);
|
||||||
if(socksendto(param->clisock, (struct sockaddr *)&sin, buf, len + 6 + SAADDRLEN(¶m->sinsr), conf.timeouts[SINGLEBYTE_L]*1000) <=0){
|
socksendto(param->clisock, (struct sockaddr *)&sin, buf, len + 6 + SAADDRLEN(¶m->sinsr), conf.timeouts[SINGLEBYTE_L]*1000);
|
||||||
param->res = 469;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#if SOCKSTRACE > 1
|
#if SOCKSTRACE > 1
|
||||||
fprintf(stderr, "UDP packet relayed to client from %hu size %d\n",
|
fprintf(stderr, "UDP packet relayed to client from %hu size %d\n",
|
||||||
ntohs(*SAPORT(¶m->sinsr)),
|
ntohs(*SAPORT(¶m->sinsr)),
|
||||||
|
Loading…
Reference in New Issue
Block a user