GNUnet 0.28.0
 
Loading...
Searching...
No Matches
DNS parser library

Helper library to parse DNS packets. More...

Collaboration diagram for DNS parser library:

Data Structures

struct  GNUNET_DNSPARSER_Query
 A DNS query. More...
 
struct  GNUNET_DNSPARSER_MxRecord
 Information from MX records (RFC 1035). More...
 
struct  GNUNET_DNSPARSER_SrvRecord
 Information from SRV records (RFC 2782). More...
 
struct  GNUNET_DNSPARSER_UriRecord
 Information from URI records (RFC 7553). More...
 
struct  GNUNET_DNSPARSER_CertRecord
 Information from CERT records (RFC 4034). More...
 
struct  GNUNET_DNSPARSER_SoaRecord
 Information from SOA records (RFC 1035). More...
 
struct  GNUNET_DNSPARSER_CaaRecord
 Information from CAA records (RFC 6844). More...
 
struct  GNUNET_DNSPARSER_RawRecord
 Binary record information (unparsed). More...
 
struct  GNUNET_DNSPARSER_Record
 A DNS response record. More...
 
struct  GNUNET_DNSPARSER_Packet
 Easy-to-process, parsed version of a DNS packet. More...
 

Macros

#define GNUNET_DNSPARSER_MAX_LABEL_LENGTH   63
 Maximum length of a label in DNS.
 
#define GNUNET_DNSPARSER_MAX_NAME_LENGTH   253
 Maximum length of a name in DNS.
 
#define GNUNET_DNSPARSER_TYPE_ANY   0
 A few common DNS types.
 
#define GNUNET_DNSPARSER_TYPE_A   1
 
#define GNUNET_DNSPARSER_TYPE_NS   2
 
#define GNUNET_DNSPARSER_TYPE_CNAME   5
 
#define GNUNET_DNSPARSER_TYPE_SOA   6
 
#define GNUNET_DNSPARSER_TYPE_PTR   12
 
#define GNUNET_DNSPARSER_TYPE_MX   15
 
#define GNUNET_DNSPARSER_TYPE_TXT   16
 
#define GNUNET_DNSPARSER_TYPE_RP   17
 
#define GNUNET_DNSPARSER_TYPE_AFSDB   18
 
#define GNUNET_DNSPARSER_TYPE_SIG   24
 
#define GNUNET_DNSPARSER_TYPE_KEY   25
 
#define GNUNET_DNSPARSER_TYPE_AAAA   28
 
#define GNUNET_DNSPARSER_TYPE_LOC   29
 
#define GNUNET_DNSPARSER_TYPE_SRV   33
 
#define GNUNET_DNSPARSER_TYPE_NAPTR   35
 
#define GNUNET_DNSPARSER_TYPE_KX   36
 
#define GNUNET_DNSPARSER_TYPE_CERT   37
 
#define GNUNET_DNSPARSER_TYPE_DNAME   39
 
#define GNUNET_DNSPARSER_TYPE_APL   42
 
#define GNUNET_DNSPARSER_TYPE_DS   43
 
#define GNUNET_DNSPARSER_TYPE_SSHFP   44
 
#define GNUNET_DNSPARSER_TYPE_IPSECKEY   45
 
#define GNUNET_DNSPARSER_TYPE_RRSIG   46
 
#define GNUNET_DNSPARSER_TYPE_NSEC   47
 
#define GNUNET_DNSPARSER_TYPE_DNSKEY   48
 
#define GNUNET_DNSPARSER_TYPE_DHCID   49
 
#define GNUNET_DNSPARSER_TYPE_NSEC3   50
 
#define GNUNET_DNSPARSER_TYPE_NSEC3PARAM   51
 
#define GNUNET_DNSPARSER_TYPE_TLSA   52
 
#define GNUNET_DNSPARSER_TYPE_SMIMEA   53
 
#define GNUNET_DNSPARSER_TYPE_HIP   55
 
#define GNUNET_DNSPARSER_TYPE_CDS   59
 
#define GNUNET_DNSPARSER_TYPE_CDNSKEY   60
 
#define GNUNET_DNSPARSER_TYPE_OPENPGPKEY   61
 
#define GNUNET_DNSPARSER_TYPE_TKEY   249
 
#define GNUNET_DNSPARSER_TYPE_TSIG   250
 
#define GNUNET_DNSPARSER_TYPE_ALL   255
 
#define GNUNET_DNSPARSER_TYPE_URI   256
 
#define GNUNET_DNSPARSER_TYPE_CAA   257
 
#define GNUNET_DNSPARSER_TYPE_TA   32768
 

Enumerations

enum  GNUNET_DNSPARSER_CertType {
  GNUNET_DNSPARSER_CERTTYPE_RESERVED = 0 , GNUNET_DNSPARSER_CERTTYPE_PKIX = 1 , GNUNET_DNSPARSER_CERTTYPE_SKPI = 2 , GNUNET_DNSPARSER_CERTTYPE_PGP = 3 ,
  GNUNET_DNSPARSER_CERTTYPE_IPKIX = 4 , GNUNET_DNSPARSER_CERTTYPE_ISKPI = 5 , GNUNET_DNSPARSER_CERTTYPE_IPGP = 6 , GNUNET_DNSPARSER_CERTTYPE_ACPKIX = 7 ,
  GNUNET_DNSPARSER_CERTTYPE_IACKPIX = 8
}
 DNS CERT types as defined in RFC 4398. More...
 
enum  GNUNET_DNSPARSER_CertAlgorithm {
  GNUNET_DNSPARSER_CERTALGO_UNDEFINED = 0 , GNUNET_DNSPARSER_CERTALGO_RSAMD5 = 1 , GNUNET_DNSPARSER_CERTALGO_DH = 2 , GNUNET_DNSPARSER_CERTALGO_DSASHA = 3 ,
  GNUNET_DNSPARSER_CERTALGO_RSRVD4 = 4 , GNUNET_DNSPARSER_CERTALGO_RSASHA = 5 , GNUNET_DNSPARSER_CERTALGO_DSANSEC3 = 6 , GNUNET_DNSPARSER_CERTALGO_RSANSEC3 = 7 ,
  GNUNET_DNSPARSER_CERTALGO_RSASHA256 = 8 , GNUNET_DNSPARSER_CERTALGO_RSRVD9 = 9 , GNUNET_DNSPARSER_CERTALGO_RSASHA512 = 10 , GNUNET_DNSPARSER_CERTALGO_GOST_R34 = 12 ,
  GNUNET_DNSPARSER_CERTALGO_ECDSA_P256SHA256 = 13 , GNUNET_DNSPARSER_CERTALGO_ECDSA_P384SHA384 = 14
}
 DNSCERT algorithms as defined in http://www.iana.org/assignments/ dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml, under dns-sec-alg-numbers-1. More...
 

Functions

enum GNUNET_GenericReturnValue GNUNET_DNSPARSER_check_label (const char *label)
 Check if a label in UTF-8 format can be coded into valid IDNA.
 
enum GNUNET_GenericReturnValue GNUNET_DNSPARSER_check_name (const char *name)
 Check if a hostname in UTF-8 format can be coded into valid IDNA.
 
struct GNUNET_DNSPARSER_PacketGNUNET_DNSPARSER_parse (const char *udp_payload, size_t udp_payload_length)
 Parse a UDP payload of a DNS packet in to a nice struct for further processing and manipulation.
 
void GNUNET_DNSPARSER_free_packet (struct GNUNET_DNSPARSER_Packet *p)
 Free memory taken by a packet.
 
int GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, uint16_t max, char **buf, size_t *buf_length)
 Given a DNS packet p, generate the corresponding UDP payload.
 
int GNUNET_DNSPARSER_builder_add_name (char *dst, size_t dst_len, size_t *off, const char *name)
 Add a DNS name to the UDP packet at the given location, converting the name to IDNA notation as necessary.
 
int GNUNET_DNSPARSER_builder_add_query (char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_Query *query)
 Add a DNS query to the UDP packet at the given location.
 
int GNUNET_DNSPARSER_builder_add_mx (char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_MxRecord *mx)
 Add an MX record to the UDP packet at the given location.
 
int GNUNET_DNSPARSER_builder_add_soa (char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_SoaRecord *soa)
 Add an SOA record to the UDP packet at the given location.
 
int GNUNET_DNSPARSER_builder_add_cert (char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_CertRecord *cert)
 Add CERT record to the UDP packet at the given location.
 
int GNUNET_DNSPARSER_builder_add_srv (char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_SrvRecord *srv)
 Add an SRV record to the UDP packet at the given location.
 
int GNUNET_DNSPARSER_builder_add_uri (char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_UriRecord *uri)
 Add an URI record to the UDP packet at the given location.
 
int GNUNET_DNSPARSER_parse_record (const char *udp_payload, size_t udp_payload_length, size_t *off, struct GNUNET_DNSPARSER_Record *r)
 Parse a DNS record entry.
 
char * GNUNET_DNSPARSER_parse_name (const char *udp_payload, size_t udp_payload_length, size_t *off)
 Parse name inside of a DNS query or record.
 
int GNUNET_DNSPARSER_parse_query (const char *udp_payload, size_t udp_payload_length, size_t *off, struct GNUNET_DNSPARSER_Query *q)
 Parse a DNS query entry.
 
struct GNUNET_DNSPARSER_SoaRecordGNUNET_DNSPARSER_parse_soa (const char *udp_payload, size_t udp_payload_length, size_t *off)
 Parse a DNS SOA record.
 
struct GNUNET_DNSPARSER_CertRecordGNUNET_DNSPARSER_parse_cert (const char *udp_payload, size_t udp_payload_length, size_t *off)
 Parse a DNS CERT record.
 
struct GNUNET_DNSPARSER_MxRecordGNUNET_DNSPARSER_parse_mx (const char *udp_payload, size_t udp_payload_length, size_t *off)
 Parse a DNS MX record.
 
struct GNUNET_DNSPARSER_SrvRecordGNUNET_DNSPARSER_parse_srv (const char *udp_payload, size_t udp_payload_length, size_t *off)
 Parse a DNS SRV record.
 
struct GNUNET_DNSPARSER_UriRecordGNUNET_DNSPARSER_parse_uri (const char *udp_payload, size_t udp_payload_length, size_t *off)
 Parse a DNS URI record.
 
struct GNUNET_DNSPARSER_RecordGNUNET_DNSPARSER_duplicate_record (const struct GNUNET_DNSPARSER_Record *r)
 Duplicate (deep-copy) the given DNS record.
 
struct GNUNET_DNSPARSER_SoaRecordGNUNET_DNSPARSER_duplicate_soa_record (const struct GNUNET_DNSPARSER_SoaRecord *r)
 Duplicate (deep-copy) the given DNS record.
 
struct GNUNET_DNSPARSER_CertRecordGNUNET_DNSPARSER_duplicate_cert_record (const struct GNUNET_DNSPARSER_CertRecord *r)
 Duplicate (deep-copy) the given DNS record.
 
struct GNUNET_DNSPARSER_MxRecordGNUNET_DNSPARSER_duplicate_mx_record (const struct GNUNET_DNSPARSER_MxRecord *r)
 Duplicate (deep-copy) the given DNS record.
 
struct GNUNET_DNSPARSER_SrvRecordGNUNET_DNSPARSER_duplicate_srv_record (const struct GNUNET_DNSPARSER_SrvRecord *r)
 Duplicate (deep-copy) the given DNS record.
 
struct GNUNET_DNSPARSER_UriRecordGNUNET_DNSPARSER_duplicate_uri_record (const struct GNUNET_DNSPARSER_UriRecord *r)
 Duplicate (deep-copy) the given DNS record.
 
