]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
iputils: Add function to print comma-separated CA containers
authorPieter Lexis <pieter.lexis@powerdns.com>
Thu, 30 Jul 2020 11:22:43 +0000 (13:22 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Fri, 25 Sep 2020 10:26:11 +0000 (12:26 +0200)
pdns/iputils.hh
pdns/test-iputils_hh.cc

index b8ea84fab3d599d8b3f47e2d183a634bac959c70..1283921d7f6e8eb34f0e1dfb8d1dd859cb1744f6 100644 (file)
@@ -360,6 +360,25 @@ union ComboAddress {
     }
     return false;
   }
+
+  /*! Returns a comma-separated string of IP addresses
+   *
+   * \param c  An stl container with ComboAddresses
+   * \param withPort  Also print the port (default true)
+   * \param portExcept  Print the port, except when this is the port (default 53)
+   */
+  template < template < class ... > class Container, class ... Args >
+  static string caContainerToString(const Container<ComboAddress, Args...>& c, const bool withPort = true, const uint16_t portExcept = 53) {
+  vector<string> strs;
+  for (const auto& ca : c) {
+    if (withPort) {
+      strs.push_back(ca.toStringWithPortExcept(portExcept));
+      continue;
+    }
+    strs.push_back(ca.toString());
+  }
+  return boost::join(strs, ",");
+  };
 };
 
 /** This exception is thrown by the Netmask class and by extension by the NetmaskGroup class */
index 04a010f22962629a2498f0a39dd9f5f4cdfd51ce..cc543929535a21bf9e81585359196739b9775599 100644 (file)
@@ -795,4 +795,29 @@ BOOST_AUTO_TEST_CASE(test_iterator) {
   }
 }
 
+BOOST_AUTO_TEST_CASE(test_ComboAddress_caContainerToString) {
+  ComboAddress ca1("192.0.2.1:53");
+  ComboAddress ca2("192.0.2.2:5300");
+  ComboAddress ca3("[2001:db8:53::3]:53");
+  ComboAddress ca4("[2001:db8:53::4]:5300");
+
+  set<ComboAddress> caSet({ca1, ca2, ca3, ca4});
+  vector<ComboAddress> caVector({ca1, ca2, ca3, ca4});
+
+  string caSetStr = ComboAddress::caContainerToString(caSet, false);
+  string caVectorStr = ComboAddress::caContainerToString(caVector, false);
+  BOOST_CHECK_EQUAL(caSetStr, "192.0.2.1,192.0.2.2,2001:db8:53::3,2001:db8:53::4");
+  BOOST_CHECK_EQUAL(caVectorStr, "192.0.2.1,192.0.2.2,2001:db8:53::3,2001:db8:53::4");
+
+  caSetStr = ComboAddress::caContainerToString(caSet, true);
+  caVectorStr = ComboAddress::caContainerToString(caVector, true);
+  BOOST_CHECK_EQUAL(caSetStr, "192.0.2.1,192.0.2.2:5300,2001:db8:53::3,[2001:db8:53::4]:5300");
+  BOOST_CHECK_EQUAL(caVectorStr, "192.0.2.1,192.0.2.2:5300,2001:db8:53::3,[2001:db8:53::4]:5300");
+
+  caSetStr = ComboAddress::caContainerToString(caSet, true, 0);
+  caVectorStr = ComboAddress::caContainerToString(caVector, true, 0);
+  BOOST_CHECK_EQUAL(caSetStr, "192.0.2.1:53,192.0.2.2:5300,[2001:db8:53::3]:53,[2001:db8:53::4]:5300");
+  BOOST_CHECK_EQUAL(caVectorStr, "192.0.2.1:53,192.0.2.2:5300,[2001:db8:53::3]:53,[2001:db8:53::4]:5300");
+}
+
 BOOST_AUTO_TEST_SUITE_END()