Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2012b58

Browse files
committed
Fixed crash in HTTP client, 'get' now only returns an empty response.
1 parent44b9185 commit2012b58

File tree

4 files changed

+39
-140
lines changed

4 files changed

+39
-140
lines changed

‎http/src/http/v2/client/client.cpp‎

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,23 @@ namespace network {
7070

7171
voidclient::impl::connect(const boost::system::error_code &ec,
7272
tcp::resolver::iterator endpoint_iterator) {
73+
if (ec) {
74+
if (endpoint_iterator ==tcp::resolver::iterator()) {
75+
response_promise_.set_exception(std::make_exception_ptr(
76+
connection_error(client_error::host_not_found)));
77+
return;
78+
}
79+
80+
response_promise_.set_exception(std::make_exception_ptr(
81+
boost::system::system_error(ec)));
82+
return;
83+
}
84+
7385
tcp::endpointendpoint(*endpoint_iterator);
74-
//connection_.async_connect(endpoint,
75-
// [=] (const boost::system::error_code &ec) {
76-
// if (ec) {
77-
// return;
78-
// }
79-
//
80-
// //response_promise_.set_value(v2::response());
81-
// //write_request(ec);
82-
// });
86+
connection_->async_connect(endpoint,
87+
[=] (const boost::system::error_code &ec) {
88+
write_request(ec);
89+
});
8390
}
8491

8592
voidclient::impl::write_request(const boost::system::error_code &ec) {
@@ -117,7 +124,7 @@ namespace network {
117124
std::size_t) {
118125
if (ec) {
119126
response_promise_.set_exception(std::make_exception_ptr(
120-
boost::system::system_error(ec)));
127+
boost::system::system_error(ec)));
121128
return;
122129
}
123130

@@ -126,6 +133,7 @@ namespace network {
126133
[=] (const boost::system::error_code &ec,
127134
std::size_t bytes_read) {
128135
// um...
136+
response_promise_.set_value(response());
129137
});
130138
}
131139

@@ -162,30 +170,12 @@ namespace network {
162170
uri::string_type(std::begin(*auth.host()),std::end(*auth.host())) :uri::string_type();
163171
auto port = auth.port<std::uint16_t>()? *auth.port<std::uint16_t>() :80;
164172

165-
//resolver_->async_resolve(host, port,
166-
// [=](const boost::system::error_code &ec,
167-
// tcp::resolver::iterator endpoint_iterator) {
168-
// std::cout << "!!!" << std::endl;
169-
// if (ec) {
170-
// if (endpoint_iterator == tcp::resolver::iterator()) {
171-
// response_promise_.set_exception(
172-
// std::make_exception_ptr(
173-
// connection_error(client_error::host_not_found)));
174-
// return;
175-
// }
176-
//
177-
// std::cout << "!!!" << std::endl;
178-
// //response_promise_.set_exception(
179-
// // std::make_exception_ptr(
180-
// // boost::system::system_error(ec)));
181-
// return;
182-
// }
183-
//
184-
// connect(ec, endpoint_iterator);
185-
// });
186-
187-
response_promise_.set_exception(std::make_exception_ptr(
188-
connection_error(client_error::host_not_found)));
173+
resolver_->async_resolve(host, port,
174+
[=](const boost::system::error_code &ec,
175+
tcp::resolver::iterator endpoint_iterator) {
176+
connect(ec, endpoint_iterator);
177+
});
178+
189179
return res;
190180
}
191181