void GNUNET_DNSPARSER_free_record (struct GNUNET_DNSPARSER_Record *r)
 Free the given DNS record.
 
void GNUNET_DNSPARSER_free_mx (struct GNUNET_DNSPARSER_MxRecord *mx)
 Free MX information record.
 
void GNUNET_DNSPARSER_free_srv (struct GNUNET_DNSPARSER_SrvRecord *srv)
 Free SRV information record.
 
void GNUNET_DNSPARSER_free_uri (struct GNUNET_DNSPARSER_UriRecord *uri)
 Free URI information record.
 
void GNUNET_DNSPARSER_free_soa (struct GNUNET_DNSPARSER_SoaRecord *soa)
 Free SOA information record.
 
void GNUNET_DNSPARSER_free_cert (struct GNUNET_DNSPARSER_CertRecord *cert)
 Free CERT information record.
 
char * GNUNET_DNSPARSER_bin_to_hex (const void *data, size_t data_size)
 Convert a block of binary data to HEX.
 
size_t GNUNET_DNSPARSER_hex_to_bin (const char *hex, void *data)
 Convert a HEX string to block of binary data.
 

Detailed Description

Helper library to parse DNS packets.

Macro Definition Documentation

◆ GNUNET_DNSPARSER_MAX_LABEL_LENGTH

#define GNUNET_DNSPARSER_MAX_LABEL_LENGTH   63

Maximum length of a label in DNS.

Definition at line 46 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_MAX_NAME_LENGTH

#define GNUNET_DNSPARSER_MAX_NAME_LENGTH   253

Maximum length of a name in DNS.

Definition at line 51 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_ANY

#define GNUNET_DNSPARSER_TYPE_ANY   0

A few common DNS types.

Definition at line 57 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_A

#define GNUNET_DNSPARSER_TYPE_A   1

Definition at line 58 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_NS

#define GNUNET_DNSPARSER_TYPE_NS   2

Definition at line 59 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_CNAME

#define GNUNET_DNSPARSER_TYPE_CNAME   5

Definition at line 60 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_SOA

#define GNUNET_DNSPARSER_TYPE_SOA   6

Definition at line 61 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_PTR

#define GNUNET_DNSPARSER_TYPE_PTR   12

Definition at line 62 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_MX

#define GNUNET_DNSPARSER_TYPE_MX   15

Definition at line 63 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_TXT

#define GNUNET_DNSPARSER_TYPE_TXT   16

Definition at line 64 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_RP

#define GNUNET_DNSPARSER_TYPE_RP   17

Definition at line 65 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_AFSDB

#define GNUNET_DNSPARSER_TYPE_AFSDB   18

Definition at line 66 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_SIG

#define GNUNET_DNSPARSER_TYPE_SIG   24

Definition at line 67 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_KEY

#define GNUNET_DNSPARSER_TYPE_KEY   25

Definition at line 68 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_AAAA

#define GNUNET_DNSPARSER_TYPE_AAAA   28

Definition at line 69 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_LOC

#define GNUNET_DNSPARSER_TYPE_LOC   29

Definition at line 70 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_SRV

#define GNUNET_DNSPARSER_TYPE_SRV   33

Definition at line 71 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_NAPTR

#define GNUNET_DNSPARSER_TYPE_NAPTR   35

Definition at line 72 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_KX

#define GNUNET_DNSPARSER_TYPE_KX   36

Definition at line 73 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_CERT

#define GNUNET_DNSPARSER_TYPE_CERT   37

Definition at line 74 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_DNAME

#define GNUNET_DNSPARSER_TYPE_DNAME   39

Definition at line 75 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_APL

#define GNUNET_DNSPARSER_TYPE_APL   42

Definition at line 76 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_DS

#define GNUNET_DNSPARSER_TYPE_DS   43

Definition at line 77 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_SSHFP

#define GNUNET_DNSPARSER_TYPE_SSHFP   44

Definition at line 78 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_IPSECKEY

#define GNUNET_DNSPARSER_TYPE_IPSECKEY   45

Definition at line 79 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_RRSIG

#define GNUNET_DNSPARSER_TYPE_RRSIG   46

Definition at line 80 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_NSEC

#define GNUNET_DNSPARSER_TYPE_NSEC   47

Definition at line 81 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_DNSKEY

#define GNUNET_DNSPARSER_TYPE_DNSKEY   48

Definition at line 82 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_DHCID

#define GNUNET_DNSPARSER_TYPE_DHCID   49

Definition at line 83 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_NSEC3

#define GNUNET_DNSPARSER_TYPE_NSEC3   50

Definition at line 84 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_NSEC3PARAM

#define GNUNET_DNSPARSER_TYPE_NSEC3PARAM   51

Definition at line 85 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_TLSA

#define GNUNET_DNSPARSER_TYPE_TLSA   52

Definition at line 86 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_SMIMEA

#define GNUNET_DNSPARSER_TYPE_SMIMEA   53

Definition at line 87 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_HIP

#define GNUNET_DNSPARSER_TYPE_HIP   55

Definition at line 88 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_CDS

#define GNUNET_DNSPARSER_TYPE_CDS   59

Definition at line 89 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_CDNSKEY

#define GNUNET_DNSPARSER_TYPE_CDNSKEY   60

Definition at line 90 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_OPENPGPKEY

#define GNUNET_DNSPARSER_TYPE_OPENPGPKEY   61

Definition at line 91 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_TKEY

#define GNUNET_DNSPARSER_TYPE_TKEY   249

Definition at line 92 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_TSIG

#define GNUNET_DNSPARSER_TYPE_TSIG   250

Definition at line 93 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_ALL

#define GNUNET_DNSPARSER_TYPE_ALL   255

Definition at line 94 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_URI

#define GNUNET_DNSPARSER_TYPE_URI   256

Definition at line 95 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_CAA

#define GNUNET_DNSPARSER_TYPE_CAA   257

Definition at line 96 of file gnunet_dnsparser_lib.h.

◆ GNUNET_DNSPARSER_TYPE_TA

#define GNUNET_DNSPARSER_TYPE_TA   32768

Definition at line 97 of file gnunet_dnsparser_lib.h.

Enumeration Type Documentation

◆ GNUNET_DNSPARSER_CertType

DNS CERT types as defined in RFC 4398.

Enumerator
GNUNET_DNSPARSER_CERTTYPE_RESERVED 

Reserved value.

GNUNET_DNSPARSER_CERTTYPE_PKIX 

An x509 PKIX certificate.

GNUNET_DNSPARSER_CERTTYPE_SKPI 

A SKPI certificate.

GNUNET_DNSPARSER_CERTTYPE_PGP 

A PGP certificate.

GNUNET_DNSPARSER_CERTTYPE_IPKIX 

An x509 PKIX cert URL.

GNUNET_DNSPARSER_CERTTYPE_ISKPI 

A SKPI cert URL.

GNUNET_DNSPARSER_CERTTYPE_IPGP 

A PGP cert fingerprint and URL.

GNUNET_DNSPARSER_CERTTYPE_ACPKIX 

An attribute Certificate.

GNUNET_DNSPARSER_CERTTYPE_IACKPIX 

An attribute cert URL.

Definition at line 211 of file gnunet_dnsparser_lib.h.

212{
217
222
227
232
237
242
247
252
257};
@ GNUNET_DNSPARSER_CERTTYPE_SKPI
A SKPI certificate.
@ GNUNET_DNSPARSER_CERTTYPE_ISKPI
A SKPI cert URL.
@ GNUNET_DNSPARSER_CERTTYPE_IPGP
A PGP cert fingerprint and URL.
@ GNUNET_DNSPARSER_CERTTYPE_IACKPIX
An attribute cert URL.
@ GNUNET_DNSPARSER_CERTTYPE_PGP
A PGP certificate.
@ GNUNET_DNSPARSER_CERTTYPE_ACPKIX
An attribute Certificate.
@ GNUNET_DNSPARSER_CERTTYPE_RESERVED
Reserved value.
@ GNUNET_DNSPARSER_CERTTYPE_PKIX
An x509 PKIX certificate.
@ GNUNET_DNSPARSER_CERTTYPE_IPKIX
An x509 PKIX cert URL.

◆ GNUNET_DNSPARSER_CertAlgorithm

DNSCERT algorithms as defined in http://www.iana.org/assignments/ dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml, under dns-sec-alg-numbers-1.

Enumerator
GNUNET_DNSPARSER_CERTALGO_UNDEFINED 

No defined.

GNUNET_DNSPARSER_CERTALGO_RSAMD5 

RSA/MD5.

GNUNET_DNSPARSER_CERTALGO_DH 

Diffie-Hellman.

GNUNET_DNSPARSER_CERTALGO_DSASHA 

DSA/SHA1.

GNUNET_DNSPARSER_CERTALGO_RSRVD4 

Reserved.

GNUNET_DNSPARSER_CERTALGO_RSASHA 

RSA/SHA1.

GNUNET_DNSPARSER_CERTALGO_DSANSEC3 

DSA/NSEC3/SHA.

GNUNET_DNSPARSER_CERTALGO_RSANSEC3 

RSA/NSEC3/SHA.

GNUNET_DNSPARSER_CERTALGO_RSASHA256 

RSA/SHA256.

GNUNET_DNSPARSER_CERTALGO_RSRVD9 

Reserved.

GNUNET_DNSPARSER_CERTALGO_RSASHA512 

RSA/SHA512.

GNUNET_DNSPARSER_CERTALGO_GOST_R34 

GHOST R 34.10-2001.

GNUNET_DNSPARSER_CERTALGO_ECDSA_P256SHA256 

ECDSA Curve P-256/SHA256.

GNUNET_DNSPARSER_CERTALGO_ECDSA_P384SHA384 

ECDSA Curve P-384/SHA384.

Definition at line 264 of file gnunet_dnsparser_lib.h.

265{
270
275
280
285
290
295
300
305
310
315
320
325
330
335};
@ GNUNET_DNSPARSER_CERTALGO_RSAMD5
RSA/MD5.
@ GNUNET_DNSPARSER_CERTALGO_RSASHA
RSA/SHA1.
@ GNUNET_DNSPARSER_CERTALGO_RSRVD9
Reserved.
@ GNUNET_DNSPARSER_CERTALGO_GOST_R34
GHOST R 34.10-2001.
@ GNUNET_DNSPARSER_CERTALGO_RSASHA256
RSA/SHA256.
@ GNUNET_DNSPARSER_CERTALGO_RSRVD4
Reserved.
@ GNUNET_DNSPARSER_CERTALGO_DSANSEC3
DSA/NSEC3/SHA.
@ GNUNET_DNSPARSER_CERTALGO_ECDSA_P256SHA256
ECDSA Curve P-256/SHA256.
@ GNUNET_DNSPARSER_CERTALGO_RSASHA512
RSA/SHA512.
@ GNUNET_DNSPARSER_CERTALGO_DH
Diffie-Hellman.
@ GNUNET_DNSPARSER_CERTALGO_ECDSA_P384SHA384
ECDSA Curve P-384/SHA384.
@ GNUNET_DNSPARSER_CERTALGO_RSANSEC3
RSA/NSEC3/SHA.
@ GNUNET_DNSPARSER_CERTALGO_DSASHA
DSA/SHA1.
@ GNUNET_DNSPARSER_CERTALGO_UNDEFINED
No defined.

Function Documentation

◆ GNUNET_DNSPARSER_check_label()

