mirror of
https://github.com/3proxy/3proxy.git
synced 2026-06-10 09:50:12 +08:00
Check bandlims for UDP traffic
This commit is contained in:
parent
fd7b25bf06
commit
69862b67cb
@ -1020,17 +1020,19 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(hashresolv(&udp_table, &defparam, &toparam, NULL)) {
|
||||
int i, len=0;
|
||||
|
||||
if(toparam->udp_nhops){
|
||||
for(i=1; i < toparam->udp_nhops; i++){
|
||||
len+=socks5_udp_build_hdr(srv.udpbuf2+len, &toparam->udp_relay[i-1]);
|
||||
}
|
||||
len += socks5_udp_build_hdr(srv.udpbuf2+len, &toparam->req);
|
||||
if(!toparam->bandlimfunc || !(*toparam->bandlimfunc)(toparam, 0, srv.udplen)){
|
||||
if(toparam->udp_nhops){
|
||||
for(i=1; i < toparam->udp_nhops; i++){
|
||||
len+=socks5_udp_build_hdr(srv.udpbuf2+len, &toparam->udp_relay[i-1]);
|
||||
}
|
||||
len += socks5_udp_build_hdr(srv.udpbuf2+len, &toparam->req);
|
||||
}
|
||||
memcpy(srv.udpbuf2+len, srv.udpbuf, srv.udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : srv.udplen);
|
||||
len += srv.udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : srv.udplen;
|
||||
srv.so._sendto(toparam->sostate, toparam->remsock, (char *)srv.udpbuf2, len, 0, (struct sockaddr *)&toparam->sinsr, SASIZE(&toparam->sinsr));
|
||||
toparam->statscli64 += srv.udplen;
|
||||
toparam->nwrites++;
|
||||
}
|
||||
memcpy(srv.udpbuf2+len, srv.udpbuf, srv.udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : srv.udplen);
|
||||
len += srv.udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : srv.udplen;
|
||||
srv.so._sendto(toparam->sostate, toparam->remsock, (char *)srv.udpbuf2, len, 0, (struct sockaddr *)&toparam->sinsr, SASIZE(&toparam->sinsr));
|
||||
toparam->statscli64 += srv.udplen;
|
||||
toparam->nwrites++;
|
||||
_3proxy_sem_unlock(udpinit);
|
||||
continue;
|
||||
}
|
||||
|
||||
20
src/udppm.c
20
src/udppm.c
@ -61,19 +61,21 @@ void * udppmchild(struct clientparam* param) {
|
||||
if(!(param->srvbuf = malloc(UDPBUFSIZE)))RETURN(11);
|
||||
param->srvbufsize = UDPBUFSIZE;
|
||||
}
|
||||
if(param->udp_nhops){
|
||||
for(i=1; i < param->udp_nhops; i++){
|
||||
len+=socks5_udp_build_hdr(param->srvbuf+len, ¶m->udp_relay[i-1]);
|
||||
if(!param->bandlimfunc || !(*param->bandlimfunc)(param, 0, param->srv->udplen)){
|
||||
if(param->udp_nhops){
|
||||
for(i=1; i < param->udp_nhops; i++){
|
||||
len+=socks5_udp_build_hdr(param->srvbuf+len, ¶m->udp_relay[i-1]);
|
||||
}
|
||||
len += socks5_udp_build_hdr(param->srvbuf+len, ¶m->req);
|
||||
}
|
||||
len += socks5_udp_build_hdr(param->srvbuf+len, ¶m->req);
|
||||
memcpy(param->srvbuf+len, param->srv->udpbuf, param->srv->udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : param->srv->udplen);
|
||||
len += param->srv->udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : param->srv->udplen;
|
||||
param->srv->so._sendto(param->sostate, param->remsock, (char *)param->srvbuf, len, 0, (struct sockaddr *)¶m->sinsr, SASIZE(¶m->sinsr));
|
||||
param->statscli64 += param->srvinbuf;
|
||||
param->nwrites++;
|
||||
}
|
||||
memcpy(param->srvbuf+len, param->srv->udpbuf, param->srv->udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : param->srv->udplen);
|
||||
len += param->srv->udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : param->srv->udplen;
|
||||
param->srv->so._sendto(param->sostate, param->remsock, (char *)param->srvbuf, len, 0, (struct sockaddr *)¶m->sinsr, SASIZE(¶m->sinsr));
|
||||
_3proxy_sem_unlock(udpinit);
|
||||
param->statscli64 += param->srvinbuf;
|
||||
param->srvinbuf = 0;
|
||||
param->nwrites++;
|
||||
param->clisock = param->srv->srvsock;
|
||||
param->waitserver64 = 0x7fffffffffffffff;
|
||||
param->res = udpsockmap(param, conf.timeouts[STRING_L]);
|
||||
|
||||
@ -124,6 +124,8 @@ int udpsockmap(struct clientparam *param, int timeo)
|
||||
continue;
|
||||
}
|
||||
|
||||
if(param->bandlimfunc && (*param->bandlimfunc)(param, 0, len)) continue;
|
||||
|
||||
if (nhops == 0) {
|
||||
int i;
|
||||
if (len < 10 || param->srvbuf[0] || param->srvbuf[1] || param->srvbuf[2])
|
||||
@ -195,6 +197,7 @@ int udpsockmap(struct clientparam *param, int timeo)
|
||||
}
|
||||
param->statssrv64 += len;
|
||||
param->nreads++;
|
||||
if(param->bandlimfunc && (*param->bandlimfunc)(param, len, 0)) continue;
|
||||
sendlen = len;
|
||||
if (nhops == 0) {
|
||||
param->srvbuf[0] = param->srvbuf[1] = param->srvbuf[2] = 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user