Check bandlims for UDP traffic

This commit is contained in:
Vladimir Dubrovin 2026-06-02 14:23:52 +03:00
parent fd7b25bf06
commit 69862b67cb
3 changed files with 26 additions and 19 deletions

View File

@ -1020,6 +1020,7 @@ int MODULEMAINFUNC (int argc, char** argv){
if(hashresolv(&udp_table, &defparam, &toparam, NULL)) { if(hashresolv(&udp_table, &defparam, &toparam, NULL)) {
int i, len=0; int i, len=0;
if(!toparam->bandlimfunc || !(*toparam->bandlimfunc)(toparam, 0, srv.udplen)){
if(toparam->udp_nhops){ if(toparam->udp_nhops){
for(i=1; i < toparam->udp_nhops; i++){ 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->udp_relay[i-1]);
@ -1031,6 +1032,7 @@ int MODULEMAINFUNC (int argc, char** argv){
srv.so._sendto(toparam->sostate, toparam->remsock, (char *)srv.udpbuf2, len, 0, (struct sockaddr *)&toparam->sinsr, SASIZE(&toparam->sinsr)); srv.so._sendto(toparam->sostate, toparam->remsock, (char *)srv.udpbuf2, len, 0, (struct sockaddr *)&toparam->sinsr, SASIZE(&toparam->sinsr));
toparam->statscli64 += srv.udplen; toparam->statscli64 += srv.udplen;
toparam->nwrites++; toparam->nwrites++;
}
_3proxy_sem_unlock(udpinit); _3proxy_sem_unlock(udpinit);
continue; continue;
} }

View File

@ -61,6 +61,7 @@ void * udppmchild(struct clientparam* param) {
if(!(param->srvbuf = malloc(UDPBUFSIZE)))RETURN(11); if(!(param->srvbuf = malloc(UDPBUFSIZE)))RETURN(11);
param->srvbufsize = UDPBUFSIZE; param->srvbufsize = UDPBUFSIZE;
} }
if(!param->bandlimfunc || !(*param->bandlimfunc)(param, 0, param->srv->udplen)){
if(param->udp_nhops){ if(param->udp_nhops){
for(i=1; i < param->udp_nhops; i++){ for(i=1; i < param->udp_nhops; i++){
len+=socks5_udp_build_hdr(param->srvbuf+len, &param->udp_relay[i-1]); len+=socks5_udp_build_hdr(param->srvbuf+len, &param->udp_relay[i-1]);
@ -70,10 +71,11 @@ void * udppmchild(struct clientparam* param) {
memcpy(param->srvbuf+len, param->srv->udpbuf, param->srv->udplen > UDPBUFSIZE - len?UDPBUFSIZE - len : param->srv->udplen); 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; 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 *)&param->sinsr, SASIZE(&param->sinsr)); param->srv->so._sendto(param->sostate, param->remsock, (char *)param->srvbuf, len, 0, (struct sockaddr *)&param->sinsr, SASIZE(&param->sinsr));
_3proxy_sem_unlock(udpinit);
param->statscli64 += param->srvinbuf; param->statscli64 += param->srvinbuf;
param->srvinbuf = 0;
param->nwrites++; param->nwrites++;
}
_3proxy_sem_unlock(udpinit);
param->srvinbuf = 0;
param->clisock = param->srv->srvsock; param->clisock = param->srv->srvsock;
param->waitserver64 = 0x7fffffffffffffff; param->waitserver64 = 0x7fffffffffffffff;
param->res = udpsockmap(param, conf.timeouts[STRING_L]); param->res = udpsockmap(param, conf.timeouts[STRING_L]);

View File

@ -124,6 +124,8 @@ int udpsockmap(struct clientparam *param, int timeo)
continue; continue;
} }
if(param->bandlimfunc && (*param->bandlimfunc)(param, 0, len)) continue;
if (nhops == 0) { if (nhops == 0) {
int i; int i;
if (len < 10 || param->srvbuf[0] || param->srvbuf[1] || param->srvbuf[2]) 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->statssrv64 += len;
param->nreads++; param->nreads++;
if(param->bandlimfunc && (*param->bandlimfunc)(param, len, 0)) continue;
sendlen = len; sendlen = len;
if (nhops == 0) { if (nhops == 0) {
param->srvbuf[0] = param->srvbuf[1] = param->srvbuf[2] = 0; param->srvbuf[0] = param->srvbuf[1] = param->srvbuf[2] = 0;