enum GNUNET_GenericReturnValue GNUNET_DNSPARSER_check_label ( const char *  label)

Check if a label in UTF-8 format can be coded into valid IDNA.

This can fail if the ASCII-conversion becomes longer than 63 characters.

Parameters
labellabel to check (UTF-8 string)
Returns
GNUNET_OK if the label can be converted to IDNA, GNUNET_SYSERR if the label is not valid for DNS names

Definition at line 53 of file dnsparser.c.

54{
55 char *output;
56 size_t slen;
57
58 if (NULL != strchr (label, '.'))
59 return GNUNET_SYSERR; /* not a label! Did you mean GNUNET_DNSPARSER_check_name? */
60 if (0 == strcmp (label, "@")) /* '@' is reserved for the empty label, see #GNUNET_GNS_EMPTY_LABEL_AT */
61 return GNUNET_SYSERR;
62 if (IDNA_SUCCESS != idna_to_ascii_8z (label, &output, IDNA_ALLOW_UNASSIGNED))
63 return GNUNET_SYSERR;
64 slen = strlen (output);
65 free (output);
66 return (slen > 63) ? GNUNET_SYSERR : GNUNET_OK;
67}
@ GNUNET_OK
@ GNUNET_SYSERR

References GNUNET_OK, and GNUNET_SYSERR.

Referenced by GNUNET_DNSPARSER_check_name().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_check_name()

enum GNUNET_GenericReturnValue GNUNET_DNSPARSER_check_name ( const char *  name)

Check if a hostname in UTF-8 format can be coded into valid IDNA.

This can fail if a label becomes longer than 63 characters or if the entire name exceeds 253 characters.

Parameters
namename to check (UTF-8 string)
Returns
GNUNET_OK if the label can be converted to IDNA, GNUNET_SYSERR if the label is not valid for DNS names

Check if a hostname in UTF-8 format can be coded into valid IDNA.

This can fail if the ASCII-conversion becomes longer than 253 characters.

Parameters
namename to check (UTF-8 string)
Returns
GNUNET_OK if the label can be converted to IDNA, GNUNET_SYSERR if the label is not valid for DNS names

Definition at line 79 of file dnsparser.c.

80{
81 {
82 char *ldup;
83 char *saveptr;
84
85 ldup = GNUNET_strdup (name);
86 for (const char *tok = strtok_r (ldup,
87 ".",
88 &saveptr);
89 NULL != tok;
90 tok = strtok_r (NULL,
91 ".",
92 &saveptr))
93 {
94 if (GNUNET_OK !=
96 {
97 GNUNET_free (ldup);
98 return GNUNET_SYSERR;
99 }
100 }
101 GNUNET_free (ldup);
102 }
103 {
104 char *output;
105 size_t slen;
106
107 if (IDNA_SUCCESS !=
108 idna_to_ascii_8z (name,
109 &output,
110 IDNA_ALLOW_UNASSIGNED))
111 return GNUNET_SYSERR;
112 slen = strlen (output);
113 free (output);
114 return (slen > 253) ? GNUNET_SYSERR : GNUNET_OK;
115 }
116}
static char * name
Name (label) of the records to list.
enum GNUNET_GenericReturnValue GNUNET_DNSPARSER_check_label(const char *label)
Check if a label in UTF-8 format can be coded into valid IDNA.
Definition dnsparser.c:53
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
#define GNUNET_free(ptr)
Wrapper around free.

References GNUNET_DNSPARSER_check_label(), GNUNET_free, GNUNET_OK, GNUNET_strdup, GNUNET_SYSERR, and name.

Referenced by queue(), queue(), and run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse()

struct GNUNET_DNSPARSER_Packet * GNUNET_DNSPARSER_parse ( const char *  udp_payload,
size_t  udp_payload_length 
)

Parse a UDP payload of a DNS packet in to a nice struct for further processing and manipulation.

Parameters
udp_payloadwire-format of the DNS packet
udp_payload_lengthnumber of bytes in udp_payload
Returns
NULL on error, otherwise the parsed packet

Definition at line 756 of file dnsparser.c.

757{
759 const struct GNUNET_TUN_DnsHeader *dns;
760 size_t off;
761 unsigned int n;
762
763 if (udp_payload_length < sizeof(struct GNUNET_TUN_DnsHeader))
764 return NULL;
765 dns = (const struct GNUNET_TUN_DnsHeader *) udp_payload;
766 off = sizeof(struct GNUNET_TUN_DnsHeader);
768 p->flags = dns->flags;
769 p->id = dns->id;
770 n = ntohs (dns->query_count);
771 if (n > 0)
772 {
773 p->queries = GNUNET_new_array (n, struct GNUNET_DNSPARSER_Query);
774 p->num_queries = n;
775 for (unsigned int i = 0; i < n; i++)
776 if (GNUNET_OK != GNUNET_DNSPARSER_parse_query (udp_payload,
777 udp_payload_length,
778 &off,
779 &p->queries[i]))
780 goto error;
781 }
782 n = ntohs (dns->answer_rcount);
783 if (n > 0)
784 {
785 p->answers = GNUNET_new_array (n, struct GNUNET_DNSPARSER_Record);
786 p->num_answers = n;
787 for (unsigned int i = 0; i < n; i++)
788 if (GNUNET_OK != GNUNET_DNSPARSER_parse_record (udp_payload,
789 udp_payload_length,
790 &off,
791 &p->answers[i]))
792 goto error;
793 }
794 n = ntohs (dns->authority_rcount);
795 if (n > 0)
796 {
797 p->authority_records = GNUNET_new_array (n, struct GNUNET_DNSPARSER_Record);
798 p->num_authority_records = n;
799 for (unsigned int i = 0; i < n; i++)
800 if (GNUNET_OK != GNUNET_DNSPARSER_parse_record (udp_payload,
801 udp_payload_length,
802 &off,
803 &p->authority_records[i]))
804 goto error;
805 }
806 n = ntohs (dns->additional_rcount);
807 if (n > 0)
808 {
809 p->additional_records =
811 p->num_additional_records = n;
812 for (unsigned int i = 0; i < n; i++)
813 {
814 if (GNUNET_OK !=
816 udp_payload_length,
817 &off,
818 &p->additional_records[i]))
819 goto error;
820 }
821 }
822 return p;
823error:
824 GNUNET_break_op (0);
826 return NULL;
827}
static struct GNUNET_Process * p
Helper process we started.
Definition gnunet-uri.c:38
void GNUNET_DNSPARSER_free_packet(struct GNUNET_DNSPARSER_Packet *p)
Free memory taken by a packet.
Definition dnsparser.c:978
int GNUNET_DNSPARSER_parse_query(const char *udp_payload, size_t udp_payload_length, size_t *off, struct GNUNET_DNSPARSER_Query *q)
Parse a DNS query entry.
Definition dnsparser.c:390
int GNUNET_DNSPARSER_parse_record(const char *udp_payload, size_t udp_payload_length, size_t *off, struct GNUNET_DNSPARSER_Record *r)
Parse a DNS record entry.
Definition dnsparser.c:640
#define GNUNET_break_op(cond)
Use this for assertion violations caused by other peers (i.e.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_new_array(n, type)
Allocate a size n array with structs or unions of the given type.
Easy-to-process, parsed version of a DNS packet.
A DNS response record.
struct GNUNET_TUN_DnsFlags flags
Flags.
uint16_t query_count
Number of queries.
uint16_t authority_rcount
Number of authoritative answers.
uint16_t id
Unique identifier for the request/response.
uint16_t additional_rcount
Number of additional records.
uint16_t answer_rcount
Number of answers.

References GNUNET_TUN_DnsHeader::additional_rcount, GNUNET_TUN_DnsHeader::answer_rcount, GNUNET_TUN_DnsHeader::authority_rcount, GNUNET_TUN_DnsHeader::flags, GNUNET_break_op, GNUNET_DNSPARSER_free_packet(), GNUNET_DNSPARSER_parse_query(), GNUNET_DNSPARSER_parse_record(), GNUNET_new, GNUNET_new_array, GNUNET_OK, GNUNET_TUN_DnsHeader::id, p, and GNUNET_TUN_DnsHeader::query_count.

Referenced by display_request(), dns_post_request_handler(), dns_result_parser(), dns_result_processor(), handle_dns_request(), handle_request(), handle_resolve_result(), modify_request(), process_result(), and process_result().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_packet()

void GNUNET_DNSPARSER_free_packet ( struct GNUNET_DNSPARSER_Packet p)

Free memory taken by a packet.

Parameters
ppacket to free

Definition at line 978 of file dnsparser.c.

979{
980 for (unsigned int i = 0; i < p->num_queries; i++)
981 GNUNET_free (p->queries[i].name);
982 GNUNET_free (p->queries);
983 for (unsigned int i = 0; i < p->num_answers; i++)
984 GNUNET_DNSPARSER_free_record (&p->answers[i]);
985 GNUNET_free (p->answers);
986 for (unsigned int i = 0; i < p->num_authority_records; i++)
987 GNUNET_DNSPARSER_free_record (&p->authority_records[i]);
988 GNUNET_free (p->authority_records);
989 for (unsigned int i = 0; i < p->num_additional_records; i++)
990 GNUNET_DNSPARSER_free_record (&p->additional_records[i]);
991 GNUNET_free (p->additional_records);
992 GNUNET_free (p);
993}
void GNUNET_DNSPARSER_free_record(struct GNUNET_DNSPARSER_Record *r)
Free the given DNS record.
Definition dnsparser.c:201

References GNUNET_DNSPARSER_free_record(), GNUNET_free, and p.

Referenced by display_request(), dns_post_request_handler(), dns_result_parser(), do_timeout(), finish_request(), GNS_interceptor_done(), GNUNET_DNSPARSER_parse(), handle_dns_request(), handle_request(), handle_resolve_result(), modify_request(), process_result(), process_result(), recursive_dns_resolution(), reply_to_dns(), result_processor(), send_response(), and vpn_allocation_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_pack()

int GNUNET_DNSPARSER_pack ( const struct GNUNET_DNSPARSER_Packet p,
uint16_t  max,
char **  buf,
size_t *  buf_length 
)

Given a DNS packet p, generate the corresponding UDP payload.

Note that we do not attempt to pack the strings with pointers as this would complicate the code and this is about being simple and secure, not fast, fancy and broken like bind.

Parameters
ppacket to pack
maxmaximum allowed size for the resulting UDP payload
bufset to a buffer with the packed message
buf_lengthset to the length of buf
Returns
GNUNET_SYSERR if p is invalid GNUNET_NO if p was truncated (but there is still a result in buf) GNUNET_OK if p was packed completely into buf

Definition at line 1428 of file dnsparser.c.

1432{
1433 struct GNUNET_TUN_DnsHeader dns;
1434 size_t off;
1435 char tmp[max];
1436 int ret;
1437 int trc;
1438
1439 if ((p->num_queries > UINT16_MAX) || (p->num_answers > UINT16_MAX) ||
1440 (p->num_authority_records > UINT16_MAX) ||
1441 (p->num_additional_records > UINT16_MAX))
1442 return GNUNET_SYSERR;
1443 dns.id = p->id;
1444 dns.flags = p->flags;
1445 dns.query_count = htons (p->num_queries);
1446 dns.answer_rcount = htons (p->num_answers);
1447 dns.authority_rcount = htons (p->num_authority_records);
1448 dns.additional_rcount = htons (p->num_additional_records);
1449
1450 off = sizeof(struct GNUNET_TUN_DnsHeader);
1451 trc = GNUNET_NO;
1452 for (unsigned int i = 0; i < p->num_queries; i++)
1453 {
1455 sizeof(tmp),
1456 &off,
1457 &p->queries[i]);
1458 if (GNUNET_SYSERR == ret)
1459 return GNUNET_SYSERR;
1460 if (GNUNET_NO == ret)
1461 {
1462 dns.query_count = htons ((uint16_t) (i - 1));
1463 trc = GNUNET_YES;
1464 break;
1465 }
1466 }
1467 for (unsigned int i = 0; i < p->num_answers; i++)
1468 {
1469 ret = add_record (tmp, sizeof(tmp), &off, &p->answers[i]);
1470 if (GNUNET_SYSERR == ret)
1471 return GNUNET_SYSERR;
1472 if (GNUNET_NO == ret)
1473 {
1474 dns.answer_rcount = htons ((uint16_t) (i - 1));
1475 trc = GNUNET_YES;
1476 break;
1477 }
1478 }
1479 for (unsigned int i = 0; i < p->num_authority_records; i++)
1480 {
1481 ret = add_record (tmp, sizeof(tmp), &off, &p->authority_records[i]);
1482 if (GNUNET_SYSERR == ret)
1483 return GNUNET_SYSERR;
1484 if (GNUNET_NO == ret)
1485 {
1486 dns.authority_rcount = htons ((uint16_t) (i - 1));
1487 trc = GNUNET_YES;
1488 break;
1489 }
1490 }
1491 for (unsigned int i = 0; i < p->num_additional_records; i++)
1492 {
1493 ret = add_record (tmp, sizeof(tmp), &off, &p->additional_records[i]);
1494 if (GNUNET_SYSERR == ret)
1495 return GNUNET_SYSERR;
1496 if (GNUNET_NO == ret)
1497 {
1498 dns.additional_rcount = htons (i - 1);
1499 trc = GNUNET_YES;
1500 break;
1501 }
1502 }
1503
1504 if (GNUNET_YES == trc)
1505 dns.flags.message_truncated = 1;
1506 GNUNET_memcpy (tmp, &dns, sizeof(struct GNUNET_TUN_DnsHeader));
1507
1508 *buf = GNUNET_malloc (off);
1509 *buf_length = off;
1510 GNUNET_memcpy (*buf, tmp, off);
1511 if (GNUNET_YES == trc)
1512 return GNUNET_NO;
1513 return GNUNET_OK;
1514}
static int add_record(char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_Record *record)
Add a DNS record to the UDP packet at the given location.
Definition dnsparser.c:1321
static int ret
Final status code.
Definition gnunet-arm.c:93
int GNUNET_DNSPARSER_builder_add_query(char *dst, size_t dst_len, size_t *off, const struct GNUNET_DNSPARSER_Query *query)
Add a DNS query to the UDP packet at the given location.
Definition dnsparser.c:1091
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
@ GNUNET_YES
@ GNUNET_NO
#define GNUNET_malloc(size)
Wrapper around malloc.
#define max(x, y)

References add_record(), GNUNET_TUN_DnsHeader::additional_rcount, GNUNET_TUN_DnsHeader::answer_rcount, GNUNET_TUN_DnsHeader::authority_rcount, GNUNET_TUN_DnsHeader::flags, GNUNET_DNSPARSER_builder_add_query(), GNUNET_malloc, GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_SYSERR, GNUNET_YES, GNUNET_TUN_DnsHeader::id, max, GNUNET_TUN_DnsFlags::message_truncated, p, GNUNET_TUN_DnsHeader::query_count, and ret.

Referenced by build_dns_query(), finish_request(), modify_request(), pack(), queue(), recursive_dns_resolution(), reply_to_dns(), and send_response().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_name()

int GNUNET_DNSPARSER_builder_add_name ( char *  dst,
size_t  dst_len,
size_t *  off,
const char *  name 
)

Add a DNS name to the UDP packet at the given location, converting the name to IDNA notation as necessary.

Parameters
dstwhere to write the name (UDP packet)
dst_lennumber of bytes in dst
offpointer to offset where to write the name (increment by bytes used) must not be changed if there is an error
namename to write
Returns
GNUNET_SYSERR if name is invalid GNUNET_NO if name did not fit GNUNET_OK if name was added to dst

Definition at line 1013 of file dnsparser.c.

1017{
1018 const char *dot;
1019 const char *idna_name;
1020 char *idna_start;
1021 size_t start;
1022 size_t pos;
1023 size_t len;
1024 Idna_rc rc;
1025
1026 if (NULL == name)
1027 return GNUNET_SYSERR;
1028
1029 if (IDNA_SUCCESS !=
1030 (rc = idna_to_ascii_8z (name, &idna_start, IDNA_ALLOW_UNASSIGNED)))
1031 {
1033 _ (
1034 "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"),
1035 name,
1036 idna_strerror (rc));
1037 return GNUNET_NO;
1038 }
1039 idna_name = idna_start;
1040 GNUNET_assert (*off <= SIZE_MAX - strlen (idna_name) - 2);
1041 start = *off;
1042 if (start + strlen (idna_name) + 2 > dst_len)
1043 goto fail;
1044 pos = start;
1045 do
1046 {
1047 dot = strchr (idna_name, '.');
1048 if (NULL == dot)
1049 len = strlen (idna_name);
1050 else
1051 len = dot - idna_name;
1052 if (len == 0)
1053 break;
1054 if (len >= 64)
1055 {
1057 "Invalid DNS name `%s': label with %u characters encountered\n",
1058 name,
1059 (unsigned int) len);
1060 goto fail; /* label too long or empty */
1061 }
1062 dst[pos++] = (char) (uint8_t) len;
1063 GNUNET_memcpy (&dst[pos], idna_name, len);
1064 pos += len;
1065 idna_name += len + 1; /* also skip dot */
1066 }
1067 while (NULL != dot);
1068 dst[pos++] = '\0'; /* terminator */
1069 *off = pos;
1070 free (idna_start);
1071 return GNUNET_OK;
1072fail:
1073 free (idna_start);
1074 return GNUNET_NO;
1075}
static int start
Set if we are to start default services (including ARM).
Definition gnunet-arm.c:38
char * idna_name
DNS IDNA name to lookup.
Definition gnunet-gns.c:63
#define GNUNET_log(kind,...)
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
@ GNUNET_ERROR_TYPE_WARNING
@ GNUNET_ERROR_TYPE_ERROR
#define _(String)
GNU gettext support macro.
Definition platform.h:179
#define SIZE_MAX
Definition platform.h:213

References _, GNUNET_assert, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_WARNING, GNUNET_log, GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_SYSERR, idna_name, name, SIZE_MAX, and start.

Referenced by add_record(), dns_result_parser(), dns_string_to_value(), GNUNET_DNSPARSER_builder_add_mx(), GNUNET_DNSPARSER_builder_add_query(), GNUNET_DNSPARSER_builder_add_soa(), GNUNET_DNSPARSER_builder_add_srv(), handle_gns_resolution_result(), and process_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_query()

int GNUNET_DNSPARSER_builder_add_query ( char *  dst,
size_t  dst_len,
size_t *  off,
const struct GNUNET_DNSPARSER_Query query 
)

Add a DNS query to the UDP packet at the given location.

Parameters
dstwhere to write the query
dst_lennumber of bytes in dst
offpointer to offset where to write the query (increment by bytes used) must not be changed if there is an error
queryquery to write
Returns
GNUNET_SYSERR if query is invalid GNUNET_NO if query did not fit GNUNET_OK if query was added to dst

Definition at line 1091 of file dnsparser.c.

1095{
1096 int ret;
1097 struct GNUNET_TUN_DnsQueryLine ql;
1098
1099 GNUNET_assert (dst_len >= sizeof (ql));
1101 dst_len - sizeof(ql),
1102 off,
1103 query->name);
1104 if (ret != GNUNET_OK)
1105 return ret;
1106 ql.type = htons (query->type);
1107 ql.dns_traffic_class = htons (query->dns_traffic_class);
1108 GNUNET_memcpy (&dst[*off], &ql, sizeof(ql));
1109 (*off) += sizeof(ql);
1110 return GNUNET_OK;
1111}
int GNUNET_DNSPARSER_builder_add_name(char *dst, size_t dst_len, size_t *off, const char *name)
Add a DNS name to the UDP packet at the given location, converting the name to IDNA notation as neces...
Definition dnsparser.c:1013
uint16_t dns_traffic_class
See GNUNET_TUN_DNS_CLASS_*.
uint16_t type
See GNUNET_DNSPARSER_TYPE_*.
char * name
Name of the record that the query is for (0-terminated).

References GNUNET_DNSPARSER_Query::dns_traffic_class, GNUNET_TUN_DnsQueryLine::dns_traffic_class, GNUNET_assert, GNUNET_DNSPARSER_builder_add_name(), GNUNET_memcpy, GNUNET_OK, GNUNET_DNSPARSER_Query::name, ret, GNUNET_DNSPARSER_Query::type, and GNUNET_TUN_DnsQueryLine::type.

Referenced by GNUNET_DNSPARSER_pack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_mx()

int GNUNET_DNSPARSER_builder_add_mx ( char *  dst,
size_t  dst_len,
size_t *  off,
const struct GNUNET_DNSPARSER_MxRecord mx 
)

Add an MX record to the UDP packet at the given location.

Parameters
dstwhere to write the mx record
dst_lennumber of bytes in dst
offpointer to offset where to write the mx information (increment by bytes used); can also change if there was an error
mxmx information to write
Returns
GNUNET_SYSERR if mx is invalid GNUNET_NO if mx did not fit GNUNET_OK if mx was added to dst

Definition at line 1127 of file dnsparser.c.

1131{
1132 uint16_t mxpref;
1133
1134 GNUNET_assert (*off <= SIZE_MAX - sizeof (uint16_t));
1135 if (*off + sizeof(uint16_t) > dst_len)
1136 return GNUNET_NO;
1137 mxpref = htons (mx->preference);
1138 GNUNET_memcpy (&dst[*off], &mxpref, sizeof(mxpref));
1139 (*off) += sizeof(mxpref);
1140 return GNUNET_DNSPARSER_builder_add_name (dst, dst_len, off, mx->mxhost);
1141}
char * mxhost
Name of the mail server.
uint16_t preference
Preference for this entry (lower value is higher preference).

References GNUNET_assert, GNUNET_DNSPARSER_builder_add_name(), GNUNET_memcpy, GNUNET_NO, GNUNET_DNSPARSER_MxRecord::mxhost, GNUNET_DNSPARSER_MxRecord::preference, and SIZE_MAX.

Referenced by add_record(), dns_result_parser(), dns_string_to_value(), handle_gns_resolution_result(), and process_record().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_soa()

int GNUNET_DNSPARSER_builder_add_soa ( char *  dst,
size_t  dst_len,
size_t *  off,
const struct GNUNET_DNSPARSER_SoaRecord soa 
)

Add an SOA record to the UDP packet at the given location.

Parameters
dstwhere to write the SOA record
dst_lennumber of bytes in dst
offpointer to offset where to write the SOA information (increment by bytes used) can also change if there was an error
soaSOA information to write
Returns
GNUNET_SYSERR if soa is invalid GNUNET_NO if soa did not fit GNUNET_OK if soa was added to dst

Definition at line 1205 of file dnsparser.c.