‎http/src/network/http/v2/client/connection/tcp_resolver.hpp‎

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include<cstdint>
1313
#include<string>
1414
#include<boost/asio/io_service.hpp>
15-
#include<boost/asio/strand.hpp>
1615
#include<boost/asio/ip/tcp.hpp>
1716
#include<boost/exception/all.hpp>
1817
#include<network/config.hpp>
@@ -42,7 +41,6 @@ namespace network {
4241
*/
4342
tcp_resolver(boost::asio::io_service &service,bool cache_resolved =false)
4443
: resolver_(service)
45-
, resolver_strand_(new boost::asio::io_service::strand(service))
4644
, cache_resolved_(cache_resolved) {
4745

4846
}
@@ -54,7 +52,8 @@ namespace network {
5452

5553
}
5654

57-
virtualvoidasync_resolve(const std::string &host, std::uint16_t port, resolve_callback handler) {
55+
virtualvoidasync_resolve(const std::string &host, std::uint16_t port,
56+
resolve_callback handler) {
5857
if (cache_resolved_) {
5958
auto it = endpoint_cache_.find(host);
6059
if (it != endpoint_cache_.end()) {
@@ -66,19 +65,18 @@ namespace network {
6665

6766
resolver::queryquery(host,std::to_string(port));
6867
resolver_.async_resolve(query,
69-
resolver_strand_->wrap(
70-
[&host, &handler,this](const boost::system::error_code &ec,
71-
resolver_iterator endpoint_iterator) {
72-
if (ec) {
73-
handler(ec,resolver_iterator());
74-
}
75-
else {
76-
if (cache_resolved_) {
77-
endpoint_cache_.insert(host, endpoint_iterator);
78-
}
79-
handler(ec, endpoint_iterator);
80-
}
81-
}));
68+
[host, handler,this](const boost::system::error_code &ec,
69+
resolver_iterator endpoint_iterator) {
70+
if (ec) {
71+
handler(ec,resolver_iterator());
72+
}
73+
else {
74+
if (cache_resolved_) {
75+
endpoint_cache_.insert(host, endpoint_iterator);
76+
}
77+
handler(ec, endpoint_iterator);
78+
}
79+
});
8280
}
8381

8482
virtualvoidclear_resolved_cache() {
@@ -87,10 +85,7 @@ namespace network {
8785

8886
private:
8987

90-
typedef boost::asio::io_service::strand strand;
91-
9288
resolver resolver_;
93-
std::unique_ptr<strand> resolver_strand_;
9489
bool cache_resolved_;
9590
endpoint_cache endpoint_cache_;
9691

‎http/test/v2/features/client/client_test.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Describe(http_client) {
2424
request
2525
.method(http::method::GET)
2626
.path("/LICENSE_1_0.txt")
27-
.version("1.0")
27+
.version("1.1")
2828
.append_header("Host","www.boost.org")
2929
.append_header("User-Agent","cpp-netlib client_test")
3030
.append_header("Connection","close");

‎http/test/v2/features/client/ssl_connection_test.cpp‎

Lines changed: 0 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -45,92 +45,6 @@ Describe(https_connection) {
4545
Assert::That(ec,Equals(boost::system::error_code()));
4646
}
4747

48-
/*
49-
It(writes_to_localhost) {
50-
// Resolve the host.
51-
boost::system::error_code ec;
52-
tcp::resolver::query query("127.0.0.1", "80");
53-
auto it = resolver_->resolve(query, ec);
54-
Assert::That(ec, Equals(boost::system::error_code()));
55-
56-
// Make sure that the connection is successful.
57-
tcp::endpoint endpoint(it->endpoint());
58-
connection_->async_connect(endpoint, "127.0.0.1",
59-
[&ec] (const boost::system::error_code &ec_) {
60-
Assert::That(ec_, Equals(boost::system::error_code()));
61-
});
62-
63-
// Create an HTTPS request.
64-
http::request request{network::uri{"http://127.0.0.1/"}};
65-
request.set_method(http::method::GET);
66-
request.set_version("1.0");
67-
request.append_header("User-Agent", "ssl_connection_test");
68-
request.append_header("Connection", "close");
69-
70-
// Write the HTTP request to the socket, sending it to the server.
71-
boost::asio::streambuf request_;
72-
std::ostream request_stream(&request_);
73-
request_stream << request;
74-
std::size_t bytes_written = 0;
75-
connection_->async_write(request_,
76-
[&bytes_written] (const boost::system::error_code &ec_,
77-
std::size_t bytes_written_) {
78-
Assert::That(ec_, Equals(boost::system::error_code()));
79-
bytes_written = bytes_written_;
80-
});
81-
io_service_->run();
82-
Assert::That(bytes_written, IsGreaterThan(0));
83-
}
84-
85-
It(reads_from_localhost) {
86-
// Resolve the host.
87-
boost::system::error_code ec;
88-
tcp::resolver::query query("127.0.0.1", "80");
89-
auto it = resolver_->resolve(query, ec);
90-
Assert::That(ec, Equals(boost::system::error_code()));
91-
92-
// Make sure that the connection is successful.
93-
tcp::endpoint endpoint(it->endpoint());
94-
connection_->async_connect(endpoint, "127.0.0.1",
95-
[] (const boost::system::error_code &ec_) {
96-
Assert::That(ec_, Equals(boost::system::error_code()));
97-
});
98-
99-
// Create an HTTP request.
100-
http::request request{network::uri{"http://127.0.0.1/"}};
101-
request.set_method(http::method::GET);
102-
request.set_version("1.0");
103-
request.append_header("User-Agent", "ssl_connection_test");
104-
request.append_header("Connection", "close");
105-
106-
// Write the HTTP request to the socket, sending it to the server.
107-
boost::asio::streambuf request_;
108-
std::ostream request_stream(&request_);
109-
request_stream << request;
110-
std::size_t bytes_written = 0;
111-
connection_->async_write(request_,
112-
[&bytes_written] (const boost::system::error_code &ec_,
113-
std::size_t bytes_written_) {
114-
Assert::That(ec_, Equals(boost::system::error_code()));
115-
bytes_written = bytes_written_;
116-
});
117-
118-
// Read the HTTP response on the socket from the server.
119-
char output[8192];
120-
std::memset(output, 0, sizeof(output));
121-
std::size_t bytes_read = 0;
122-
connection_->async_read_some(boost::asio::mutable_buffers_1(output, sizeof(output)),
123-
[&bytes_read] (const boost::system::error_code &ec_,
124-
std::size_t bytes_read_) {
125-
Assert::That(ec_, Equals(boost::system::error_code()));
126-
bytes_read = bytes_read_;
127-
});
128-
129-
io_service_->run();
130-
Assert::That(bytes_read, IsGreaterThan(0));
131-
}
132-
*/
133-
13448
std::unique_ptr<boost::asio::io_service> io_service_;
13549
std::unique_ptr<tcp::resolver> resolver_;
13650
std::unique_ptr<http::client_options> options_;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp