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

Commit974cd12

Browse files
committed
Merging from 0.5-devel for eventual beta testing and release.
2 parents6c3d96b +08c04cc commit974cd12

File tree

49 files changed

+788
-388
lines changed

Some content is hidden

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

49 files changed

+788
-388
lines changed

‎boost/network/include/http/client.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef BOOST_NETWORK_INCLUDE_HTTP_CLIENT_HPP_
2+
#defineBOOST_NETWORK_INCLUDE_HTTP_CLIENT_HPP_
3+
4+
// Copyright 2009 Dean Michael Berris
5+
// Distributed under the Boost Software License, Version 1.0.
6+
// (See accompanying file LICENSE_1_0.txt or copy at
7+
// http://www.boost.org/LICENSE_1_0.txt)
8+
//
9+
// This is the modular include file for using the HTTP Client
10+
11+
#include<boost/network/protocol/http/client.hpp>
12+
13+
#endif// BOOST_NETWORK_INCLUDE_HTTP_CLIENT_HPP_
14+

‎boost/network/include/message.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef BOOST_NETWORK_INCLUDE_MESSAGE_HPP_
2+
#defineBOOST_NETWORK_INCLUDE_MESSAGE_HPP_
3+
4+
// Copyright 2009 Dean Michael Berris
5+
// Distributed under the Boost Software License, Version 1.0.
6+
// (See accompanying file LICENSE_1_0.txt or copy at
7+
// http://www.boost.org/LICENSE_1_0.txt)
8+
//
9+
// This is the modular include file for using the basic message type
10+
11+
#include<boost/network/message.hpp>
12+
13+
#endif// BOOST_NETWORK_INCLUDE_MESSAGE_HPP_
14+