1209{
1210 struct GNUNET_TUN_DnsSoaRecord sd;
1211 int ret;
1212
1213 if ((GNUNET_OK !=
1214 (ret =
1215 GNUNET_DNSPARSER_builder_add_name (dst, dst_len, off, soa->mname))) ||
1216 (GNUNET_OK !=
1217 (ret =
1218 GNUNET_DNSPARSER_builder_add_name (dst, dst_len, off, soa->rname))))
1219 return ret;
1220 if (*off + sizeof(struct GNUNET_TUN_DnsSoaRecord) > dst_len)
1221 return GNUNET_NO;
1222 sd.serial = htonl (soa->serial);
1223 sd.refresh = htonl (soa->refresh);
1224 sd.retry = htonl (soa->retry);
1225 sd.expire = htonl (soa->expire);
1226 sd.minimum = htonl (soa->minimum_ttl);
1227 GNUNET_memcpy (&dst[*off], &sd, sizeof(sd));
1228 (*off) += sizeof(sd);
1229 return GNUNET_OK;
1230}
uint32_t retry
Time interval that should elapse before a failed refresh should be retried.
char * mname
The domainname of the name server that was the original or primary source of data for this zone.
uint32_t refresh
Time interval before the zone should be refreshed.
uint32_t minimum_ttl
The bit minimum TTL field that should be exported with any RR from this zone.
char * rname
A domainname which specifies the mailbox of the person responsible for this zone.
uint32_t expire
Time value that specifies the upper limit on the time interval that can elapse before the zone is no ...
uint32_t serial
The version number of the original copy of the zone.
Payload of DNS SOA record (header).
uint32_t serial
The version number of the original copy of the zone.

References GNUNET_DNSPARSER_SoaRecord::expire, GNUNET_TUN_DnsSoaRecord::expire, GNUNET_DNSPARSER_builder_add_name(), GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_TUN_DnsSoaRecord::minimum, GNUNET_DNSPARSER_SoaRecord::minimum_ttl, GNUNET_DNSPARSER_SoaRecord::mname, GNUNET_DNSPARSER_SoaRecord::refresh, GNUNET_TUN_DnsSoaRecord::refresh, ret, GNUNET_DNSPARSER_SoaRecord::retry, GNUNET_TUN_DnsSoaRecord::retry, GNUNET_DNSPARSER_SoaRecord::rname, GNUNET_DNSPARSER_SoaRecord::serial, and GNUNET_TUN_DnsSoaRecord::serial.

Referenced by add_record(), dns_result_parser(), dns_string_to_value(), handle_gns_resolution_result(), and process_record().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_cert()

int GNUNET_DNSPARSER_builder_add_cert ( char *  dst,
size_t  dst_len,
size_t *  off,
const struct GNUNET_DNSPARSER_CertRecord cert 
)

Add CERT record to the UDP packet at the given location.

Parameters
dstwhere to write the CERT record
dst_lennumber of bytes in dst
offpointer to offset where to write the CERT information (increment by bytes used) can also change if there was an error
certCERT information to write
Returns
GNUNET_SYSERR if soa is invalid GNUNET_NO if soa did not fit GNUNET_OK if soa was added to dst

Add CERT record to the UDP packet at the given location.

Parameters
dstwhere to write the CERT record
dst_lennumber of bytes in dst
offpointer to offset where to write the CERT information (increment by bytes used); can also change if there was an error
certCERT information to write
Returns
GNUNET_SYSERR if cert is invalid GNUNET_NO if cert did not fit GNUNET_OK if cert was added to dst

Definition at line 1157 of file dnsparser.c.

1162{
1163 struct GNUNET_TUN_DnsCertRecord dcert;
1164
1165#ifdef __clang__
1166#pragma clang diagnostic push
1167#pragma clang diagnostic ignored "-Wtautological-constant-out-of-range-compare"
1168#endif
1169 if ((cert->cert_type > UINT16_MAX) || (cert->algorithm > UINT8_MAX))
1170 {
1171 GNUNET_break (0);
1172 return GNUNET_SYSERR;
1173 }
1174#ifdef __clang__
1175#pragma clang diagnostic pop
1176#endif
1177 GNUNET_assert (*off <= SIZE_MAX - sizeof (dcert));
1178 GNUNET_assert (cert->certificate_size <= SIZE_MAX - *off - sizeof (dcert));
1179 if (*off + sizeof(dcert) + cert->certificate_size > dst_len)
1180 return GNUNET_NO;
1181 dcert.cert_type = htons ((uint16_t) cert->cert_type);
1182 dcert.cert_tag = htons ((uint16_t) cert->cert_tag);
1183 dcert.algorithm = (uint8_t) cert->algorithm;
1184 GNUNET_memcpy (&dst[*off], &dcert, sizeof(dcert));
1185 (*off) += sizeof(dcert);
1186 GNUNET_memcpy (&dst[*off], cert->certificate_data, cert->certificate_size);
1187 (*off) += cert->certificate_size;
1188 return GNUNET_OK;
1189}
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.
enum GNUNET_DNSPARSER_CertType cert_type
Certificate type.
char * certificate_data
Data of the certificate.
enum GNUNET_DNSPARSER_CertAlgorithm algorithm
Algorithm.
size_t certificate_size
Number of bytes in certificate_data.
uint16_t cert_tag
Certificate KeyTag.
Payload of DNS CERT record.

References GNUNET_DNSPARSER_CertRecord::algorithm, GNUNET_TUN_DnsCertRecord::algorithm, GNUNET_DNSPARSER_CertRecord::cert_tag, GNUNET_TUN_DnsCertRecord::cert_tag, GNUNET_DNSPARSER_CertRecord::cert_type, GNUNET_TUN_DnsCertRecord::cert_type, GNUNET_DNSPARSER_CertRecord::certificate_data, GNUNET_DNSPARSER_CertRecord::certificate_size, GNUNET_assert, GNUNET_break, GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_SYSERR, and SIZE_MAX.

Referenced by add_record(), dns_string_to_value(), and process_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_srv()

int GNUNET_DNSPARSER_builder_add_srv ( char *  dst,
size_t  dst_len,
size_t *  off,
const struct GNUNET_DNSPARSER_SrvRecord srv 
)

Add an SRV record to the UDP packet at the given location.

Parameters
dstwhere to write the SRV record
dst_lennumber of bytes in dst
offpointer to offset where to write the SRV information (increment by bytes used) can also change if there was an error
srvSRV information to write
Returns
GNUNET_SYSERR if srv is invalid GNUNET_NO if srv did not fit GNUNET_OK if srv was added to dst

Definition at line 1246 of file dnsparser.c.

1250{
1251 struct GNUNET_TUN_DnsSrvRecord sd;
1252 int ret;
1253
1254 GNUNET_assert (*off <= SIZE_MAX - sizeof (sd));
1255 if (*off + sizeof(sd) > dst_len)
1256 return GNUNET_NO;
1257 sd.prio = htons (srv->priority);
1258 sd.weight = htons (srv->weight);
1259 sd.port = htons (srv->port);
1260 GNUNET_memcpy (&dst[*off], &sd, sizeof(sd));
1261 (*off) += sizeof(sd);
1262 if (GNUNET_OK !=
1263 (ret =
1264 GNUNET_DNSPARSER_builder_add_name (dst, dst_len, off, srv->target)))
1265 return ret;
1266 return GNUNET_OK;
1267}
uint16_t port
TCP or UDP port of the service.
uint16_t weight
Relative weight for records with the same priority.
uint16_t priority
Preference for this entry (lower value is higher preference).
char * target
Hostname offering the service.
Payload of DNS SRV record (header).

References GNUNET_assert, GNUNET_DNSPARSER_builder_add_name(), GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_DNSPARSER_SrvRecord::port, GNUNET_TUN_DnsSrvRecord::port, GNUNET_TUN_DnsSrvRecord::prio, GNUNET_DNSPARSER_SrvRecord::priority, ret, SIZE_MAX, GNUNET_DNSPARSER_SrvRecord::target, GNUNET_DNSPARSER_SrvRecord::weight, and GNUNET_TUN_DnsSrvRecord::weight.

Referenced by add_record(), dns_result_parser(), dns_string_to_value(), handle_gns_resolution_result(), and process_record().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_builder_add_uri()

int GNUNET_DNSPARSER_builder_add_uri ( char *  dst,
size_t  dst_len,
size_t *  off,
const struct GNUNET_DNSPARSER_UriRecord uri 
)

Add an URI record to the UDP packet at the given location.

Parameters
dstwhere to write the URI record
dst_lennumber of bytes in dst
offpointer to offset where to write the URI information (increment by bytes used) can also change if there was an error
uriURI information to write
Returns
GNUNET_SYSERR if uri is invalid GNUNET_NO if uri did not fit GNUNET_OK if uri was added to dst

Definition at line 1283 of file dnsparser.c.

