]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
sdig: implement TCP Fast Open for DoH
authorOtto <otto.moerbeek@open-xchange.com>
Fri, 5 Mar 2021 12:15:13 +0000 (13:15 +0100)
committerOtto <otto.moerbeek@open-xchange.com>
Fri, 5 Mar 2021 12:15:13 +0000 (13:15 +0100)
While at it, honour timeout parameter as well for DoT.

pdns/minicurl.cc
pdns/minicurl.hh
pdns/sdig.cc

index 68ad5f5e2078d486e9ae3dc542c1a9b8dde4a9b5..fff3636ff3f7ba6195807d185a60a6f6f6cfacbc 100644 (file)
@@ -74,7 +74,7 @@ static string extractHostFromURL(const std::string& url)
   return url.substr(pos, endpos-pos);
 }
 
-void MiniCurl::setupURL(const std::string& str, const ComboAddress* rem, const ComboAddress* src, int timeout)
+void MiniCurl::setupURL(const std::string& str, const ComboAddress* rem, const ComboAddress* src, int timeout, bool fastopen)
 {
   if(rem) {
     struct curl_slist *hostlist = nullptr; // THIS SHOULD BE FREED
@@ -112,6 +112,7 @@ void MiniCurl::setupURL(const std::string& str, const ComboAddress* rem, const C
   curl_easy_setopt(d_curl, CURLOPT_WRITEFUNCTION, write_callback);
   curl_easy_setopt(d_curl, CURLOPT_WRITEDATA, this);
   curl_easy_setopt(d_curl, CURLOPT_TIMEOUT, static_cast<long>(timeout));
+  curl_easy_setopt(d_curl, CURLOPT_TCP_FASTOPEN, fastopen);
 
   clearHeaders();
   d_data.clear();
@@ -132,9 +133,9 @@ std::string MiniCurl::getURL(const std::string& str, const ComboAddress* rem, co
   return ret;
 }
 
-std::string MiniCurl::postURL(const std::string& str, const std::string& postdata, MiniCurlHeaders& headers, int timeout)
+std::string MiniCurl::postURL(const std::string& str, const std::string& postdata, MiniCurlHeaders& headers, int timeout, bool fastopen)
 {
-  setupURL(str, nullptr, nullptr, timeout);
+  setupURL(str, nullptr, nullptr, timeout, fastopen);
   setHeaders(headers);
   curl_easy_setopt(d_curl, CURLOPT_POSTFIELDSIZE, postdata.size());
   curl_easy_setopt(d_curl, CURLOPT_POSTFIELDS, postdata.c_str());
index 50b144a1cfd7e10bd85c357aee338e78467f1ce7..c2550d6bd289a9bfafb5f007f3edfdef6fba3486 100644 (file)
@@ -39,13 +39,13 @@ public:
   ~MiniCurl();
   MiniCurl& operator=(const MiniCurl&) = delete;
   std::string getURL(const std::string& str, const ComboAddress* rem=nullptr, const ComboAddress* src=nullptr, int timeout = 2);
-  std::string postURL(const std::string& str, const std::string& postdata, MiniCurlHeaders& headers, int timeout = 2);
+  std::string postURL(const std::string& str, const std::string& postdata, MiniCurlHeaders& headers, int timeout = 2, bool fastopen = false);
 private:
   CURL *d_curl;
   static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
   std::string d_data;
   struct curl_slist* d_header_list = nullptr;
-  void setupURL(const std::string& str, const ComboAddress* rem=nullptr, const ComboAddress* src=nullptr, int timeout = 2);
+  void setupURL(const std::string& str, const ComboAddress* rem=nullptr, const ComboAddress* src=nullptr, int timeout = 2, bool fastopen = false);
   void setHeaders(const MiniCurlHeaders& headers);
   void clearHeaders();
 };
index c36e22ae23d2f28a1748a508155c29d1968916f2..dee241d2ae2574e7a6e6320603104f9e416170b9 100644 (file)
@@ -376,7 +376,7 @@ try {
     mch.insert(std::make_pair("Accept", "application/dns-message"));
     string question(packet.begin(), packet.end());
     // FIXME: how do we use proxyheader here?
-    reply = mc.postURL(argv[1], question, mch);
+    reply = mc.postURL(argv[1], question, mch, timeout, fastOpen);
     printReply(reply, showflags, hidesoadetails);
 #else
     throw PDNSException("please link sdig against libcurl for DoH support");