]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-dns-query.h
missing.h: add IFLA_MACVLAN_FLAGS
[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
24#include <inttypes.h>
25
26#include "sd-bus.h"
27#include "util.h"
28
29typedef struct DnsQuery DnsQuery;
30typedef struct DnsQueryTransaction DnsQueryTransaction;
31
32#include "resolved.h"
33#include "resolved-dns-scope.h"
34#include "resolved-dns-rr.h"
35#include "resolved-dns-packet.h"
36
37typedef enum DnsQueryState {
38 DNS_QUERY_NULL,
39 DNS_QUERY_SENT,
40 DNS_QUERY_FAILURE,
41 DNS_QUERY_SUCCESS,
ad867662 42 DNS_QUERY_NO_SERVERS,
74b2466e
LP
43 DNS_QUERY_TIMEOUT,
44 DNS_QUERY_ATTEMPTS_MAX,
45 DNS_QUERY_INVALID_REPLY,
ad867662 46 DNS_QUERY_RESOURCES,
74b2466e
LP
47} DnsQueryState;
48
49struct DnsQueryTransaction {
50 DnsQuery *query;
51 DnsScope *scope;
52
53 DnsQueryState state;
54 uint16_t id;
55
56 sd_event_source *timeout_event_source;
57 unsigned n_attempts;
58
ad867662
LP
59 DnsPacket *sent, *received;
60
61 /* TCP connection logic */
62 int tcp_fd;
63 sd_event_source *tcp_event_source;
64 size_t tcp_written, tcp_read;
65 be16_t tcp_read_size;
74b2466e
LP
66
67 LIST_FIELDS(DnsQueryTransaction, transactions_by_query);
68 LIST_FIELDS(DnsQueryTransaction, transactions_by_scope);
69};
70
71struct DnsQuery {
72 Manager *manager;
73
74 DnsResourceKey *keys;
75 unsigned n_keys;
76
77 DnsQueryState state;
78
79 sd_event_source *timeout_event_source;
80
ad867662 81 DnsPacket *received;
74b2466e
LP
82
83 sd_bus_message *request;
84 unsigned char request_family;
85 const char *request_hostname;
86 union in_addr_union request_address;
87
88 void (*complete)(DnsQuery* q);
89
90 LIST_HEAD(DnsQueryTransaction, transactions);
91 LIST_FIELDS(DnsQuery, queries);
92};
93
94int dns_query_new(Manager *m, DnsQuery **q, DnsResourceKey *keys, unsigned n_keys);
95DnsQuery *dns_query_free(DnsQuery *q);
96int dns_query_start(DnsQuery *q);
97void dns_query_finish(DnsQuery *q);
98
99DnsQueryTransaction* dns_query_transaction_free(DnsQueryTransaction *t);
100int dns_query_transaction_start(DnsQueryTransaction *t);
ad867662 101void dns_query_transaction_reply(DnsQueryTransaction *t, DnsPacket *p);
74b2466e
LP
102
103DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuery*, dns_query_free);