@@ -17,15 +17,32 @@ namespace network {
1717namespace v2 {
1818using boost::asio::ip::tcp;
1919
20- struct request_helper {
20+ // struct request_helper {
21+ //
22+ // request_helper() {
23+ //
24+ // }
25+ //
26+ // client::string_type host_;
27+ // boost::asio::streambuf request_;
28+ // std::promise<response> response_promise_;
29+ // boost::asio::streambuf response_;
30+ //
31+ // };
32+
33+ struct resolve_helper {
2134
22- request_helper (boost::asio::io_service &io_service) {
35+ };
2336
24- }
37+ struct connect_helper {
2538
26- boost::asio::streambuf request_;
27- std::promise<response> response_promise_;
28- boost::asio::streambuf response_;
39+ };
40+
41+ struct request_helper {
42+
43+ };
44+
45+ struct response_helper {
2946
3047 };
3148
@@ -35,13 +52,17 @@ namespace network {
3552
3653~impl () NETWORK_NOEXCEPT;
3754
38- void connect (const boost::system::error_code &ec);
55+ void connect (client::string_type host,
56+ const boost::system::error_code &ec,
57+ tcp::resolver::iterator endpoint_iterator);
3958
40- void write_request (const boost::system::error_code &ec, std:: size_t bytes_written );
59+ void write_request (const boost::system::error_code &ec);
4160
42- void read_response_status (const boost::system::error_code &ec, std::size_t bytes_written);
61+ void read_response_status (const boost::system::error_code &ec,
62+ std::size_t bytes_written);
4363
44- void read_response_headers (const boost::system::error_code &ec, std::size_t bytes_written);
64+ void read_response_headers (const boost::system::error_code &ec,
65+ std::size_t bytes_read);
4566
4667std::future<response>do_request (method method_, request request_, request_options options);
4768
@@ -75,19 +96,25 @@ namespace network {
7596lifetime_thread_.join ();
7697 }
7798
78- void client::impl::connect (const boost::system::error_code &ec) {
99+ void client::impl::connect (client::string_type host,
100+ const boost::system::error_code &ec,
101+ tcp::resolver::iterator endpoint_iterator) {
79102if (ec) {
80103return ;
81104 }
82105
83- // endpoint!
84- // host!
106+ if (endpoint_iterator ==tcp::resolver::iterator ()) {
107+ return ;
108+ }
85109
86- // connection_.async_connect(endpoint, reques
110+ tcp::endpointendpoint (*endpoint_iterator);
111+ connection_.async_connect (endpoint, host,
112+ [=] (const boost::system::error_code &ec) {
113+ write_request (ec);
114+ });
87115 }
88116
89- void client::impl::write_request (const boost::system::error_code &ec,
90- std::size_t bytes_written) {
117+ void client::impl::write_request (const boost::system::error_code &ec) {
91118if (ec) {
92119return ;
93120 }
@@ -96,7 +123,7 @@ namespace network {
96123 }
97124
98125void client::impl::read_response_status (const boost::system::error_code &ec,
99- std::size_t bytes_read ) {
126+ std::size_t ) {
100127if (ec) {
101128return ;
102129 }
@@ -105,7 +132,7 @@ namespace network {
105132 }
106133
107134void client::impl::read_response_headers (const boost::system::error_code &ec,
108- std::size_t bytes_read ) {
135+ std::size_t ) {
109136if (ec) {
110137return ;
111138 }
@@ -123,17 +150,17 @@ namespace network {
123150 request_stream << req;
124151if (!request_stream) {
125152// set error
153+ // response_promise_.set_value(response());
126154return response;
127155 }
128156
129- // auto endpoints = resolver_.async_resolve(req.host(), req.port(),
130- // [=](const boost::system::error_code &ec) {
131- // if (ec) {
132- // // promise set error
133- // return;
134- // }
135- // this->connect(ec);
136- // });
157+ //
158+
159+ auto endpoints = resolver_.async_resolve (req.host (), req.port (),
160+ [=](const boost::system::error_code &ec,
161+ tcp::resolver::iterator endpoint_iterator) {
162+ this ->connect (ec, endpoint_iterator);
163+ });
137164
138165return response;
139166 }