Change the resolver implementation to no longer require the typedefs InternetProtocol::resolver_query and InternetProtocol::resolver_iterator, as neither typedef is part of the documented InternetProtocol requirements. The following typedefs are now marked as deprecated: - icmp::resolver_query - icmp::resolver_iterator - tcp::resolver_query - tcp::resolver_iterator - udp::resolver_query - udp::resolver_iterator
diff --git a/asio/include/asio/basic_socket_streambuf.hpp b/asio/include/asio/basic_socket_streambuf.hpp index 37e98b3..ae0264e 100644 --- a/asio/include/asio/basic_socket_streambuf.hpp +++ b/asio/include/asio/basic_socket_streambuf.hpp
@@ -50,7 +50,8 @@ // init_buffers(); // asio::error_code ec; // this->basic_socket<Protocol, StreamSocketService>::close(ec); -// typedef typename Protocol::resolver_query resolver_query; +// typedef typename Protocol::resolver resolver_type; +// typedef typename resolver_type::query resolver_query; // resolver_query query(x1, ..., xn); // resolve_and_connect(query, ec); // return !ec ? this : 0; @@ -65,7 +66,8 @@ init_buffers(); \ asio::error_code ec; \ this->basic_socket<Protocol, StreamSocketService>::close(ec); \ - typedef typename Protocol::resolver_query resolver_query; \ + typedef typename Protocol::resolver resolver_type; \ + typedef typename resolver_type::query resolver_query; \ resolver_query query(BOOST_PP_ENUM_PARAMS(n, x)); \ resolve_and_connect(query, ec); \ return !ec ? this : 0; \ @@ -258,7 +260,7 @@ asio::error_code& ec) { typedef typename Protocol::resolver resolver_type; - typedef typename Protocol::resolver_iterator iterator_type; + typedef typename resolver_type::iterator iterator_type; resolver_type resolver( boost::base_from_member<asio::io_service>::member); iterator_type i = resolver.resolve(query, ec);
diff --git a/asio/include/asio/detail/resolver_service.hpp b/asio/include/asio/detail/resolver_service.hpp index 55dc528..562dc10 100644 --- a/asio/include/asio/detail/resolver_service.hpp +++ b/asio/include/asio/detail/resolver_service.hpp
@@ -26,6 +26,8 @@ #include "asio/error.hpp" #include "asio/io_service.hpp" +#include "asio/ip/basic_resolver_iterator.hpp" +#include "asio/ip/basic_resolver_query.hpp" #include "asio/detail/bind_handler.hpp" #include "asio/detail/fenced_block.hpp" #include "asio/detail/mutex.hpp" @@ -80,10 +82,10 @@ typedef typename Protocol::endpoint endpoint_type; // The query type. - typedef typename Protocol::resolver_query query_type; + typedef asio::ip::basic_resolver_query<Protocol> query_type; // The iterator type. - typedef typename Protocol::resolver_iterator iterator_type; + typedef asio::ip::basic_resolver_iterator<Protocol> iterator_type; // Constructor. resolver_service(asio::io_service& io_service)
diff --git a/asio/include/asio/ip/basic_resolver.hpp b/asio/include/asio/ip/basic_resolver.hpp index fb41ab0..43a37af 100644 --- a/asio/include/asio/ip/basic_resolver.hpp +++ b/asio/include/asio/ip/basic_resolver.hpp
@@ -19,6 +19,8 @@ #include "asio/basic_io_object.hpp" #include "asio/error.hpp" +#include "asio/ip/basic_resolver_iterator.hpp" +#include "asio/ip/basic_resolver_query.hpp" #include "asio/ip/resolver_service.hpp" #include "asio/detail/throw_error.hpp" @@ -47,10 +49,10 @@ typedef typename InternetProtocol::endpoint endpoint_type; /// The query type. - typedef typename InternetProtocol::resolver_query query; + typedef basic_resolver_query<InternetProtocol> query; /// The iterator type. - typedef typename InternetProtocol::resolver_iterator iterator; + typedef basic_resolver_iterator<InternetProtocol> iterator; /// Constructor. /**
diff --git a/asio/include/asio/ip/icmp.hpp b/asio/include/asio/ip/icmp.hpp index 84a71d0..d76b4d1 100644 --- a/asio/include/asio/ip/icmp.hpp +++ b/asio/include/asio/ip/icmp.hpp
@@ -44,10 +44,10 @@ /// The type of a ICMP endpoint. typedef basic_endpoint<icmp> endpoint; - /// The type of a resolver query. + /// (Deprecated: use resolver::query.) The type of a resolver query. typedef basic_resolver_query<icmp> resolver_query; - /// The type of a resolver iterator. + /// (Deprecated: use resolver::iterator.) The type of a resolver iterator. typedef basic_resolver_iterator<icmp> resolver_iterator; /// Construct to represent the IPv4 ICMP protocol.
diff --git a/asio/include/asio/ip/resolver_service.hpp b/asio/include/asio/ip/resolver_service.hpp index 3e7f314..75f6b2c 100644 --- a/asio/include/asio/ip/resolver_service.hpp +++ b/asio/include/asio/ip/resolver_service.hpp
@@ -19,6 +19,8 @@ #include "asio/error.hpp" #include "asio/io_service.hpp" +#include "asio/ip/basic_resolver_iterator.hpp" +#include "asio/ip/basic_resolver_query.hpp" #include "asio/detail/resolver_service.hpp" #include "asio/detail/service_base.hpp" @@ -48,10 +50,10 @@ typedef typename InternetProtocol::endpoint endpoint_type; /// The query type. - typedef typename InternetProtocol::resolver_query query_type; + typedef basic_resolver_query<InternetProtocol> query_type; /// The iterator type. - typedef typename InternetProtocol::resolver_iterator iterator_type; + typedef basic_resolver_iterator<InternetProtocol> iterator_type; private: // The type of the platform-specific implementation.
diff --git a/asio/include/asio/ip/tcp.hpp b/asio/include/asio/ip/tcp.hpp index bead34d..a2e9ac9 100644 --- a/asio/include/asio/ip/tcp.hpp +++ b/asio/include/asio/ip/tcp.hpp
@@ -47,10 +47,10 @@ /// The type of a TCP endpoint. typedef basic_endpoint<tcp> endpoint; - /// The type of a resolver query. + /// (Deprecated: use resolver::query.) The type of a resolver query. typedef basic_resolver_query<tcp> resolver_query; - /// The type of a resolver iterator. + /// (Deprecated: use resolver::iterator.) The type of a resolver iterator. typedef basic_resolver_iterator<tcp> resolver_iterator; /// Construct to represent the IPv4 TCP protocol.
diff --git a/asio/include/asio/ip/udp.hpp b/asio/include/asio/ip/udp.hpp index c1c62c7..fb26118 100644 --- a/asio/include/asio/ip/udp.hpp +++ b/asio/include/asio/ip/udp.hpp
@@ -44,10 +44,10 @@ /// The type of a UDP endpoint. typedef basic_endpoint<udp> endpoint; - /// The type of a resolver query. + /// (Deprecated: use resolver::query.) The type of a resolver query. typedef basic_resolver_query<udp> resolver_query; - /// The type of a resolver iterator. + /// (Deprecated: use resolver::iterator.) The type of a resolver iterator. typedef basic_resolver_iterator<udp> resolver_iterator; /// Construct to represent the IPv4 UDP protocol.
diff --git a/asio/src/doc/reference.qbk b/asio/src/doc/reference.qbk index 22acec5..f16e62f 100644 --- a/asio/src/doc/reference.qbk +++ b/asio/src/doc/reference.qbk
@@ -42584,7 +42584,76 @@ The iterator type. - typedef InternetProtocol::resolver_iterator iterator; + typedef basic_resolver_iterator< InternetProtocol > iterator; + + +[heading Member Functions] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]] + [Default constructor creates an end iterator. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.create [*create]]] + [Create an iterator from an addrinfo list returned by getaddrinfo. + + Create an iterator from an endpoint, host name and service name. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]] + [Dereference an iterator. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]] + [Increment operator (prefix). + + Increment operator (postfix). ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]] + [Dereference an iterator. ] + ] + +] + +[heading Friends] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]] + [Test two iterators for inequality. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]] + [Test two iterators for equality. ] + ] + +] + +The [link asio.reference.ip__basic_resolver_iterator `ip::basic_resolver_iterator`] class template is used to define iterators over the results returned by a resolver. + +The iterator's value\_type, obtained when the iterator is dereferenced, is: + + const basic_resolver_entry<InternetProtocol> + + + + + +[heading Thread Safety] + +[*Distinct] [*objects:] Safe. + +[*Shared] [*objects:] Unsafe. + @@ -42626,7 +42695,111 @@ The query type. - typedef InternetProtocol::resolver_query query; + typedef basic_resolver_query< InternetProtocol > query; + + +[heading Types] +[table + [[Name][Description]] + + [ + + [[link asio.reference.ip__basic_resolver_query.flags [*flags]]] + [A bitmask type (C++ Std \[lib.bitmask.types\]). ] + + ] + + [ + + [[link asio.reference.ip__basic_resolver_query.protocol_type [*protocol_type]]] + [The protocol type associated with the endpoint query. ] + + ] + +] + +[heading Member Functions] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_query.basic_resolver_query [*basic_resolver_query]]] + [Construct with specified service name for any protocol. + + Construct with specified service name for a given protocol. + + Construct with specified host name and service name for any protocol. + + Construct with specified host name and service name for a given protocol. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.hints [*hints]]] + [Get the hints associated with the query. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.host_name [*host_name]]] + [Get the host name associated with the query. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.service_name [*service_name]]] + [Get the service name associated with the query. ] + ] + +] + +[heading Data Members] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_query.address_configured [*address_configured]]] + [Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]] + [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]] + [Determine the canonical name of the host specified in the query. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.numeric_host [*numeric_host]]] + [Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.numeric_service [*numeric_service]]] + [Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.passive [*passive]]] + [Indicate that returned endpoint is intended for use as a locally bound socket endpoint. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.v4_mapped [*v4_mapped]]] + [If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. ] + ] + +] + +The [link asio.reference.ip__basic_resolver_query `ip::basic_resolver_query`] class template describes a query that can be passed to a resolver. + + +[heading Thread Safety] + +[*Distinct] [*objects:] Safe. + +[*Shared] [*objects:] Unsafe. + @@ -43934,14 +44107,14 @@ [ [[link asio.reference.ip__icmp.resolver_iterator [*resolver_iterator]]] - [The type of a resolver iterator. ] + [(Deprecated: use resolver::iterator.) The type of a resolver iterator. ] ] [ [[link asio.reference.ip__icmp.resolver_query [*resolver_query]]] - [The type of a resolver query. ] + [(Deprecated: use resolver::query.) The type of a resolver query. ] ] @@ -44377,7 +44550,7 @@ [section:resolver_iterator ip::icmp::resolver_iterator] [indexterm2 resolver_iterator..ip::icmp] -The type of a resolver iterator. +(Deprecated: use `resolver::iterator`.) The type of a resolver iterator. typedef basic_resolver_iterator< icmp > resolver_iterator; @@ -44467,7 +44640,7 @@ [section:resolver_query ip::icmp::resolver_query] [indexterm2 resolver_query..ip::icmp] -The type of a resolver query. +(Deprecated: use `resolver::query`.) The type of a resolver query. typedef basic_resolver_query< icmp > resolver_query; @@ -45793,7 +45966,76 @@ The iterator type. - typedef InternetProtocol::resolver_iterator iterator_type; + typedef basic_resolver_iterator< InternetProtocol > iterator_type; + + +[heading Member Functions] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]] + [Default constructor creates an end iterator. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.create [*create]]] + [Create an iterator from an addrinfo list returned by getaddrinfo. + + Create an iterator from an endpoint, host name and service name. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]] + [Dereference an iterator. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]] + [Increment operator (prefix). + + Increment operator (postfix). ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]] + [Dereference an iterator. ] + ] + +] + +[heading Friends] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]] + [Test two iterators for inequality. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]] + [Test two iterators for equality. ] + ] + +] + +The [link asio.reference.ip__basic_resolver_iterator `ip::basic_resolver_iterator`] class template is used to define iterators over the results returned by a resolver. + +The iterator's value\_type, obtained when the iterator is dereferenced, is: + + const basic_resolver_entry<InternetProtocol> + + + + + +[heading Thread Safety] + +[*Distinct] [*objects:] Safe. + +[*Shared] [*objects:] Unsafe. + @@ -45835,7 +46077,111 @@ The query type. - typedef InternetProtocol::resolver_query query_type; + typedef basic_resolver_query< InternetProtocol > query_type; + + +[heading Types] +[table + [[Name][Description]] + + [ + + [[link asio.reference.ip__basic_resolver_query.flags [*flags]]] + [A bitmask type (C++ Std \[lib.bitmask.types\]). ] + + ] + + [ + + [[link asio.reference.ip__basic_resolver_query.protocol_type [*protocol_type]]] + [The protocol type associated with the endpoint query. ] + + ] + +] + +[heading Member Functions] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_query.basic_resolver_query [*basic_resolver_query]]] + [Construct with specified service name for any protocol. + + Construct with specified service name for a given protocol. + + Construct with specified host name and service name for any protocol. + + Construct with specified host name and service name for a given protocol. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.hints [*hints]]] + [Get the hints associated with the query. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.host_name [*host_name]]] + [Get the host name associated with the query. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.service_name [*service_name]]] + [Get the service name associated with the query. ] + ] + +] + +[heading Data Members] +[table + [[Name][Description]] + + [ + [[link asio.reference.ip__basic_resolver_query.address_configured [*address_configured]]] + [Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]] + [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]] + [Determine the canonical name of the host specified in the query. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.numeric_host [*numeric_host]]] + [Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.numeric_service [*numeric_service]]] + [Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.passive [*passive]]] + [Indicate that returned endpoint is intended for use as a locally bound socket endpoint. ] + ] + + [ + [[link asio.reference.ip__basic_resolver_query.v4_mapped [*v4_mapped]]] + [If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. ] + ] + +] + +The [link asio.reference.ip__basic_resolver_query `ip::basic_resolver_query`] class template describes a query that can be passed to a resolver. + + +[heading Thread Safety] + +[*Distinct] [*objects:] Safe. + +[*Shared] [*objects:] Unsafe. + @@ -45990,14 +46336,14 @@ [ [[link asio.reference.ip__tcp.resolver_iterator [*resolver_iterator]]] - [The type of a resolver iterator. ] + [(Deprecated: use resolver::iterator.) The type of a resolver iterator. ] ] [ [[link asio.reference.ip__tcp.resolver_query [*resolver_query]]] - [The type of a resolver query. ] + [(Deprecated: use resolver::query.) The type of a resolver query. ] ] @@ -46862,7 +47208,7 @@ [section:resolver_iterator ip::tcp::resolver_iterator] [indexterm2 resolver_iterator..ip::tcp] -The type of a resolver iterator. +(Deprecated: use `resolver::iterator`.) The type of a resolver iterator. typedef basic_resolver_iterator< tcp > resolver_iterator; @@ -46952,7 +47298,7 @@ [section:resolver_query ip::tcp::resolver_query] [indexterm2 resolver_query..ip::tcp] -The type of a resolver query. +(Deprecated: use `resolver::query`.) The type of a resolver query. typedef basic_resolver_query< tcp > resolver_query; @@ -47537,14 +47883,14 @@ [ [[link asio.reference.ip__udp.resolver_iterator [*resolver_iterator]]] - [The type of a resolver iterator. ] + [(Deprecated: use resolver::iterator.) The type of a resolver iterator. ] ] [ [[link asio.reference.ip__udp.resolver_query [*resolver_query]]] - [The type of a resolver query. ] + [(Deprecated: use resolver::query.) The type of a resolver query. ] ] @@ -47980,7 +48326,7 @@ [section:resolver_iterator ip::udp::resolver_iterator] [indexterm2 resolver_iterator..ip::udp] -The type of a resolver iterator. +(Deprecated: use `resolver::iterator`.) The type of a resolver iterator. typedef basic_resolver_iterator< udp > resolver_iterator; @@ -48070,7 +48416,7 @@ [section:resolver_query ip::udp::resolver_query] [indexterm2 resolver_query..ip::udp] -The type of a resolver query. +(Deprecated: use `resolver::query`.) The type of a resolver query. typedef basic_resolver_query< udp > resolver_query;