aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/gnunet-service-dns-p.h
blob: 0519b1f8472aecdeb3f385b186e4043f811f09a9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#ifndef GN_DNS_SERVICE_P_H
#define GN_DNS_SERVICE_P_H

#include "gnunet_common.h"

struct query_packet
{
  struct GNUNET_MessageHeader hdr;

        /**
	 * The IP-Address this query was originally sent to
	 */
  char orig_to[16];
        /**
	 * The IP-Address this query was originally sent from
	 */
  char orig_from[16];
        /**
	 * The UDP-Portthis query was originally sent from
	 */
  char addrlen;
  uint16_t src_port GNUNET_PACKED;

  unsigned char data[1];        /* The DNS-Packet */
};

struct query_packet_list
{
  struct query_packet_list *next GNUNET_PACKED;
  struct query_packet_list *prev GNUNET_PACKED;
  struct query_packet pkt;
};

enum GNUNET_DNS_ANSWER_Subtype
{
    /**
     * Answers of this type contain a dns-packet that just has to be transmitted
     */
  GNUNET_DNS_ANSWER_TYPE_IP,

    /**
     * Answers of this type contain an incomplete dns-packet. The IP-Address
     * is all 0s. The addroffset points to it.
     */
  GNUNET_DNS_ANSWER_TYPE_SERVICE,

    /**
     * Answers of this type contain an incomplete dns-packet as answer to a
     * PTR-Query. The resolved name is not allocated. The addroffset points to it.
     */
  GNUNET_DNS_ANSWER_TYPE_REV,

    /**
     * Answers of this type contains an IP6-Address but traffic to this IP should
     * be routed through the GNUNet.
     */
  GNUNET_DNS_ANSWER_TYPE_REMOTE_AAAA,

    /**
     * Answers of this type contains an IP4-Address but traffic to this IP should
     * be routed through the GNUNet.
     */
  GNUNET_DNS_ANSWER_TYPE_REMOTE_A
};

struct GNUNET_vpn_service_descriptor
{
  GNUNET_HashCode peer GNUNET_PACKED;
  GNUNET_HashCode service_descriptor GNUNET_PACKED;
  uint64_t ports GNUNET_PACKED;
  uint32_t service_type GNUNET_PACKED;
};

struct answer_packet
{
  /* General data */
  struct GNUNET_MessageHeader hdr;
  enum GNUNET_DNS_ANSWER_Subtype subtype GNUNET_PACKED;

  char from[16];
  char to[16];
  char addrlen;
  unsigned dst_port:16 GNUNET_PACKED;
  /* -- */

  /* Data for GNUNET_DNS_ANSWER_TYPE_SERVICE */
  struct GNUNET_vpn_service_descriptor service_descr;
  /* -- */

  /* Data for GNUNET_DNS_ANSWER_TYPE_REV */
  /* The offsett in octets from the beginning of the struct to the field
   * in data where the IP-Address has to go. */
  uint16_t addroffset GNUNET_PACKED;
  /* -- */

  /* Data for GNUNET_DNS_ANSWER_TYPE_REMOTE */
  /* either 4 or 16 */
  char addrsize;
  unsigned char addr[16];
  /* -- */

  unsigned char data[1];
};

struct answer_packet_list
{
  struct answer_packet_list *next GNUNET_PACKED;
  struct answer_packet_list *prev GNUNET_PACKED;
  struct GNUNET_SERVER_Client *client;
  struct answer_packet pkt;
};

#endif