dualserver.h
上传用户:raihanchen
上传日期:2022-08-07
资源大小:129k
文件大小:18k
源码类别:

网络

开发平台:

Visual C++

  1. /**************************************************************************
  2. *   Copyright (C) 2005 by Achal Dhir                                      *
  3. *   achaldhir@gmail.com                                                   *
  4. *                                                                         *
  5. *   This program is free software; you can redistribute it and/or modify  *
  6. *   it under the terms of the GNU General Public License as published by  *
  7. *   the Free Software Foundation; either version 2 of the License, or     *
  8. *   (at your option) any later version.                                   *
  9. *                                                                         *
  10. *   This program is distributed in the hope that it will be useful,       *
  11. *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
  12. *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
  13. *   GNU General Public License for more details.                          *
  14. *                                                                         *
  15. *   You should have received a copy of the GNU General Public License     *
  16. *   along with this program; if not, write to the                         *
  17. *   Free Software Foundation, Inc.,                                       *
  18. *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  19. ***************************************************************************/
  20. //This file defines all structures and constants
  21. //for both DHCP and DNS Servers
  22. #define MAX_SERVERS 8
  23. #ifndef LOG_MAKEPRI
  24. #define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri))
  25. #endif
  26. #ifndef SIOCGIFCONF
  27. #include <sys/sockio.h>
  28. #endif
  29. #ifndef _UIO_H_
  30. #include <sys/uio.h>
  31. #endif
  32. /*
  33. //#ifndef _LINUX_IN_H
  34. //#ifndef _NETINET_IN_H
  35. struct in_pktinfo
  36. {
  37. unsigned int   ipi_ifindex;  // Interface index
  38. struct in_addr ipi_spec_dst; // Local address
  39. struct in_addr ipi_addr;     // Header Destination address
  40. };
  41. typedef struct in_pktinfo IN_PKTINFO;
  42. //#endif
  43. //#endif
  44. */
  45. #ifndef INADDR_NONE
  46. #define INADDR_NONE ULONG_MAX
  47. #endif
  48. #ifndef IFF_DYNAMIC
  49. #define IFF_DYNAMIC 0x8000
  50. #endif
  51. #define WORD unsigned short
  52. #define BYTE unsigned char
  53. #define DWORD unsigned long
  54. #define SOCKET_ERROR -1
  55. #define INVALID_SOCKET -1
  56. #define SOCKADDR_IN sockaddr_in
  57. #define SOCKADDR sockaddr
  58. #define SOCKET int
  59. #define BOOL bool
  60. #define LPSOCKADDR sockaddr*
  61. #define closesocket close
  62. #define RCODE_NOERROR  0
  63. #define RCODE_FORMATERROR 1
  64. #define RCODE_SERVERFAIL 2
  65. #define RCODE_NAMEERROR 3
  66. #define RCODE_NOTIMPL  4
  67. #define RCODE_REFUSED  5
  68. #define RCODE_YXDOMAIN  6
  69. #define RCODE_YXRRSET  7
  70. #define RCODE_NXRRSET  8
  71. #define RCODE_NOTAUTH  9
  72. #define RCODE_NOTZONE  10
  73. #define OPCODE_STANDARD_QUERY 0
  74. #define OPCODE_INVERSE_QUERY 1
  75. #define OPCODE_SRVR_STAT_REQ 2
  76. #define OPCODE_NOTIFY 4
  77. #define OPCODE_DYNAMIC_UPDATE 5
  78. #define DNS_TYPE_A 1
  79. #define DNS_TYPE_NS 2
  80. #define DNS_TYPE_MD 3
  81. #define DNS_TYPE_MF 4
  82. #define DNS_TYPE_CNAME 5
  83. #define DNS_TYPE_SOA 6
  84. #define DNS_TYPE_MB 7
  85. #define DNS_TYPE_MG 8
  86. #define DNS_TYPE_MR 9
  87. #define DNS_TYPE_NULL 10
  88. #define DNS_TYPE_WKS 11
  89. #define DNS_TYPE_PTR 12
  90. #define DNS_TYPE_HINFO 13
  91. #define DNS_TYPE_MINFO 14
  92. #define DNS_TYPE_MX 15
  93. #define DNS_TYPE_TXT 16
  94. #define DNS_TYPE_AAAA 28
  95. #define DNS_TYPE_IXFR 251
  96. #define DNS_TYPE_AXFR 252
  97. #define DNS_TYPE_MAILB 253
  98. #define DNS_TYPE_MAILA 254
  99. #define DNS_TYPE_ANY 255
  100. #define DNS_CLASS_IN 1
  101. #define DNS_CLASS_CS 2
  102. #define DNS_CLASS_CH 3
  103. #define DNS_CLASS_HS 4
  104. #define DNS_CLASS_NONE 254
  105. #define DNS_CLASS_ANY 255
  106. #define IPPORT_DNS 53
  107. struct dnsHeader
  108. {
  109. WORD xid;
  110. union
  111. {
  112. WORD flags;
  113. struct
  114. {
  115. BYTE rd: 1; //Recusion Desired
  116. BYTE tc: 1; //Truncated
  117. BYTE aa: 1; //Authoritative Answer
  118. BYTE opcode: 4; //OpCode
  119. BYTE qr: 1; //Query/Response
  120. BYTE rcode: 4; //rcode
  121. BYTE at: 1; //Answer Authenticated
  122. BYTE z: 1; //Filler
  123. BYTE filler: 1; //Not Used
  124. BYTE ra: 1; //Resusion Available
  125. };
  126. };
  127. union {
  128. struct {
  129. WORD qdcount;
  130. WORD ancount;
  131. WORD nscount;
  132. WORD adcount;
  133. };
  134. struct {
  135. WORD zcount;
  136. WORD prcount;
  137. WORD ucount;
  138. WORD arcount;
  139. };
  140. };
  141. };
  142. struct dnsPacket
  143. {
  144. struct dnsHeader header;
  145. char data;
  146. };
  147. struct data6
  148. {
  149. char zone[256];
  150. WORD zLen;
  151. DWORD dns[2];
  152. BYTE currentDNS;
  153. };
  154. struct data16
  155. {
  156. char wildcard[256];
  157. DWORD ip;
  158. };
  159. struct data7 //cache
  160. {
  161. char *mapname;
  162. time_t expiry;
  163. union
  164. {
  165. struct
  166. {
  167. BYTE dataType;
  168. BYTE filler1;
  169. BYTE sockInd;
  170. BYTE dnsIndex;
  171. };
  172. struct
  173. {
  174. unsigned no_route: 1;
  175. unsigned fixed: 1;
  176. unsigned bitmask: 5;
  177. unsigned active: 1;
  178. char rangeInd;
  179. WORD dhcpInd;
  180. };
  181. };
  182. union
  183. {
  184. int bytes;
  185. SOCKADDR_IN *addr;
  186. BYTE *options;
  187. DWORD serial;
  188. DWORD source;
  189. };
  190. union
  191. {
  192. BYTE *response;
  193. char *hostname;
  194. char *query;
  195. DWORD ip;
  196. };
  197. };
  198. typedef multimap<string, data7*> hostMap;
  199. typedef map<string, data7*> dhcpMap;
  200. typedef multimap<time_t, data7*> expiryMap;
  201. struct data5 //dns request
  202. {
  203. dnsPacket *dnsp;
  204. char raw[2048];
  205. char temp[2048];
  206. char *data;
  207. char query[256];
  208. char cname[256];
  209. char mapname[256];
  210. WORD qLen;
  211. data7 cache;
  212. hostMap::iterator iterBegin;
  213. SOCKET sock;
  214. SOCKADDR_IN target;
  215. SOCKADDR_IN addr;
  216. socklen_t sockLen;
  217. linger ling;
  218. int bytes;
  219. WORD qtype;
  220. WORD qclass;
  221. BYTE localCode;
  222. BYTE sockInd;
  223. BYTE dnsInd;
  224. };
  225. enum
  226. {
  227. NONE,
  228. LOCAL_A,
  229. LOCAL_PTR_AUTH,
  230. LOCAL_PTR_NAUTH,
  231. LOCALHOST_A,
  232. LOCALHOST_PTR,
  233. SERVER_A,
  234. SERVER_PTR_AUTH,
  235. SERVER_PTR_NAUTH,
  236. LOCAL_CNAME,
  237. EXT_CNAME,
  238. STATIC_A_AUTH,
  239. STATIC_PTR_AUTH,
  240. STATIC_A_NAUTH,
  241. STATIC_PTR_NAUTH,
  242. MX,
  243. NS,
  244. SOA,
  245. AXFR,
  246. CACHED,
  247. NON_CACHED,
  248. QUEUE,
  249. DNS_CHECK,
  250. DHCP
  251. };
  252. struct data12 //dns range
  253. {
  254. DWORD rangeStart;
  255. DWORD rangeEnd;
  256. };
  257. struct dns_rr
  258. {
  259. char *name;
  260. WORD type, _class;
  261. DWORD ttl;
  262. WORD rdlength;
  263. char *rdata;
  264. union {
  265. struct
  266. {
  267. long address;
  268. } a;
  269. struct
  270. {
  271. char *cname;
  272. } cname;
  273. struct
  274. {
  275. char *cpu, *os;
  276. } hinfo;
  277. struct
  278. {
  279. char *madname;
  280. } mb;
  281. struct
  282. {
  283. char *madname;
  284. } md;
  285. struct
  286. {
  287. char *madname;
  288. } mf;
  289. struct
  290. {
  291. char *mgmname;
  292. } mg;
  293. struct
  294. {
  295. char *rmailbx, *emailbx;
  296. } minfo;
  297. struct
  298. {
  299. char *newname;
  300. } mr;
  301. struct
  302. {
  303. int preference;
  304. char *exchange;
  305. } mx;
  306. struct
  307. {
  308. char *nsdname;
  309. } ns;
  310. struct
  311. {
  312. char *data;
  313. } null;
  314. struct
  315. {
  316. char *ptrdname;
  317. } ptr;
  318. struct
  319. {
  320. char *mname, *rname;
  321. unsigned serial, refresh, retry, expire, minimum;
  322. } soa;
  323. struct
  324. {
  325. char **txt_data;
  326. } txt;
  327. struct
  328. {
  329. int address;
  330. BYTE protocol;
  331. int bitmapsize;
  332. char *bitmap;
  333. } wks;
  334. } data;
  335. };
  336. struct data11
  337. {
  338. char hostname[256];
  339. WORD pref;
  340. };
  341. struct ConnType
  342. {
  343. SOCKET sock;
  344. SOCKADDR_IN addr;
  345. DWORD server;
  346. WORD port;
  347. };
  348. #define BOOTP_REQUEST  1
  349. #define BOOTP_REPLY    2
  350. #define DHCP_MESS_NONE       0
  351. #define DHCP_MESS_DISCOVER   1
  352. #define DHCP_MESS_OFFER      2
  353. #define DHCP_MESS_REQUEST  3
  354. #define DHCP_MESS_DECLINE  4
  355. #define DHCP_MESS_ACK  5
  356. #define DHCP_MESS_NAK  6
  357. #define DHCP_MESS_RELEASE    7
  358. #define DHCP_MESS_INFORM  8
  359. // DHCP OPTIONS
  360. #define DHCP_OPTION_PAD 0
  361. #define DHCP_OPTION_NETMASK           1
  362. #define DHCP_OPTION_TIMEOFFSET        2
  363. #define DHCP_OPTION_ROUTER            3
  364. #define DHCP_OPTION_TIMESERVER        4
  365. #define DHCP_OPTION_NAMESERVER        5
  366. #define DHCP_OPTION_DNS               6
  367. #define DHCP_OPTION_LOGSERVER         7
  368. #define DHCP_OPTION_COOKIESERVER      8
  369. #define DHCP_OPTION_LPRSERVER         9
  370. #define DHCP_OPTION_IMPRESSSERVER     10
  371. #define DHCP_OPTION_RESLOCSERVER      11
  372. #define DHCP_OPTION_HOSTNAME          12
  373. #define DHCP_OPTION_BOOTFILESIZE      13
  374. #define DHCP_OPTION_MERITDUMP         14
  375. #define DHCP_OPTION_DOMAINNAME        15
  376. #define DHCP_OPTION_SWAPSERVER        16
  377. #define DHCP_OPTION_ROOTPATH          17
  378. #define DHCP_OPTION_EXTSPATH          18
  379. #define DHCP_OPTION_IPFORWARD         19
  380. #define DHCP_OPTION_NONLOCALSR        20
  381. #define DHCP_OPTION_POLICYFILTER      21
  382. #define DHCP_OPTION_MAXREASSEMBLE     22
  383. #define DHCP_OPTION_IPTTL             23
  384. #define DHCP_OPTION_PATHMTUAGING      24
  385. #define DHCP_OPTION_PATHMTUPLATEAU    25
  386. #define DHCP_OPTION_INTERFACEMTU      26
  387. #define DHCP_OPTION_SUBNETSLOCAL      27
  388. #define DHCP_OPTION_BCASTADDRESS      28
  389. #define DHCP_OPTION_MASKDISCOVERY     29
  390. #define DHCP_OPTION_MASKSUPPLIER      30
  391. #define DHCP_OPTION_ROUTERDISCOVERY   31
  392. #define DHCP_OPTION_ROUTERSOLIC       32
  393. #define DHCP_OPTION_STATICROUTE       33
  394. #define DHCP_OPTION_TRAILERENCAPS     34
  395. #define DHCP_OPTION_ARPTIMEOUT        35
  396. #define DHCP_OPTION_ETHERNETENCAPS    36
  397. #define DHCP_OPTION_TCPTTL            37
  398. #define DHCP_OPTION_TCPKEEPALIVEINT   38
  399. #define DHCP_OPTION_TCPKEEPALIVEGRBG  39
  400. #define DHCP_OPTION_NISDOMAIN         40
  401. #define DHCP_OPTION_NISSERVERS        41
  402. #define DHCP_OPTION_NTPSERVERS        42
  403. #define DHCP_OPTION_VENDORSPECIFIC    43
  404. #define DHCP_OPTION_NETBIOSNAMESERV   44
  405. #define DHCP_OPTION_NETBIOSDGDIST     45
  406. #define DHCP_OPTION_NETBIOSNODETYPE   46
  407. #define DHCP_OPTION_NETBIOSSCOPE      47
  408. #define DHCP_OPTION_X11FONTS          48
  409. #define DHCP_OPTION_X11DISPLAYMNGR    49
  410. #define DHCP_OPTION_REQUESTEDIPADDR   50
  411. #define DHCP_OPTION_IPADDRLEASE       51
  412. #define DHCP_OPTION_OVERLOAD          52
  413. #define DHCP_OPTION_MESSAGETYPE       53
  414. #define DHCP_OPTION_SERVERID          54
  415. #define DHCP_OPTION_PARAMREQLIST      55
  416. #define DHCP_OPTION_MESSAGE           56
  417. #define DHCP_OPTION_MAXDHCPMSGSIZE    57
  418. #define DHCP_OPTION_RENEWALTIME       58
  419. #define DHCP_OPTION_REBINDINGTIME     59
  420. #define DHCP_OPTION_VENDORCLASSID     60
  421. #define DHCP_OPTION_CLIENTID          61
  422. #define DHCP_OPTION_NISPLUSDOMAIN     64
  423. #define DHCP_OPTION_NISPLUSSERVERS    65
  424. #define DHCP_OPTION_TFTPSERVER        66
  425. #define DHCP_OPTION_BOOTFILE          67
  426. #define DHCP_OPTION_MOBILEIPHOME      68
  427. #define DHCP_OPTION_SMTPSERVER        69
  428. #define DHCP_OPTION_POP3SERVER        70
  429. #define DHCP_OPTION_NNTPSERVER        71
  430. #define DHCP_OPTION_WWWSERVER         72
  431. #define DHCP_OPTION_FINGERSERVER      73
  432. #define DHCP_OPTION_IRCSERVER         74
  433. #define DHCP_OPTION_STSERVER          75
  434. #define DHCP_OPTION_STDASERVER        76
  435. #define DHCP_OPTION_USERCLASS         77
  436. #define DHCP_OPTION_SLPDIRAGENT       78
  437. #define DHCP_OPTION_SLPDIRSCOPE       79
  438. #define DHCP_OPTION_CLIENTFQDN        81
  439. #define DHCP_OPTION_RELAYAGENTINFO      82
  440. #define DHCP_OPTION_NDSSERVERS        85
  441. #define DHCP_OPTION_NDSTREENAME       86
  442. #define DHCP_OPTION_NDSCONTEXT   87
  443. #define DHCP_OPTION_AUTHENTICATION 90
  444. #define DHCP_OPTION_CLIENTSYSTEM 93
  445. #define DHCP_OPTION_CLIENTNDI 94
  446. #define DHCP_OPTION_LDAP 95
  447. #define DHCP_OPTION_UUID_GUID 97
  448. #define DHCP_OPTION_USER_AUTH 98
  449. #define DHCP_OPTION_NETINFOADDRESS 112
  450. #define DHCP_OPTION_NETINFOTAG 113
  451. #define DHCP_OPTION_URL 114
  452. #define DHCP_OPTION_AUTO_CONFIG 116
  453. #define DHCP_OPTION_NAMESERVICESEARCH 117
  454. #define DHCP_OPTION_SUBNETSELECTION 118
  455. #define DHCP_OPTION_DOMAINSEARCH 119
  456. #define DHCP_OPTION_SIPSERVERSDHCP 120
  457. #define DHCP_OPTION_CLASSLESSSTATICROUTE 121
  458. #define DHCP_OPTION_CCC 122
  459. #define DHCP_OPTION_GEOCONF 123
  460. #define DHCP_OPTION_V_IVENDORCLASS 124
  461. #define DHCP_OPTION_V_IVENDOR_SPECIFIC 125
  462. #define DHCP_OPTION_TFPTSERVERIPADDRESS 128
  463. #define DHCP_OPTION_CALLSERVERIPADDRESS 129
  464. #define DHCP_OPTION_DISCRIMINATIONSTRING 130
  465. #define DHCP_OPTION_REMOTESTATISTICSSERVER 131
  466. #define DHCP_OPTION_802_1PVLANID 132
  467. #define DHCP_OPTION_802_1QL2PRIORITY 133
  468. #define DHCP_OPTION_DIFFSERVCODEPOINT 134
  469. #define DHCP_OPTION_HTTPPROXYFORPHONE_SPEC 135
  470. #define DHCP_OPTION_SERIAL 253
  471. #define DHCP_OPTION_NEXTSERVER 254
  472. #define DHCP_OPTION_END 255
  473. //#define DHCP_VENDORDATA_SIZE  272
  474. //#define DHCP_VENDORDATA_SIZE  64
  475. //#define DHCP_VENDORDATA_SIZE  784
  476. //#define DHCP_PACKET_SIZE 1024
  477. //#define DHCP_MIN_SIZE  44
  478. //#define DHCP_MAX_CLIENTS  254
  479. #define IPPORT_DHCPS   67
  480. #define IPPORT_DHCPC   68
  481. #define VM_STANFORD  0x5354414EUL
  482. #define VM_RFC1048   0x63825363UL
  483. struct data3
  484. {
  485. BYTE opt_code;
  486. BYTE size;
  487. BYTE value[256];
  488. };
  489. struct data13 //dhcp range
  490. {
  491. BYTE rangeSetInd;
  492. DWORD rangeStart;
  493. DWORD rangeEnd;
  494. DWORD mask;
  495. BYTE *options;
  496. time_t *expiry;
  497. data7 **dhcpEntry;
  498. };
  499. struct data14 //rangeSet
  500. {
  501. BYTE active;
  502. BYTE *macStart[32];
  503. BYTE *macEnd[32];
  504. BYTE macSize[32];
  505. BYTE *vendClass[32];
  506. BYTE vendClassSize[32];
  507. BYTE *userClass[32];
  508. BYTE userClassSize[32];
  509. };
  510. struct data19
  511. {
  512. SOCKET sock;
  513. SOCKADDR_IN addr;
  514. socklen_t sockLen;
  515. linger ling;
  516. int bytes;
  517. char *buffer;
  518. };
  519. struct data20
  520. {
  521. BYTE *options;
  522. DWORD ip;
  523. DWORD mask;
  524. BYTE rangeSetInd;
  525. };
  526. struct msg_control
  527. {
  528. uint cmsg_len;
  529. int cmsg_level;
  530. int cmsg_type;
  531. in_pktinfo pktinfo;
  532. };
  533. struct dhcp_header
  534. {
  535. BYTE bp_op;
  536. BYTE bp_htype;
  537. BYTE bp_hlen;
  538. BYTE bp_hops;
  539. DWORD bp_xid;
  540. WORD bp_secs;
  541. BYTE bp_broadcast;
  542. BYTE bp_spare;
  543. DWORD bp_ciaddr;
  544. DWORD bp_yiaddr;
  545. DWORD bp_siaddr;
  546. DWORD bp_giaddr;
  547. BYTE bp_chaddr[16];
  548. char bp_sname[64];
  549. BYTE bp_file[128];
  550. BYTE bp_magic_num[4];
  551. };
  552. struct dhcp_packet
  553. {
  554. dhcp_header header;
  555. BYTE vend_data[1024 - sizeof(dhcp_header)];
  556. };
  557. struct data1 //dhcpRequst
  558. {
  559. DWORD lease;
  560. union
  561. {
  562. char raw[sizeof(dhcp_packet)];
  563. dhcp_packet dhcpp;
  564. };
  565. char hostname[256];
  566. DWORD server;
  567. DWORD reqIP;
  568. int bytes;
  569. SOCKADDR_IN addr;
  570. SOCKADDR_IN target;
  571. socklen_t sockLen;
  572. WORD messsize;
  573. BYTE *vp;
  574. data7 *dhcpEntry;
  575. data3 agentOption;
  576. data3 clientId;
  577. DWORD serial;
  578. BYTE vendClass[256];
  579. BYTE userClass[256];
  580. BYTE vendClassSize;
  581. BYTE userClassSize;
  582. msghdr msg;
  583. iovec iov[1];
  584. msg_control msgcontrol;
  585. BYTE paramreqlist[256];
  586. BYTE opAdded[256];
  587. BYTE req_type;
  588. BYTE resp_type;
  589. BYTE sockInd;
  590. };
  591. struct DhcpConnType
  592. {
  593. SOCKET sock;
  594. SOCKADDR_IN addr;
  595. DWORD server;
  596. DWORD mask;
  597. int reUseVal;
  598. int reUseSize;
  599. union
  600. {
  601. int broadCastVal;
  602. bool pktinfoVal;
  603. };
  604. union
  605. {
  606. int broadCastSize;
  607. unsigned int pktinfoSize;
  608. };
  609. };
  610. struct data8 //client
  611. {
  612. WORD dhcpInd;
  613. BYTE bp_hlen;
  614. BYTE active;
  615. DWORD source;
  616. DWORD ip;
  617. time_t expiry;
  618. BYTE bp_chaddr[16];
  619. char hostname[64];
  620. };
  621. struct data2
  622. {
  623. DhcpConnType dhcpListener;
  624. DhcpConnType dhcpConn[MAX_SERVERS];
  625. ConnType dhcpReplConn;
  626. ConnType dnsUdpConn[MAX_SERVERS];
  627. ConnType forwConn;
  628. ConnType dnsTcpConn[MAX_SERVERS];
  629. ConnType httpConn;
  630. char zoneSmall[256];
  631. char zone[256];
  632. BYTE zLen;
  633. char authority[256];
  634. BYTE aLen;
  635. char ns[256];
  636. DWORD nsIP;
  637. DWORD mask;
  638. char servername[128];
  639. char servername_fqn[256];
  640. DWORD dns[MAX_SERVERS];
  641. DWORD allServers[MAX_SERVERS];
  642. DWORD listenServers[MAX_SERVERS];
  643. DWORD listenMasks[MAX_SERVERS];
  644. DWORD staticServers[MAX_SERVERS];
  645. DWORD staticMasks[MAX_SERVERS];
  646. DWORD zoneServers[MAX_SERVERS];
  647. data11 mxServers[2][5];
  648. BYTE mxCount[2];
  649. DWORD lease;
  650. DWORD serial1;
  651. DWORD serial2;
  652. DWORD refresh;
  653. DWORD retry;
  654. DWORD expire;
  655. DWORD minimum;
  656. WORD minCache;
  657. WORD maxCache;
  658. time_t expireTime;
  659. SOCKET maxFD;
  660. data6 dnsRoutes[32];
  661. data16 wildHosts[32];
  662. data12 dnsRanges[32];
  663. data13 dhcpRanges[32];
  664. data14 rangeSet[32];
  665. BYTE macArray[32];
  666. BYTE vendArray[32];
  667. BYTE userArray[32];
  668. DWORD rangeStart;
  669. DWORD rangeEnd;
  670. WORD dhcpIndex;
  671. WORD dhcpSize;
  672. BYTE *options;
  673. FILE *logfile;
  674. BYTE currentDNS;
  675. //BYTE queriesFailed;
  676. BYTE dhcpLogLevel;
  677. BYTE dnsLogLevel;
  678. BYTE authorized;
  679. BYTE replication;
  680. BYTE hasFilter;
  681. };
  682. struct data4
  683. {
  684. char opName[40];
  685. BYTE opTag;
  686. BYTE opType;
  687. };
  688. struct data15
  689. {
  690. union
  691. {
  692. //DWORD ip;
  693. unsigned ip:32;
  694. BYTE octate[4];
  695. };
  696. };
  697. //Function Prototypes
  698. bool addServer(DWORD*, DWORD);
  699. bool checkMask(DWORD);
  700. bool checkRange(BYTE, bool, bool, bool);
  701. bool chkQu(char*);
  702. bool getSection(char*, char*, BYTE, char*);
  703. bool isInt(char*);
  704. bool isIP(char*);
  705. bool wildcmp(char *string, char *wild);
  706. BYTE fromBase64(BYTE*, char*);
  707. BYTE fromUUE(BYTE*, char*);
  708. BYTE getBaseValue(BYTE);
  709. BYTE makeLocal(char*);
  710. BYTE makeLocal(DWORD);
  711. BYTE pIP(void*, DWORD);
  712. BYTE pULong(void*, DWORD);
  713. BYTE pUShort(void*, WORD);
  714. BYTE *loadOptions(char*, char*, DWORD*, DWORD*, char*);
  715. char *IP62String(char*, BYTE*);
  716. char getRangeInd(DWORD);
  717. char *cloneString(char*);
  718. char *getHexValue(BYTE*, char*, BYTE*);
  719. char *getResult(data5*);
  720. char *hex2String(char*, BYTE*, BYTE, char);
  721. char *IP2String(char*, DWORD);
  722. char *myGetToken(char*, BYTE);
  723. char *myLower(char *string);
  724. char *myTrim(char*, char*);
  725. char *myUpper(char *string);
  726. char *strqtype(char*, BYTE);
  727. char *toBase64(BYTE*, BYTE);
  728. char *toUUE(char*, BYTE*, BYTE);
  729. data7 *findEntry(BYTE, char*);
  730. data7 *findEntry(BYTE, char*, BYTE);
  731. DWORD alad(data1*);
  732. DWORD calcMask(DWORD, DWORD);
  733. DWORD chad(data1*);
  734. DWORD fIP(void*);
  735. DWORD fULong(void*);
  736. DWORD getClassNetwork(DWORD);
  737. DWORD getRefresh(BYTE, char*);
  738. DWORD getSerial(char*);
  739. DWORD my_inet_addr(char*);
  740. DWORD resad(data1*);
  741. DWORD sdmess(data1*);
  742. DWORD sendRepl(data1*);
  743. DWORD sendRepl(data7*);
  744. DWORD updateDHCP(data1*);
  745. DWORD *findServer(DWORD*, DWORD);
  746. int getIndex(char, DWORD);
  747. void *updateStateFile(void*);
  748. void addAuth(data5*);
  749. void addDHCPRange(char*);
  750. void addMacRange(BYTE, char*);
  751. void addVendClass(BYTE, char*, BYTE);
  752. void addUserClass(BYTE, char*, BYTE);
  753. void addEntry(BYTE, data7*);
  754. void addOptions(data1*);
  755. void addRRA(data5*);
  756. void addRRAAFXR(data5*);
  757. void addRRAd(data5*);
  758. void addRRCNAFXR(data5*);
  759. void addRRExt(data5*);
  760. void addRRLocalhostA(data5*);
  761. void addRRLocalhostPtr(data5*);
  762. void addRRMX(data5*);
  763. void addRRMXAFXR(data5*);
  764. void addRRMXOne(data5*, BYTE);
  765. void addRRNone(data5*);
  766. void addRRNSA(data5*);
  767. void addRRNSPtr(data5*);
  768. void addRRPtr(data5*);
  769. void addRRPtrAFXR(data5*);
  770. void addRRServerA(data5*);
  771. void addRRSOA(data5*, DWORD);
  772. void addRRSTAAFXR(data5*);
  773. void addToCache(BYTE, BYTE, char*, DWORD, time_t, BYTE, BYTE, DWORD);
  774. void calcRangeLimits(DWORD, DWORD, DWORD*, DWORD*);
  775. void catch_int(int);
  776. void checkDNS(BYTE);
  777. void checkSize(BYTE);
  778. void closeConn();
  779. void delDnsEntry(BYTE, data7*);
  780. void getDServ();
  781. void getSecondary();
  782. void getServ();
  783. void init();
  784. void logMess(char*, BYTE);
  785. void logDHCPMess(char*, BYTE);
  786. void logDNSMess(char*, BYTE);
  787. void logDNSMess(data5*, char*, BYTE);
  788. void logTCPMess(data5*, char*, BYTE);
  789. void mySplit(char*, char*, char*, char);
  790. void *sendHTTP(void*);
  791. void procHTTP(data19*);
  792. void procTCP(void*);
  793. void pvdata(data1*, data3*);
  794. void recvRepl(data1*);
  795. void setLeaseExpiry(data7*, time_t, bool);
  796. void setLeaseExpiry(DWORD, time_t);
  797. void *refresh(void*);
  798. WORD fdnmess(data5*);
  799. WORD fQu(char*, dnsPacket*, char*);
  800. WORD frdnmess(data5*);
  801. WORD fUShort(void*);
  802. WORD gdmess(data1*, BYTE);
  803. WORD gdnmess(data5*, BYTE);
  804. WORD listSections(char*, int, char*);
  805. WORD myTokenize(char*, char*, char*, bool);
  806. WORD pQu(char*, char*);
  807. WORD qLen(char*);
  808. WORD recvTcpDnsMess(SOCKET, char*, bool);
  809. WORD scanloc(data5*);
  810. WORD sdnmess(data5*);
  811. WORD sTCPmess(data5 *req);