mirror of
https://github.com/3proxy/3proxy.git
synced 2026-04-10 23:20:12 +08:00
Use uint32_t/uint16_t instead of unsigned long / unsigned short where required
This commit is contained in:
parent
7ea4e9b8c2
commit
7992fbf31e
20
src/auth.c
20
src/auth.c
@ -305,7 +305,7 @@ int handleredirect(struct clientparam * param, struct ace * acentry){
|
|||||||
if(!ha) return 0;
|
if(!ha) return 0;
|
||||||
}
|
}
|
||||||
else if(!*SAPORT(&cur->addr) && !SAISNULL(&cur->addr)) {
|
else if(!*SAPORT(&cur->addr) && !SAISNULL(&cur->addr)) {
|
||||||
unsigned short port = *SAPORT(¶m->sinsr);
|
uint16_t port = *SAPORT(¶m->sinsr);
|
||||||
param->sinsr = cur->addr;
|
param->sinsr = cur->addr;
|
||||||
*SAPORT(¶m->sinsr) = port;
|
*SAPORT(¶m->sinsr) = port;
|
||||||
}
|
}
|
||||||
@ -943,7 +943,7 @@ int dnsauth(struct clientparam * param){
|
|||||||
sprintf(s, "ip6.arpa");
|
sprintf(s, "ip6.arpa");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u = ntohl(*(unsigned long *)SAADDR(¶m->sincr));
|
u = ntohl(*(uint32_t *)SAADDR(¶m->sincr));
|
||||||
|
|
||||||
sprintf(buf, "%u.%u.%u.%u.in-addr.arpa",
|
sprintf(buf, "%u.%u.%u.%u.in-addr.arpa",
|
||||||
((u&0x000000FF)),
|
((u&0x000000FF)),
|
||||||
@ -1155,7 +1155,7 @@ void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* val
|
|||||||
pthread_mutex_unlock(&hash_mutex);
|
pthread_mutex_unlock(&hash_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsigned char* value, unsigned *ttl){
|
uint32_t hashresolv(struct hashtable *ht, const unsigned char* name, unsigned char* value, uint32_t *ttl){
|
||||||
unsigned char hash[sizeof(unsigned)*4];
|
unsigned char hash[sizeof(unsigned)*4];
|
||||||
struct hashentry ** hep;
|
struct hashentry ** hep;
|
||||||
struct hashentry *he;
|
struct hashentry *he;
|
||||||
@ -1176,7 +1176,7 @@ unsigned long hashresolv(struct hashtable *ht, const unsigned char* name, unsign
|
|||||||
ht->hashempty = he;
|
ht->hashempty = he;
|
||||||
}
|
}
|
||||||
else if(!memcmp(hash, he->hash, sizeof(unsigned)*4)){
|
else if(!memcmp(hash, he->hash, sizeof(unsigned)*4)){
|
||||||
if(ttl) *ttl = (unsigned)(he->expires - conf.time);
|
if(ttl) *ttl = (uint32_t)(he->expires - conf.time);
|
||||||
memcpy(value, he->value, ht->recsize);
|
memcpy(value, he->value, ht->recsize);
|
||||||
pthread_mutex_unlock(&hash_mutex);
|
pthread_mutex_unlock(&hash_mutex);
|
||||||
return 1;
|
return 1;
|
||||||
@ -1191,10 +1191,10 @@ struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0}
|
|||||||
struct nserver authnserver;
|
struct nserver authnserver;
|
||||||
|
|
||||||
|
|
||||||
unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth){
|
uint32_t udpresolve(int af, unsigned char * name, unsigned char * value, uint32_t *retttl, struct clientparam* param, int makeauth){
|
||||||
|
|
||||||
int i,n;
|
int i,n;
|
||||||
unsigned long retval;
|
uint32_t retval;
|
||||||
|
|
||||||
if((af == AF_INET) && (retval = hashresolv(&dns_table, name, value, retttl))) {
|
if((af == AF_INET) && (retval = hashresolv(&dns_table, name, value, retttl))) {
|
||||||
return retval;
|
return retval;
|
||||||
@ -1208,7 +1208,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
|||||||
unsigned char b[4098], *buf, *s1, *s2;
|
unsigned char b[4098], *buf, *s1, *s2;
|
||||||
int j, k, len, flen;
|
int j, k, len, flen;
|
||||||
SOCKET sock;
|
SOCKET sock;
|
||||||
unsigned ttl;
|
uint32_t ttl;
|
||||||
#ifndef NOIPV6
|
#ifndef NOIPV6
|
||||||
struct sockaddr_in6 addr;
|
struct sockaddr_in6 addr;
|
||||||
struct sockaddr_in6 *sinsr, *sinsl;
|
struct sockaddr_in6 *sinsr, *sinsl;
|
||||||
@ -1343,7 +1343,7 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
|||||||
k+= (12 + flen);
|
k+= (12 + flen);
|
||||||
continue; /* we need A IPv4 */
|
continue; /* we need A IPv4 */
|
||||||
}
|
}
|
||||||
ttl = ntohl(*(unsigned long *)(buf + k + 6));
|
ttl = ntohl(*(uint32_t *)(buf + k + 6));
|
||||||
memcpy(value, buf + k + 12, af == AF_INET6? 16:4);
|
memcpy(value, buf + k + 12, af == AF_INET6? 16:4);
|
||||||
if(ttl < 0 || ttl > (3600*12)) ttl = 3600*12;
|
if(ttl < 0 || ttl > (3600*12)) ttl = 3600*12;
|
||||||
if(!ttl) ttl = 1;
|
if(!ttl) ttl = 1;
|
||||||
@ -1373,11 +1373,11 @@ unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, un
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long myresolver(int af, unsigned char * name, unsigned char * value){
|
uint32_t myresolver(int af, unsigned char * name, unsigned char * value){
|
||||||
return udpresolve(af, name, value, NULL, NULL, 0);
|
return udpresolve(af, name, value, NULL, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long fakeresolver (int af, unsigned char *name, unsigned char * value){
|
uint32_t fakeresolver (int af, unsigned char *name, unsigned char * value){
|
||||||
memset(value, 0, af == AF_INET6? 16 : 4);
|
memset(value, 0, af == AF_INET6? 16 : 4);
|
||||||
if(af == AF_INET6){
|
if(af == AF_INET6){
|
||||||
memset(value, 0, 16);
|
memset(value, 0, 16);
|
||||||
|
|||||||
@ -610,7 +610,7 @@ int radsend(struct clientparam * param, int auth, int stop){
|
|||||||
if(!vendor && attr[0] == PW_VENDOR_SPECIFIC) {
|
if(!vendor && attr[0] == PW_VENDOR_SPECIFIC) {
|
||||||
if (attr[1] < 6 || count < 6) RETURN(4);
|
if (attr[1] < 6 || count < 6) RETURN(4);
|
||||||
vendorlen = attr[1]-6;
|
vendorlen = attr[1]-6;
|
||||||
vendor = htonl(*((int*)(attr +2)));
|
vendor = htonl(*((uint32_t *)(attr +2)));
|
||||||
count -= 6;
|
count -= 6;
|
||||||
attr += 6;
|
attr += 6;
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
16
src/common.c
16
src/common.c
@ -417,7 +417,7 @@ int ceparseargs(const char *str){
|
|||||||
|
|
||||||
int parsehost(int family, unsigned char *host, struct sockaddr *sa){
|
int parsehost(int family, unsigned char *host, struct sockaddr *sa){
|
||||||
char *sp=NULL,*se=NULL;
|
char *sp=NULL,*se=NULL;
|
||||||
unsigned short port=0;
|
uint16_t port=0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if(!host) return 2;
|
if(!host) return 2;
|
||||||
@ -436,7 +436,7 @@ int parsehost(int family, unsigned char *host, struct sockaddr *sa){
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int parsehostname(char *hostname, struct clientparam *param, unsigned short port){
|
int parsehostname(char *hostname, struct clientparam *param, uint16_t port){
|
||||||
char *sp=NULL,*se=NULL;
|
char *sp=NULL,*se=NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -498,7 +498,7 @@ int parseusername(char *username, struct clientparam *param, int extpasswd){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port){
|
int parseconnusername(char *username, struct clientparam *param, int extpasswd, uint16_t port){
|
||||||
char *sb, *se;
|
char *sb, *se;
|
||||||
if(!username || !*username) return 1;
|
if(!username || !*username) return 1;
|
||||||
if ((sb=strchr(username, conf.delimchar)) == NULL){
|
if ((sb=strchr(username, conf.delimchar)) == NULL){
|
||||||
@ -625,7 +625,7 @@ int doconnect(struct clientparam * param){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask) {
|
int scanaddr(const unsigned char *s, uint32_t * ip, uint32_t * mask) {
|
||||||
unsigned d1, d2, d3, d4, m;
|
unsigned d1, d2, d3, d4, m;
|
||||||
int res;
|
int res;
|
||||||
if ((res = sscanf((char *)s, "%u.%u.%u.%u/%u", &d1, &d2, &d3, &d4, &m)) < 4) return 0;
|
if ((res = sscanf((char *)s, "%u.%u.%u.%u/%u", &d1, &d2, &d3, &d4, &m)) < 4) return 0;
|
||||||
@ -658,8 +658,8 @@ struct hostent * my_gethostbyname(char *name, char *buf, struct hostent *hp){
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NOIPV6
|
#ifdef NOIPV6
|
||||||
unsigned long getip(unsigned char *name){
|
uint32_t getip(unsigned char *name){
|
||||||
unsigned long retval;
|
uint32_t retval;
|
||||||
int i;
|
int i;
|
||||||
int ndots = 0;
|
int ndots = 0;
|
||||||
struct hostent *hp=NULL;
|
struct hostent *hp=NULL;
|
||||||
@ -701,7 +701,7 @@ unsigned long getip(unsigned char *name){
|
|||||||
system(conf.demanddialprog);
|
system(conf.demanddialprog);
|
||||||
hp=gethostbyname((char *)name);
|
hp=gethostbyname((char *)name);
|
||||||
}
|
}
|
||||||
retval = hp?*(unsigned long *)hp->h_addr:0;
|
retval = hp?*(uint32_t *)hp->h_addr:0;
|
||||||
#if !defined(_WIN32) && !defined(GETHOSTBYNAME_R)
|
#if !defined(_WIN32) && !defined(GETHOSTBYNAME_R)
|
||||||
pthread_mutex_unlock(&gethostbyname_mutex);
|
pthread_mutex_unlock(&gethostbyname_mutex);
|
||||||
#endif
|
#endif
|
||||||
@ -744,7 +744,7 @@ int afdetect(unsigned char *name){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa){
|
uint32_t getip46(int family, unsigned char *name, struct sockaddr *sa){
|
||||||
#ifndef NOIPV6
|
#ifndef NOIPV6
|
||||||
int detect;
|
int detect;
|
||||||
struct addrinfo *ai, hint;
|
struct addrinfo *ai, hint;
|
||||||
|
|||||||
@ -811,7 +811,7 @@ static int h_parent(int argc, unsigned char **argv){
|
|||||||
*cidr = '/';
|
*cidr = '/';
|
||||||
chains->cidr = atoi(cidr + 1);
|
chains->cidr = atoi(cidr + 1);
|
||||||
}
|
}
|
||||||
*SAPORT(&chains->addr) = htons((unsigned short)atoi((char *)argv[4]));
|
*SAPORT(&chains->addr) = htons((uint16_t)atoi((char *)argv[4]));
|
||||||
if(argc > 5) chains->extuser = (unsigned char *)mystrdup((char *)argv[5]);
|
if(argc > 5) chains->extuser = (unsigned char *)mystrdup((char *)argv[5]);
|
||||||
if(argc > 6) chains->extpass = (unsigned char *)mystrdup((char *)argv[6]);
|
if(argc > 6) chains->extpass = (unsigned char *)mystrdup((char *)argv[6]);
|
||||||
if(!acl->chains) {
|
if(!acl->chains) {
|
||||||
@ -1221,10 +1221,10 @@ static int h_ace(int argc, unsigned char **argv){
|
|||||||
freeacl(acl);
|
freeacl(acl);
|
||||||
return(21);
|
return(21);
|
||||||
}
|
}
|
||||||
memset(acl->chains, 0, sizeof(struct chain));
|
memset(acl->chains, 0, sizeof(struct chain));
|
||||||
acl->chains->type = R_HTTP;
|
acl->chains->type = R_HTTP;
|
||||||
if(!getip46(46, argv[1], (struct sockaddr *)&acl->chains->addr)) return 5;
|
if(!getip46(46, argv[1], (struct sockaddr *)&acl->chains->addr)) return 5;
|
||||||
*SAPORT(&acl->chains->addr) = htons((unsigned short)atoi((char *)argv[2]));
|
*SAPORT(&acl->chains->addr) = htons((uint16_t)atoi((char *)argv[2]));
|
||||||
acl->chains->weight = 1000;
|
acl->chains->weight = 1000;
|
||||||
case ALLOW:
|
case ALLOW:
|
||||||
case DENY:
|
case DENY:
|
||||||
@ -1394,7 +1394,7 @@ static int h_delimchar(int argc, unsigned char **argv){
|
|||||||
|
|
||||||
#ifndef NORADIUS
|
#ifndef NORADIUS
|
||||||
static int h_radius(int argc, unsigned char **argv){
|
static int h_radius(int argc, unsigned char **argv){
|
||||||
unsigned short port;
|
uint16_t port;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
int oldrad;
|
int oldrad;
|
||||||
|
|||||||
@ -44,7 +44,7 @@ static void pr_traffic(struct node *node, CBFUNC cbf, void*cb){
|
|||||||
|
|
||||||
static void pr_port(struct node *node, CBFUNC cbf, void*cb){
|
static void pr_port(struct node *node, CBFUNC cbf, void*cb){
|
||||||
char buf[8];
|
char buf[8];
|
||||||
if(node->value)(*cbf)(cb, buf, sprintf(buf, "%hu", ntohs(*(unsigned short*)node->value)));
|
if(node->value)(*cbf)(cb, buf, sprintf(buf, "%hu", (unsigned short)ntohs(*(uint16_t*)node->value)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pr_datetime(struct node *node, CBFUNC cbf, void*cb){
|
static void pr_datetime(struct node *node, CBFUNC cbf, void*cb){
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
void * dnsprchild(struct clientparam* param) {
|
void * dnsprchild(struct clientparam* param) {
|
||||||
unsigned long ip = 0;
|
uint32_t ip = 0;
|
||||||
unsigned char *bbuf;
|
unsigned char *bbuf;
|
||||||
unsigned char *buf, *s1, *s2;
|
unsigned char *buf, *s1, *s2;
|
||||||
char * host = NULL;
|
char * host = NULL;
|
||||||
@ -26,7 +26,7 @@ void * dnsprchild(struct clientparam* param) {
|
|||||||
int res, i;
|
int res, i;
|
||||||
int len;
|
int len;
|
||||||
unsigned type=0;
|
unsigned type=0;
|
||||||
unsigned ttl;
|
uint32_t ttl;
|
||||||
unsigned char addr[16];
|
unsigned char addr[16];
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
unsigned long ul = 1;
|
unsigned long ul = 1;
|
||||||
@ -109,7 +109,7 @@ void * dnsprchild(struct clientparam* param) {
|
|||||||
unsigned a, b, c, d;
|
unsigned a, b, c, d;
|
||||||
sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d);
|
sscanf(host, "%u.%u.%u.%u", &a, &b, &c, &d);
|
||||||
ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a);
|
ip = htonl((d<<24) ^ (c<<16) ^ (b<<8) ^ a);
|
||||||
if(*SAFAMILY(¶m->sincl) == AF_INET && ip == *(unsigned long*)SAADDR(¶m->sincl)){
|
if(*SAFAMILY(¶m->sincl) == AF_INET && ip == *(uint32_t *)SAADDR(¶m->sincl)){
|
||||||
buf[2] = 0x85;
|
buf[2] = 0x85;
|
||||||
buf[3] = 0x80;
|
buf[3] = 0x80;
|
||||||
buf[6] = 0;
|
buf[6] = 0;
|
||||||
|
|||||||
@ -195,7 +195,7 @@ SOCKET ftpdata(struct clientparam *param){
|
|||||||
rem = param->remsock;
|
rem = param->remsock;
|
||||||
param->remsock = INVALID_SOCKET;
|
param->remsock = INVALID_SOCKET;
|
||||||
param->req = param->sinsr;
|
param->req = param->sinsr;
|
||||||
*SAPORT(¶m->req) = *SAPORT(¶m->sinsr) = htons((unsigned short)((b5<<8)^b6));
|
*SAPORT(¶m->req) = *SAPORT(¶m->sinsr) = htons((uint16_t)((b5<<8)^b6));
|
||||||
*SAPORT(¶m->sinsl) = 0;
|
*SAPORT(¶m->sinsl) = 0;
|
||||||
i = param->operation;
|
i = param->operation;
|
||||||
param->operation = FTP_DATA;
|
param->operation = FTP_DATA;
|
||||||
|
|||||||
@ -152,7 +152,7 @@ void * ftpprchild(struct clientparam* param) {
|
|||||||
unsigned short b5, b6;
|
unsigned short b5, b6;
|
||||||
|
|
||||||
if(sscanf((char *)buf+5, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) {RETURN(828);}
|
if(sscanf((char *)buf+5, "%lu,%lu,%lu,%lu,%hu,%hu", &b1, &b2, &b3, &b4, &b5, &b6)!=6) {RETURN(828);}
|
||||||
*SAPORT(¶m->sincr) = htons((unsigned short)((b5<<8)^b6));
|
*SAPORT(¶m->sincr) = htons((uint16_t)((b5<<8)^b6));
|
||||||
if(connectwithpoll(param, clidatasock, (struct sockaddr *)¶m->sincr, SASIZE(¶m->sincr),conf.timeouts[CONNECT_TO])) {
|
if(connectwithpoll(param, clidatasock, (struct sockaddr *)¶m->sincr, SASIZE(¶m->sincr),conf.timeouts[CONNECT_TO])) {
|
||||||
param->srv->so._closesocket(param->sostate, clidatasock);
|
param->srv->so._closesocket(param->sostate, clidatasock);
|
||||||
clidatasock = INVALID_SOCKET;
|
clidatasock = INVALID_SOCKET;
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
========================================================================
|
========================================================================
|
||||||
3proxy traffic plugin Changelog
|
3proxy traffic plugin Changelog
|
||||||
========================================================================
|
========================================================================
|
||||||
v0.1.2 (2 января 2007 года)
|
v0.1.2 (2 января 2007 года)
|
||||||
- Плугин обновлён в соответствии с обновлением 3proxy.
|
- Плугин обновлён в соответствии с обновлением 3proxy.
|
||||||
- Добавлена опция debug.
|
- Добавлена опция debug.
|
||||||
|
|
||||||
v0.1.1
|
v0.1.1
|
||||||
- Теперь udp нельзя задавать proxy, tcppm, pop3p
|
- Теперь udp нельзя задавать proxy, tcppm, pop3p
|
||||||
- Исправлена ошибка с выбором типа соединения.
|
- Исправлена ошибка с выбором типа соединения.
|
||||||
|
|
||||||
v0.1.0 beta (10 июля 2006)
|
v0.1.0 beta (10 июля 2006)
|
||||||
Первый релиз.
|
Первый релиз.
|
||||||
@ -1,64 +1,64 @@
|
|||||||
========================================================================
|
========================================================================
|
||||||
3proxy traffic plugin
|
3proxy traffic plugin
|
||||||
========================================================================
|
========================================================================
|
||||||
Как известно 3proxy считает траффик не сетевой, а прикладной.
|
Как известно 3proxy считает траффик не сетевой, а прикладной.
|
||||||
Обычно прикладной траффик немного меньше (примерно на 10%) чем сетевой,
|
Обычно прикладной траффик немного меньше (примерно на 10%) чем сетевой,
|
||||||
однако в некоторых случаях, например когда пользователи сети играют в
|
однако в некоторых случаях, например когда пользователи сети играют в
|
||||||
игры, сетевой траффик может превысить прикладной в 4-5 раз. Это довольно неприятно,
|
игры, сетевой траффик может превысить прикладной в 4-5 раз. Это довольно неприятно,
|
||||||
так как получается, что они за это не платят.
|
так как получается, что они за это не платят.
|
||||||
|
|
||||||
Происходит это потому, что в каждом посланом пакете есть заголовок+данные. Заголовок
|
Происходит это потому, что в каждом посланом пакете есть заголовок+данные. Заголовок
|
||||||
весит порядка 50-60 байт а колличество данных может меняться от 15-20 байт (что характерно для игр)
|
весит порядка 50-60 байт а колличество данных может меняться от 15-20 байт (что характерно для игр)
|
||||||
до 800-900 байт (у IE). Также колличество данных в пакете зависит от загрузки сети,
|
до 800-900 байт (у IE). Также колличество данных в пакете зависит от загрузки сети,
|
||||||
удалённости сервера и прочих причин.
|
удалённости сервера и прочих причин.
|
||||||
|
|
||||||
Данный плагин может исправить такую ситуацию. Он может умножать счётчик траффика
|
Данный плагин может исправить такую ситуацию. Он может умножать счётчик траффика
|
||||||
при окончании соединения на некоторый коэффициент либо добавлять к данным размеры заголовков пакетов,
|
при окончании соединения на некоторый коэффициент либо добавлять к данным размеры заголовков пакетов,
|
||||||
которые прошли по сети.
|
которые прошли по сети.
|
||||||
|
|
||||||
Как использовать плагин:
|
Как использовать плагин:
|
||||||
|
|
||||||
загрузка плагина:
|
загрузка плагина:
|
||||||
plugin "TrafficPlugin.dll" start
|
plugin "TrafficPlugin.dll" start
|
||||||
|
|
||||||
Далее недоходимо добавить правила:
|
Далее недоходимо добавить правила:
|
||||||
ДЛЯ РЕЖИМА ДОМНОЖЕНИЯ ТРАФФИКА НА ЧИСЛО:
|
ДЛЯ РЕЖИМА ДОМНОЖЕНИЯ ТРАФФИКА НА ЧИСЛО:
|
||||||
trafcorrect m <сервис> <исходящий порт> <коэффициент>
|
trafcorrect m <сервис> <исходящий порт> <коэффициент>
|
||||||
где: <сервис> может быть proxy, socks4, socks45, socks5, tcppm, udppm, pop3p
|
где: <сервис> может быть proxy, socks4, socks45, socks5, tcppm, udppm, pop3p
|
||||||
если сервис указан неверно то считается, что это может быть любой сервис.
|
если сервис указан неверно то считается, что это может быть любой сервис.
|
||||||
можно использовать *, тогда правило будет считаться для любого сервиса.
|
можно использовать *, тогда правило будет считаться для любого сервиса.
|
||||||
<исходящий порт> - порт, к которому подключается прокси сервер. * - любой
|
<исходящий порт> - порт, к которому подключается прокси сервер. * - любой
|
||||||
<коэффициент> - число на каоторое домнажается траффик. Обязательный параметр.
|
<коэффициент> - число на каоторое домнажается траффик. Обязательный параметр.
|
||||||
Должен быть от больше 0 и меньше 100
|
Должен быть от больше 0 и меньше 100
|
||||||
|
|
||||||
ДЛЯ РЕЖИМА С УЧЁТОМ РАЗМЕРА ЗАГОЛОВКОВ ПАКЕТОВ:
|
ДЛЯ РЕЖИМА С УЧЁТОМ РАЗМЕРА ЗАГОЛОВКОВ ПАКЕТОВ:
|
||||||
trafcorrect p <сервис> <tcp/udp> <исходящий порт> [размер пустого пакета]
|
trafcorrect p <сервис> <tcp/udp> <исходящий порт> [размер пустого пакета]
|
||||||
<tcp/udp> - протокол, по которому осуществляется соединение.
|
<tcp/udp> - протокол, по которому осуществляется соединение.
|
||||||
[размер пакета] - средний размер пустого пакета. Можно определить захватив
|
[размер пакета] - средний размер пустого пакета. Можно определить захватив
|
||||||
данные при помощи такой утилиты как Ethernal. Параметр необязателен. Если отсутствует,
|
данные при помощи такой утилиты как Ethernal. Параметр необязателен. Если отсутствует,
|
||||||
то размер пакета будет считаться равным 66 байт.
|
то размер пакета будет считаться равным 66 байт.
|
||||||
|
|
||||||
Режимы можно смешивать.
|
Режимы можно смешивать.
|
||||||
Следует учитывать, что плугин создаёт список всех правил изменения траффика.
|
Следует учитывать, что плугин создаёт список всех правил изменения траффика.
|
||||||
Когда происходит окончание соединения выполняется первое подходящее правило.
|
Когда происходит окончание соединения выполняется первое подходящее правило.
|
||||||
|
|
||||||
Пример:
|
Пример:
|
||||||
plugin "TrafficPlugin.dll" start
|
plugin "TrafficPlugin.dll" start
|
||||||
trafcorrect m socks5 6112 4.5
|
trafcorrect m socks5 6112 4.5
|
||||||
trafcorrect m socks5 * 1.1
|
trafcorrect m socks5 * 1.1
|
||||||
|
|
||||||
следующее неверно:
|
следующее неверно:
|
||||||
plugin "TrafficPlugin.dll" start
|
plugin "TrafficPlugin.dll" start
|
||||||
trafcorrect m socks5 * 1.1
|
trafcorrect m socks5 * 1.1
|
||||||
trafcorrect m socks5 6112 4.5
|
trafcorrect m socks5 6112 4.5
|
||||||
Вторая строчка выполнена никогда не будет. Так как 1 имеет более широкое назначение.
|
Вторая строчка выполнена никогда не будет. Так как 1 имеет более широкое назначение.
|
||||||
|
|
||||||
РЕЖИМ ОТЛАДКИ ПРАВИЛ:
|
РЕЖИМ ОТЛАДКИ ПРАВИЛ:
|
||||||
1. Запускает прокси в оконном режиме (чтобы видеть stdout).
|
1. Запускает прокси в оконном режиме (чтобы видеть stdout).
|
||||||
2. Загрузка плагина должна выглядеть сл. образом:
|
2. Загрузка плагина должна выглядеть сл. образом:
|
||||||
plugin "TrafficPlugin.dll" start debug
|
plugin "TrafficPlugin.dll" start debug
|
||||||
3. В окне прокси сервера будет написана информация о прохождении правил коррекции траффика.
|
3. В окне прокси сервера будет написана информация о прохождении правил коррекции траффика.
|
||||||
Правила нумеруются с 1.
|
Правила нумеруются с 1.
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|||||||
@ -1,16 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
3proxy Traffic correct plugin v0.1 beta
|
3proxy Traffic correct plugin v0.1 beta
|
||||||
|
|
||||||
Написал Maslov Michael aka Flexx(rus)
|
Написал Maslov Michael aka Flexx(rus)
|
||||||
Формула расчёта траффика по размеру пакета by 3APA3A
|
Формула расчёта траффика по размеру пакета by 3APA3A
|
||||||
email: flexx_rus@mail.ru
|
email: flexx_rus@mail.ru
|
||||||
ICQ: 299132764
|
ICQ: 299132764
|
||||||
http://3proxy.ru/
|
http://3proxy.ru/
|
||||||
|
|
||||||
Как работает не знаю (многое зависит от ваших настроек). Никаких гарантий.
|
Как работает не знаю (многое зависит от ваших настроек). Никаких гарантий.
|
||||||
С плугином можете делать всё, что захочется.
|
С плугином можете делать всё, что захочется.
|
||||||
Дожен распростроняться только с исходными кодами или вместе с 3proxy.
|
Дожен распростроняться только с исходными кодами или вместе с 3proxy.
|
||||||
Удалять данный Copyright запрещено.
|
Удалять данный Copyright запрещено.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../../structures.h"
|
#include "../../structures.h"
|
||||||
@ -33,8 +33,8 @@ struct commands * commandhandlers;
|
|||||||
struct pluginlink * pl;
|
struct pluginlink * pl;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MULTIPLAY, /* метод коррекции умножением на коффициент */
|
MULTIPLAY, /* метод коррекции умножением на коффициент */
|
||||||
IPCORRECT, /* метод коррекции с учётом размера пакета */
|
IPCORRECT, /* метод коррекции с учётом размера пакета */
|
||||||
} TRAFCORRECT_TYPE;
|
} TRAFCORRECT_TYPE;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -84,7 +84,7 @@ int h_trafcorrect(int argc, unsigned char ** argv) {
|
|||||||
if(DBGLEVEL == 1)fprintf(stdout, "See documentation of traffic correct plugin.\n");
|
if(DBGLEVEL == 1)fprintf(stdout, "See documentation of traffic correct plugin.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* режим умножения траффика на коэффициент */
|
/* режим умножения траффика на коэффициент */
|
||||||
if (!strcmp((char *)argv[1], "m")) {
|
if (!strcmp((char *)argv[1], "m")) {
|
||||||
struct trafcorrect * newitem;
|
struct trafcorrect * newitem;
|
||||||
if (argc < 5) {
|
if (argc < 5) {
|
||||||
@ -110,7 +110,7 @@ int h_trafcorrect(int argc, unsigned char ** argv) {
|
|||||||
|
|
||||||
newitem->port = atoi((char *)argv[3]);
|
newitem->port = atoi((char *)argv[3]);
|
||||||
newitem->coeff = atof((char *)argv[4]);
|
newitem->coeff = atof((char *)argv[4]);
|
||||||
/* проверка на корректность ввода */
|
/* проверка на корректность ввода */
|
||||||
if ((newitem->port>65535) || (newitem->coeff<=0) || (newitem->coeff>100)) {
|
if ((newitem->port>65535) || (newitem->coeff<=0) || (newitem->coeff>100)) {
|
||||||
free(newitem);
|
free(newitem);
|
||||||
if(DBGLEVEL == 1)fprintf(stdout, "Port must be 0<p<65535 and coefficient must be 0<c<100.\n");
|
if(DBGLEVEL == 1)fprintf(stdout, "Port must be 0<p<65535 and coefficient must be 0<c<100.\n");
|
||||||
@ -119,7 +119,7 @@ int h_trafcorrect(int argc, unsigned char ** argv) {
|
|||||||
addtrafcorrect(newitem);
|
addtrafcorrect(newitem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* режим учёта входящих и исходящих пакетов */
|
/* режим учёта входящих и исходящих пакетов */
|
||||||
if (!strcmp((char *)argv[1], "p")) {
|
if (!strcmp((char *)argv[1], "p")) {
|
||||||
struct trafcorrect * newitem;
|
struct trafcorrect * newitem;
|
||||||
if (argc < 5) {
|
if (argc < 5) {
|
||||||
@ -152,7 +152,7 @@ int h_trafcorrect(int argc, unsigned char ** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
newitem->port = atoi((char *)argv[4]);
|
newitem->port = atoi((char *)argv[4]);
|
||||||
/* последний необязательный параметр - размер пакета */
|
/* последний необязательный параметр - размер пакета */
|
||||||
if (argc >= 6) {
|
if (argc >= 6) {
|
||||||
newitem->psize = atoi((char *)argv[5]);
|
newitem->psize = atoi((char *)argv[5]);
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ int h_trafcorrect(int argc, unsigned char ** argv) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned short myhtons(unsigned short port) {
|
static uint16_t myhtons(uint16_t port) {
|
||||||
return (port << 8) | (port >> 8);
|
return (port << 8) | (port >> 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,8 +207,8 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) {
|
|||||||
(param->operation == ICMPASSOC))
|
(param->operation == ICMPASSOC))
|
||||||
)||(starttrafcorrect->con_type == TCP))) /* TCP support */
|
)||(starttrafcorrect->con_type == TCP))) /* TCP support */
|
||||||
{
|
{
|
||||||
/* фильтр подошёл. можно изменять значение траффика
|
/* фильтр подошёл. можно изменять значение траффика
|
||||||
домножаем на число */
|
домножаем на число */
|
||||||
if (starttrafcorrect->type == MULTIPLAY) {
|
if (starttrafcorrect->type == MULTIPLAY) {
|
||||||
#ifndef NOPSTDINT
|
#ifndef NOPSTDINT
|
||||||
param->statssrv64 = (unsigned)((double)param->statssrv64 *starttrafcorrect->coeff);
|
param->statssrv64 = (unsigned)((double)param->statssrv64 *starttrafcorrect->coeff);
|
||||||
@ -218,7 +218,7 @@ void mylogfunc(struct clientparam * param, const unsigned char * pz) {
|
|||||||
param->statscli = (unsigned)((double)param->statscli * starttrafcorrect->coeff);
|
param->statscli = (unsigned)((double)param->statscli * starttrafcorrect->coeff);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/* с учётом пакетов */
|
/* с учётом пакетов */
|
||||||
if (starttrafcorrect->type == IPCORRECT) {
|
if (starttrafcorrect->type == IPCORRECT) {
|
||||||
if (starttrafcorrect->con_type == TCP) {
|
if (starttrafcorrect->con_type == TCP) {
|
||||||
#ifndef NOPSTDINT
|
#ifndef NOPSTDINT
|
||||||
@ -294,7 +294,7 @@ PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, char**
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
already_loaded = 1;
|
already_loaded = 1;
|
||||||
/* добавляем команду "trafcorrect" */
|
/* добавляем команду "trafcorrect" */
|
||||||
starthandler = commandhandlers;
|
starthandler = commandhandlers;
|
||||||
for ( ; starthandler->next; starthandler = starthandler->next);
|
for ( ; starthandler->next; starthandler = starthandler->next);
|
||||||
trafcorrect_handler.next = NULL;
|
trafcorrect_handler.next = NULL;
|
||||||
@ -304,7 +304,7 @@ PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink, int argc, char**
|
|||||||
trafcorrect_handler.handler = h_trafcorrect;
|
trafcorrect_handler.handler = h_trafcorrect;
|
||||||
starthandler->next = &trafcorrect_handler;
|
starthandler->next = &trafcorrect_handler;
|
||||||
|
|
||||||
/* подменяем conf->logfunc, с целью контролировать траффик */
|
/* подменяем conf->logfunc, с целью контролировать траффик */
|
||||||
origlogfunc = conf->logfunc;
|
origlogfunc = conf->logfunc;
|
||||||
conf->logfunc = mylogfunc;
|
conf->logfunc = mylogfunc;
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -337,10 +337,10 @@ for(;;){
|
|||||||
if(su) {
|
if(su) {
|
||||||
su = (unsigned char *)mystrdup((char *)sb);
|
su = (unsigned char *)mystrdup((char *)sb);
|
||||||
decodeurl(su, 0);
|
decodeurl(su, 0);
|
||||||
if(parseconnusername((char *)su, (struct clientparam *)param, 1, (unsigned short)((ftp)?21:80))) RETURN (100);
|
if(parseconnusername((char *)su, (struct clientparam *)param, 1, (uint16_t)((ftp)?21:80))) RETURN (100);
|
||||||
myfree(su);
|
myfree(su);
|
||||||
}
|
}
|
||||||
else if(parsehostname((char *)sb, (struct clientparam *)param, (unsigned short)((ftp)? 21:80))) RETURN(100);
|
else if(parsehostname((char *)sb, (struct clientparam *)param, (uint16_t)((ftp)? 21:80))) RETURN(100);
|
||||||
if(!isconnect){
|
if(!isconnect){
|
||||||
if(se==sg)*se-- = ' ';
|
if(se==sg)*se-- = ' ';
|
||||||
*se = '/';
|
*se = '/';
|
||||||
|
|||||||
16
src/proxy.h
16
src/proxy.h
@ -195,15 +195,15 @@ void trafcountfunc(struct clientparam *param);
|
|||||||
unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nbytesout);
|
unsigned bandlimitfunc(struct clientparam *param, unsigned nbytesin, unsigned nbytesout);
|
||||||
int handleredirect(struct clientparam * param, struct ace * acentry);
|
int handleredirect(struct clientparam * param, struct ace * acentry);
|
||||||
|
|
||||||
int scanaddr(const unsigned char *s, unsigned long * ip, unsigned long * mask);
|
int scanaddr(const unsigned char *s, uint32_t * ip, uint32_t * mask);
|
||||||
int myinet_ntop(int af, void *src, char *dst, socklen_t size);
|
int myinet_ntop(int af, void *src, char *dst, socklen_t size);
|
||||||
extern struct nserver nservers[MAXNSERVERS];
|
extern struct nserver nservers[MAXNSERVERS];
|
||||||
extern struct nserver authnserver;
|
extern struct nserver authnserver;
|
||||||
unsigned long getip(unsigned char *name);
|
uint32_t getip(unsigned char *name);
|
||||||
unsigned long getip46(int family, unsigned char *name, struct sockaddr *sa);
|
uint32_t getip46(int family, unsigned char *name, struct sockaddr *sa);
|
||||||
int afdetect(unsigned char *name);
|
int afdetect(unsigned char *name);
|
||||||
unsigned long myresolver(int, unsigned char *, unsigned char *);
|
uint32_t myresolver(int, unsigned char *, unsigned char *);
|
||||||
unsigned long fakeresolver (int, unsigned char *, unsigned char*);
|
uint32_t fakeresolver (int, unsigned char *, unsigned char*);
|
||||||
int inithashtable(struct hashtable *hashtable, unsigned nhashsize);
|
int inithashtable(struct hashtable *hashtable, unsigned nhashsize);
|
||||||
void freeparam(struct clientparam * param);
|
void freeparam(struct clientparam * param);
|
||||||
void clearstat(struct clientparam * param);
|
void clearstat(struct clientparam * param);
|
||||||
@ -248,13 +248,13 @@ struct hashtable;
|
|||||||
void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires);
|
void hashadd(struct hashtable *ht, const unsigned char* name, unsigned char* value, time_t expires);
|
||||||
|
|
||||||
int parsehost(int family, unsigned char *host, struct sockaddr *sa);
|
int parsehost(int family, unsigned char *host, struct sockaddr *sa);
|
||||||
int parsehostname(char *hostname, struct clientparam *param, unsigned short port);
|
int parsehostname(char *hostname, struct clientparam *param, uint16_t port);
|
||||||
int parseusername(char *username, struct clientparam *param, int extpasswd);
|
int parseusername(char *username, struct clientparam *param, int extpasswd);
|
||||||
int parseconnusername(char *username, struct clientparam *param, int extpasswd, unsigned short port);
|
int parseconnusername(char *username, struct clientparam *param, int extpasswd, uint16_t port);
|
||||||
int ACLmatches(struct ace* acentry, struct clientparam * param);
|
int ACLmatches(struct ace* acentry, struct clientparam * param);
|
||||||
int checkACL(struct clientparam * param);
|
int checkACL(struct clientparam * param);
|
||||||
extern int havelog;
|
extern int havelog;
|
||||||
unsigned long udpresolve(int af, unsigned char * name, unsigned char * value, unsigned *retttl, struct clientparam* param, int makeauth);
|
uint32_t udpresolve(int af, unsigned char * name, unsigned char * value, uint32_t *retttl, struct clientparam* param, int makeauth);
|
||||||
|
|
||||||
struct ace * copyacl (struct ace *ac);
|
struct ace * copyacl (struct ace *ac);
|
||||||
struct auth * copyauth (struct auth *);
|
struct auth * copyauth (struct auth *);
|
||||||
|
|||||||
@ -573,7 +573,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
else {
|
else {
|
||||||
#endif
|
#endif
|
||||||
#ifndef NOPORTMAP
|
#ifndef NOPORTMAP
|
||||||
if (error || argc != i+3 || *argv[i]=='-'|| (*SAPORT(&srv.intsa) = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) {
|
if (error || argc != i+3 || *argv[i]=='-'|| (*SAPORT(&srv.intsa) = htons((uint16_t)atoi(argv[i])))==0 || (srv.targetport = htons((uint16_t)atoi(argv[i+2])))==0) {
|
||||||
#ifndef STDMAIN
|
#ifndef STDMAIN
|
||||||
haveerror = 1;
|
haveerror = 1;
|
||||||
pushthreadinit();
|
pushthreadinit();
|
||||||
|
|||||||
@ -37,7 +37,7 @@ void * sockschild(struct clientparam* param) {
|
|||||||
SOCKET s;
|
SOCKET s;
|
||||||
unsigned size;
|
unsigned size;
|
||||||
SASIZETYPE sasize;
|
SASIZETYPE sasize;
|
||||||
unsigned short port = 0;
|
uint16_t port = 0;
|
||||||
unsigned char * buf=NULL;
|
unsigned char * buf=NULL;
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
unsigned char command=0;
|
unsigned char command=0;
|
||||||
@ -102,7 +102,7 @@ void * sockschild(struct clientparam* param) {
|
|||||||
buf[0] = (unsigned char) res;
|
buf[0] = (unsigned char) res;
|
||||||
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
||||||
buf[1] = (unsigned char) res;
|
buf[1] = (unsigned char) res;
|
||||||
port = *(unsigned short*)buf;
|
port = *(uint16_t*)buf;
|
||||||
c = 1;
|
c = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ void * sockschild(struct clientparam* param) {
|
|||||||
buf[0] = (unsigned char) res;
|
buf[0] = (unsigned char) res;
|
||||||
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
if ((res = sockgetcharcli(param, conf.timeouts[SINGLEBYTE_S], 0)) == EOF) {RETURN(441);}
|
||||||
buf[1] = (unsigned char) res;
|
buf[1] = (unsigned char) res;
|
||||||
port = *(unsigned short*)buf;
|
port = *(uint16_t*)buf;
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@ -198,7 +198,7 @@ struct srvparam;
|
|||||||
typedef void (*LOGFUNC)(struct clientparam * param, const unsigned char *);
|
typedef void (*LOGFUNC)(struct clientparam * param, const unsigned char *);
|
||||||
typedef int (*AUTHFUNC)(struct clientparam * param);
|
typedef int (*AUTHFUNC)(struct clientparam * param);
|
||||||
typedef void * (*REDIRECTFUNC)(struct clientparam * param);
|
typedef void * (*REDIRECTFUNC)(struct clientparam * param);
|
||||||
typedef unsigned long (*RESOLVFUNC)(int af, unsigned char *name, unsigned char *value);
|
typedef uint32_t (*RESOLVFUNC)(int af, unsigned char *name, unsigned char *value);
|
||||||
typedef unsigned (*BANDLIMFUNC)(struct clientparam * param, unsigned nbytesin, unsigned nbytesout);
|
typedef unsigned (*BANDLIMFUNC)(struct clientparam * param, unsigned nbytesin, unsigned nbytesout);
|
||||||
typedef void (*TRAFCOUNTFUNC)(struct clientparam * param);
|
typedef void (*TRAFCOUNTFUNC)(struct clientparam * param);
|
||||||
typedef void * (*EXTENDFUNC) (struct node *node);
|
typedef void * (*EXTENDFUNC) (struct node *node);
|
||||||
@ -241,8 +241,8 @@ struct iplist {
|
|||||||
|
|
||||||
struct portlist {
|
struct portlist {
|
||||||
struct portlist * next;
|
struct portlist * next;
|
||||||
unsigned short startport;
|
uint16_t startport;
|
||||||
unsigned short endport;
|
uint16_t endport;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct userlist {
|
struct userlist {
|
||||||
@ -536,7 +536,7 @@ struct srvparam {
|
|||||||
unsigned char * logformat;
|
unsigned char * logformat;
|
||||||
unsigned char * logtarget;
|
unsigned char * logtarget;
|
||||||
unsigned char * nonprintable;
|
unsigned char * nonprintable;
|
||||||
unsigned short targetport;
|
uint16_t targetport;
|
||||||
unsigned char replace;
|
unsigned char replace;
|
||||||
time_t time_start;
|
time_t time_start;
|
||||||
};
|
};
|
||||||
@ -732,7 +732,7 @@ struct symbol {
|
|||||||
|
|
||||||
struct proxydef {
|
struct proxydef {
|
||||||
PROXYFUNC pf;
|
PROXYFUNC pf;
|
||||||
unsigned short port;
|
uint16_t port;
|
||||||
int isudp;
|
int isudp;
|
||||||
int service;
|
int service;
|
||||||
char * helpmessage;
|
char * helpmessage;
|
||||||
@ -780,8 +780,8 @@ struct pluginlink {
|
|||||||
int (*myinet_ntop)(int af, void *src, char *dst, socklen_t size);
|
int (*myinet_ntop)(int af, void *src, char *dst, socklen_t size);
|
||||||
int (*dobuf)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec);
|
int (*dobuf)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec);
|
||||||
int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format);
|
int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format);
|
||||||
int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask);
|
int (*scanaddr)(const unsigned char *s, uint32_t * ip, uint32_t * mask);
|
||||||
unsigned long (*getip46)(int family, unsigned char *name, struct sockaddr *sa);
|
uint32_t (*getip46)(int family, unsigned char *name, struct sockaddr *sa);
|
||||||
int (*sockmap)(struct clientparam * param, int timeo, int usesplice);
|
int (*sockmap)(struct clientparam * param, int timeo, int usesplice);
|
||||||
int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
|
int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
|
||||||
int (*alwaysauth)(struct clientparam * param);
|
int (*alwaysauth)(struct clientparam * param);
|
||||||
@ -807,9 +807,9 @@ struct pluginlink {
|
|||||||
struct proxydef * childdef;
|
struct proxydef * childdef;
|
||||||
int (*start_proxy_thread)(struct child * chp);
|
int (*start_proxy_thread)(struct child * chp);
|
||||||
void (*freeparam)(struct clientparam * param);
|
void (*freeparam)(struct clientparam * param);
|
||||||
int (*parsehostname)(char *hostname, struct clientparam *param, unsigned short port);
|
int (*parsehostname)(char *hostname, struct clientparam *param, uint16_t port);
|
||||||
int (*parseusername)(char *username, struct clientparam *param, int extpasswd);
|
int (*parseusername)(char *username, struct clientparam *param, int extpasswd);
|
||||||
int (*parseconnusername)(char *username, struct clientparam *param, int extpasswd, unsigned short port);
|
int (*parseconnusername)(char *username, struct clientparam *param, int extpasswd, uint16_t port);
|
||||||
struct sockfuncs *so;
|
struct sockfuncs *so;
|
||||||
unsigned char * (*dologname) (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t);
|
unsigned char * (*dologname) (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t);
|
||||||
};
|
};
|
||||||
|
|||||||
11
src/udppm.c
11
src/udppm.c
@ -17,16 +17,6 @@
|
|||||||
#define RETURN(xxx) { param->res = xxx; goto CLEANRET; }
|
#define RETURN(xxx) { param->res = xxx; goto CLEANRET; }
|
||||||
|
|
||||||
|
|
||||||
struct udpmap {
|
|
||||||
struct udpmap *next;
|
|
||||||
time_t updated;
|
|
||||||
SOCKET s;
|
|
||||||
int single;
|
|
||||||
unsigned long cliip;
|
|
||||||
unsigned short cliport;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void * udppmchild(struct clientparam* param) {
|
void * udppmchild(struct clientparam* param) {
|
||||||
unsigned char *buf = NULL;
|
unsigned char *buf = NULL;
|
||||||
int res, i;
|
int res, i;
|
||||||
@ -34,7 +24,6 @@ void * udppmchild(struct clientparam* param) {
|
|||||||
SASIZETYPE size;
|
SASIZETYPE size;
|
||||||
unsigned long ul = 1;
|
unsigned long ul = 1;
|
||||||
#endif
|
#endif
|
||||||
struct udpmap *udpmappings = NULL;
|
|
||||||
struct pollfd fds[256];
|
struct pollfd fds[256];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user