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=864036acc73609675f24c60abf59d395155c156d;hp=a07f1747068205ef66959454d0c88856d667238b;hb=a2ba62c719224a4b47751623ca5e8b0333f49721;hpb=74b2466e14a1961bf3ac0e8a60cfaceec705bd59 diff --git a/src/resolve/resolved-dns-query.h b/src/resolve/resolved-dns-query.h index a07f17470..864036acc 100644 --- a/src/resolve/resolved-dns-query.h +++ b/src/resolve/resolved-dns-query.h @@ -36,13 +36,14 @@ typedef struct DnsQueryTransaction DnsQueryTransaction; typedef enum DnsQueryState { DNS_QUERY_NULL, - DNS_QUERY_SENT, + DNS_QUERY_PENDING, DNS_QUERY_FAILURE, DNS_QUERY_SUCCESS, - DNS_QUERY_SKIPPED, + DNS_QUERY_NO_SERVERS, DNS_QUERY_TIMEOUT, DNS_QUERY_ATTEMPTS_MAX, DNS_QUERY_INVALID_REPLY, + DNS_QUERY_RESOURCES } DnsQueryState; struct DnsQueryTransaction { @@ -55,7 +56,13 @@ struct DnsQueryTransaction { sd_event_source *timeout_event_source; unsigned n_attempts; - DnsPacket *packet; + 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; LIST_FIELDS(DnsQueryTransaction, transactions_by_query); LIST_FIELDS(DnsQueryTransaction, transactions_by_scope); @@ -68,12 +75,13 @@ struct DnsQuery { unsigned n_keys; DnsQueryState state; + unsigned n_cname; sd_event_source *timeout_event_source; - uint16_t rcode; - DnsPacket *packet; + DnsPacket *received; + /* Bus client information */ sd_bus_message *request; unsigned char request_family; const char *request_hostname; @@ -88,10 +96,12 @@ struct DnsQuery { int dns_query_new(Manager *m, DnsQuery **q, DnsResourceKey *keys, unsigned n_keys); DnsQuery *dns_query_free(DnsQuery *q); int dns_query_start(DnsQuery *q); -void dns_query_finish(DnsQuery *q); +int dns_query_follow_cname(DnsQuery *q, const char *name); +int dns_query_matches_rr(DnsQuery *q, DnsResourceRecord *rr); +int dns_query_matches_cname(DnsQuery *q, DnsResourceRecord *rr); DnsQueryTransaction* dns_query_transaction_free(DnsQueryTransaction *t); -int dns_query_transaction_start(DnsQueryTransaction *t); -int dns_query_transaction_reply(DnsQueryTransaction *t, DnsPacket *p); +void dns_query_transaction_reply(DnsQueryTransaction *t, DnsPacket *p); +void dns_query_finish(DnsQuery *q); DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuery*, dns_query_free);