1287{
1288 struct GNUNET_TUN_DnsUriRecord sd;
1289 int written;
1290 size_t max_target_len;
1291
1292 GNUNET_assert (dst_len > sizeof (sd));
1293 GNUNET_assert (*off <= SIZE_MAX - sizeof (sd));
1294 max_target_len = dst_len - sizeof (sd) - 1;
1295 if (*off + sizeof(sd) > dst_len)
1296 return GNUNET_NO;
1297 sd.prio = htons (uri->priority);
1298 sd.weight = htons (uri->weight);
1299 GNUNET_memcpy (&dst[*off], &sd, sizeof(sd));
1300 (*off) += sizeof(sd);
1301 written = GNUNET_snprintf (&dst[*off], max_target_len, "%s", uri->target);
1302 (*off) += written;
1303 dst[*off] = '\0';
1304 return GNUNET_OK;
1305}
static struct GNUNET_FS_Uri * uri
Value of URI provided on command-line (when not publishing a file but just creating UBlocks to refer ...
int GNUNET_snprintf(char *buf, size_t size, const char *format,...) __attribute__((format(printf
Like snprintf, just aborts if the buffer is of insufficient size.
Payload of DNS URI record (header).

References GNUNET_assert, GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_snprintf(), GNUNET_TUN_DnsUriRecord::prio, SIZE_MAX, uri, and GNUNET_TUN_DnsUriRecord::weight.

Referenced by add_record(), dns_result_parser(), dns_string_to_value(), handle_gns_resolution_result(), and process_record().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_record()

int GNUNET_DNSPARSER_parse_record ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off,
struct GNUNET_DNSPARSER_Record r 
)

Parse a DNS record entry.

Parameters
udp_payloadentire UDP payload
udp_payload_lengthlength of udp_payload
offpointer to the offset of the record to parse in the udp_payload (to be incremented by the size of the record)
rwhere to write the record information
Returns
GNUNET_OK on success, GNUNET_SYSERR if the record is malformed

Definition at line 640 of file dnsparser.c.

644{
645 char *name;
646 struct GNUNET_TUN_DnsRecordLine rl;
647 size_t old_off;
648 uint16_t data_len;
649
650 name = GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
651 if (NULL == name)
652 {
653 GNUNET_break_op (0);
654 return GNUNET_SYSERR;
655 }
656 r->name = name;
657 if (*off + sizeof(struct GNUNET_TUN_DnsRecordLine) > udp_payload_length)
658 {
659 GNUNET_break_op (0);
660 return GNUNET_SYSERR;
661 }
662 GNUNET_memcpy (&rl, &udp_payload[*off], sizeof(rl));
663 (*off) += sizeof(rl);
664 r->type = ntohs (rl.type);
665 r->dns_traffic_class = ntohs (rl.dns_traffic_class);
668 data_len = ntohs (rl.data_len);
669 if (*off + data_len > udp_payload_length)
670 {
671 GNUNET_break_op (0);
672 return GNUNET_SYSERR;
673 }
674 old_off = *off;
675 switch (r->type)
676 {
681 r->data.hostname =
682 GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
683 if ((NULL == r->data.hostname) || (old_off + data_len != *off))
684 return GNUNET_SYSERR;
685 return GNUNET_OK;
686
688 r->data.soa =
689 GNUNET_DNSPARSER_parse_soa (udp_payload, udp_payload_length, off);
690 if ((NULL == r->data.soa) || (old_off + data_len != *off))
691 {
692 GNUNET_break_op (0);
693 return GNUNET_SYSERR;
694 }
695 return GNUNET_OK;
696
698 r->data.mx =
699 GNUNET_DNSPARSER_parse_mx (udp_payload, udp_payload_length, off);
700 if ((NULL == r->data.mx) || (old_off + data_len != *off))
701 {
702 GNUNET_break_op (0);
703 return GNUNET_SYSERR;
704 }
705 return GNUNET_OK;
706
708 r->data.srv =
709 GNUNET_DNSPARSER_parse_srv (udp_payload, udp_payload_length, off);
710 if ((NULL == r->data.srv) || (old_off + data_len != *off))
711 {
712 GNUNET_break_op (0);
713 return GNUNET_SYSERR;
714 }
715 return GNUNET_OK;
716
718 r->data.uri =
719 GNUNET_DNSPARSER_parse_uri (udp_payload, udp_payload_length, off);
720 if ((NULL == r->data.uri) || (old_off + data_len != *off))
721 {
722 GNUNET_break_op (0);
723 return GNUNET_SYSERR;
724 }
725 return GNUNET_OK;
727 r->data.cert =
728 GNUNET_DNSPARSER_parse_cert (udp_payload,
729 udp_payload_length,
730 off);
731 if ((NULL == r->data.cert) || (old_off + data_len != *off))
732 {
733 GNUNET_break_op (0);
734 return GNUNET_SYSERR;
735 }
736 default:
739 GNUNET_memcpy (r->data.raw.data, &udp_payload[*off], data_len);
740 break;
741 }
742 (*off) += data_len;
743 return GNUNET_OK;
744}
#define GNUNET_DNSPARSER_TYPE_URI
struct GNUNET_DNSPARSER_MxRecord * GNUNET_DNSPARSER_parse_mx(const char *udp_payload, size_t udp_payload_length, size_t *off)
Parse a DNS MX record.
Definition dnsparser.c:473
#define GNUNET_DNSPARSER_TYPE_SRV
#define GNUNET_DNSPARSER_TYPE_SOA
#define GNUNET_DNSPARSER_TYPE_CERT
#define GNUNET_DNSPARSER_TYPE_PTR
struct GNUNET_DNSPARSER_SoaRecord * GNUNET_DNSPARSER_parse_soa(const char *udp_payload, size_t udp_payload_length, size_t *off)
Parse a DNS SOA record.
Definition dnsparser.c:428
struct GNUNET_DNSPARSER_CertRecord * GNUNET_DNSPARSER_parse_cert(const char *udp_payload, size_t udp_payload_length, size_t *off)
Parse a DNS CERT record.
Definition dnsparser.c:599
#define GNUNET_DNSPARSER_TYPE_NS
#define GNUNET_DNSPARSER_TYPE_CNAME
#define GNUNET_DNSPARSER_TYPE_DNAME
struct GNUNET_DNSPARSER_UriRecord * GNUNET_DNSPARSER_parse_uri(const char *udp_payload, size_t udp_payload_length, size_t *off)
Parse a DNS URI record.
Definition dnsparser.c:555
struct GNUNET_DNSPARSER_SrvRecord * GNUNET_DNSPARSER_parse_srv(const char *udp_payload, size_t udp_payload_length, size_t *off)
Parse a DNS SRV record.
Definition dnsparser.c:514
char * GNUNET_DNSPARSER_parse_name(const char *udp_payload, size_t udp_payload_length, size_t *off)
Parse name inside of a DNS query or record.
Definition dnsparser.c:371
#define GNUNET_DNSPARSER_TYPE_MX
#define GNUNET_TIME_UNIT_SECONDS
One second.
struct GNUNET_TIME_Absolute GNUNET_TIME_relative_to_absolute(struct GNUNET_TIME_Relative rel)
Convert relative time to an absolute time in the future.
Definition time.c:316
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition time.c:486
void * data
Binary record data.
size_t data_len
Number of bytes in data.
uint16_t dns_traffic_class
See GNUNET_TUN_DNS_CLASS_*.
struct GNUNET_DNSPARSER_SoaRecord * soa
SOA data for SOA records.
struct GNUNET_DNSPARSER_SrvRecord * srv
SRV data for SRV records.
struct GNUNET_DNSPARSER_MxRecord * mx
MX data for MX records.
char * hostname
For NS, CNAME and PTR records, this is the uncompressed 0-terminated hostname.
struct GNUNET_DNSPARSER_CertRecord * cert
CERT data for CERT records.
uint16_t type
See GNUNET_DNSPARSER_TYPE_*.
struct GNUNET_TIME_Absolute expiration_time
When does the record expire?
union GNUNET_DNSPARSER_Record::@24 data
Payload of the record (which one of these is valid depends on the 'type').
char * name
Name of the record that the query is for (0-terminated).
struct GNUNET_DNSPARSER_RawRecord raw
Raw data for all other types.
struct GNUNET_DNSPARSER_UriRecord * uri
URI data for URI records.
General DNS record prefix.
uint16_t data_len
Number of bytes of data that follow.

References GNUNET_DNSPARSER_Record::cert, GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_RawRecord::data_len, GNUNET_TUN_DnsRecordLine::data_len, GNUNET_DNSPARSER_Record::dns_traffic_class, GNUNET_TUN_DnsRecordLine::dns_traffic_class, GNUNET_DNSPARSER_Record::expiration_time, GNUNET_break_op, GNUNET_DNSPARSER_parse_cert(), GNUNET_DNSPARSER_parse_mx(), GNUNET_DNSPARSER_parse_name(), GNUNET_DNSPARSER_parse_soa(), GNUNET_DNSPARSER_parse_srv(), GNUNET_DNSPARSER_parse_uri(), GNUNET_DNSPARSER_TYPE_CERT, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_DNSPARSER_TYPE_DNAME, GNUNET_DNSPARSER_TYPE_MX, GNUNET_DNSPARSER_TYPE_NS, GNUNET_DNSPARSER_TYPE_PTR, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_DNSPARSER_TYPE_SRV, GNUNET_DNSPARSER_TYPE_URI, GNUNET_malloc, GNUNET_memcpy, GNUNET_OK, GNUNET_SYSERR, GNUNET_TIME_relative_multiply(), GNUNET_TIME_relative_to_absolute(), GNUNET_TIME_UNIT_SECONDS, GNUNET_DNSPARSER_Record::hostname, GNUNET_DNSPARSER_Record::mx, name, GNUNET_DNSPARSER_Record::name, GNUNET_DNSPARSER_Record::raw, GNUNET_DNSPARSER_Record::soa, GNUNET_DNSPARSER_Record::srv, GNUNET_TUN_DnsRecordLine::ttl, GNUNET_DNSPARSER_Record::type, GNUNET_TUN_DnsRecordLine::type, and GNUNET_DNSPARSER_Record::uri.

Referenced by GNUNET_DNSPARSER_parse().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_name()

char * GNUNET_DNSPARSER_parse_name ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off 
)

Parse name inside of a DNS query or record.

Parameters
udp_payloadentire UDP payload
udp_payload_lengthlength of udp_payload
offpointer to the offset of the name to parse in the udp_payload (to be incremented by the size of the name)
Returns
name as 0-terminated C string on success, NULL if the payload is malformed

Definition at line 371 of file dnsparser.c.

374{
375 return parse_name (udp_payload, udp_payload_length, off, 0);
376}
static char * parse_name(const char *udp_payload, size_t udp_payload_length, size_t *off, unsigned int depth)
Parse name inside of a DNS query or record.
Definition dnsparser.c:251

References parse_name().

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_parse_mx(), GNUNET_DNSPARSER_parse_query(), GNUNET_DNSPARSER_parse_record(), GNUNET_DNSPARSER_parse_soa(), GNUNET_DNSPARSER_parse_srv(), handle_gns_resolution_result(), recursive_cname_resolution(), and reply_to_dns().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_query()

int GNUNET_DNSPARSER_parse_query ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off,
struct GNUNET_DNSPARSER_Query q 
)

Parse a DNS query entry.

Parameters
udp_payloadentire UDP payload
udp_payload_lengthlength of udp_payload
offpointer to the offset of the query to parse in the udp_payload (to be incremented by the size of the query)
qwhere to write the query information
Returns
GNUNET_OK on success, GNUNET_SYSERR if the query is malformed

Definition at line 390 of file dnsparser.c.

394{
395 char *name;
396 struct GNUNET_TUN_DnsQueryLine ql;
397
398 name = GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
399 if (NULL == name)
400 {
401 GNUNET_break_op (0);
402 return GNUNET_SYSERR;
403 }
404 q->name = name;
405 if (*off + sizeof(struct GNUNET_TUN_DnsQueryLine) > udp_payload_length)
406 {
407 GNUNET_break_op (0);
408 return GNUNET_SYSERR;
409 }
410 GNUNET_memcpy (&ql, &udp_payload[*off], sizeof(ql));
411 *off += sizeof(ql);
412 q->type = ntohs (ql.type);
413 q->dns_traffic_class = ntohs (ql.dns_traffic_class);
414 return GNUNET_OK;
415}
static struct GNUNET_REVOCATION_Query * q
Handle for revocation query.

References GNUNET_TUN_DnsQueryLine::dns_traffic_class, GNUNET_break_op, GNUNET_DNSPARSER_parse_name(), GNUNET_memcpy, GNUNET_OK, GNUNET_SYSERR, name, q, and GNUNET_TUN_DnsQueryLine::type.

Referenced by GNUNET_DNSPARSER_parse().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_soa()

struct GNUNET_DNSPARSER_SoaRecord * GNUNET_DNSPARSER_parse_soa ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off 
)

Parse a DNS SOA record.

Parameters
udp_payloadreference to UDP packet
udp_payload_lengthlength of udp_payload
offpointer to the offset of the query to parse in the SOA record (to be incremented by the size of the record), unchanged on error
Returns
the parsed SOA record, NULL on error

Definition at line 428 of file dnsparser.c.

431{
432 struct GNUNET_DNSPARSER_SoaRecord *soa;
433 struct GNUNET_TUN_DnsSoaRecord soa_bin;
434 size_t old_off;
435
436 old_off = *off;
438 soa->mname =
439 GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
440 soa->rname =
441 GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
442 if ((NULL == soa->mname) || (NULL == soa->rname) ||
443 (*off + sizeof(struct GNUNET_TUN_DnsSoaRecord) > udp_payload_length))
444 {
445 GNUNET_break_op (0);
447 *off = old_off;
448 return NULL;
449 }
450 GNUNET_memcpy (&soa_bin,
451 &udp_payload[*off],
452 sizeof(struct GNUNET_TUN_DnsSoaRecord));
453 soa->serial = ntohl (soa_bin.serial);
454 soa->refresh = ntohl (soa_bin.refresh);
455 soa->retry = ntohl (soa_bin.retry);
456 soa->expire = ntohl (soa_bin.expire);
457 soa->minimum_ttl = ntohl (soa_bin.minimum);
458 (*off) += sizeof(struct GNUNET_TUN_DnsSoaRecord);
459 return soa;
460}
void GNUNET_DNSPARSER_free_soa(struct GNUNET_DNSPARSER_SoaRecord *soa)
Free SOA information record.
Definition dnsparser.c:125
Information from SOA records (RFC 1035).