‎boost/network/message.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ namespace boost { namespace network {
9393
};
9494

9595
template<classTag>
96-
voidswap(basic_message<Tag> & left, basic_message<Tag> & right) {
96+
inlinevoidswap(basic_message<Tag> & left, basic_message<Tag> & right) {
9797
// swap for ADL
9898
left.swap(right);
9999
}

‎boost/network/protocol/http/connection.hpp

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,6 @@ namespace boost { namespace network { namespace http {
4545
, socket_(service_)
4646
, wrapper_(service_)
4747
{
48-
try {
49-
socket_.set_option(tcp::no_delay(true));// Don't delay writing
50-
}catch (system::system_error & e) {
51-
handler_.log(e.what());
52-
}
5348
}
5449

5550
tcp::socket &socket() {
@@ -62,6 +57,9 @@ namespace boost { namespace network { namespace http {
6257
// and then pass that request object to the
6358
// handler_ instance.
6459
//
60+
boost::system::error_code option_error;
61+
socket_.set_option(tcp::no_delay(true), option_error);
62+
if (option_error) handler_.log(system::system_error(option_error).what());
6563
socket_.async_read_some(
6664
boost::asio::buffer(buffer_),
6765
wrapper_.wrap(
@@ -87,7 +85,8 @@ namespace boost { namespace network { namespace http {
8785
voidhandle_read_headers(system::error_codeconst &ec,size_t bytes_transferred) {
8886
if (!ec) {
8987
tribool done;
90-
tie(done,tuples::ignore) = parser_.parse_headers(request_, buffer_.data(), buffer_.data() + bytes_transferred);
88+
array<char, BOOST_HTTP_SERVER_BUFFER_SIZE>::iterator new_start;
89+
tie(done,new_start) = parser_.parse_headers(request_, buffer_.data(), buffer_.data() + bytes_transferred);
9190
if (done) {
9291
if (request_.method[0] =='P') {
9392
// look for the content-length header
@@ -134,21 +133,25 @@ namespace boost { namespace network { namespace http {
134133
}
135134

136135
if (content_length !=0) {
137-
async_read(
138-
socket_,
139-
boost::asio::buffer(buffer_),
140-
boost::asio::transfer_at_least(content_length),
141-
wrapper_.wrap(
142-
bind(
143-
&connection<Tag,Handler>::handle_read_body_contents,
144-
connection<Tag,Handler>::shared_from_this(),
145-
boost::asio::placeholders::error,
146-
content_length,
147-
boost::asio::placeholders::bytes_transferred
136+
if (new_start != (buffer_.begin() + bytes_transferred)) {
137+
request_.body.append(new_start, buffer_.begin() + bytes_transferred);
138+
content_length -=std::distance(new_start, buffer_.begin() + bytes_transferred);
139+
}
140+
if (content_length >0) {
141+
socket_.async_read_some(
142+
boost::asio::buffer(buffer_),
143+
wrapper_.wrap(
144+
bind(
145+
&connection<Tag,Handler>::handle_read_body_contents,
146+
connection<Tag,Handler>::shared_from_this(),
147+
boost::asio::placeholders::error,
148+
content_length,
149+
boost::asio::placeholders::bytes_transferred
150+
)
148151
)
149-
)
150-
);
151-
return;
152+
);
153+
return;
154+
}
152155
}
153156

154157
handler_(request_, response_);
@@ -210,7 +213,10 @@ namespace boost { namespace network { namespace http {
210213
voidhandle_read_body_contents(boost::system::error_codeconst & ec,size_t bytes_to_read,size_t bytes_transferred) {
211214
if (!ec) {
212215
size_t difference = bytes_to_read - bytes_transferred;
213-
request_.body.append(buffer_.begin(), buffer_.end());
216+
array<char,BOOST_HTTP_SERVER_BUFFER_SIZE>::iterator start = buffer_.begin(),
217+
past_end = start;
218+
std::advance(past_end,std::min(bytes_to_read,bytes_transferred));
219+
request_.body.append(buffer_.begin(), past_end);
214220
if (difference ==0) {
215221
handler_(request_, response_);
216222
boost::asio::async_write(
@@ -246,6 +252,7 @@ namespace boost { namespace network { namespace http {
246252
if (!ec) {
247253
boost::system::error_code ignored_ec;
248254
socket_.shutdown(tcp::socket::shutdown_both, ignored_ec);
255+
socket_.close(ignored_ec);
249256
}
250257
}
251258

‎boost/network/protocol/http/impl/message.ipp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ namespace boost { namespace network { namespace http {
7979
case'>':case'#':case'%':case'{':case'}':case'|':
8080
case'\\':case'^':case'~':case'[':case']':case'`':
8181
// the character needs to be encoded
82-
sprintf(encode_buf+1,"%2X", str[pos]);
82+
sprintf(encode_buf+1,"%02X", str[pos]);
8383
result += encode_buf;
8484
break;
8585
}

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

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ namespace boost { namespace network { namespace http {
3434
boost::network::uri::http::uri uri_;
3535

3636
public:
37+
typedef Tag tag;
3738
typedeftypename string<Tag>::type string_type;
3839

3940
explicitbasic_request(string_typeconst & uri_)
@@ -91,11 +92,6 @@ namespace boost { namespace network { namespace http {
9192

9293
};
9394

94-
template<classTag>
95-
inlinevoidswap(basic_request<Tag> & lhs, basic_request<Tag> & rhs) {
96-
lhs.swap(rhs);
97-
}
98-
9995
/** This is the implementation of a POD request type
10096
* that is specificially used by the HTTP server
10197
* implementation. This fully specializes the
@@ -104,8 +100,8 @@ namespace boost { namespace network { namespace http {
104100
* reasons.
105101
*/
106102
template<>
107-
classbasic_request<tags::http_server> {
108-
public:
103+
structbasic_request<tags::http_server> {
104+
typedef tags::http_server tag;
109105
typedef string<tags::http_server>::type string_type;
110106
typedef vector<tags::http_server>::apply<request_header>::type vector_type;
111107
string_type method;
@@ -114,23 +110,28 @@ namespace boost { namespace network { namespace http {
114110
boost::uint8_t http_version_minor;
115111
vector_type headers;
116112
string_type body;
117-
};
118113

119-
template<>
120-
inlinevoid swap<tags::http_server>(basic_request<tags::http_server> & l, basic_request<tags::http_server> & r) {
121-
using std::swap;
122-
swap(l.method, r.method);
123-
swap(l.uri, r.uri);
124-
swap(l.http_version_major, r.http_version_major);
125-
swap(l.http_version_minor, r.http_version_minor);
126-
swap(l.headers, r.headers);
127-
swap(l.body, r.body);
114+
voidswap(basic_request & r) {
115+
using std::swap;
116+
swap(method, r.method);
117+
swap(uri, r.uri);
118+
swap(http_version_major, r.http_version_major);
119+
swap(http_version_minor, r.http_version_minor);
120+
swap(headers, r.headers);
121+
swap(body, r.body);
122+
}
128123
};
129124

125+
template<classTag>
126+
inlinevoidswap(basic_request<Tag> & lhs, basic_request<Tag> & rhs) {
127+
lhs.swap(rhs);
128+
}
129+
130130
}// namespace http
131131

132132
}// namespace network
133133

134134
}// namespace boost
135135

136136
#endif// __NETWORK_PROTOCOL_HTTP_REQUEST_IMPL_20070908_1_HPP__
137+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp