Skip to content
This repository was archived by the owner on Dec 29, 2022. It is now read-only.

Commit b07773b

Browse files
committed
Implement 'ready(...)' Check for Async Response Objects
This Closes cpp-netlib#24 -- now an ADL-found function 'ready' can be used to check whether a response object that is the result of an asynchronous function call to HTTP methods on the asynchronous client is ready.
1 parent 5645bfc commit b07773b

File tree

5 files changed

+73
-1
lines changed

5 files changed

+73
-1
lines changed

boost/network/protocol/http/message/async_message.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717

1818
namespace boost { namespace network { namespace http {
1919

20+
namespace impl {
21+
22+
template <class Tag>
23+
struct ready_wrapper;
24+
25+
} /* impl */
26+
2027
template <class Tag>
2128
struct async_message {
2229

@@ -137,7 +144,7 @@ namespace boost { namespace network { namespace http {
137144
mutable std::set<string_type> removed_headers;
138145
mutable boost::shared_future<string_type> body_;
139146

140-
friend struct boost::network::detail::wrapper_base<Tag, async_message<Tag> >;
147+
friend struct boost::network::http::impl::ready_wrapper<Tag>;
141148
};
142149

143150
template <class Tag>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#ifndef BOOST_NETWORK_PROTOCOL_HTTP_MESSAGE_WRAPPERS_READY_HPP_20100618
2+
#define BOOST_NETWORK_PROTOCOL_HTTP_MESSAGE_WRAPPERS_READY_HPP_20100618
3+
4+
// Copyright 2010 Dean Michael Berris.
5+
// Distributed under the Boost Software License, Version 1.0.
6+
// (See accompanying file LICENSE_1_0.txt or copy at
7+
// http://www.boost.org/LICENSE_1_0.txt)
8+
9+
#include <boost/network/detail/wrapper_base.hpp>
10+
11+
namespace boost { namespace network { namespace http {
12+
13+
template <class Tag>
14+
struct async_message;
15+
16+
namespace impl {
17+
template <class Tag>
18+
struct ready_wrapper : boost::network::detail::wrapper_base_const<Tag, async_message<Tag> > {
19+
typedef boost::network::detail::wrapper_base_const<Tag, async_message<Tag> >
20+
wrapper_base;
21+
explicit ready_wrapper(async_message<Tag> const & message)
22+
: wrapper_base(message) {}
23+
operator bool () {
24+
return
25+
wrapper_base::_message.version_.is_ready()
26+
&& wrapper_base::_message.status_.is_ready()
27+
&& wrapper_base::_message.status_message_.is_ready()
28+
&& wrapper_base::_message.headers_.is_ready()
29+
&& wrapper_base::_message.body_.is_ready();
30+
}
31+
};
32+
} // namespace impl
33+
34+
template <class Tag>
35+
inline bool ready(async_message<Tag> const & message) {
36+
return impl::ready_wrapper<Tag>(message);
37+
}
38+
39+
} /* http */
40+
41+
} /* network */
42+
43+
} /* boost */
44+
45+
#endif /* BOOST_NETWORK_PROTOCOL_HTTP_MESSAGE_WRAPPERS_READY_HPP_20100618 */

boost/network/protocol/http/response.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <boost/network/protocol/http/message/wrappers/status_message.hpp>
3131
#include <boost/network/protocol/http/message/wrappers/destination.hpp>
3232
#include <boost/network/protocol/http/message/wrappers/source.hpp>
33+
#include <boost/network/protocol/http/message/wrappers/ready.hpp>
3334

3435
#include <boost/network/protocol/http/message.hpp>
3536
#include <boost/network/protocol/http/message/async_message.hpp>

libs/network/test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ if (Boost_FOUND)
2929
url_test
3030
http_url_test
3131
utils_thread_pool
32+
http_async_message_ready
3233
)
3334
foreach (test ${TESTS})
3435
set_source_files_properties(${test}.cpp
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
// Copyright 2010 Dean Michael Berris.
3+
// Distributed under the Boost Software License, Version 1.0.
4+
// (See accompanying file LICENSE_1_0.txt or copy at
5+
// http://www.boost.org/LICENSE_1_0.txt)
6+
7+
#define BOOST_TEST_MODULE HTTP Async Response Test
8+
#include <boost/test/unit_test.hpp>
9+
#include <boost/network/include/http/client.hpp>
10+
11+
namespace http = boost::network::http;
12+
13+
BOOST_AUTO_TEST_CASE(unready_state_response) {
14+
typedef http::basic_response<http::tags::http_async_8bit_udp_resolve> response;
15+
response r;
16+
BOOST_CHECK(!ready(r));
17+
}
18+

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy