Compare commits

...

3 Commits

Author SHA1 Message Date
Vladimir Dubrovin
c462963d8e Fix standalone services link
Some checks failed
C/C++ CI Linux / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Has been cancelled
C/C++ CI Linux / ${{ matrix.target }} (ubuntu-latest) (push) Has been cancelled
C/C++ CI MacOS / ${{ matrix.target }} (macos-15) (push) Has been cancelled
C/C++ CI Windows / ${{ matrix.target }} (windows-2022) (push) Has been cancelled
C/C++ CI cmake / ${{ matrix.target }} (macos-15) (push) Has been cancelled
C/C++ CI cmake / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Has been cancelled
C/C++ CI cmake / ${{ matrix.target }} (ubuntu-latest) (push) Has been cancelled
C/C++ CI cmake / ${{ matrix.target }} (windows-2022) (push) Has been cancelled
2026-06-28 21:15:38 +03:00
Vladimir Dubrovin
e41ab58b2c Fix: invalid error in ssl server handshake can lead to broken service state 2026-06-28 21:10:45 +03:00
Vladimir Dubrovin
8f13582329 Fix invalid offset in datafilters 2026-06-28 21:09:36 +03:00
2 changed files with 30 additions and 21 deletions

View File

@ -18,6 +18,19 @@ DWORD WINAPI threadfunc(LPVOID p) {
void * threadfunc (void *p) {
#endif
int i = -1;
#ifdef MODULEMAINFUNC
if(makefilters(param->srv, param) > CONTINUE){
#ifndef NOUDPMAIN
if(param->srv->service == S_UDPPM) _3proxy_sem_unlock(udpinit);
#endif
freeparam(param);
#ifdef _WIN32
return 0;
#else
return NULL;
#endif
}
#endif
if(param->srv->cbsock != INVALID_SOCKET){
SASIZETYPE size = sizeof(param->sinsr);
struct pollfd fds;
@ -1054,17 +1067,6 @@ int MODULEMAINFUNC (int argc, char** argv){
if(defparam.hostname)newparam->hostname=(unsigned char *)strdup((char *)defparam.hostname);
clearstat(newparam);
if(!isudp) newparam->clisock = new_sock;
#ifndef STDMAIN
if(makefilters(&srv, newparam) > CONTINUE){
freeparam(newparam);
#ifndef NOUDPMAIN
if(isudp) {
_3proxy_sem_unlock(udpinit);
}
#endif
continue;
}
#endif
newparam->prev = newparam->next = NULL;
error = 0;
_3proxy_mutex_lock(&srv.counter_mutex);
@ -1099,6 +1101,11 @@ int MODULEMAINFUNC (int argc, char** argv){
if(newparam->prev) newparam->prev->next = newparam->next;
else srv.child = newparam->next;
if(newparam->next) newparam->next->prev = newparam->prev;
if(newparam->clisock != INVALID_SOCKET){
srv.so._shutdown(srv.so.state, newparam->clisock, SHUT_RDWR);
srv.so._closesocket(srv.so.state, newparam->clisock);
newparam->clisock = INVALID_SOCKET;
}
newparam->srv = NULL;
#ifndef NOUDPMAIN
if(isudp){
@ -1289,15 +1296,17 @@ void freeparam(struct clientparam * param) {
#ifndef STDMAIN
if(param->srv->service == S_UDPPM) hashdelete(&udp_table, param);
#endif
if(param->prev){
param->prev->next = param->next;
if(param->prev || param->next || param->srv->child == param){
if(param->prev){
param->prev->next = param->next;
}
else
param->srv->child = param->next;
if(param->next){
param->next->prev = param->prev;
}
(param->srv->childcount)--;
}
else
param->srv->child = param->next;
if(param->next){
param->next->prev = param->prev;
}
(param->srv->childcount)--;
_3proxy_mutex_unlock(&param->srv->counter_mutex);
}
if(param->clibuf) free(param->clibuf);

View File

@ -201,7 +201,7 @@ log(logbuf);
log("send to server from buf");
#endif
if(!param->nolongdatfilter){
action = handledatfltcli(param, &param->clibuf, (int *)&param->clibufsize, param->cliinbuf - res, (int *)&param->cliinbuf);
action = handledatfltcli(param, &param->clibuf, (int *)&param->clibufsize, param->clioffset, (int *)&param->cliinbuf);
if(action == HANDLED){
RETURN(0);
}
@ -247,7 +247,7 @@ log("done send to server from buf");
log("send to client from buf");
#endif
if(!param->nolongdatfilter){
action = handledatfltsrv(param, &param->srvbuf, (int *)&param->srvbufsize, param->srvinbuf - res, (int *)&param->srvinbuf);
action = handledatfltsrv(param, &param->srvbuf, (int *)&param->srvbufsize, param->srvoffset, (int *)&param->srvinbuf);
if(action == HANDLED){
RETURN(0);
}