chiark / gitweb /
resolved: add API for resolving specific RRs
[elogind.git] / src / resolve / resolved-dns-query.h
index 2756048be566caaaee0050e8bdb21d3445943889..67fe7f6e8f5b033a1b1d3aff676b42689c557e47 100644 (file)
@@ -36,6 +36,7 @@ typedef struct DnsQueryTransaction DnsQueryTransaction;
 #include "resolved-dns-packet.h"
 #include "resolved-dns-question.h"
 #include "resolved-dns-answer.h"
+#include "resolved-dns-stream.h"
 
 typedef enum DnsQueryState {
         DNS_QUERY_NULL,
@@ -48,6 +49,8 @@ typedef enum DnsQueryState {
         DNS_QUERY_INVALID_REPLY,
         DNS_QUERY_RESOURCES,
         DNS_QUERY_ABORTED,
+        _DNS_QUERY_STATE_MAX,
+        _DNS_QUERY_STATE_INVALID = -1
 } DnsQueryState;
 
 struct DnsQueryTransaction {
@@ -60,15 +63,13 @@ struct DnsQueryTransaction {
 
         DnsPacket *sent, *received;
         DnsAnswer *cached;
+        int cached_rcode;
 
         sd_event_source *timeout_event_source;
         unsigned n_attempts;
 
-        /* TCP connection logic */
-        int tcp_fd;
-        sd_event_source *tcp_event_source;
-        size_t tcp_written, tcp_read;
-        be16_t tcp_read_size;
+        /* TCP connection logic, if we need it */
+        DnsStream *stream;
 
         /* Queries this transaction is referenced by and that shall by
          * notified about this specific transaction completing. */
@@ -89,7 +90,6 @@ struct DnsQuery {
         sd_event_source *timeout_event_source;
 
         /* Discovered data */
-        DnsPacket *received;
         DnsAnswer *answer;
         int answer_ifindex;
         int answer_rcode;
@@ -122,4 +122,7 @@ void dns_query_ready(DnsQuery *q);
 
 int dns_query_cname_redirect(DnsQuery *q, const char *name);
 
+const char* dns_query_state_to_string(DnsQueryState p) _const_;
+DnsQueryState dns_query_state_from_string(const char *s) _pure_;
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQuery*, dns_query_free);