-moving DNS code into its own directory
[oweals/gnunet.git] / src / include / gnunet_dns_service.h
1 #ifndef GN_DNS_SERVICE_P_H
2 #define GN_DNS_SERVICE_P_H
3
4 #include "gnunet_common.h"
5
6 GNUNET_NETWORK_STRUCT_BEGIN
7
8 struct query_packet
9 {
10   struct GNUNET_MessageHeader hdr;
11
12         /**
13          * The IP-Address this query was originally sent to
14          */
15   char orig_to[16];
16         /**
17          * The IP-Address this query was originally sent from
18          */
19   char orig_from[16];
20         /**
21          * The UDP-Portthis query was originally sent from
22          */
23   char addrlen;
24   uint16_t src_port GNUNET_PACKED;
25
26   unsigned char data[1];        /* The DNS-Packet */
27 };
28
29 struct query_packet_list
30 {
31   struct query_packet_list *next GNUNET_PACKED;
32   struct query_packet_list *prev GNUNET_PACKED;
33   struct query_packet pkt;
34 };
35
36 enum GNUNET_DNS_ANSWER_Subtype
37 {
38     /**
39      * Answers of this type contain a dns-packet that just has to be transmitted
40      */
41   GNUNET_DNS_ANSWER_TYPE_IP,
42
43     /**
44      * Answers of this type contain an incomplete dns-packet. The IP-Address
45      * is all 0s. The addroffset points to it.
46      */
47   GNUNET_DNS_ANSWER_TYPE_SERVICE,
48
49     /**
50      * Answers of this type contain an incomplete dns-packet as answer to a
51      * PTR-Query. The resolved name is not allocated. The addroffset points to it.
52      */
53   GNUNET_DNS_ANSWER_TYPE_REV,
54
55     /**
56      * Answers of this type contains an IP6-Address but traffic to this IP should
57      * be routed through the GNUNet.
58      */
59   GNUNET_DNS_ANSWER_TYPE_REMOTE_AAAA,
60
61     /**
62      * Answers of this type contains an IP4-Address but traffic to this IP should
63      * be routed through the GNUNet.
64      */
65   GNUNET_DNS_ANSWER_TYPE_REMOTE_A
66 };
67
68 struct GNUNET_vpn_service_descriptor
69 {
70   GNUNET_HashCode peer GNUNET_PACKED;
71   GNUNET_HashCode service_descriptor GNUNET_PACKED;
72   uint64_t ports GNUNET_PACKED;
73   uint32_t service_type GNUNET_PACKED;
74 };
75
76 struct answer_packet
77 {
78   /* General data */
79   struct GNUNET_MessageHeader hdr;
80   enum GNUNET_DNS_ANSWER_Subtype subtype GNUNET_PACKED;
81
82   char from[16];
83   char to[16];
84   char addrlen;
85   unsigned dst_port:16 GNUNET_PACKED;
86   /* -- */
87
88   /* Data for GNUNET_DNS_ANSWER_TYPE_SERVICE */
89   struct GNUNET_vpn_service_descriptor service_descr;
90   /* -- */
91
92   /* Data for GNUNET_DNS_ANSWER_TYPE_REV */
93   /* The offsett in octets from the beginning of the struct to the field
94    * in data where the IP-Address has to go. */
95   uint16_t addroffset GNUNET_PACKED;
96   /* -- */
97
98   /* Data for GNUNET_DNS_ANSWER_TYPE_REMOTE */
99   /* either 4 or 16 */
100   char addrsize;
101   unsigned char addr[16];
102   /* -- */
103
104   unsigned char data[1];
105 };
106
107 struct answer_packet_list
108 {
109   struct answer_packet_list *next GNUNET_PACKED;
110   struct answer_packet_list *prev GNUNET_PACKED;
111   struct GNUNET_SERVER_Client *client;
112   struct answer_packet pkt;
113 };
114 GNUNET_NETWORK_STRUCT_END
115
116 #endif