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

Commita5feaa6

Browse files
committed
Merge remote-tracking branch 'deanberris/0.9-devel' into 0.9-devel
2 parentsc834e47 +f3f2f79 commita5feaa6

File tree

56 files changed

+383
-121
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+383
-121
lines changed

‎CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ if (OPENSSL_FOUND)
2121
include_directories(${OPENSSL_INCLUDE_DIR})
2222
endif()
2323

24+
if (${CMAKE_CXX_COMPILER_ID}MATCHESGNU)
25+
set (CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -Wall")
26+
endif()
27+
2428
if (Boost_FOUND)
2529
if (MSVC)
2630
add_definitions(-D_SCL_SECURE_NO_WARNINGS)

‎boost/network/protocol/http/algorithms/linearize.hpp

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
// (See accompanying file LICENSE_1_0.txt or copy at
77
// http://www.boost.org/LICENSE_1_0.txt)
88

9+
#include<algorithm>
10+
#include<bitset>
911
#include<boost/network/traits/string.hpp>
1012
#include<boost/network/protocol/http/message/header/name.hpp>
1113
#include<boost/network/protocol/http/message/header/value.hpp>
@@ -15,6 +17,7 @@
1517
#include<boost/concept/requires.hpp>
1618
#include<boost/optional.hpp>
1719
#include<boost/range/algorithm/copy.hpp>
20+
#include<boost/algorithm/string/compare.hpp>
1821

1922
namespaceboost {namespacenetwork {namespacehttp {
2023

@@ -92,48 +95,86 @@ namespace boost { namespace network { namespace http {
9295
*oi =consts::dot_char();
9396
boost::copy(version_minor_str, oi);
9497
boost::copy(crlf, oi);
95-
boost::copy(host, oi);
96-
*oi =consts::colon_char();
97-
*oi =consts::space_char();
98-
boost::copy(request.host(), oi);
99-
boost::optional<boost::uint16_t> port_ =port(request);
100-
if (port_) {
101-
string_type port_str = boost::lexical_cast<string_type>(*port_);
102-
*oi =consts::colon_char();
103-
boost::copy(port_str, oi);
104-
}
105-
boost::copy(crlf, oi);
106-
boost::copy(accept, oi);
107-
*oi =consts::colon_char();
108-
*oi =consts::space_char();
109-
boost::copy(accept_mime, oi);
110-
boost::copy(crlf, oi);
111-
if (version_major ==1u && version_minor ==1u) {
112-
boost::copy(accept_encoding, oi);
113-
*oi =consts::colon_char();
114-
*oi =consts::space_char();
115-
boost::copy(default_accept_encoding, oi);
116-
boost::copy(crlf, oi);
117-
}
98+
99+
// We need to determine whether we've seen any of the following headers
100+
// before setting the defaults. We use a bitset to keep track of the
101+
// defaulted headers.
102+
enum { ACCEPT, ACCEPT_ENCODING, HOST, MAX };
103+
std::bitset<MAX> found_headers;
104+
staticcharconst* defaulted_headers[][2] = {
105+
{consts::accept(),
106+
consts::accept() +std::strlen(consts::accept())},
107+
{consts::accept_encoding(),
108+
consts::accept_encoding() +std::strlen(consts::accept_encoding())},
109+
{consts::host(),consts::host() +std::strlen(consts::host())}
110+
};
111+
118112
typedeftypename headers_range<Request>::type headers_range;
119113
typedeftypename range_value<headers_range>::type headers_value;
120-
BOOST_FOREACH(const headers_value &header,headers(request))
121-
{
122-
string_type header_name =name(header),
123-
header_value =value(header);
124-
boost::copy(header_name, oi);
125-
*oi =consts::colon_char();
126-
*oi =consts::space_char();
127-
boost::copy(header_value, oi);
128-
boost::copy(crlf, oi);
114+
BOOST_FOREACH(const headers_value & header,headers(request)) {
115+
string_type header_name =name(header), header_value =value(header);
116+
// Here we check that we have not seen an override to the defaulted
117+
// headers.
118+
for (int header_index =0; header_index < MAX; ++header_index)
119+
if (std::distance(header_name.begin(), header_name.end()) ==
120+
std::distance(defaulted_headers[header_index][0],
121+
defaulted_headers[header_index][1]) &&
122+
std::equal(header_name.begin(),
123+
header_name.end(),
124+
defaulted_headers[header_index][0],
125+
algorithm::is_iequal()))
126+
found_headers.set(header_index,true);
127+
128+
// We ignore empty headers.
129+
if (header_value.empty())continue;
130+
boost::copy(header_name, oi);
131+
*oi =consts::colon_char();
132+
*oi =consts::space_char();
133+
boost::copy(header_value, oi);
134+
boost::copy(crlf, oi);
135+
136+
}
137+
138+
if (!found_headers[HOST]) {
139+
boost::copy(host, oi);
140+
*oi =consts::colon_char();
141+
*oi =consts::space_char();
142+
boost::copy(request.host(), oi);
143+
boost::optional<boost::uint16_t> port_ =port(request);
144+
if (port_) {
145+
string_type port_str = boost::lexical_cast<string_type>(*port_);
146+
*oi =consts::colon_char();
147+
boost::copy(port_str, oi);
148+
}
149+
boost::copy(crlf, oi);
150+
}
151+
152+
if (!found_headers[ACCEPT]) {
153+
boost::copy(accept, oi);
154+
*oi =consts::colon_char();
155+
*oi =consts::space_char();
156+
boost::copy(accept_mime, oi);
157+
boost::copy(crlf, oi);
158+
}
159+
160+
if (version_major ==1u &&
161+
version_minor ==1u &&
162+
!found_headers[ACCEPT_ENCODING]) {
163+
boost::copy(accept_encoding, oi);
164+
*oi =consts::colon_char();
165+
*oi =consts::space_char();
166+
boost::copy(default_accept_encoding, oi);
167+
boost::copy(crlf, oi);
129168
}
169+
130170
if (!connection_keepalive<Tag>::value) {
131-
boost::copy(connection, oi);
132-
*oi =consts::colon_char();
133-
*oi =consts::space_char();
171+
boost::copy(connection, oi);
172+
*oi =consts::colon_char();
173+
*oi =consts::space_char();
134174
boost::copy(close, oi);
135175
boost::copy(crlf, oi);
136176
}
177+
137178
boost::copy(crlf, oi);
138179
typename body_range<Request>::type body_data =body(request).range();
139180
returnboost::copy(body_data, oi);

‎boost/network/protocol/http/server/async_server.hpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,21 @@ namespace boost { namespace network { namespace http {
9090
scoped_mutex_lockstopping_lock(stopping_mutex_);
9191
if (stopping)return;// we dont want to add another handler instance, and we dont want to know about errors for a socket we dont need anymore
9292
}
93-
if (!ec) {
94-
socket_options_base::socket_options(new_connection->socket());
95-
new_connection->start();
96-
new_connection.reset(
97-
newconnection(service_, handler, *thread_pool));
98-
acceptor.async_accept(
99-
new_connection->socket(),
100-
boost::bind(
101-
&async_server_base<Tag,Handler>::handle_accept,
102-
this,
103-
boost::asio::placeholders::error));
104-
}else {
105-
BOOST_NETWORK_MESSAGE("Error accepting connection, reason:" << ec);
93+
94+
if (ec) {
95+
BOOST_NETWORK_MESSAGE("Error accepting connection, reason:"
96+
<< ec);
10697
}
98+
99+
socket_options_base::socket_options(new_connection->socket());
100+
new_connection->start();
101+
new_connection.reset(
102+
newconnection(service_, handler, *thread_pool));
103+
acceptor.async_accept(
104+
new_connection->socket(),
105+
boost::bind(&async_server_base<Tag, Handler>::handle_accept,
106+
this,
107+
boost::asio::placeholders::error));
107108
}
108109

109110
voidstart_listening() {

‎boost/network/protocol/http/server/sync_server.hpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,18 @@ namespace boost { namespace network { namespace http {
6868
boost::mutex listening_mutex_;
6969
bool listening_;
7070

71-
voidhandle_accept(boost::system::error_codeconst & ec) {
72-
if (!ec) {
73-
socket_options_base::socket_options(new_connection->socket());
74-
new_connection->start();
75-
new_connection.reset(new sync_connection<Tag,Handler>(service_, handler_));
76-
acceptor_.async_accept(new_connection->socket(),
77-
boost::bind(&sync_server_base<Tag,Handler>::handle_accept,
78-
this, boost::asio::placeholders::error));
79-
}
71+
voidhandle_accept(boost::system::error_codeconst& ec) {
72+
if (ec) {
73+
}
74+
socket_options_base::socket_options(new_connection->socket());
75+
new_connection->start();
76+
new_connection.reset(
77+
new sync_connection<Tag, Handler>(service_, handler_));
78+
acceptor_.async_accept(
79+
new_connection->socket(),
80+
boost::bind(&sync_server_base<Tag, Handler>::handle_accept,
81+
this,
82+
boost::asio::placeholders::error));
8083
}
8184

8285
voidstart_listening() {
@@ -87,24 +90,24 @@ namespace boost { namespace network { namespace http {
8790
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query, error);
8891
if (error) {
8992
BOOST_NETWORK_MESSAGE("Error resolving address:" << address_ <<':' << port_);
90-
return;
93+
boost::throw_exception(std::runtime_error("Error resolving address."));
9194
}
9295
tcp::endpoint endpoint = *endpoint_iterator;
9396
acceptor_.open(endpoint.protocol(), error);
9497
if (error) {
9598
BOOST_NETWORK_MESSAGE("Error opening socket:" << address_ <<':' << port_ <<" -- reason: '" << error <<'\'');
96-
return;
99+
boost::throw_exception(std::runtime_error("Error opening socket."));
97100
}
98101
socket_options_base::acceptor_options(acceptor_);
99102
acceptor_.bind(endpoint, error);
100103
if (error) {
101104
BOOST_NETWORK_MESSAGE("Error binding to socket:" << address_ <<':' << port_ <<" -- reason: '" << error <<'\'');
102-
return;
105+
boost::throw_exception(std::runtime_error("Error binding to socket."));
103106
}
104107
acceptor_.listen(tcp::socket::max_connections, error);
105108
if (error) {
106109
BOOST_NETWORK_MESSAGE("Error listening on socket:" << address_ <<':' << port_ <<" -- reason: '" << error <<'\'');
107-
return;
110+
boost::throw_exception(std::runtime_error("Error listening on socket."));
108111
}
109112
new_connection.reset(new sync_connection<Tag,Handler>(service_, handler_));
110113
acceptor_.async_accept(new_connection->socket(),

‎boost/network/support/is_udp.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ namespace boost { namespace network {
2424

2525
}// namespace boost
2626

27-
#endif// BOOST_NETWORK_SUPPORT_IS_UDP_HPP_20100622
27+
#endif// BOOST_NETWORK_SUPPORT_IS_UDP_HPP_20100622
28+

‎boost/network/version.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
#defineBOOST_NETLIB_VERSION_MAJOR0
1313
#defineBOOST_NETLIB_VERSION_MINOR10
14-
#defineBOOST_NETLIB_VERSION_INCREMENT0
14+
#defineBOOST_NETLIB_VERSION_INCREMENT1
1515

1616
#ifndef BOOST_NETLIB_VERSION
1717
#defineBOOST_NETLIB_VERSION \
-274 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
-7 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp