diff options
Diffstat (limited to 'src/dns/dnsparser.h')
-rw-r--r-- | src/dns/dnsparser.h | 195 |
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 |