home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / ConnectifyInstaller.exe / source / dualserver / DualServer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2010-09-16  |  19.4 KB  |  862 lines

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