]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-dns-query.h
resolved: rename DNS_TRANSACTION_FAILURE → DNS_TRANSACTION_RCODE_FAILURE
[thirdparty/systemd.git] / src / resolve / resolved-dns-query.h
CommitLineData
74b2466e
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
8 Copyright 2014 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
74b2466e
LP
24
25#include "sd-bus.h"
71d35b6b 26
faa133f3 27#include "set.h"
74b2466e 28
801ad6a6 29typedef struct DnsQueryCandidate DnsQueryCandidate;
74b2466e 30typedef struct DnsQuery DnsQuery;
74b2466e 31
faa133f3 32#include "resolved-dns-answer.h"
71d35b6b 33#include "resolved-dns-question.h"
623a4c97 34#include "resolved-dns-stream.h"
801ad6a6
LP
35#include "resolved-dns-search-domain.h"
36
37struct DnsQueryCandidate {
38 DnsQuery *query;
39 DnsScope *scope;
40
41 DnsSearchDomain *search_domain;
42
43 int error_code;
44 Set *transactions;
45
46 LIST_FIELDS(DnsQueryCandidate, candidates_by_query);
47 LIST_FIELDS(DnsQueryCandidate, candidates_by_scope);
48};
74b2466e
LP
49
50struct DnsQuery {
51 Manager *manager;
45ec7efb
LP
52
53 /* When resolving a service, we first create a TXT+SRV query,
54 * and then for the hostnames we discover auxiliary A+AAAA
55 * queries. This pointer always points from the auxiliary
56 * queries back to the TXT+SRV query. */
57 DnsQuery *auxiliary_for;
58 LIST_HEAD(DnsQuery, auxiliary_queries);
59 unsigned n_auxiliary_queries;
60 int auxiliary_result;
61
faa133f3 62 DnsQuestion *question;
51323288
LP
63 uint64_t flags;
64 int ifindex;
65
ec2c5e43 66 DnsTransactionState state;
faa133f3 67 unsigned n_cname_redirects;
74b2466e 68
801ad6a6 69 LIST_HEAD(DnsQueryCandidate, candidates);
74b2466e
LP
70 sd_event_source *timeout_event_source;
71
322345fd 72 /* Discovered data */
faa133f3 73 DnsAnswer *answer;
faa133f3 74 int answer_rcode;
ae6a4bbf
LP
75 DnsProtocol answer_protocol;
76 int answer_family;
801ad6a6 77 DnsSearchDomain *answer_search_domain;
931851e8 78 bool answer_authenticated;
74b2466e 79
8ba9fd9c 80 /* Bus client information */
74b2466e 81 sd_bus_message *request;
0dd25fb9 82 int request_family;
45ec7efb 83 bool request_address_valid;
74b2466e 84 union in_addr_union request_address;
45ec7efb 85 unsigned block_all_complete;
74b2466e 86
322345fd 87 /* Completion callback */
74b2466e 88 void (*complete)(DnsQuery* q);
faa133f3
LP
89 unsigned block_ready;
90
82bd6ddd
LP
91 sd_bus_track *bus_track;
92
74b2466e 93 LIST_FIELDS(DnsQuery, queries);
45ec7efb 94 LIST_FIELDS(DnsQuery, auxiliary_queries);
74b2466e
LP
95};
96
801ad6a6 97DnsQueryCandidate* dns_query_candidate_free(DnsQueryCandidate *c);
547973de 98void dns_query_candidate_notify(DnsQueryCandidate *c);
801ad6a6 99
51323288 100int dns_query_new(Manager *m, DnsQuery **q, DnsQuestion *question, int family, uint64_t flags);
74b2466e 101DnsQuery *dns_query_free(DnsQuery *q);
322345fd 102
45ec7efb
LP
103int dns_query_make_auxiliary(DnsQuery *q, DnsQuery *auxiliary_for);
104
322345fd 105int dns_query_go(DnsQuery *q);
faa133f3 106void dns_query_ready(DnsQuery *q);
74b2466e 107
45ec7efb 108int dns_query_process_cname(DnsQuery *q);
74b2466e 109
966c66e3 110int dns_query_bus_track(DnsQuery *q, sd_bus_message *m);
82bd6ddd 111
74b2466e 112DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuery*, dns_query_free);