From 5990344cb07858b4cd104eacb8d1b9bb38fa6ff7 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 27 Aug 2015 21:06:09 +0100 Subject: [PATCH] dns: make ctor private This ensures one can't instanciate a DNSResolver object by mistake, but uses the singleton. A separate create static function is added for cases where a new object is explicitely needed. --- src/common/dns_utils.cpp | 5 +++++ src/common/dns_utils.h | 11 ++++++++++- tests/unit_tests/dns_resolver.cpp | 12 ++++++------ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp index e442d3d81..8b7c9b4d9 100644 --- a/src/common/dns_utils.cpp +++ b/src/common/dns_utils.cpp @@ -334,6 +334,11 @@ DNSResolver& DNSResolver::instance() return *staticInstance; } +DNSResolver DNSResolver::create() +{ + return DNSResolver(); +} + bool DNSResolver::check_address_syntax(const char *addr) { // if string doesn't contain a dot, we won't consider it a url for now. diff --git a/src/common/dns_utils.h b/src/common/dns_utils.h index 1e726c80c..50e8001f1 100644 --- a/src/common/dns_utils.h +++ b/src/common/dns_utils.h @@ -49,7 +49,7 @@ struct DNSResolverData; */ class DNSResolver { -public: +private: /** * @brief Constructs an instance of DNSResolver @@ -58,6 +58,8 @@ public: */ DNSResolver(); +public: + /** * @brief takes care of freeing C pointers and such */ @@ -119,6 +121,13 @@ public: */ static DNSResolver& instance(); + /** + * @brief Gets a new instance of DNSResolver + * + * @return returns a pointer to the new object + */ + static DNSResolver create(); + private: /** diff --git a/tests/unit_tests/dns_resolver.cpp b/tests/unit_tests/dns_resolver.cpp index 0709a773f..3285f7732 100644 --- a/tests/unit_tests/dns_resolver.cpp +++ b/tests/unit_tests/dns_resolver.cpp @@ -35,7 +35,7 @@ TEST(DNSResolver, IPv4Success) { - tools::DNSResolver resolver; + tools::DNSResolver resolver = tools::DNSResolver::create(); bool avail, valid; @@ -55,7 +55,7 @@ TEST(DNSResolver, IPv4Success) TEST(DNSResolver, IPv4Failure) { // guaranteed by IANA/ICANN/RFC to be invalid - tools::DNSResolver resolver; + tools::DNSResolver resolver = tools::DNSResolver::create(); bool avail, valid; @@ -70,7 +70,7 @@ TEST(DNSResolver, IPv4Failure) TEST(DNSResolver, DNSSECSuccess) { - tools::DNSResolver resolver; + tools::DNSResolver resolver = tools::DNSResolver::create(); bool avail, valid; @@ -86,7 +86,7 @@ TEST(DNSResolver, DNSSECSuccess) TEST(DNSResolver, DNSSECFailure) { - tools::DNSResolver resolver; + tools::DNSResolver resolver = tools::DNSResolver::create(); bool avail, valid; @@ -103,7 +103,7 @@ TEST(DNSResolver, DNSSECFailure) // It would be great to include an IPv6 test and assume it'll pass, but not every ISP / resolver plays nicely with IPv6;) /*TEST(DNSResolver, IPv6Success) { - tools::DNSResolver resolver; + tools::DNSResolver resolver = tools::DNSResolver::create(); bool avail, valid; @@ -123,7 +123,7 @@ TEST(DNSResolver, DNSSECFailure) TEST(DNSResolver, IPv6Failure) { // guaranteed by IANA/ICANN/RFC to be invalid - tools::DNSResolver resolver; + tools::DNSResolver resolver = tools::DNSResolver::create(); bool avail, valid;