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

Commite70b277

Browse files
committed
Checking in implementation of HTTPS server and client tests; HTTPS localhost is still broken.
1 parentafe6866 commite70b277

File tree

11 files changed

+561
-54
lines changed

11 files changed

+561
-54
lines changed

‎boost/network/protocol/http/impl/sync_connection_base.hpp

Lines changed: 117 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,15 @@
1313

1414
namespaceboost {namespacenetwork {namespacehttp {namespaceimpl {
1515
template<classTag,unsigned version_major,unsigned version_minor>
16-
structsync_connection_base;
17-
18-
template<classTag,unsigned version_major,unsigned version_minor>
19-
structhttps_sync_connection :publicvirtual sync_connection_base<Tag,version_major,version_minor>, detail::connection_helper<Tag, version_major, version_minor> {
20-
typedeftypename resolver_policy<Tag>::type resolver_base;
21-
typedeftypename resolver_base::resolver_type resolver_type;
22-
typedeftypename string<Tag>::type string_type;
23-
typedef function<typenameresolver_base::resolver_iterator_pair(resolver_type&, string_typeconst &, string_typeconst &)> resolver_function_type;
24-
25-
https_sync_connection(resolver_type & resolver, resolver_function_type resolve)
26-
: resolver_(resolver), resolve_(resolve), context_(resolver.io_service(), boost::asio::ssl::context::sslv23_client), socket_(resolver.io_service(), context_) { }
27-
28-
voidinit_socket(string_typeconst & hostname, string_typeconst & port) {}
29-
voidsend_request_impl(string_typeconst & method, basic_request<Tag>const & request_) {}
30-
voidread_status(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {}
31-
voidread_headers(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {}
32-
voidread_body(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {}
33-
boolis_open() {return socket_.lowest_layer().is_open(); }
34-
voidclose_socket() {if (is_open()) { socket_.lowest_layer().close(); } }
35-
~https_sync_connection() {}
36-
private:
37-
resolver_type & resolver_;
38-
resolver_function_type resolve_;
39-
boost::asio::ssl::context context_;
40-
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket_;
41-
42-
};
43-
44-
template<classTag,unsigned version_major,unsigned version_minor>
45-
structhttp_sync_connection :publicvirtual sync_connection_base<Tag, version_major, version_minor>, detail::connection_helper<Tag, version_major, version_minor> {
16+
structconnection_base_impl {
17+
protected:
4618
typedeftypename resolver_policy<Tag>::type resolver_base;
4719
typedeftypename resolver_base::resolver_type resolver_type;
4820
typedeftypename string<Tag>::type string_type;
4921
typedef function<typenameresolver_base::resolver_iterator_pair(resolver_type&, string_typeconst &, string_typeconst &)> resolver_function_type;
5022

51-
http_sync_connection(resolver_type & resolver, resolver_function_type resolve)
52-
: resolver_(resolver), resolve_(resolve), socket_(resolver.io_service()) { }
53-
54-
~http_sync_connection() {}
55-
56-
voidinit_socket(string_typeconst & hostname, string_typeconst & port) {
23+
template<classSocket>
24+
voidinit_socket(Socket & socket_, resolver_type & resolver_, string_typeconst & hostname, string_typeconst & port, resolver_function_type resolve_) {
5725
using boost::asio::ip::tcp;
5826
boost::system::error_code error = boost::asio::error::host_not_found;
5927
typename resolver_type::iterator endpoint_iterator, end;
@@ -74,13 +42,8 @@ namespace boost { namespace network { namespace http { namespace impl {
7442
throwboost::system::system_error(error);
7543
}
7644

77-
voidsend_request_impl(string_typeconst & method, basic_request<Tag>const & request_) {
78-
boost::asio::streambuf request_buffer;
79-
create_request(request_buffer, method, request_);
80-
write(socket_, request_buffer);
81-
}
82-
83-
voidread_status(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
45+
template<classSocket>
46+
voidread_status(Socket & socket_, basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
8447
boost::asio::read_until(socket_, response_buffer,"\r\n");
8548
std::istreamresponse_stream(&response_buffer);
8649
string_type http_version;
@@ -100,7 +63,8 @@ namespace boost { namespace network { namespace http { namespace impl {
10063
response_.status_message() = status_message;
10164
}
10265

103-
voidread_headers(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
66+
template<classSocket>
67+
voidread_headers(Socket & socket_, basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
10468
boost::asio::read_until(socket_, response_buffer,"\r\n\r\n");
10569
std::istreamresponse_stream(&response_buffer);
10670
string_type header_line, name;
@@ -124,7 +88,13 @@ namespace boost { namespace network { namespace http { namespace impl {
12488
};
12589
}
12690

127-
voidread_body(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
91+
template<classSocket>
92+
voidsend_request_impl(Socket & socket_, string_typeconst & method, boost::asio::streambuf & request_buffer) {
93+
write(socket_, request_buffer);
94+
}
95+
96+
template<classSocket>
97+
voidread_body(Socket & socket_, basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
12898
typename ostringstream<Tag>::type body_stream;
12999

130100
if (response_buffer.size() >0)
@@ -159,6 +129,108 @@ namespace boost { namespace network { namespace http { namespace impl {
159129
response_ <<body(body_stream.str());
160130
}
161131

132+
133+
};
134+
135+
template<classTag,unsigned version_major,unsigned version_minor>
136+
structsync_connection_base;
137+
138+
template<classTag,unsigned version_major,unsigned version_minor>
139+
structhttps_sync_connection :publicvirtual sync_connection_base<Tag,version_major,version_minor>, detail::connection_helper<Tag, version_major, version_minor>, connection_base_impl<Tag, version_major, version_minor> {
140+
typedeftypename resolver_policy<Tag>::type resolver_base;
141+
typedeftypename resolver_base::resolver_type resolver_type;
142+
typedeftypename string<Tag>::type string_type;
143+
typedef function<typenameresolver_base::resolver_iterator_pair(resolver_type&, string_typeconst &, string_typeconst &)> resolver_function_type;
144+
typedef connection_base_impl<Tag,version_major,version_minor> connection_base;
145+
146+
https_sync_connection(resolver_type & resolver, resolver_function_type resolve, optional<string_type>const & certificate_filename = optional<string_type>())
147+
: connection_base(), resolver_(resolver), resolve_(resolve), context_(resolver.io_service(), boost::asio::ssl::context::sslv23_client), socket_(resolver.io_service(), context_) {
148+
if (certificate_filename) {
149+
context_.set_verify_mode(boost::asio::ssl::context::verify_peer);
150+
context_.load_verify_file(*certificate_filename);
151+
}else {
152+
context_.set_verify_mode(boost::asio::ssl::context::verify_none);
153+
}
154+
}
155+
156+
voidinit_socket(string_typeconst & hostname, string_typeconst & port) {
157+
connection_base::init_socket(socket_.lowest_layer(), resolver_, hostname, port, resolve_);
158+
socket_.handshake(boost::asio::ssl::stream_base::client);
159+
}
160+
161+
voidsend_request_impl(string_typeconst & method, basic_request<Tag>const & request_) {
162+
boost::asio::streambuf request_buffer;
163+
create_request(request_buffer, method, request_);
164+
connection_base::send_request_impl(socket_, method, request_buffer);
165+
}
166+
167+
voidread_status(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
168+
connection_base::read_status(socket_, response_, response_buffer);
169+
}
170+
171+
voidread_headers(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
172+
connection_base::read_headers(socket_, response_, response_buffer);
173+
}
174+
175+
voidread_body(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
176+
connection_base::read_body(socket_, response_, response_buffer);
177+
}
178+
179+
boolis_open() {
180+
return socket_.lowest_layer().is_open();
181+
}
182+
183+
voidclose_socket() {
184+
if (is_open()) {
185+
socket_.lowest_layer().close();
186+
}
187+
}
188+
189+
~https_sync_connection() {}
190+
191+
private:
192+
resolver_type & resolver_;
193+
resolver_function_type resolve_;
194+
boost::asio::ssl::context context_;
195+
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket_;
196+
197+
};
198+
199+
template<classTag,unsigned version_major,unsigned version_minor>
200+
structhttp_sync_connection :publicvirtual sync_connection_base<Tag, version_major, version_minor>, detail::connection_helper<Tag, version_major, version_minor>, connection_base_impl<Tag, version_major, version_minor> {
201+
typedeftypename resolver_policy<Tag>::type resolver_base;
202+
typedeftypename resolver_base::resolver_type resolver_type;
203+
typedeftypename string<Tag>::type string_type;
204+
typedef function<typenameresolver_base::resolver_iterator_pair(resolver_type&, string_typeconst &, string_typeconst &)> resolver_function_type;
205+
typedef connection_base_impl<Tag,version_major,version_minor> connection_base;
206+
207+
http_sync_connection(resolver_type & resolver, resolver_function_type resolve)
208+
: connection_base(), resolver_(resolver), resolve_(resolve), socket_(resolver.io_service()) { }
209+
210+
~http_sync_connection() {}
211+
212+
voidinit_socket(string_typeconst & hostname, string_typeconst & port) {
213+
connection_base::init_socket(socket_, resolver_, hostname, port, resolve_);
214+
}
215+
216+
voidsend_request_impl(string_typeconst & method, basic_request<Tag>const & request_) {
217+
boost::asio::streambuf request_buffer;
218+
create_request(request_buffer, method, request_);
219+
connection_base::send_request_impl(socket_, method, request_buffer);
220+
}
221+
222+
voidread_status(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
223+
connection_base::read_status(socket_, response_, response_buffer);
224+
}
225+
226+
voidread_headers(basic_response<Tag> & response, boost::asio::streambuf & response_buffer) {
227+
connection_base::read_headers(socket_, response, response_buffer);
228+
}
229+
230+
voidread_body(basic_response<Tag> & response_, boost::asio::streambuf & response_buffer) {
231+
connection_base::read_body(socket_, response_, response_buffer);
232+
}
233+
162234
boolis_open() {return socket_.is_open(); }
163235

164236
voidclose_socket() {if (is_open()) { socket_.close(); } }

‎boost/network/uri/http/uri.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include<boost/network/uri/http/detail/parse_specific.hpp>
1515
#include<boost/network/uri/http/detail/uri_parts.hpp>
1616
#include<boost/network/uri/http/uri_concept.hpp>
17+
#include<boost/algorithm/string/predicate.hpp>
1718

1819
namespaceboost {namespacenetwork {namespaceuri {
1920

@@ -31,8 +32,8 @@ namespace boost { namespace network { namespace uri {
3132
}
3233

3334
uint32_tport()const {
34-
return parts_.port ? *parts_.port :
35-
(parts_.scheme =="https" ?443u :80u);
35+
return parts_.port ? *(parts_.port) :
36+
(boost::iequals(parts_.scheme,string_type("https")) ?443u :80u);
3637
}
3738

3839
string_typepath()const {

‎libs/network/test/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ if (Boost_FOUND)
77
add_executable(cpp-netlib-hello_worldhello_world.cpp)
88
add_executable(cpp-netlib-http_1_0_testhttp_1_0_test.cpp)
99
add_executable(cpp-netlib-http_1_1_testhttp_1_1_test.cpp)
10-
add_executable(cpp-netlib-localhost_testslocalhost_tests.cpp)
10+
add_executable(cpp-netlib-http_localhost_testshttp_localhost_tests.cpp)
11+
add_executable(cpp-netlib-https_localhost_testshttps_localhost_tests.cpp)
1112
add_executable(cpp-netlib-message_testmessage_test.cpp)
1213
add_executable(cpp-netlib-http_message_testhttp_message_test.cpp)
1314
add_executable(cpp-netlib-message_transform_testmessage_transform_test.cpp)
@@ -18,13 +19,15 @@ if (Boost_FOUND)
1819
target_link_libraries(cpp-netlib-http_message_test${Boost_LIBRARIES}pthreadssl)
1920
target_link_libraries(cpp-netlib-message_test${Boost_LIBRARIES}pthreadssl)
2021
target_link_libraries(cpp-netlib-message_transform_test${Boost_LIBRARIES}pthreadssl)
21-
target_link_libraries(cpp-netlib-localhost_tests${Boost_LIBRARIES}pthreadssl)
22+
target_link_libraries(cpp-netlib-http_localhost_tests${Boost_LIBRARIES}pthreadssl)
23+
target_link_libraries(cpp-netlib-https_localhost_tests${Boost_LIBRARIES}pthreadssl)
2224
target_link_libraries(cpp-netlib-url_test${Boost_LIBRARIES}pthreadssl)
23-
set_target_properties(cpp-netlib-hello_worldcpp-netlib-http_1_0_testcpp-netlib-http_1_1_testcpp-netlib-message_testcpp-netlib-http_message_testcpp-netlib-message_transform_testcpp-netlib-localhost_testscpp-netlib-url_testPROPERTIESRUNTIME_OUTPUT_DIRECTORY../../../build/tests)
25+
set_target_properties(cpp-netlib-hello_worldcpp-netlib-http_1_0_testcpp-netlib-http_1_1_testcpp-netlib-message_testcpp-netlib-http_message_testcpp-netlib-message_transform_testcpp-netlib-http_localhost_testscpp-netlib-https_localhost_testscpp-netlib-url_testPROPERTIESRUNTIME_OUTPUT_DIRECTORY../../../build/tests)
2426
add_test(cpp-netlib-hello_worldpythonhttplib_acceptance.py../../../build/tests/cpp-netlib-hello_world../../../build/tests/cpp-netlib-hello_world.passed)
2527
add_test(cpp-netlib-http_1_0_test../../../build/tests/cpp-netlib-http_1_0_test)
2628
add_test(cpp-netlib-http_1_1_test../../../build/tests/cpp-netlib-http_1_1_test)
27-
add_test(cpp-netlib-localhost_tests../../../build/tests/cpp-netlib-localhost_tests)
29+
add_test(cpp-netlib-http_localhost_tests../../../build/tests/cpp-netlib-http_localhost_tests)
30+
add_test(cpp-netlib-https_localhost_tests../../../build/tests/cpp-netlib-https_localhost_tests)
2831
add_test(cpp-netlib-message_test../../../build/tests/cpp-netlib-message_test)
2932
add_test(cpp-netlib-http_message_test../../../build/tests/cpp-netlib-http_message_test)
3033
add_test(cpp-netlib-url_test../../../build/tests/cpp-netlib-url_test)

‎libs/network/test/Jamfile.v2

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ project network_test :
3434
<link>static
3535
;
3636

37-
unit-test localhost_tests : localhost_tests.cpp ;
37+
unit-test http_localhost_tests : http_localhost_tests.cpp ;
38+
39+
unit-test https_localhost_tests : https_localhost_tests.cpp ;
3840

3941
unit-test message_test : message_test.cpp ;
4042

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp