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

Commit22df4eb

Browse files
committed
Done a lot of stuff to play around with HTTP - it successfully makes a query, but there remain problems with the implementation and tests.
1 parentb80ab15 commit22df4eb

File tree

8 files changed

+117
-33
lines changed

8 files changed

+117
-33
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ namespace network {
7979

8080
client_options &io_service(boost::asio::io_service &io_service) {
8181
io_service_ = io_service;
82+
return *this;
8283
}
8384

8485
boost::optional<boost::asio::io_service &>io_service()const {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
#ifndef __NETWORK_HTTP_V2_CLIENT_CONNECTION_ASYNC_RESOLVER_DELEGATE_INC__
77
#define__NETWORK_HTTP_V2_CLIENT_CONNECTION_ASYNC_RESOLVER_DELEGATE_INC__
88

9-
#include"network/http/v2/client/connection/resolver_delegate.hpp"
9+
#include<stdexcept>
10+
#include<cstdint>
11+
#include<string>
12+
#include<unordered_map>
1013
#include<boost/asio/io_service.hpp>
1114
#include<boost/asio/strand.hpp>
1215
#include<boost/asio/ip/tcp.hpp>
1316
#include<boost/range/iterator_range.hpp>
1417
#include<boost/algorithm/string/case_conv.hpp>
1518
#include<boost/exception/all.hpp>
16-
#include<stdexcept>
17-
#include<cstdint>
18-
#include<string>
19-
#include<unordered_map>
19+
#include<network/http/v2/client/connection/resolver_delegate.hpp>
2020

2121
namespacenetwork {
2222
namespacehttp {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include<future>
1212
#include<boost/asio/ip/tcp.hpp>
1313
#include<boost/asio/streambuf.hpp>
14+
#include<boost/asio/buffer.hpp>
1415

1516
namespacenetwork {
1617
namespacehttp {
@@ -30,11 +31,11 @@ namespace network {
3031
connect(boost::asio::ip::tcp::endpoint &endpoint,
3132
const std::string &host) =0;
3233

33-
virtualvoidwrite(boost::asio::streambuf &command_streambuf,
34-
std::function<void (constboost::system::error_code &,size_t)> handler) = 0;
34+
virtualstd::future<std::pair<boost::system::error_code, std::size_t>>
35+
write(boost::asio::streambuf &command_streambuf) =0;
3536

36-
virtualvoidread_some(constboost::asio::mutable_buffers_1 &read_buffer,
37-
std::function<void(const boost::system::error_code &,size_t)> handler) = 0;
37+
virtualstd::future<std::pair<boost::system::error_code, std::size_t>>
38+
read_some(const boost::asio::mutable_buffers_1 &read_buffer) =0;
3839

3940
};
4041
}// namespace v2

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

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,54 @@ namespace network {
3232
virtual std::future<boost::system::error_code>
3333
connect(boost::asio::ip::tcp::endpoint &endpoint,
3434
const std::string &host) {
35+
auto promise = std::make_shared<std::promise<boost::system::error_code>>();
36+
auto result = promise->get_future();
37+
3538
socket_.reset(newboost::asio::ip::tcp::socket(io_service_));
36-
// socket_->async_connect(endpoint,
37-
// [this](const boost::system::error_code &ec) {
38-
// std::cout << "oh" << std::endl;
39-
// promise_.set_value(ec);
40-
// });
41-
boost::system::error_code ec;
42-
socket_->connect(endpoint, ec);
43-
promise_.set_value(ec);
44-
return promise_.get_future();
39+
socket_->async_connect(endpoint,
40+
[=](const boost::system::error_code &ec) {
41+
promise->set_value(ec);
42+
});
43+
// boost::system::error_code ec;
44+
// socket_->connect(endpoint, ec);
45+
// promise->set_value(ec);
46+
returnstd::move(result);
4547
}
4648

47-
virtualvoidwrite(boost::asio::streambuf &command_streambuf,
48-
std::function<void (const boost::system::error_code &,size_t)> handler) {
49-
boost::asio::async_write(*socket_, command_streambuf, handler);
49+
virtual std::future<std::pair<boost::system::error_code, std::size_t>>
50+
write(boost::asio::streambuf &command_streambuf) {
51+
auto promise = std::make_shared<
52+
std::promise<std::pair<boost::system::error_code, std::size_t>>>();
53+
auto result = promise->get_future();
54+
55+
boost::asio::async_write(*socket_, command_streambuf,
56+
[&promise] (const boost::system::error_code &ec, std::size_t size) {
57+
promise->set_value(std::make_pair(ec, size));
58+
});
59+
returnstd::move(result);
5060
}
5161

52-
virtualvoidread_some(const boost::asio::mutable_buffers_1 &read_buffer,
53-
std::function<void (const boost::system::error_code &,size_t)> handler) {
54-
socket_->async_read_some(read_buffer, handler);
62+
virtual std::future<std::pair<boost::system::error_code, std::size_t>>
63+
read_some(const boost::asio::mutable_buffers_1 &read_buffer) {
64+
auto promise = std::make_shared<
65+
std::promise<std::pair<boost::system::error_code, std::size_t>>>();
66+
auto result = promise->get_future();
67+
68+
// socket_->async_read_some(read_buffer,
69+
// [this] (const boost::system::error_code &ec, std::size_t bytes_read) {
70+
// read_promise_.set_value(std::make_pair(ec, bytes_read));
71+
// });
72+
boost::system::error_code ec;
73+
auto bytes_read =boost::asio::read(*socket_, read_buffer, ec);
74+
promise->set_value(std::make_pair(ec, bytes_read));
75+
returnstd::move(result);
5576
}
5677

5778
private:
5879

5980
boost::asio::io_service &io_service_;
6081
std::unique_ptr<boost::asio::ip::tcp::socket> socket_;
61-
std::promise<boost::system::error_code> promise_;
82+
std::promise<std::pair<boost::system::error_code, std::size_t>> read_promise_;
6283

6384
};
6485
}// namespace v2

‎http/src/network/http/v2/client/request.hpp‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -376,10 +376,7 @@ namespace network {
376376

377377
friend std::ostream &operator << (std::ostream &os,const request &req) {
378378
os << req.method_ <<"" << *req.destination_.path() <<" HTTP/" << req.version_ <<"\r\n";
379-
os <<"Host:";
380-
os << *req.destination_.scheme();
381-
os <<"://";
382-
os << *req.destination_.authority();
379+
os <<"Host:" << *req.destination_.host();
383380
os <<"\r\n";
384381
for (auto header : req.headers_) {
385382
os << header.first <<":" << header.second <<"\r\n";

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include"network/http/v2/client/connection/async_resolver_delegate.hpp"
1111

1212
usingnamespaceigloo;
13+
using boost::asio::ip::tcp;
1314
namespacehttp= network::http::v2;
1415

1516
Describe(async_resolver) {
@@ -28,8 +29,9 @@ Describe(async_resolver) {
2829
auto result = endpoints.get();
2930
Assert::That(result.first,Equals(boost::system::error_code()));
3031
for (auto endpoint : result.second) {
31-
Assert::That(endpoint.endpoint().address().to_string(),Equals("127.0.0.1"));
32-
Assert::That(endpoint.endpoint().port(),Equals(80));
32+
tcp::endpoint endpoint_ = endpoint;
33+
Assert::That(endpoint_.address().to_string(),Equals("127.0.0.1"));
34+
Assert::That(endpoint_.port(),Equals(80));
3335
}
3436
}
3537

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
// http://www.boost.org/LICENSE_1_0.txt)
55

66
#include<memory>
7+
#include<thread>
78
#include<igloo/igloo_alt.h>
89
#include<boost/asio.hpp>
910
#include"network/http/v2/client/connection/async_resolver_delegate.hpp"
1011
#include"network/http/v2/client/connection/normal_connection_delegate.hpp"
12+
#include"network/http/v2/client/request.hpp"
1113

1214
usingnamespaceigloo;
1315
using boost::asio::ip::tcp;
@@ -26,6 +28,10 @@ Describe(normal_http_connection) {
2628
endpoints_ = endpoints.get();
2729
}
2830

31+
voidTearDown() {
32+
33+
}
34+
2935
It(connects_to_localhost) {
3036
auto it =std::begin(endpoints_.second);
3137
tcp::endpointendpoint(it->endpoint().address(),80);
@@ -35,6 +41,62 @@ Describe(normal_http_connection) {
3541
Assert::That(connected_,Equals(boost::system::error_code()));
3642
}
3743

44+
It(writes_to_localhost) {
45+
auto it =std::begin(endpoints_.second);
46+
tcp::endpointendpoint(it->endpoint().address(),80);
47+
auto connected = connection_->connect(endpoint,"127.0.0.1");
48+
io_service_->run_one();
49+
auto connected_ = connected.get();
50+
Assert::That(connected_,Equals(boost::system::error_code()));
51+
52+
http::request request{network::uri{"http://127.0.0.1/"}};
53+
request.set_method(http::method::GET);
54+
request.set_version("1.0");
55+
request.append_header("User-Agent","normal_connection_test");
56+
request.append_header("Connection","close");
57+
58+
boost::asio::streambuf request_;
59+
std::ostreamrequest_stream(&request_);
60+
request_stream << request;
61+
auto written = connection_->write(request_);
62+
io_service_->run_one();
63+
auto written_ = written.get();
64+
Assert::That(written_.first,Equals(boost::system::error_code()));
65+
}
66+
67+
It(reads_from_localhost) {
68+
auto it =std::begin(endpoints_.second);
69+
tcp::endpointendpoint(it->endpoint().address(),80);
70+
auto connected = connection_->connect(endpoint,"127.0.0.1");
71+
io_service_->run_one();
72+
auto connected_ = connected.get();
73+
Assert::That(connected_,Equals(boost::system::error_code()));
74+
75+
http::request request{network::uri{"http://127.0.0.1/"}};
76+
request.set_method(http::method::GET);
77+
request.set_version("1.0");
78+
request.append_header("User-Agent","normal_connection_test");
79+
request.append_header("Connection","close");
80+
81+
boost::asio::streambuf request_;
82+
std::ostreamrequest_stream(&request_);
83+
request_stream << request;
84+
auto written = connection_->write(request_);
85+
//io_service_->run_one();
86+
std::cout <<0 << std::endl;
87+
//auto written_ = written.get();
88+
std::cout <<1 << std::endl;
89+
90+
char output[8192];
91+
std::memset(output,0,sizeof(output));
92+
std::cout <<"A" << std::endl;
93+
auto read = connection_->read_some(boost::asio::mutable_buffers_1(output,sizeof(output)));
94+
std::cout <<"A" << std::endl;
95+
//auto read_ = read.get();
96+
97+
std::cout << output << std::endl;
98+
}
99+
38100
std::unique_ptr<boost::asio::io_service> io_service_;
39101
std::unique_ptr<http::async_resolver_delegate> resolver_;
40102
std::pair<boost::system::error_code,

‎http/test/v2/units/client/request_test.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ TEST(request_test, stream) {
4343
std::ostringstream oss;
4444
oss << instance;
4545
ASSERT_EQ("GET / HTTP/1.1\r\n"
46-
"Host:http://www.example.com\r\n"
46+
"Host: www.example.com\r\n"
4747
"Connection: close\r\n"
4848
"User-Agent: request_test\r\n\r\n", oss.str());
4949
}
@@ -57,7 +57,7 @@ TEST(request_test, stream_2) {
5757
std::ostringstream oss;
5858
oss << instance;
5959
ASSERT_EQ("GET /path/to/resource/index.html HTTP/1.1\r\n"
60-
"Host:http://www.example.com\r\n"
60+
"Host: www.example.com\r\n"
6161
"Connection: close\r\n"
6262
"User-Agent: request_test\r\n\r\n", oss.str());
6363
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp