message::prepare_payload replaces message::prepare (API Change):

Actions Required:

* Change calls to msg.prepare to msg.prepare_payload. For messages
  with a user-defined Fields, provide the function prepare_payload_impl
  in the fields type according to the Fields requirements.
This commit is contained in:
Vinnie Falco committed 2017-07-20 08:15:27 -07:00
1 parent f9f6e1e0cc
commit 56a561da9a
20 files changed
+398 -114

No files matched your search

+4 -4
View File
@@ -73,7 +73,7 @@ public:
req.target("/");
req.insert(field::user_agent, "test");
req.body = "Hello, world!";
req.prepare();
req.prepare_payload();
error_code ec;
send_expect_100_continue(
@@ -106,7 +106,7 @@ public:
req.target("/");
req.insert(field::user_agent, "test");
req.body = "Hello, world!";
req.prepare();
req.prepare_payload();
test::pipe downstream{ios_};
downstream.server.read_size(3);
@@ -272,7 +272,7 @@ public:
req.method(verb::put);
req.target("/");
req.body = body;
req.prepare();
req.prepare_payload();
write(c.client, req);
}
{
@@ -293,7 +293,7 @@ public:
res.result(status::ok);
res.insert(field::server, "test");
res.body = path;
res.prepare();
res.prepare_payload();
write(c.server, res);
}
{
+1 -1
View File
@@ -49,7 +49,7 @@ void fxx() {
res.result(status::ok);
res.set(field::server, "Beast");
res.body = "Hello, world!";
res.prepare();
res.prepare_payload();
//]
}
+185
View File
@@ -8,6 +8,8 @@
// Test that header file is self-contained.
#include <beast/http/fields.hpp>
#include <beast/http/empty_body.hpp>
#include <beast/http/message.hpp>
#include <beast/test/test_allocator.hpp>
#include <beast/unit_test/suite.hpp>
#include <boost/lexical_cast.hpp>
@@ -397,6 +399,188 @@ public:
}
}
struct sized_body
{
using value_type = std::uint64_t;
static
std::uint64_t
size(value_type const& v)
{
return v;
}
};
struct unsized_body
{
struct value_type {};
};
void
testPreparePayload()
{
// GET, empty
{
request<empty_body> req;
req.version = 11;
req.method(verb::get);
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req.count(field::transfer_encoding) == 0);
req.set(field::content_length, "0");
req.set(field::transfer_encoding, "chunked");
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req.count(field::transfer_encoding) == 0);
req.set(field::transfer_encoding, "deflate");
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req[field::transfer_encoding] == "deflate");
req.set(field::transfer_encoding, "deflate, chunked");
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req[field::transfer_encoding] == "deflate");
}
// GET, sized
{
request<sized_body> req;
req.version = 11;
req.method(verb::get);
req.body = 50;
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "50");
BEAST_EXPECT(req[field::transfer_encoding] == "");
req.set(field::content_length, "0");
req.set(field::transfer_encoding, "chunked");
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "50");
BEAST_EXPECT(req.count(field::transfer_encoding) == 0);
req.set(field::transfer_encoding, "deflate, chunked");
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "50");
BEAST_EXPECT(req[field::transfer_encoding] == "deflate");
}
// PUT, empty
{
request<empty_body> req;
req.version = 11;
req.method(verb::put);
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "0");
BEAST_EXPECT(req.count(field::transfer_encoding) == 0);
req.set(field::content_length, "50");
req.set(field::transfer_encoding, "deflate, chunked");
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "0");
BEAST_EXPECT(req[field::transfer_encoding] == "deflate");
}
// PUT, sized
{
request<sized_body> req;
req.version = 11;
req.method(verb::put);
req.body = 50;
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "50");
BEAST_EXPECT(req.count(field::transfer_encoding) == 0);
req.set(field::content_length, "25");
req.set(field::transfer_encoding, "deflate, chunked");
req.prepare_payload();
BEAST_EXPECT(req[field::content_length] == "50");
BEAST_EXPECT(req[field::transfer_encoding] == "deflate");
}
// POST, unsized
{
request<unsized_body> req;
req.version = 11;
req.method(verb::post);
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req[field::transfer_encoding] == "chunked");
req.set(field::transfer_encoding, "deflate");
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req[field::transfer_encoding] == "deflate, chunked");
}
// POST, unsized HTTP/1.0
{
request<unsized_body> req;
req.version = 10;
req.method(verb::post);
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req.count(field::transfer_encoding) == 0);
req.set(field::transfer_encoding, "deflate");
req.prepare_payload();
BEAST_EXPECT(req.count(field::content_length) == 0);
BEAST_EXPECT(req[field::transfer_encoding] == "deflate");
}
// OK, empty
{
response<empty_body> res;
res.version = 11;
res.prepare_payload();
BEAST_EXPECT(res[field::content_length] == "0");
BEAST_EXPECT(res.count(field::transfer_encoding) == 0);
res.erase(field::content_length);
res.set(field::transfer_encoding, "chunked");
res.prepare_payload();
BEAST_EXPECT(res[field::content_length] == "0");
BEAST_EXPECT(res.count(field::transfer_encoding) == 0);
}
// OK, sized
{
response<sized_body> res;
res.version = 11;
res.body = 50;
res.prepare_payload();
BEAST_EXPECT(res[field::content_length] == "50");
BEAST_EXPECT(res.count(field::transfer_encoding) == 0);
res.erase(field::content_length);
res.set(field::transfer_encoding, "chunked");
res.prepare_payload();
BEAST_EXPECT(res[field::content_length] == "50");
BEAST_EXPECT(res.count(field::transfer_encoding) == 0);
}
// OK, unsized
{
response<unsized_body> res;
res.version = 11;
res.prepare_payload();
BEAST_EXPECT(res.count(field::content_length) == 0);
BEAST_EXPECT(res[field::transfer_encoding] == "chunked");
}
}
void run() override
{
testMembers();
@@ -404,6 +588,7 @@ public:
testRFC2616();
testErase();
testContainer();
testPreparePayload();
}
};
+1 -1
View File
@@ -31,7 +31,7 @@ public:
req.version = 11;
req.method(verb::post);
req.target("/");
req.prepare();
req.prepare_payload();
static_buffer_n<512> b;
ostream(b) << req;
string_view const s{
+4 -4
View File
@@ -532,7 +532,7 @@ public:
m.version = 10;
m.insert(field::user_agent, "test");
m.body = "*";
m.prepare();
m.prepare_payload();
BEAST_EXPECT(str(m) ==
"GET / HTTP/1.0\r\n"
"User-Agent: test\r\n"
@@ -549,7 +549,7 @@ public:
m.version = 10;
m.insert(field::user_agent, "test");
m.body = "*";
m.prepare();
m.prepare_payload();
test::string_ostream ss(ios_);
error_code ec;
write(ss, m, ec);
@@ -569,7 +569,7 @@ public:
m.version = 11;
m.insert(field::user_agent, "test");
m.body = "*";
m.prepare();
m.prepare_payload();
BEAST_EXPECT(str(m) ==
"GET / HTTP/1.1\r\n"
"User-Agent: test\r\n"
@@ -586,7 +586,7 @@ public:
m.version = 11;
m.insert(field::user_agent, "test");
m.body = "*";
m.prepare();
m.prepare_payload();
test::string_ostream ss(ios_);
error_code ec;
write(ss, m, ec);