References GNUNET_DNSPARSER_SoaRecord::expire, GNUNET_TUN_DnsSoaRecord::expire, GNUNET_break_op, GNUNET_DNSPARSER_free_soa(), GNUNET_DNSPARSER_parse_name(), GNUNET_memcpy, GNUNET_new, GNUNET_TUN_DnsSoaRecord::minimum, GNUNET_DNSPARSER_SoaRecord::minimum_ttl, GNUNET_DNSPARSER_SoaRecord::mname, GNUNET_DNSPARSER_SoaRecord::refresh, GNUNET_TUN_DnsSoaRecord::refresh, GNUNET_DNSPARSER_SoaRecord::retry, GNUNET_TUN_DnsSoaRecord::retry, GNUNET_DNSPARSER_SoaRecord::rname, GNUNET_DNSPARSER_SoaRecord::serial, and GNUNET_TUN_DnsSoaRecord::serial.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_parse_record(), handle_gns_resolution_result(), and reply_to_dns().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_cert()

struct GNUNET_DNSPARSER_CertRecord * GNUNET_DNSPARSER_parse_cert ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off 
)

Parse a DNS CERT record.

Parameters
udp_payloadreference to UDP packet
udp_payload_lengthlength of udp_payload
offpointer to the offset of the query to parse in the CERT record (to be incremented by the size of the record), unchanged on error
Returns
the parsed CERT record, NULL on error

Definition at line 599 of file dnsparser.c.

602{
603 struct GNUNET_DNSPARSER_CertRecord *cert;
604 struct GNUNET_TUN_DnsCertRecord dcert;
605
606 if (*off + sizeof(struct GNUNET_TUN_DnsCertRecord) >= udp_payload_length)
607 {
608 GNUNET_break_op (0);
609 return NULL;
610 }
611 GNUNET_memcpy (&dcert,
612 &udp_payload[*off],
613 sizeof(struct GNUNET_TUN_DnsCertRecord));
614 (*off) += sizeof(struct GNUNET_TUN_DnsCertRecord);
616 cert->cert_type = ntohs (dcert.cert_type);
617 cert->cert_tag = ntohs (dcert.cert_tag);
618 cert->algorithm = dcert.algorithm;
619 cert->certificate_size = udp_payload_length - (*off);
622 &udp_payload[*off],
623 cert->certificate_size);
624 (*off) += cert->certificate_size;
625 return cert;
626}
Information from CERT records (RFC 4034).

References GNUNET_DNSPARSER_CertRecord::algorithm, GNUNET_TUN_DnsCertRecord::algorithm, GNUNET_DNSPARSER_CertRecord::cert_tag, GNUNET_TUN_DnsCertRecord::cert_tag, GNUNET_DNSPARSER_CertRecord::cert_type, GNUNET_TUN_DnsCertRecord::cert_type, GNUNET_DNSPARSER_CertRecord::certificate_data, GNUNET_DNSPARSER_CertRecord::certificate_size, GNUNET_break_op, GNUNET_malloc, GNUNET_memcpy, and GNUNET_new.

Referenced by dns_value_to_string(), and GNUNET_DNSPARSER_parse_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_mx()

struct GNUNET_DNSPARSER_MxRecord * GNUNET_DNSPARSER_parse_mx ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off 
)

Parse a DNS MX record.

Parameters
udp_payloadreference to UDP packet
udp_payload_lengthlength of udp_payload
offpointer to the offset of the query to parse in the MX record (to be incremented by the size of the record), unchanged on error
Returns
the parsed MX record, NULL on error

Definition at line 473 of file dnsparser.c.

476{
477 struct GNUNET_DNSPARSER_MxRecord *mx;
478 uint16_t mxpref;
479 size_t old_off;
480
481 old_off = *off;
482 if (*off + sizeof(uint16_t) > udp_payload_length)
483 {
484 GNUNET_break_op (0);
485 return NULL;
486 }
487 GNUNET_memcpy (&mxpref, &udp_payload[*off], sizeof(uint16_t));
488 (*off) += sizeof(uint16_t);
490 mx->preference = ntohs (mxpref);
491 mx->mxhost =
492 GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
493 if (NULL == mx->mxhost)
494 {
495 GNUNET_break_op (0);
497 *off = old_off;
498 return NULL;
499 }
500 return mx;
501}
void GNUNET_DNSPARSER_free_mx(struct GNUNET_DNSPARSER_MxRecord *mx)
Free MX information record.
Definition dnsparser.c:186
Information from MX records (RFC 1035).

References GNUNET_break_op, GNUNET_DNSPARSER_free_mx(), GNUNET_DNSPARSER_parse_name(), GNUNET_memcpy, GNUNET_new, GNUNET_DNSPARSER_MxRecord::mxhost, and GNUNET_DNSPARSER_MxRecord::preference.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_parse_record(), handle_gns_resolution_result(), and reply_to_dns().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_srv()

struct GNUNET_DNSPARSER_SrvRecord * GNUNET_DNSPARSER_parse_srv ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off 
)

Parse a DNS SRV record.

Parameters
udp_payloadreference to UDP packet
udp_payload_lengthlength of udp_payload
offpointer to the offset of the query to parse in the SRV record (to be incremented by the size of the record), unchanged on error
Returns
the parsed SRV record, NULL on error

Definition at line 514 of file dnsparser.c.

517{
518 struct GNUNET_DNSPARSER_SrvRecord *srv;
519 struct GNUNET_TUN_DnsSrvRecord srv_bin;
520 size_t old_off;
521
522 old_off = *off;
523 if (*off + sizeof(struct GNUNET_TUN_DnsSrvRecord) > udp_payload_length)
524 return NULL;
525 GNUNET_memcpy (&srv_bin,
526 &udp_payload[*off],
527 sizeof(struct GNUNET_TUN_DnsSrvRecord));
528 (*off) += sizeof(struct GNUNET_TUN_DnsSrvRecord);
530 srv->priority = ntohs (srv_bin.prio);
531 srv->weight = ntohs (srv_bin.weight);
532 srv->port = ntohs (srv_bin.port);
533 srv->target =
534 GNUNET_DNSPARSER_parse_name (udp_payload, udp_payload_length, off);
535 if (NULL == srv->target)
536 {
538 *off = old_off;
539 return NULL;
540 }
541 return srv;
542}
void GNUNET_DNSPARSER_free_srv(struct GNUNET_DNSPARSER_SrvRecord *srv)
Free SRV information record.
Definition dnsparser.c:156
Information from SRV records (RFC 2782).

References GNUNET_DNSPARSER_free_srv(), GNUNET_DNSPARSER_parse_name(), GNUNET_memcpy, GNUNET_new, GNUNET_DNSPARSER_SrvRecord::port, GNUNET_TUN_DnsSrvRecord::port, GNUNET_TUN_DnsSrvRecord::prio, GNUNET_DNSPARSER_SrvRecord::priority, GNUNET_DNSPARSER_SrvRecord::target, GNUNET_DNSPARSER_SrvRecord::weight, and GNUNET_TUN_DnsSrvRecord::weight.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_parse_record(), and handle_gns_resolution_result().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_parse_uri()

struct GNUNET_DNSPARSER_UriRecord * GNUNET_DNSPARSER_parse_uri ( const char *  udp_payload,
size_t  udp_payload_length,
size_t *  off 
)

Parse a DNS URI record.

Parameters
udp_payloadreference to UDP packet
udp_payload_lengthlength of udp_payload
offpointer to the offset of the query to parse in the URI record (to be incremented by the size of the record), unchanged on error
Returns
the parsed URI record, NULL on error

Definition at line 555 of file dnsparser.c.

558{
560 struct GNUNET_TUN_DnsUriRecord uri_bin;
561 size_t old_off;
562 int max_len;
563 int len;
564
565 old_off = *off;
566 if (*off + sizeof(struct GNUNET_TUN_DnsUriRecord) > udp_payload_length)
567 return NULL;
568 GNUNET_memcpy (&uri_bin,
569 &udp_payload[*off],
570 sizeof(struct GNUNET_TUN_DnsUriRecord));
571 (*off) += sizeof(struct GNUNET_TUN_DnsUriRecord);
573 uri->priority = ntohs (uri_bin.prio);
574 uri->weight = ntohs (uri_bin.weight);
575 max_len = udp_payload_length - *off - sizeof(struct GNUNET_TUN_DnsUriRecord);
576 len = GNUNET_asprintf (&(uri->target), "%.*s", max_len,
577 &udp_payload[*off]);
578 (*off) += len;
579 if (NULL == uri->target)
580 {
582 *off = old_off;
583 return NULL;
584 }
585 return uri;
586}
void GNUNET_DNSPARSER_free_uri(struct GNUNET_DNSPARSER_UriRecord *uri)
Free URI information record.
Definition dnsparser.c:171
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
Information from URI records (RFC 7553).

References GNUNET_asprintf(), GNUNET_DNSPARSER_free_uri(), GNUNET_memcpy, GNUNET_new, GNUNET_TUN_DnsUriRecord::prio, uri, and GNUNET_TUN_DnsUriRecord::weight.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_parse_record(), handle_gns_resolution_result(), and reply_to_dns().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_duplicate_record()

struct GNUNET_DNSPARSER_Record * GNUNET_DNSPARSER_duplicate_record ( const struct GNUNET_DNSPARSER_Record r)

Duplicate (deep-copy) the given DNS record.

Parameters
rthe record
Returns
the newly allocated record

Definition at line 837 of file dnsparser.c.

838{
839 struct GNUNET_DNSPARSER_Record *dup = GNUNET_memdup (r, sizeof(*r));
840
841 dup->name = GNUNET_strdup (r->name);
842 switch (r->type)
843 {
849 break;
850 }
851
854 break;
855 }
856
859 break;
860 }
861
864 break;
865 }
866
869 break;
870 }
871
874 break;
875 }
876
877 default: {
879 r->data.raw.data_len);
880 }
881 }
882 return dup;
883}
struct GNUNET_DNSPARSER_MxRecord * GNUNET_DNSPARSER_duplicate_mx_record(const struct GNUNET_DNSPARSER_MxRecord *r)
Duplicate (deep-copy) the given DNS record.
Definition dnsparser.c:929
struct GNUNET_DNSPARSER_SoaRecord * GNUNET_DNSPARSER_duplicate_soa_record(const struct GNUNET_DNSPARSER_SoaRecord *r)
Duplicate (deep-copy) the given DNS record.
Definition dnsparser.c:893
struct GNUNET_DNSPARSER_SrvRecord * GNUNET_DNSPARSER_duplicate_srv_record(const struct GNUNET_DNSPARSER_SrvRecord *r)
Duplicate (deep-copy) the given DNS record.
Definition dnsparser.c:945
struct GNUNET_DNSPARSER_CertRecord * GNUNET_DNSPARSER_duplicate_cert_record(const struct GNUNET_DNSPARSER_CertRecord *r)
Duplicate (deep-copy) the given DNS record.
Definition dnsparser.c:911
struct GNUNET_DNSPARSER_UriRecord * GNUNET_DNSPARSER_duplicate_uri_record(const struct GNUNET_DNSPARSER_UriRecord *r)
Duplicate (deep-copy) the given DNS record.
Definition dnsparser.c:962
#define GNUNET_memdup(buf, size)
Allocate and initialize a block of memory.

