aboutsummaryrefslogtreecommitdiff
path: root/src/dns/dnsparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dns/dnsparser.h')
-rw-r--r--src/dns/dnsparser.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/src/dns/dnsparser.h b/src/dns/dnsparser.h
new file mode 100644
index 0000000..d312f89
--- /dev/null
+++ b/src/dns/dnsparser.h
@@ -0,0 +1,195 @@
+/*
+ This file is part of GNUnet
+ (C) 2010, 2011, 2012 Christian Grothoff (and other contributing authors)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * @file dns/dnsparser.h
+ * @brief helper library to parse DNS packets.
+ * @author Philipp Toelke
+ * @author Christian Grothoff
+ * @author Martin Schanzenbach
+ */
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/* FIXME: replace this one with the one from tcpip_tun.h!? */
+/**
+ * Head of a any DNS message.
+ */
+struct GNUNET_TUN_DnsHeader
+{
+ /**
+ * Request/response ID. (NBO)
+ */
+ uint16_t id GNUNET_PACKED;
+
+ /**
+ * Flags for the operation.
+ */
+ struct GNUNET_DNSPARSER_Flags flags;
+
+ /**
+ * number of questions (NBO)
+ */
+ uint16_t query_count GNUNET_PACKED;
+
+ /**
+ * number of answers (NBO)
+ */
+ uint16_t answer_rcount GNUNET_PACKED;
+
+ /**
+ * number of authority-records (NBO)
+ */
+ uint16_t authority_rcount GNUNET_PACKED;
+
+ /**
+ * number of additional records (NBO)
+ */
+ uint16_t additional_rcount GNUNET_PACKED;
+};
+
+
+/**
+ * DNS query prefix.
+ */
+struct query_line
+{
+ /**
+ * Desired type (GNUNET_DNSPARSER_TYPE_XXX). (NBO)
+ */
+ uint16_t type GNUNET_PACKED;
+
+ /**
+ * Desired class (usually GNUNET_DNSPARSER_CLASS_INTERNET). (NBO)
+ */
+ uint16_t class GNUNET_PACKED;
+};
+
+
+/**
+ * General DNS record prefix.
+ */
+struct record_line
+{
+ /**
+ * Record type (GNUNET_DNSPARSER_TYPE_XXX). (NBO)
+ */
+ uint16_t type GNUNET_PACKED;
+
+ /**
+ * Record class (usually GNUNET_DNSPARSER_CLASS_INTERNET). (NBO)
+ */
+ uint16_t class GNUNET_PACKED;
+
+ /**
+ * Expiration for the record (in seconds). (NBO)
+ */
+ uint32_t ttl GNUNET_PACKED;
+
+ /**
+ * Number of bytes of data that follow. (NBO)
+ */
+ uint16_t data_len GNUNET_PACKED;
+};
+
+
+/**
+ * Payload of DNS SOA record (header).
+ */
+struct soa_data
+{
+ /**
+ * The version number of the original copy of the zone. (NBO)
+ */
+ uint32_t serial GNUNET_PACKED;
+
+ /**
+ * Time interval before the zone should be refreshed. (NBO)
+ */
+ uint32_t refresh GNUNET_PACKED;
+
+ /**
+ * Time interval that should elapse before a failed refresh should
+ * be retried. (NBO)
+ */
+ uint32_t retry GNUNET_PACKED;
+
+ /**
+ * Time value that specifies the upper limit on the time interval
+ * that can elapse before the zone is no longer authoritative. (NBO)
+ */
+ uint32_t expire GNUNET_PACKED;
+
+ /**
+ * The bit minimum TTL field that should be exported with any RR
+ * from this zone. (NBO)
+ */
+ uint32_t minimum GNUNET_PACKED;
+};
+
+
+/**
+ * Payload of DNS SRV record (header).
+ */
+struct srv_data
+{
+
+ /**
+ * Preference for this entry (lower value is higher preference). Clients
+ * will contact hosts from the lowest-priority group first and fall back
+ * to higher priorities if the low-priority entries are unavailable. (NBO)
+ */
+ uint16_t prio GNUNET_PACKED;
+
+ /**
+ * Relative weight for records with the same priority. Clients will use
+ * the hosts of the same (lowest) priority with a probability proportional
+ * to the weight given. (NBO)
+ */
+ uint16_t weight GNUNET_PACKED;
+
+ /**
+ * TCP or UDP port of the service. (NBO)
+ */
+ uint16_t port GNUNET_PACKED;
+
+ /* followed by 'target' name */
+};
+
+
+/**
+ * Payload of GNS VPN record
+ */
+struct vpn_data
+{
+ /**
+ * The peer to contact
+ */
+ struct GNUNET_HashCode peer;
+
+ /**
+ * The protocol to use
+ */
+ uint16_t proto GNUNET_PACKED;
+
+
+ /* followed by the servicename / identifier / password (0-terminated) */
+};
+
+GNUNET_NETWORK_STRUCT_END