mirror of
https://github.com/3proxy/3proxy.git
synced 2026-06-13 11:00:11 +08:00
Compare commits
3 Commits
cbab76fe41
...
ec48b7f30e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec48b7f30e | ||
|
|
88a09bc3ff | ||
|
|
0e13f57139 |
@ -163,14 +163,14 @@ int start_proxy_thread(struct child * chp){
|
|||||||
_3proxy_sem_lock(conf.threadinit);
|
_3proxy_sem_lock(conf.threadinit);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#ifndef _WINCE
|
#ifndef _WINCE
|
||||||
h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, 32768+conf.stacksize, (void *)startsrv, (void *) chp, (DWORD)0, &thread);
|
h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, 16384+conf.stacksize, (void *)startsrv, (void *) chp, (DWORD)0, &thread);
|
||||||
#else
|
#else
|
||||||
h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, 32768+conf.stacksize, (void *)startsrv, (void *) chp, (DWORD)0, &thread);
|
h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, 16384+conf.stacksize, (void *)startsrv, (void *) chp, (DWORD)0, &thread);
|
||||||
#endif
|
#endif
|
||||||
if(h)CloseHandle(h);
|
if(h)CloseHandle(h);
|
||||||
#else
|
#else
|
||||||
pthread_attr_init(&pa);
|
pthread_attr_init(&pa);
|
||||||
pthread_attr_setstacksize(&pa,PTHREAD_STACK_MIN + (65536+conf.stacksize));
|
pthread_attr_setstacksize(&pa,PTHREAD_STACK_MIN + (32768+conf.stacksize));
|
||||||
pthread_attr_setdetachstate(&pa,PTHREAD_CREATE_DETACHED);
|
pthread_attr_setdetachstate(&pa,PTHREAD_CREATE_DETACHED);
|
||||||
pthread_create(&thread, &pa, startsrv, (void *)chp);
|
pthread_create(&thread, &pa, startsrv, (void *)chp);
|
||||||
pthread_attr_destroy(&pa);
|
pthread_attr_destroy(&pa);
|
||||||
|
|||||||
@ -121,8 +121,12 @@ void daemonize(void);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
#ifndef strcasecmp
|
||||||
#define strcasecmp stricmp
|
#define strcasecmp stricmp
|
||||||
|
#endif
|
||||||
|
#ifndef strncasecmp
|
||||||
#define strncasecmp strnicmp
|
#define strncasecmp strnicmp
|
||||||
|
#endif
|
||||||
#define seterrno3(x) _set_errno(x)
|
#define seterrno3(x) _set_errno(x)
|
||||||
#else
|
#else
|
||||||
#define seterrno3(x) (errno = x)
|
#define seterrno3(x) (errno = x)
|
||||||
|
|||||||
@ -349,6 +349,14 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
#ifndef NOUDPMAIN
|
#ifndef NOUDPMAIN
|
||||||
if(isudp) {
|
if(isudp) {
|
||||||
if(!udp_table.ihashtable)inithashtable(&udp_table, 64, 256, 65536);
|
if(!udp_table.ihashtable)inithashtable(&udp_table, 64, 256, 65536);
|
||||||
|
srv.udpbuf = malloc(UDPBUFSIZE);
|
||||||
|
srv.udpbuf2 = malloc(UDPBUFSIZE);
|
||||||
|
if(!srv.udpbuf || !srv.udpbuf2) {
|
||||||
|
#ifndef STDMAIN
|
||||||
|
haveerror = 2;
|
||||||
|
#endif
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
srv.service = defparam.service = childdef.service;
|
srv.service = defparam.service = childdef.service;
|
||||||
@ -995,8 +1003,8 @@ 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->udp_nhops - 1){
|
if(toparam->udp_nhops){
|
||||||
for(i=1; i < toparam->udp_nhops - 1; 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]);
|
||||||
}
|
}
|
||||||
len += socks5_udp_build_hdr(srv.udpbuf2+len, &toparam->req);
|
len += socks5_udp_build_hdr(srv.udpbuf2+len, &toparam->req);
|
||||||
@ -1241,6 +1249,10 @@ void srvfree(struct srvparam * srv){
|
|||||||
if(srv->onetns) free(srv->onetns);
|
if(srv->onetns) free(srv->onetns);
|
||||||
#endif
|
#endif
|
||||||
if(srv->so.freefunc) srv->so.freefunc(srv->so.state);
|
if(srv->so.freefunc) srv->so.freefunc(srv->so.state);
|
||||||
|
#ifndef NOUDPMAIN
|
||||||
|
if(srv->udpbuf) free(srv->udpbuf);
|
||||||
|
if(srv->udpbuf2) free(srv->udpbuf2);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
10
src/socks.c
10
src/socks.c
@ -247,6 +247,8 @@ fflush(stderr);
|
|||||||
sin = param->sincl;
|
sin = param->sincl;
|
||||||
*SAPORT(&sin) = 0;
|
*SAPORT(&sin) = 0;
|
||||||
if(param->srv->so._bind(param->sostate, param->clisock,(struct sockaddr *)&sin,SASIZE(&sin))) {RETURN (12);}
|
if(param->srv->so._bind(param->sostate, param->clisock,(struct sockaddr *)&sin,SASIZE(&sin))) {RETURN (12);}
|
||||||
|
sasize = SASIZE(&sin);
|
||||||
|
param->srv->so._getsockname(param->sostate, param->clisock, (struct sockaddr *)&sin, &sasize);
|
||||||
#if SOCKSTRACE > 0
|
#if SOCKSTRACE > 0
|
||||||
fprintf(stderr, "%hu binded to communicate with client\n",
|
fprintf(stderr, "%hu binded to communicate with client\n",
|
||||||
ntohs(*SAPORT(&sin))
|
ntohs(*SAPORT(&sin))
|
||||||
@ -264,7 +266,7 @@ fflush(stderr);
|
|||||||
|
|
||||||
CLEANRET:
|
CLEANRET:
|
||||||
|
|
||||||
if(param->clisock != INVALID_SOCKET){
|
if(param->clisock != INVALID_SOCKET && buf){
|
||||||
int repcode;
|
int repcode;
|
||||||
|
|
||||||
sasize = sizeof(sin);
|
sasize = sizeof(sin);
|
||||||
@ -285,7 +287,7 @@ CLEANRET:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if SOCKSTRACE > 0
|
#if SOCKSTRACE > 0
|
||||||
myinet_ntop(*SAFAMILY(&sin), &sin, tracebuf, SASIZE(&sin));
|
myinet_ntop(*SAFAMILY(&sin), SAADDR(&sin), tracebuf, SASIZE(&sin));
|
||||||
fprintf(stderr, "Sending confirmation to client with code %d for %s with %s:%hu\n",
|
fprintf(stderr, "Sending confirmation to client with code %d for %s with %s:%hu\n",
|
||||||
param->res,
|
param->res,
|
||||||
commands[command],
|
commands[command],
|
||||||
@ -299,6 +301,8 @@ fflush(stderr);
|
|||||||
else if (param->res < 20) repcode = 5;
|
else if (param->res < 20) repcode = 5;
|
||||||
else if (param->res < 30) repcode = 1;
|
else if (param->res < 30) repcode = 1;
|
||||||
else if (param->res < 100) repcode = 4;
|
else if (param->res < 100) repcode = 4;
|
||||||
|
else if (param->res == 100) repcode = 4;
|
||||||
|
else if (param->res == 997) repcode = 8;
|
||||||
else repcode = param->res%10;
|
else repcode = param->res%10;
|
||||||
|
|
||||||
if(ver == 5){
|
if(ver == 5){
|
||||||
@ -365,7 +369,7 @@ fflush(stderr);
|
|||||||
param->res = 462;
|
param->res = 462;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(SAISNULL(¶m->req) &&
|
if(!SAISNULL(¶m->req) &&
|
||||||
memcmp(SAADDR(¶m->req),SAADDR(¶m->sinsr),SAADDRLEN(¶m->req))) {
|
memcmp(SAADDR(¶m->req),SAADDR(¶m->sinsr),SAADDRLEN(¶m->req))) {
|
||||||
param->res = 470;
|
param->res = 470;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -569,11 +569,9 @@ struct srvparam {
|
|||||||
uint16_t targetport;
|
uint16_t targetport;
|
||||||
unsigned char replace;
|
unsigned char replace;
|
||||||
time_t time_start;
|
time_t time_start;
|
||||||
#ifndef NOUDPMAIN
|
unsigned char *udpbuf;
|
||||||
unsigned char udpbuf[UDPBUFSIZE];
|
unsigned char *udpbuf2;
|
||||||
unsigned char udpbuf2[UDPBUFSIZE];
|
|
||||||
int udplen;
|
int udplen;
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clientparam {
|
struct clientparam {
|
||||||
|
|||||||
@ -75,7 +75,6 @@ void * udppmchild(struct clientparam* param) {
|
|||||||
param->srvinbuf = 0;
|
param->srvinbuf = 0;
|
||||||
param->nwrites++;
|
param->nwrites++;
|
||||||
param->clisock = param->srv->srvsock;
|
param->clisock = param->srv->srvsock;
|
||||||
param->udp_nhops++;
|
|
||||||
param->waitserver64 = 0x7fffffffffffffff;
|
param->waitserver64 = 0x7fffffffffffffff;
|
||||||
param->res = udpsockmap(param, conf.timeouts[STRING_L]);
|
param->res = udpsockmap(param, conf.timeouts[STRING_L]);
|
||||||
_3proxy_sem_lock(udpinit);
|
_3proxy_sem_lock(udpinit);
|
||||||
|
|||||||
@ -57,6 +57,8 @@ int udpsockmap(struct clientparam *param, int timeo)
|
|||||||
int nhops = param->udp_nhops;
|
int nhops = param->udp_nhops;
|
||||||
int clisock_idx = -1, ctrlsock_idx = -1, ctrlsocksrv_idx = -1;
|
int clisock_idx = -1, ctrlsock_idx = -1, ctrlsocksrv_idx = -1;
|
||||||
int firstpacket = 1;
|
int firstpacket = 1;
|
||||||
|
|
||||||
|
if(param->srv->service == S_UDPPM) nhops++;
|
||||||
if (param->srvbufsize < UDPBUFSIZE) {
|
if (param->srvbufsize < UDPBUFSIZE) {
|
||||||
unsigned char *newbuf = realloc(param->srvbuf, UDPBUFSIZE);
|
unsigned char *newbuf = realloc(param->srvbuf, UDPBUFSIZE);
|
||||||
if (!newbuf) return 21;
|
if (!newbuf) return 21;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user