return "invalid "+stringerror();
}
+ [[nodiscard]] string toStringReversed() const
+ {
+ if (isIPv4()) {
+ const auto ip = ntohl(sin4.sin_addr.s_addr);
+ auto a = (ip >> 0) & 0xFF;
+ auto b = (ip >> 8) & 0xFF;
+ auto c = (ip >> 16) & 0xFF;
+ auto d = (ip >> 24) & 0xFF;
+ return std::to_string(a) + "." + std::to_string(b) + "." + std::to_string(c) + "." + std::to_string(d);
+ }
+ else {
+ const auto* addr = &sin6.sin6_addr;
+ std::stringstream res{};
+ res << std::hex;
+ for (int i = 15; i >= 0; i--) {
+ auto byte = addr->s6_addr[i];
+ res << ((byte >> 0) & 0xF) << ".";
+ res << ((byte >> 4) & 0xF);
+ if (i != 0) {
+ res << ".";
+ }
+ }
+ return res.str();
+ }
+ }
+
string toStringWithPort() const
{
if(sin4.sin_family==AF_INET)
}
}
+BOOST_AUTO_TEST_CASE(test_ComboAddressReverse)
+{
+ ComboAddress a{"1.2.3.4"};
+ BOOST_CHECK_EQUAL(a.toStringReversed(), "4.3.2.1");
+
+ ComboAddress b{"192.168.0.1"};
+ BOOST_CHECK_EQUAL(b.toStringReversed(), "1.0.168.192");
+
+ ComboAddress c{"2001:db8::567:89ab"};
+ BOOST_CHECK_EQUAL(c.toStringReversed(), "b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2");
+
+ ComboAddress d{"::1"};
+ BOOST_CHECK_EQUAL(d.toStringReversed(), "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0");
+
+ ComboAddress e{"ab:cd::10"};
+ BOOST_CHECK_EQUAL(e.toStringReversed(), "0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.c.0.0.b.a.0.0");
+
+ ComboAddress f{"4321:0:1:2:3:4:567:89ab"};
+ BOOST_CHECK_EQUAL(f.toStringReversed(), "b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4");
+}
+
BOOST_AUTO_TEST_CASE(test_Mapping)
{
ComboAddress lh("::1");