structures.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. #ifndef _STRUCTURES_H_
  2. #define _STRUCTURES_H_
  3. #include <time.h>
  4. #include <stdio.h>
  5. #include <fcntl.h>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8. #ifndef NOPSTDINT
  9. #include "pstdint.h"
  10. #else
  11. typedef unsigned long uint64_t
  12. #define PRINTF_INT64_MODIFIER "l"
  13. #endif
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. #ifndef _WIN32
  18. #include <sys/socket.h>
  19. #include <netinet/in.h>
  20. #include <arpa/inet.h>
  21. #include <netdb.h>
  22. #include <pthread.h>
  23. #define SASIZETYPE socklen_t
  24. #define SOCKET int
  25. #define INVALID_SOCKET (-1)
  26. #else
  27. #include <winsock2.h>
  28. #include <Ws2tcpip.h>
  29. #define pthread_mutex_t CRITICAL_SECTION
  30. #define pthread_mutex_init(x, y) InitializeCriticalSection(x)
  31. #define pthread_mutex_lock(x) EnterCriticalSection(x)
  32. #define pthread_mutex_unlock(x) LeaveCriticalSection(x)
  33. #define pthread_mutex_destroy(x) DeleteCriticalSection(x)
  34. #ifdef MSVC
  35. #pragma warning (disable : 4996)
  36. #endif
  37. #endif
  38. #define MAXBANDLIMS 10
  39. #ifdef WITH_POLL
  40. #include <poll.h>
  41. #else
  42. struct mypollfd {
  43. SOCKET fd; /* file descriptor */
  44. short events; /* events to look for */
  45. short revents; /* events returned */
  46. };
  47. #define pollfd mypollfd
  48. int
  49. #ifdef _WIN32
  50. WINAPI
  51. #endif
  52. mypoll(struct mypollfd *fds, unsigned int nfds, int timeout);
  53. #ifndef POLLIN
  54. #define POLLIN 1
  55. #endif
  56. #ifndef POLLOUT
  57. #define POLLOUT 2
  58. #endif
  59. #ifndef POLLPRI
  60. #define POLLPRI 4
  61. #endif
  62. #ifndef POLLERR
  63. #define POLLERR 8
  64. #endif
  65. #ifndef POLLHUP
  66. #define POLLHUP 16
  67. #endif
  68. #ifndef POLLNVAL
  69. #define POLLNVAL 32
  70. #endif
  71. #endif
  72. #define CONNECT 0x00000001
  73. #define BIND 0x00000002
  74. #define UDPASSOC 0x00000004
  75. #define ICMPASSOC 0x00000008 /* reserved */
  76. #define HTTP_GET 0x00000100
  77. #define HTTP_PUT 0x00000200
  78. #define HTTP_POST 0x00000400
  79. #define HTTP_HEAD 0x00000800
  80. #define HTTP_CONNECT 0x00001000
  81. #define HTTP_OTHER 0x00008000
  82. #define HTTP 0x0000EF00 /* all except HTTP_CONNECT */
  83. #define HTTPS HTTP_CONNECT
  84. #define FTP_GET 0x00010000
  85. #define FTP_PUT 0x00020000
  86. #define FTP_LIST 0x00040000
  87. #define FTP_DATA 0x00080000
  88. #define FTP 0x000F0000
  89. #define DNSRESOLVE 0x00100000
  90. #define IM_ICQ 0x00200000
  91. #define IM_MSN 0x00400000
  92. #define ADMIN 0x01000000
  93. #define SAFAMILY(sa) (&(((struct sockaddr_in *)sa)->sin_family))
  94. #ifndef NOIPV6
  95. #define SAPORT(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? &((struct sockaddr_in6 *)sa)->sin6_port : &((struct sockaddr_in *)sa)->sin_port)
  96. #define SAADDR(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
  97. #define SAADDRLEN(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)
  98. #define SASOCK(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? PF_INET6:PF_INET)
  99. #define SASIZE(sa) (((struct sockaddr_in *)sa)->sin_family == AF_INET6? sizeof(struct sockaddr_in6):sizeof(struct sockaddr_in))
  100. #define SAISNULL(sa) (!memcmp(((struct sockaddr_in *)sa)->sin_family == AF_INET6? (unsigned char *)&((struct sockaddr_in6 *)sa)->sin6_addr : (unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr, NULLADDR, (((struct sockaddr_in *)sa)->sin_family == AF_INET6? 16:4)))
  101. #else
  102. #define SAPORT(sa) (&((struct sockaddr_in *)sa)->sin_port)
  103. #define SAADDR(sa) ((unsigned char *)&((struct sockaddr_in *)sa)->sin_addr.s_addr)
  104. #define SAADDRLEN(sa) (4)
  105. #define SASOCK(sa) (PF_INET)
  106. #define SASIZE(sa) (sizeof(struct sockaddr_in))
  107. #define SAISNULL(sa) (((struct sockaddr_in *)sa)->sin_addr.s_addr == 0)
  108. #endif
  109. extern char* NULLADDR;
  110. typedef enum {
  111. CLIENT,
  112. SERVER
  113. } DIRECTION;
  114. typedef enum {
  115. S_NOSERVICE,
  116. S_PROXY,
  117. S_TCPPM,
  118. S_POP3P,
  119. S_SOCKS4 = 4, /* =4 */
  120. S_SOCKS5 = 5, /* =5 */
  121. S_UDPPM,
  122. S_SOCKS,
  123. S_SOCKS45,
  124. S_ADMIN,
  125. S_DNSPR,
  126. S_FTPPR,
  127. S_SMTPP,
  128. S_ICQPR,
  129. S_REVLI,
  130. S_REVCO,
  131. /*
  132. S_MSNPR,
  133. */
  134. S_ZOMBIE
  135. }PROXYSERVICE;
  136. struct clientparam;
  137. struct node;
  138. struct symbol;
  139. struct pluginlink;
  140. struct srvparam;
  141. typedef void (*LOGFUNC)(struct clientparam * param, const unsigned char *);
  142. typedef int (*AUTHFUNC)(struct clientparam * param);
  143. typedef void * (*REDIRECTFUNC)(struct clientparam * param);
  144. typedef unsigned long (*RESOLVFUNC)(int af, unsigned char *name, unsigned char *value);
  145. typedef unsigned (*BANDLIMFUNC)(struct clientparam * param, unsigned nbytesin, unsigned nbytesout);
  146. typedef void (*TRAFCOUNTFUNC)(struct clientparam * param);
  147. typedef void * (*EXTENDFUNC) (struct node *node);
  148. typedef void (*CBFUNC)(void *cb, char * buf, int inbuf);
  149. typedef void (*PRINTFUNC) (struct node *node, CBFUNC cbf, void*cb);
  150. typedef int (*PLUGINFUNC) (struct pluginlink *pluginlink, int argc, char** argv);
  151. struct auth {
  152. struct auth *next;
  153. AUTHFUNC authenticate;
  154. AUTHFUNC authorize;
  155. char * desc;
  156. };
  157. struct iplist {
  158. struct iplist *next;
  159. int family;
  160. #ifndef NOIPV6
  161. struct in6_addr ip_from;
  162. struct in6_addr ip_to;
  163. #else
  164. struct in_addr ip_from;
  165. struct in_addr ip_to;
  166. #endif
  167. };
  168. struct portlist {
  169. struct portlist * next;
  170. unsigned short startport;
  171. unsigned short endport;
  172. };
  173. struct userlist {
  174. struct userlist * next;
  175. unsigned char * user;
  176. };
  177. typedef enum {
  178. SYS,
  179. CL,
  180. CR,
  181. NT,
  182. LM,
  183. UN
  184. }PWTYPE;
  185. struct passwords {
  186. struct passwords *next;
  187. unsigned char * user;
  188. unsigned char * password;
  189. int pwtype;
  190. };
  191. typedef enum {
  192. R_TCP,
  193. R_CONNECT,
  194. R_SOCKS4,
  195. R_SOCKS5,
  196. R_HTTP,
  197. R_POP3,
  198. R_FTP,
  199. R_CONNECTP,
  200. R_SOCKS4P,
  201. R_SOCKS5P,
  202. R_SOCKS4B,
  203. R_SOCKS5B,
  204. R_ADMIN,
  205. R_ICQ,
  206. R_MSN
  207. } REDIRTYPE;
  208. struct chain {
  209. struct chain * next;
  210. int type;
  211. #ifndef NOIPV6
  212. struct sockaddr_in6 addr;
  213. #else
  214. struct sockaddr_in addr;
  215. #endif
  216. unsigned short weight;
  217. unsigned char * extuser;
  218. unsigned char * extpass;
  219. };
  220. struct period {
  221. struct period *next;
  222. int fromtime;
  223. int totime;
  224. };
  225. #define MATCHBEGIN 1
  226. #define MATCHEND 2
  227. struct hostname {
  228. struct hostname *next;
  229. unsigned char * name;
  230. int matchtype;
  231. };
  232. struct ace {
  233. struct ace *next;
  234. int action;
  235. int operation;
  236. int wdays;
  237. int weight;
  238. int nolog;
  239. struct period *periods;
  240. struct userlist *users;
  241. struct iplist *src, *dst;
  242. struct hostname *dstnames;
  243. struct portlist *ports;
  244. struct chain *chains;
  245. };
  246. struct bandlim {
  247. struct bandlim *next;
  248. struct ace *ace;
  249. unsigned basetime;
  250. unsigned rate;
  251. unsigned nexttime;
  252. };
  253. typedef enum {NONE, MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, ANNUALLY, NEVER} ROTATION;
  254. struct schedule {
  255. struct schedule *next;
  256. ROTATION type;
  257. void *data;
  258. int (*function)(void *);
  259. time_t start_time;
  260. };
  261. struct trafcount {
  262. struct trafcount *next;
  263. struct ace *ace;
  264. unsigned number;
  265. ROTATION type;
  266. uint64_t traf64;
  267. uint64_t traflim64;
  268. char * comment;
  269. int disabled;
  270. time_t cleared;
  271. time_t updated;
  272. };
  273. struct nserver {
  274. #ifndef NOIPV6
  275. struct sockaddr_in6 addr;
  276. #else
  277. struct sockaddr_in addr;
  278. #endif
  279. int usetcp;
  280. };
  281. extern int numservers;
  282. typedef void * (* PROXYFUNC)(struct clientparam *);
  283. typedef enum {
  284. PASS,
  285. CONTINUE,
  286. HANDLED,
  287. REJECT,
  288. REMOVE
  289. } FILTER_ACTION;
  290. typedef void* FILTER_OPEN(void * idata, struct srvparam * param);
  291. typedef FILTER_ACTION FILTER_CLIENT(void *fo, struct clientparam * param, void** fc);
  292. typedef FILTER_ACTION FILTER_PREDATA(void *fc, struct clientparam * param);
  293. typedef FILTER_ACTION FILTER_BUFFER(void *fc, struct clientparam * param, unsigned char ** buf_p, int * bufsize_p, int offset, int * length_p);
  294. typedef void FILTER_CLOSE(void *fo);
  295. struct filter {
  296. struct filter * next;
  297. char * instance;
  298. void * data;
  299. FILTER_OPEN *filter_open;
  300. FILTER_CLIENT *filter_client;
  301. FILTER_BUFFER *filter_request;
  302. FILTER_BUFFER *filter_header_cli;
  303. FILTER_BUFFER *filter_header_srv;
  304. FILTER_PREDATA *filter_predata;
  305. FILTER_BUFFER *filter_data_cli;
  306. FILTER_BUFFER *filter_data_srv;
  307. FILTER_CLOSE *filter_clear;
  308. FILTER_CLOSE *filter_close;
  309. };
  310. struct filterp {
  311. struct filter *filter;
  312. void *data;
  313. };
  314. #define MAX_FILTERS 16
  315. struct srvparam {
  316. struct srvparam *next;
  317. struct srvparam *prev;
  318. struct clientparam *child;
  319. PROXYSERVICE service;
  320. LOGFUNC logfunc;
  321. AUTHFUNC authfunc;
  322. PROXYFUNC pf;
  323. SOCKET srvsock, cbsock;
  324. int childcount;
  325. int maxchild;
  326. int version;
  327. int singlepacket;
  328. int usentlm;
  329. int needuser;
  330. int silent;
  331. int transparent;
  332. int nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv;
  333. int family;
  334. unsigned bufsize;
  335. unsigned logdumpsrv, logdumpcli;
  336. #ifndef NOIPV6
  337. struct sockaddr_in6 intsa;
  338. struct sockaddr_in6 extsa6;
  339. struct sockaddr_in6 extsa;
  340. #else
  341. struct sockaddr_in intsa;
  342. struct sockaddr_in extsa;
  343. #endif
  344. pthread_mutex_t counter_mutex;
  345. struct pollfd fds;
  346. FILE *stdlog;
  347. unsigned char * target;
  348. struct auth *authenticate;
  349. struct pollfd * srvfds;
  350. struct ace *acl;
  351. struct auth *authfuncs;
  352. struct filter *filter;
  353. unsigned char * logformat;
  354. unsigned char * logtarget;
  355. unsigned char * nonprintable;
  356. unsigned short targetport;
  357. unsigned char replace;
  358. time_t time_start;
  359. };
  360. struct clientparam {
  361. struct clientparam *next,
  362. *prev;
  363. struct srvparam *srv;
  364. REDIRECTFUNC redirectfunc;
  365. BANDLIMFUNC bandlimfunc;
  366. TRAFCOUNTFUNC trafcountfunc;
  367. struct filterp *filters,
  368. **reqfilters,
  369. **hdrfilterscli, **hdrfilterssrv,
  370. **predatfilters, **datfilterscli, **datfilterssrv;
  371. PROXYSERVICE service;
  372. SOCKET clisock,
  373. remsock,
  374. ctrlsock,
  375. ctrlsocksrv;
  376. REDIRTYPE redirtype;
  377. int redirected,
  378. operation,
  379. nfilters, nreqfilters, nhdrfilterscli, nhdrfilterssrv, npredatfilters, ndatfilterscli, ndatfilterssrv,
  380. unsafefilter;
  381. int res,
  382. status;
  383. uint64_t waitclient64,
  384. waitserver64;
  385. int pwtype,
  386. threadid,
  387. weight,
  388. nolog,
  389. nolongdatfilter,
  390. nooverwritefilter,
  391. transparent,
  392. chunked;
  393. unsigned char *hostname,
  394. *username,
  395. *password,
  396. *extusername,
  397. *extpassword,
  398. *clibuf,
  399. *srvbuf;
  400. unsigned cliinbuf,
  401. srvinbuf,
  402. clioffset,
  403. srvoffset,
  404. clibufsize,
  405. srvbufsize,
  406. msec_start;
  407. uint64_t
  408. maxtrafin64,
  409. maxtrafout64;
  410. #ifndef NOIPV6
  411. struct sockaddr_in6 sincl, sincr, sinsl, sinsr, req;
  412. #else
  413. struct sockaddr_in sincl, sincr, sinsl, sinsr, req;
  414. #endif
  415. uint64_t statscli64,
  416. statssrv64;
  417. unsigned long
  418. nreads,
  419. nwrites,
  420. nconnects;
  421. struct bandlim *bandlims[MAXBANDLIMS],
  422. *bandlimsout[MAXBANDLIMS];
  423. time_t time_start;
  424. };
  425. struct filemon {
  426. char * path;
  427. struct stat sb;
  428. struct filemon *next;
  429. };
  430. struct extparam {
  431. int timeouts[10];
  432. struct ace * acl;
  433. char * conffile;
  434. struct bandlim * bandlimiter, *bandlimiterout;
  435. struct trafcount * trafcounter;
  436. struct srvparam *services;
  437. int threadinit, counterd, haveerror, rotate, paused, archiverc,
  438. demon, maxchild, singlepacket, needreload, timetoexit;
  439. int authcachetype, authcachetime;
  440. int filtermaxsize;
  441. unsigned char *logname, **archiver;
  442. ROTATION logtype, countertype;
  443. char * counterfile;
  444. #ifndef NOIPV6
  445. struct sockaddr_in6 intsa;
  446. struct sockaddr_in6 extsa6;
  447. struct sockaddr_in6 extsa;
  448. #else
  449. struct sockaddr_in intsa;
  450. struct sockaddr_in extsa;
  451. #endif
  452. struct passwords *pwl;
  453. struct auth * authenticate;
  454. AUTHFUNC authfunc;
  455. LOGFUNC logfunc;
  456. BANDLIMFUNC bandlimfunc;
  457. TRAFCOUNTFUNC trafcountfunc;
  458. unsigned char *logtarget, *logformat;
  459. struct filemon * fmon;
  460. struct filter * filters;
  461. struct auth *authfuncs;
  462. FILE *stdlog;
  463. char* demanddialprog;
  464. unsigned char **stringtable;
  465. time_t logtime, time;
  466. unsigned logdumpsrv, logdumpcli;
  467. char delimchar;
  468. };
  469. struct property {
  470. struct property * next;
  471. char * name;
  472. EXTENDFUNC e_f;
  473. int type;
  474. char * description;
  475. };
  476. struct datatype {
  477. char * type;
  478. EXTENDFUNC i_f;
  479. PRINTFUNC p_f;
  480. struct property * properties;
  481. };
  482. struct node {
  483. void * value;
  484. void * iteration;
  485. struct node * parent;
  486. int type;
  487. };
  488. struct dictionary {
  489. char * name;
  490. struct node * node;
  491. EXTENDFUNC array_f;
  492. int arraysize;
  493. };
  494. struct commands {
  495. struct commands *next;
  496. char * command;
  497. int (* handler)(int argc, unsigned char ** argv);
  498. int minargs;
  499. int maxargs;
  500. };
  501. struct symbol {
  502. struct symbol *next;
  503. char * name;
  504. void * value;
  505. };
  506. struct proxydef {
  507. PROXYFUNC pf;
  508. unsigned short port;
  509. int isudp;
  510. int service;
  511. char * helpmessage;
  512. };
  513. extern struct proxydef childdef;
  514. struct child {
  515. int argc;
  516. unsigned char **argv;
  517. };
  518. struct hashentry {
  519. unsigned char hash[sizeof(unsigned)*4];
  520. time_t expires;
  521. struct hashentry *next;
  522. char value[4];
  523. };
  524. struct hashtable {
  525. unsigned hashsize;
  526. unsigned recsize;
  527. unsigned rnd[4];
  528. struct hashentry ** hashtable;
  529. void * hashvalues;
  530. struct hashentry * hashempty;
  531. };
  532. extern struct hashtable dns_table;
  533. extern struct hashtable dns6_table;
  534. struct sockfuncs {
  535. #ifdef _WIN32
  536. SOCKET (WINAPI *_socket)(int domain, int type, int protocol);
  537. SOCKET (WINAPI *_accept)(SOCKET s, struct sockaddr * addr, int * addrlen);
  538. int (WINAPI *_bind)(SOCKET s, const struct sockaddr *addr, int addrlen);
  539. int (WINAPI *_listen)(SOCKET s, int backlog);
  540. int (WINAPI *_connect)(SOCKET s, const struct sockaddr *name, int namelen);
  541. int (WINAPI *_getpeername)(SOCKET s, struct sockaddr * name, int * namelen);
  542. int (WINAPI *_getsockname)(SOCKET s, struct sockaddr * name, int * namelen);
  543. int (WINAPI *_getsockopt)(SOCKET s, int level, int optname, void * optval, int * optlen);
  544. int (WINAPI *_setsockopt)(SOCKET s, int level, int optname, const void *optval, int optlen);
  545. int (WINAPI *_poll)(struct pollfd *fds, unsigned int nfds, int timeout);
  546. int (WINAPI *_send)(SOCKET s, const void *msg, int len, int flags);
  547. int (WINAPI *_sendto)(SOCKET s, const void *msg, int len, int flags, const struct sockaddr *to, int tolen);
  548. int (WINAPI *_recv)(SOCKET s, void *buf, int len, int flags);
  549. int (WINAPI *_recvfrom)(SOCKET s, void * buf, int len, int flags, struct sockaddr * from, int * fromlen);
  550. int (WINAPI *_shutdown)(SOCKET s, int how);
  551. int (WINAPI *_closesocket)(SOCKET s);
  552. #else
  553. SOCKET (*_socket)(int domain, int type, int protocol);
  554. SOCKET (*_accept)(SOCKET s, struct sockaddr * addr, socklen_t * addrlen);
  555. int (*_bind)(SOCKET s, const struct sockaddr *addr, socklen_t addrlen);
  556. int (*_listen)(SOCKET s, int backlog);
  557. int (*_connect)(SOCKET s, const struct sockaddr *name, socklen_t namelen);
  558. int (*_getpeername)(SOCKET s, struct sockaddr * name, socklen_t * namelen);
  559. int (*_getsockname)(SOCKET s, struct sockaddr * name, socklen_t * namelen);
  560. int (*_getsockopt)(SOCKET s, int level, int optname, void * optval, socklen_t * optlen);
  561. int (*_setsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen);
  562. int (*_poll)(struct pollfd *fds, unsigned int nfds, int timeout);
  563. size_t (*_send)(SOCKET s, const void *msg, size_t len, int flags);
  564. size_t (*_sendto)(SOCKET s, const void *msg, size_t len, int flags, const struct sockaddr *to, SASIZETYPE tolen);
  565. size_t (*_recv)(SOCKET s, void *buf, size_t len, int flags);
  566. size_t (*_recvfrom)(SOCKET s, void * buf, size_t len, int flags, struct sockaddr * from, SASIZETYPE * fromlen);
  567. int (*_shutdown)(SOCKET s, int how);
  568. int (*_closesocket)(SOCKET s);
  569. #endif
  570. };
  571. extern struct sockfuncs so;
  572. struct pluginlink {
  573. struct symbol symbols;
  574. struct extparam *conf;
  575. struct nserver *nservers;
  576. int * linenum;
  577. struct auth *authfuncs;
  578. struct commands * commandhandlers;
  579. void * (*findbyname)(const char *name);
  580. int (*socksend)(SOCKET sock, unsigned char * buf, int bufsize, int to);
  581. int (*socksendto)(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
  582. int (*sockrecvfrom)(SOCKET sock, struct sockaddr * sin, unsigned char * buf, int bufsize, int to);
  583. int (*sockgetcharcli)(struct clientparam * param, int timeosec, int timeousec);
  584. int (*sockgetcharsrv)(struct clientparam * param, int timeosec, int timeousec);
  585. int (*sockgetlinebuf)(struct clientparam * param, DIRECTION which, unsigned char * buf, int bufsize, int delim, int to);
  586. int (*myinet_ntop)(int af, void *src, char *dst, socklen_t size);
  587. int (*dobuf)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec);
  588. int (*dobuf2)(struct clientparam * param, unsigned char * buf, const unsigned char *s, const unsigned char * doublec, struct tm* tm, char * format);
  589. int (*scanaddr)(const unsigned char *s, unsigned long * ip, unsigned long * mask);
  590. unsigned long (*getip46)(int family, unsigned char *name, struct sockaddr *sa);
  591. int (*sockmap)(struct clientparam * param, int timeo);
  592. int (*ACLMatches)(struct ace* acentry, struct clientparam * param);
  593. int (*alwaysauth)(struct clientparam * param);
  594. int (*checkACL)(struct clientparam * param);
  595. void (*nametohash)(const unsigned char * name, unsigned char *hash);
  596. unsigned (*hashindex)(const unsigned char* hash);
  597. unsigned char* (*en64)(const unsigned char *in, unsigned char *out, int inlen);
  598. int (*de64)(const unsigned char *in, unsigned char *out, int maxlen);
  599. void (*tohex)(unsigned char *in, unsigned char *out, int len);
  600. void (*fromhex)(unsigned char *in, unsigned char *out, int len);
  601. void (*decodeurl)(unsigned char *s, int allowcr);
  602. int (*parsestr) (unsigned char *str, unsigned char **argm, int nitems, unsigned char ** buff, int *inbuf, int *bufsize);
  603. struct ace * (*make_ace) (int argc, unsigned char ** argv);
  604. void * (*myalloc)(size_t size);
  605. void (*myfree)(void *ptr);
  606. void *(*myrealloc)(void *ptr, size_t size);
  607. char * (*mystrdup)(const char *str);
  608. TRAFCOUNTFUNC trafcountfunc;
  609. char ** proxy_table;
  610. struct schedule ** schedule;
  611. void (*freeacl)(struct ace*);
  612. char ** admin_table;
  613. struct proxydef * childdef;
  614. int (*start_proxy_thread)(struct child * chp);
  615. void (*freeparam)(struct clientparam * param);
  616. int (*parsehostname)(char *hostname, struct clientparam *param, unsigned short port);
  617. int (*parseusername)(char *username, struct clientparam *param, int extpasswd);
  618. int (*parseconnusername)(char *username, struct clientparam *param, int extpasswd, unsigned short port);
  619. struct sockfuncs *so;
  620. unsigned char * (*dologname) (unsigned char *buf, unsigned char *name, const unsigned char *ext, ROTATION lt, time_t t);
  621. };
  622. struct counter_header {
  623. unsigned char sig[4];
  624. time_t updated;
  625. };
  626. struct counter_record {
  627. uint64_t traf64;
  628. time_t cleared;
  629. time_t updated;
  630. };
  631. extern struct pluginlink pluginlink;
  632. extern char *rotations[];
  633. typedef enum {
  634. SINGLEBYTE_S,
  635. SINGLEBYTE_L,
  636. STRING_S,
  637. STRING_L,
  638. CONNECTION_S,
  639. CONNECTION_L,
  640. DNS_TO,
  641. CHAIN_TO
  642. }TIMEOUT;
  643. typedef enum {
  644. TYPE_INTEGER,
  645. TYPE_SHORT,
  646. TYPE_CHAR,
  647. TYPE_UNSIGNED,
  648. TYPE_UNSIGNED64,
  649. TYPE_TRAFFIC,
  650. TYPE_PORT,
  651. TYPE_IP,
  652. TYPE_SA,
  653. TYPE_CIDR,
  654. TYPE_STRING,
  655. TYPE_DATETIME,
  656. TYPE_OPERATIONS,
  657. TYPE_ROTATION,
  658. TYPE_PORTLIST,
  659. TYPE_IPLIST,
  660. TYPE_USERLIST,
  661. TYPE_PWLIST,
  662. TYPE_CHAIN,
  663. TYPE_ACE,
  664. TYPE_BANDLIMIT,
  665. TYPE_TRAFCOUNTER,
  666. TYPE_CLIENT,
  667. TYPE_WEEKDAYS,
  668. TYPE_TIME,
  669. TYPE_PERIOD,
  670. TYPE_SERVER
  671. }DATA_TYPE;
  672. #ifdef __cplusplus
  673. }
  674. #endif
  675. #endif