| |
| #pragma once |
| |
| #include "sd-bus.h" |
| |
| #include "set.h" |
| |
| typedef struct DnsQueryCandidate DnsQueryCandidate; |
| typedef struct DnsQuery DnsQuery; |
| |
| #include "resolved-dns-answer.h" |
| #include "resolved-dns-question.h" |
| #include "resolved-dns-stream.h" |
| #include "resolved-dns-search-domain.h" |
| |
| struct DnsQueryCandidate { |
| DnsQuery *query; |
| DnsScope *scope; |
| |
| DnsSearchDomain *search_domain; |
| |
| int error_code; |
| Set *transactions; |
| |
| LIST_FIELDS(DnsQueryCandidate, candidates_by_query); |
| LIST_FIELDS(DnsQueryCandidate, candidates_by_scope); |
| }; |
| |
| struct DnsQuery { |
| Manager *manager; |
| |
| |
| |
| |
| |
| DnsQuery *auxiliary_for; |
| LIST_HEAD(DnsQuery, auxiliary_queries); |
| unsigned n_auxiliary_queries; |
| int auxiliary_result; |
| |
| |
| |
| |
| |
| DnsQuestion *question_idna; |
| DnsQuestion *question_utf8; |
| |
| uint64_t flags; |
| int ifindex; |
| |
| |
| |
| bool suppress_unroutable_family; |
| |
| |
| bool clamp_ttl; |
| |
| DnsTransactionState state; |
| unsigned n_cname_redirects; |
| |
| LIST_HEAD(DnsQueryCandidate, candidates); |
| sd_event_source *timeout_event_source; |
| |
| |
| DnsAnswer *answer; |
| int answer_rcode; |
| DnssecResult answer_dnssec_result; |
| bool answer_authenticated; |
| DnsProtocol answer_protocol; |
| int answer_family; |
| DnsSearchDomain *answer_search_domain; |
| int answer_errno; |
| bool previous_redirect_unauthenticated; |
| |
| |
| sd_bus_message *request; |
| int request_family; |
| bool request_address_valid; |
| union in_addr_union request_address; |
| unsigned block_all_complete; |
| char *request_address_string; |
| |
| |
| DnsPacket *request_dns_packet; |
| DnsStream *request_dns_stream; |
| DnsPacket *reply_dns_packet; |
| |
| |
| void (*complete)(DnsQuery* q); |
| unsigned block_ready; |
| |
| sd_bus_track *bus_track; |
| |
| LIST_FIELDS(DnsQuery, queries); |
| LIST_FIELDS(DnsQuery, auxiliary_queries); |
| }; |
| |
| enum { |
| DNS_QUERY_MATCH, |
| DNS_QUERY_NOMATCH, |
| DNS_QUERY_RESTARTED, |
| }; |
| |
| DnsQueryCandidate* dns_query_candidate_free(DnsQueryCandidate *c); |
| void dns_query_candidate_notify(DnsQueryCandidate *c); |
| |
| int dns_query_new(Manager *m, DnsQuery **q, DnsQuestion *question_utf8, DnsQuestion *question_idna, int family, uint64_t flags); |
| DnsQuery *dns_query_free(DnsQuery *q); |
| |
| int dns_query_make_auxiliary(DnsQuery *q, DnsQuery *auxiliary_for); |
| |
| int dns_query_go(DnsQuery *q); |
| void dns_query_ready(DnsQuery *q); |
| |
| int dns_query_process_cname(DnsQuery *q); |
| |
| int dns_query_bus_track(DnsQuery *q, sd_bus_message *m); |
| |
| DnsQuestion* dns_query_question_for_protocol(DnsQuery *q, DnsProtocol protocol); |
| |
| const char *dns_query_string(DnsQuery *q); |
| |
| DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuery*, dns_query_free); |
| |
| bool dns_query_fully_authenticated(DnsQuery *q); |