aboutsummaryrefslogtreecommitdiff
path: root/src/vpn/gnunet-service-dns-p.h
blob: dd564f434dd8556b938418063d731762ab3f70a1 (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
#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
	 */
	unsigned orig_to:32 GNUNET_PACKED;
	/**
	 * The IP-Address this query was originally sent from
	 */
	unsigned orig_from:32 GNUNET_PACKED;
	/**
	 * The UDP-Portthis query was originally sent from
	 */
	unsigned src_port:16 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
};

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 {
    struct GNUNET_MessageHeader hdr;
    enum GNUNET_DNS_ANSWER_Subtype subtype GNUNET_PACKED;

    unsigned from:32 GNUNET_PACKED;
    unsigned to:32 GNUNET_PACKED;
    unsigned dst_port:16 GNUNET_PACKED;

    /* Only sensible when subtype == GNUNET_DNS_ANSWER_TYPE_SERVICE */
    struct GNUNET_vpn_service_descriptor service_descr;

    /* The offsett in octets from the beginning of the struct to the field
     * in data where the IP-Address has to go. */
    unsigned addroffset:16 GNUNET_PACKED;

    unsigned char data[1];
};

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

#endif