]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add helper to generate a proxy protocol payload from dq
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 9 Dec 2021 14:07:42 +0000 (15:07 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 14 Jan 2022 09:22:48 +0000 (10:22 +0100)
pdns/dnsdistdist/dnsdist-lua-ffi-interface.h
pdns/dnsdistdist/dnsdist-lua-ffi.cc

index 6f23081ffe15e924c2411c4962ccb26dbbaf8519..151804a65291795d4e24df255f0a1dcaace1a175 100644 (file)
@@ -139,3 +139,4 @@ typedef struct dnsdist_ffi_proxy_protocol_value {
 } dnsdist_ffi_proxy_protocol_value_t;
 
 size_t dnsdist_ffi_generate_proxy_protocol_payload(size_t addrSize, const void* srcAddr, const void* dstAddr, uint16_t srcPort, uint16_t dstPort, bool tcp, size_t valuesCount, const dnsdist_ffi_proxy_protocol_value_t* values, void* out, size_t outSize) __attribute__ ((visibility ("default")));
+size_t dnsdist_ffi_dnsquestion_generate_proxy_protocol_payload(const dnsdist_ffi_dnsquestion_t* dq, const size_t valuesCount, const dnsdist_ffi_proxy_protocol_value_t* values, void* out, const size_t outSize);
index 0dfefb1ffdc3f947f1d61ec14c153daafbd1aa05..3717658885b37147bf2631854b71b4117de95aa3 100644 (file)
@@ -655,3 +655,23 @@ size_t dnsdist_ffi_generate_proxy_protocol_payload(const size_t addrSize, const
     return 0;
   }
 }
+
+size_t dnsdist_ffi_dnsquestion_generate_proxy_protocol_payload(const dnsdist_ffi_dnsquestion_t* dq, const size_t valuesCount, const dnsdist_ffi_proxy_protocol_value* values, void* out, const size_t outSize)
+{
+  std::vector<ProxyProtocolValue> valuesVect;
+  if (valuesCount > 0) {
+    valuesVect.reserve(valuesCount);
+    for (size_t idx = 0; idx < valuesCount; idx++) {
+      valuesVect.push_back({ std::string(values[idx].value, values[idx].size), values[idx].type });
+    }
+  }
+
+  std::string payload = makeProxyHeader(dq->dq->overTCP(), *dq->dq->remote, *dq->dq->local, valuesVect);
+  if (payload.size() > outSize) {
+    return 0;
+  }
+
+  memcpy(out, payload.c_str(), payload.size());
+
+  return payload.size();
+}