X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fresolve%2Fresolved-dns-query.h;h=adaf7b25886f866360b0b5bbc8faeb1590a3ed05;hp=aa205033af2bd7b4075ccd49c59fbfa00e51289e;hb=7263f72499e962b3fd54cdb7c79d49ca72121ede;hpb=322345fdb9865ef2477fba8e4bdde0e1183ef505 diff --git a/src/resolve/resolved-dns-query.h b/src/resolve/resolved-dns-query.h index aa205033a..adaf7b258 100644 --- a/src/resolve/resolved-dns-query.h +++ b/src/resolve/resolved-dns-query.h @@ -25,99 +25,53 @@ #include "sd-bus.h" #include "util.h" +#include "set.h" typedef struct DnsQuery DnsQuery; -typedef struct DnsQueryTransaction DnsQueryTransaction; -#include "resolved.h" #include "resolved-dns-scope.h" #include "resolved-dns-rr.h" -#include "resolved-dns-packet.h" - -typedef enum DnsQueryState { - DNS_QUERY_NULL, - DNS_QUERY_PENDING, - DNS_QUERY_FAILURE, - DNS_QUERY_SUCCESS, - DNS_QUERY_NO_SERVERS, - DNS_QUERY_TIMEOUT, - DNS_QUERY_ATTEMPTS_MAX, - DNS_QUERY_INVALID_REPLY, - DNS_QUERY_RESOURCES -} DnsQueryState; - -struct DnsQueryTransaction { - DnsQuery *query; - DnsScope *scope; - - DnsQueryState state; - uint16_t id; - - sd_event_source *timeout_event_source; - unsigned n_attempts; - - DnsPacket *sent, *received; - - /* TCP connection logic */ - int tcp_fd; - sd_event_source *tcp_event_source; - size_t tcp_written, tcp_read; - be16_t tcp_read_size; - - /* Data from cache */ - DnsResourceRecord **cached_rrs; - unsigned n_cached_rrs; - - LIST_FIELDS(DnsQueryTransaction, transactions_by_query); - LIST_FIELDS(DnsQueryTransaction, transactions_by_scope); -}; +#include "resolved-dns-question.h" +#include "resolved-dns-answer.h" +#include "resolved-dns-stream.h" +#include "resolved-dns-transaction.h" +#include "resolved-manager.h" struct DnsQuery { Manager *manager; + DnsQuestion *question; - DnsResourceKey *keys; - unsigned n_keys; - - DnsQueryState state; - unsigned n_cname; + DnsTransactionState state; + unsigned n_cname_redirects; sd_event_source *timeout_event_source; /* Discovered data */ - DnsPacket *received; - DnsResourceRecord **cached_rrs; - unsigned n_cached_rrs; + DnsAnswer *answer; + int answer_ifindex; + int answer_rcode; /* Bus client information */ sd_bus_message *request; - unsigned char request_family; + int request_family; const char *request_hostname; union in_addr_union request_address; /* Completion callback */ void (*complete)(DnsQuery* q); - unsigned block_finish; + unsigned block_ready; + + Set *transactions; - LIST_HEAD(DnsQueryTransaction, transactions); LIST_FIELDS(DnsQuery, queries); }; -DnsQueryTransaction* dns_query_transaction_free(DnsQueryTransaction *t); -void dns_query_transaction_reply(DnsQueryTransaction *t, DnsPacket *p); - -int dns_query_new(Manager *m, DnsQuery **q, DnsResourceKey *keys, unsigned n_keys); +int dns_query_new(Manager *m, DnsQuery **q, DnsQuestion *question); DnsQuery *dns_query_free(DnsQuery *q); int dns_query_go(DnsQuery *q); -int dns_query_cname_redirect(DnsQuery *q, const char *name); -void dns_query_finish(DnsQuery *q); - -int dns_query_matches_rr(DnsQuery *q, DnsResourceRecord *rr); -int dns_query_matches_cname(DnsQuery *q, DnsResourceRecord *rr); +void dns_query_ready(DnsQuery *q); -/* What we found */ -int dns_query_get_rrs(DnsQuery *q, DnsResourceRecord *** rrs); -int dns_query_get_rcode(DnsQuery *q); -int dns_query_get_ifindex(DnsQuery *q); +int dns_query_cname_redirect(DnsQuery *q, const char *name); DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuery*, dns_query_free);