]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/resolve/resolved-dns-question.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 This file is part of systemd.
7 Copyright 2014 Lennart Poettering
10 typedef struct DnsQuestion DnsQuestion
;
13 #include "resolved-dns-rr.h"
15 /* A simple array of resource keys */
19 unsigned n_keys
, n_allocated
;
20 DnsResourceKey
* keys
[0];
23 DnsQuestion
*dns_question_new(unsigned n
);
24 DnsQuestion
*dns_question_ref(DnsQuestion
*q
);
25 DnsQuestion
*dns_question_unref(DnsQuestion
*q
);
27 int dns_question_new_address(DnsQuestion
**ret
, int family
, const char *name
, bool convert_idna
);
28 int dns_question_new_reverse(DnsQuestion
**ret
, int family
, const union in_addr_union
*a
);
29 int dns_question_new_service(DnsQuestion
**ret
, const char *service
, const char *type
, const char *domain
, bool with_txt
, bool convert_idna
);
31 int dns_question_add(DnsQuestion
*q
, DnsResourceKey
*key
);
33 int dns_question_matches_rr(DnsQuestion
*q
, DnsResourceRecord
*rr
, const char *search_domain
);
34 int dns_question_matches_cname_or_dname(DnsQuestion
*q
, DnsResourceRecord
*rr
, const char* search_domain
);
35 int dns_question_is_valid_for_query(DnsQuestion
*q
);
36 int dns_question_contains(DnsQuestion
*a
, const DnsResourceKey
*k
);
37 int dns_question_is_equal(DnsQuestion
*a
, DnsQuestion
*b
);
39 int dns_question_cname_redirect(DnsQuestion
*q
, const DnsResourceRecord
*cname
, DnsQuestion
**ret
);
41 const char *dns_question_first_name(DnsQuestion
*q
);
43 static inline unsigned dns_question_size(DnsQuestion
*q
) {
44 return q
? q
->n_keys
: 0;
47 static inline bool dns_question_isempty(DnsQuestion
*q
) {
48 return dns_question_size(q
) <= 0;
51 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuestion
*, dns_question_unref
);
53 #define _DNS_QUESTION_FOREACH(u, key, q) \
54 for (unsigned UNIQ_T(i, u) = ({ \
55 (key) = ((q) && (q)->n_keys > 0) ? (q)->keys[0] : NULL; \
58 (q) && (UNIQ_T(i, u) < (q)->n_keys); \
59 UNIQ_T(i, u)++, (key) = (UNIQ_T(i, u) < (q)->n_keys ? (q)->keys[UNIQ_T(i, u)] : NULL))
61 #define DNS_QUESTION_FOREACH(key, q) _DNS_QUESTION_FOREACH(UNIQ, key, q)