References GNUNET_DNSPARSER_Record::cert, GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_RawRecord::data_len, GNUNET_DNSPARSER_duplicate_cert_record(), GNUNET_DNSPARSER_duplicate_mx_record(), GNUNET_DNSPARSER_duplicate_soa_record(), GNUNET_DNSPARSER_duplicate_srv_record(), GNUNET_DNSPARSER_duplicate_uri_record(), GNUNET_DNSPARSER_TYPE_CERT, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_DNSPARSER_TYPE_DNAME, GNUNET_DNSPARSER_TYPE_MX, GNUNET_DNSPARSER_TYPE_NS, GNUNET_DNSPARSER_TYPE_PTR, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_DNSPARSER_TYPE_SRV, GNUNET_DNSPARSER_TYPE_URI, GNUNET_memdup, GNUNET_strdup, GNUNET_DNSPARSER_Record::hostname, GNUNET_DNSPARSER_Record::mx, GNUNET_DNSPARSER_Record::name, GNUNET_DNSPARSER_Record::raw, GNUNET_DNSPARSER_Record::soa, GNUNET_DNSPARSER_Record::srv, GNUNET_DNSPARSER_Record::type, and GNUNET_DNSPARSER_Record::uri.

Referenced by cache_answers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_duplicate_soa_record()

struct GNUNET_DNSPARSER_SoaRecord * GNUNET_DNSPARSER_duplicate_soa_record ( const struct GNUNET_DNSPARSER_SoaRecord r)

Duplicate (deep-copy) the given DNS record.

Parameters
rthe record
Returns
the newly allocated record

Definition at line 893 of file dnsparser.c.

895{
896 struct GNUNET_DNSPARSER_SoaRecord *dup = GNUNET_memdup (r, sizeof(*r));
897
898 dup->mname = GNUNET_strdup (r->mname);
899 dup->rname = GNUNET_strdup (r->rname);
900 return dup;
901}

References GNUNET_memdup, GNUNET_strdup, GNUNET_DNSPARSER_SoaRecord::mname, and GNUNET_DNSPARSER_SoaRecord::rname.

Referenced by GNUNET_DNSPARSER_duplicate_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_duplicate_cert_record()

struct GNUNET_DNSPARSER_CertRecord * GNUNET_DNSPARSER_duplicate_cert_record ( const struct GNUNET_DNSPARSER_CertRecord r)

Duplicate (deep-copy) the given DNS record.

Parameters
rthe record
Returns
the newly allocated record

Definition at line 911 of file dnsparser.c.

913{
914 struct GNUNET_DNSPARSER_CertRecord *dup = GNUNET_memdup (r, sizeof(*r));
915
918 return dup;
919}

References GNUNET_DNSPARSER_CertRecord::certificate_data, GNUNET_DNSPARSER_CertRecord::certificate_size, and GNUNET_memdup.

Referenced by GNUNET_DNSPARSER_duplicate_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_duplicate_mx_record()

struct GNUNET_DNSPARSER_MxRecord * GNUNET_DNSPARSER_duplicate_mx_record ( const struct GNUNET_DNSPARSER_MxRecord r)

Duplicate (deep-copy) the given DNS record.

Parameters
rthe record
Returns
the newly allocated record

Definition at line 929 of file dnsparser.c.

930{
931 struct GNUNET_DNSPARSER_MxRecord *dup = GNUNET_memdup (r, sizeof(*r));
932
933 dup->mxhost = GNUNET_strdup (r->mxhost);
934 return dup;
935}

References GNUNET_memdup, GNUNET_strdup, and GNUNET_DNSPARSER_MxRecord::mxhost.

Referenced by GNUNET_DNSPARSER_duplicate_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_duplicate_srv_record()

struct GNUNET_DNSPARSER_SrvRecord * GNUNET_DNSPARSER_duplicate_srv_record ( const struct GNUNET_DNSPARSER_SrvRecord r)

Duplicate (deep-copy) the given DNS record.

Parameters
rthe record
Returns
the newly allocated record

Definition at line 945 of file dnsparser.c.

947{
948 struct GNUNET_DNSPARSER_SrvRecord *dup = GNUNET_memdup (r, sizeof(*r));
949
950 dup->target = GNUNET_strdup (r->target);
951 return dup;
952}

References GNUNET_memdup, GNUNET_strdup, and GNUNET_DNSPARSER_SrvRecord::target.

Referenced by GNUNET_DNSPARSER_duplicate_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_duplicate_uri_record()

struct GNUNET_DNSPARSER_UriRecord * GNUNET_DNSPARSER_duplicate_uri_record ( const struct GNUNET_DNSPARSER_UriRecord r)

Duplicate (deep-copy) the given DNS record.

Parameters
rthe record
Returns
the newly allocated record

Definition at line 962 of file dnsparser.c.

964{
965 struct GNUNET_DNSPARSER_UriRecord *dup = GNUNET_memdup (r, sizeof(*r));
966
967 dup->target = GNUNET_strdup (r->target);
968 return dup;
969}
char * target
URI of the target, where the URI is as specified in RFC 3986.

References GNUNET_memdup, GNUNET_strdup, and GNUNET_DNSPARSER_UriRecord::target.

Referenced by GNUNET_DNSPARSER_duplicate_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_record()

void GNUNET_DNSPARSER_free_record ( struct GNUNET_DNSPARSER_Record r)

Free the given DNS record.

Parameters
rrecord to free

Definition at line 201 of file dnsparser.c.

202{
203 GNUNET_free (r->name);
204 switch (r->type)
205 {
208 break;
209
212 break;
213
216 break;
217
220 break;
221
224 break;
225
231 break;
232
233 default:
235 break;
236 }
237}
void GNUNET_DNSPARSER_free_cert(struct GNUNET_DNSPARSER_CertRecord *cert)
Free CERT information record.
Definition dnsparser.c:141

References GNUNET_DNSPARSER_Record::cert, GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_free_cert(), GNUNET_DNSPARSER_free_mx(), GNUNET_DNSPARSER_free_soa(), GNUNET_DNSPARSER_free_srv(), GNUNET_DNSPARSER_free_uri(), GNUNET_DNSPARSER_TYPE_CERT, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_DNSPARSER_TYPE_DNAME, GNUNET_DNSPARSER_TYPE_MX, GNUNET_DNSPARSER_TYPE_NS, GNUNET_DNSPARSER_TYPE_PTR, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_DNSPARSER_TYPE_SRV, GNUNET_DNSPARSER_TYPE_URI, GNUNET_free, GNUNET_DNSPARSER_Record::hostname, GNUNET_DNSPARSER_Record::mx, GNUNET_DNSPARSER_Record::name, GNUNET_DNSPARSER_Record::raw, GNUNET_DNSPARSER_Record::soa, GNUNET_DNSPARSER_Record::srv, GNUNET_DNSPARSER_Record::type, and GNUNET_DNSPARSER_Record::uri.

Referenced by free_cache_entry(), free_hosts_entry(), GNUNET_DNSPARSER_free_packet(), and remove_expired().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_mx()

void GNUNET_DNSPARSER_free_mx ( struct GNUNET_DNSPARSER_MxRecord mx)

Free MX information record.

Parameters
mxrecord to free

Definition at line 186 of file dnsparser.c.

187{
188 if (NULL == mx)
189 return;
190 GNUNET_free (mx->mxhost);
191 GNUNET_free (mx);
192}

References GNUNET_free, and GNUNET_DNSPARSER_MxRecord::mxhost.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_free_record(), GNUNET_DNSPARSER_parse_mx(), and handle_gns_resolution_result().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_srv()

void GNUNET_DNSPARSER_free_srv ( struct GNUNET_DNSPARSER_SrvRecord srv)

Free SRV information record.

Parameters
srvrecord to free

Definition at line 156 of file dnsparser.c.

157{
158 if (NULL == srv)
159 return;
160 GNUNET_free (srv->target);
161 GNUNET_free (srv);
162}

References GNUNET_free, and GNUNET_DNSPARSER_SrvRecord::target.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_free_record(), GNUNET_DNSPARSER_parse_srv(), and handle_gns_resolution_result().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_uri()

void GNUNET_DNSPARSER_free_uri ( struct GNUNET_DNSPARSER_UriRecord uri)

Free URI information record.

Parameters
urirecord to free

Definition at line 171 of file dnsparser.c.

172{
173 if (NULL == uri)
174 return;
175 GNUNET_free (uri->target);
177}

References GNUNET_free, and uri.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_free_record(), GNUNET_DNSPARSER_parse_uri(), and handle_gns_resolution_result().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_soa()

void GNUNET_DNSPARSER_free_soa ( struct GNUNET_DNSPARSER_SoaRecord soa)

Free SOA information record.

Parameters
soarecord to free

Definition at line 125 of file dnsparser.c.

126{
127 if (NULL == soa)
128 return;
129 GNUNET_free (soa->mname);
130 GNUNET_free (soa->rname);
131 GNUNET_free (soa);
132}

References GNUNET_free, GNUNET_DNSPARSER_SoaRecord::mname, and GNUNET_DNSPARSER_SoaRecord::rname.

Referenced by dns_value_to_string(), GNUNET_DNSPARSER_free_record(), GNUNET_DNSPARSER_parse_soa(), and handle_gns_resolution_result().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_free_cert()

void GNUNET_DNSPARSER_free_cert ( struct GNUNET_DNSPARSER_CertRecord cert)

Free CERT information record.

Parameters
certrecord to free

Definition at line 141 of file dnsparser.c.

142{
143 if (NULL == cert)
144 return;
146 GNUNET_free (cert);
147}

References GNUNET_DNSPARSER_CertRecord::certificate_data, and GNUNET_free.

Referenced by dns_value_to_string(), and GNUNET_DNSPARSER_free_record().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_bin_to_hex()

char * GNUNET_DNSPARSER_bin_to_hex ( const void *  data,
size_t  data_size 
)

Convert a block of binary data to HEX.

Parameters
databinary data to convert
data_sizenumber of bytes in data
Returns
HEX string (lower case)

Definition at line 1525 of file dnsparser.c.

1526{
1527 char *ret;
1528 size_t off;
1529 const uint8_t *idata;
1530
1531 idata = data;
1532 ret = GNUNET_malloc (data_size * 2 + 1);
1533 for (off = 0; off < data_size; off++)
1534 sprintf (&ret[off * 2], "%02x", idata[off]);
1535 return ret;
1536}
static char * data
The data to insert into the dht.
static size_t data_size
Number of bytes in data.

References data, data_size, GNUNET_malloc, and ret.

Referenced by dns_value_to_string().

Here is the caller graph for this function:

◆ GNUNET_DNSPARSER_hex_to_bin()

size_t GNUNET_DNSPARSER_hex_to_bin ( const char *  hex,
void *  data 
)

Convert a HEX string to block of binary data.

Parameters
hexHEX string to convert (may contain mixed case)
datawhere to write result, must be at least strlen(hex)/2 bytes long
Returns
number of bytes written to data

Definition at line 1548 of file dnsparser.c.

1549{
1550 size_t data_size;
1551 size_t off;
1552 uint8_t *idata;
1553 unsigned int h;
1554 char in[3];
1555
1556 data_size = strlen (hex) / 2;
1557 idata = data;
1558 in[2] = '\0';
1559 for (off = 0; off < data_size; off++)
1560 {
1561 in[0] = tolower ((unsigned char) hex[off * 2]);
1562 in[1] = tolower ((unsigned char) hex[off * 2 + 1]);
1563 if (1 != sscanf (in, "%x", &h))
1564 return off;
1565 idata[off] = (uint8_t) h;
1566 }
1567 return off;
1568}
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition gnunet-arm.c:98

References data, data_size, and h.

Referenced by dns_string_to_value().

Here is the caller graph for this function: