You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by al...@apache.org on 2018/04/22 20:21:16 UTC
[2/3] mesos git commit: Libprocess: Avoided magic values in
decoder.hpp.
Libprocess: Avoided magic values in decoder.hpp.
Review: https://reviews.apache.org/r/66638
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d6552b06
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d6552b06
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d6552b06
Branch: refs/heads/master
Commit: d6552b06cf2d1a345a8ac3ea61c0cb7eb5d293e3
Parents: d20c553
Author: Alexander Rukletsov <al...@apache.org>
Authored: Mon Apr 16 19:18:49 2018 +0200
Committer: Alexander Rukletsov <al...@apache.org>
Committed: Sun Apr 22 22:12:05 2018 +0200
----------------------------------------------------------------------
3rdparty/libprocess/src/decoder.hpp | 118 +++++++++++++++++--------------
1 file changed, 64 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/d6552b06/3rdparty/libprocess/src/decoder.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/decoder.hpp b/3rdparty/libprocess/src/decoder.hpp
index 8ed8e92..a078435 100644
--- a/3rdparty/libprocess/src/decoder.hpp
+++ b/3rdparty/libprocess/src/decoder.hpp
@@ -41,6 +41,16 @@
namespace process {
+namespace http_parsing {
+
+// We expect callbacks to return 0 on success and 1 on failure. These constants
+// are introduced solely to make decoders' code easier to read and are not meant
+// to be used outside.
+constexpr int SUCCESS = 0;
+constexpr int FAILURE = 1;
+
+} // namespace http_parsing {
+
// TODO(benh): Make DataDecoder abstract and make RequestDecoder a
// concrete subclass.
class DataDecoder
@@ -115,17 +125,17 @@ private:
decoder->request = new http::Request();
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_complete(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_header(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_url(http_parser* p, const char* data, size_t length)
@@ -139,7 +149,7 @@ private:
// `on_message_complete`.
decoder->url.append(data, length);
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_field(http_parser* p, const char* data, size_t length)
@@ -156,7 +166,7 @@ private:
decoder->field.append(data, length);
decoder->header = HEADER_FIELD;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_value(http_parser* p, const char* data, size_t length)
@@ -165,7 +175,7 @@ private:
CHECK_NOTNULL(decoder->request);
decoder->value.append(data, length);
decoder->header = HEADER_VALUE;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_headers_complete(http_parser* p)
@@ -184,7 +194,7 @@ private:
decoder->request->keepAlive = http_should_keep_alive(&decoder->parser) != 0;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_body(http_parser* p, const char* data, size_t length)
@@ -192,7 +202,7 @@ private:
DataDecoder* decoder = (DataDecoder*) p->data;
CHECK_NOTNULL(decoder->request);
decoder->request->body.append(data, length);
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_message_complete(http_parser* p)
@@ -237,7 +247,7 @@ private:
if (decoded.isError()) {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
decoder->request->url.query = decoded.get();
@@ -249,7 +259,7 @@ private:
Try<std::string> decompressed = gzip::decompress(decoder->request->body);
if (decompressed.isError()) {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
decoder->request->body = decompressed.get();
@@ -262,7 +272,7 @@ private:
decoder->requests.push_back(decoder->request);
decoder->request = nullptr;
- return 0;
+ return http_parsing::SUCCESS;
}
bool failure;
@@ -363,22 +373,22 @@ private:
decoder->response->body.clear();
decoder->response->path.clear();
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_complete(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_header(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_url(http_parser* p, const char* data, size_t length)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_field(http_parser* p, const char* data, size_t length)
@@ -395,7 +405,7 @@ private:
decoder->field.append(data, length);
decoder->header = HEADER_FIELD;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_value(http_parser* p, const char* data, size_t length)
@@ -404,7 +414,7 @@ private:
CHECK_NOTNULL(decoder->response);
decoder->value.append(data, length);
decoder->header = HEADER_VALUE;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_headers_complete(http_parser* p)
@@ -418,7 +428,7 @@ private:
decoder->field.clear();
decoder->value.clear();
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_body(http_parser* p, const char* data, size_t length)
@@ -426,7 +436,7 @@ private:
ResponseDecoder* decoder = (ResponseDecoder*) p->data;
CHECK_NOTNULL(decoder->response);
decoder->response->body.append(data, length);
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_message_complete(http_parser* p)
@@ -442,7 +452,7 @@ private:
http::Status::string(decoder->parser.status_code);
} else {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
// We can only provide the gzip encoding.
@@ -452,7 +462,7 @@ private:
Try<std::string> decompressed = gzip::decompress(decoder->response->body);
if (decompressed.isError()) {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
decoder->response->body = decompressed.get();
@@ -465,12 +475,12 @@ private:
decoder->responses.push_back(decoder->response);
decoder->response = nullptr;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_status(http_parser* p, const char* data, size_t length)
{
- return 0;
+ return http_parsing::SUCCESS;
}
bool failure;
@@ -602,27 +612,27 @@ private:
decoder->response->type = http::Response::PIPE;
decoder->writer = None();
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_complete(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_header(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_status(http_parser* p, const char* data, size_t length)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_url(http_parser* p, const char* data, size_t length)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_field(http_parser* p, const char* data, size_t length)
@@ -632,7 +642,7 @@ private:
// TODO(alexr): We currently do not support trailers, i.e., headers after
// `on_headers_complete` has been called, and instead treat them as errors.
if (decoder->response == nullptr) {
- return 1;
+ return http_parsing::FAILURE;
}
if (decoder->header != HEADER_FIELD) {
@@ -644,7 +654,7 @@ private:
decoder->field.append(data, length);
decoder->header = HEADER_FIELD;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_value(http_parser* p, const char* data, size_t length)
@@ -654,12 +664,12 @@ private:
// TODO(alexr): We currently do not support trailers, i.e., headers after
// `on_headers_complete` has been called, and instead treat them as errors.
if (decoder->response == nullptr) {
- return 1;
+ return http_parsing::FAILURE;
}
decoder->value.append(data, length);
decoder->header = HEADER_VALUE;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_headers_complete(http_parser* p)
@@ -682,7 +692,7 @@ private:
http::Status::string(decoder->parser.status_code);
} else {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
// We cannot provide streaming gzip decompression!
@@ -690,7 +700,7 @@ private:
decoder->response->headers.get("Content-Encoding");
if (encoding.isSome() && encoding.get() == "gzip") {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
CHECK_NONE(decoder->writer);
@@ -709,7 +719,7 @@ private:
// auxiliary data structure.
decoder->response = nullptr;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_body(http_parser* p, const char* data, size_t length)
@@ -721,7 +731,7 @@ private:
http::Pipe::Writer writer = decoder->writer.get(); // Remove const.
writer.write(std::string(data, length));
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_message_complete(http_parser* p)
@@ -732,7 +742,7 @@ private:
// earlier (e.g., due to invalid status code).
if (decoder->writer.isNone()) {
CHECK(decoder->failure);
- return 1;
+ return http_parsing::FAILURE;
}
http::Pipe::Writer writer = decoder->writer.get(); // Remove const.
@@ -740,7 +750,7 @@ private:
decoder->writer = None();
- return 0;
+ return http_parsing::SUCCESS;
}
bool failure;
@@ -863,17 +873,17 @@ private:
decoder->writer = None();
decoder->decompressor.reset();
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_complete(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_chunk_header(http_parser* p)
{
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_url(http_parser* p, const char* data, size_t length)
@@ -882,7 +892,7 @@ private:
// URL should not be parsed after `on_headers_complete` has been called.
if (decoder->request == nullptr) {
- return 1;
+ return http_parsing::FAILURE;
}
// The current http_parser library (version 2.6.2 and below)
@@ -891,7 +901,7 @@ private:
// `on_header_complete`.
decoder->url.append(data, length);
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_field(http_parser* p, const char* data, size_t length)
@@ -901,7 +911,7 @@ private:
// TODO(alexr): We currently do not support trailers, i.e., headers after
// `on_headers_complete` has been called, and instead treat them as errors.
if (decoder->request == nullptr) {
- return 1;
+ return http_parsing::FAILURE;
}
if (decoder->header != HEADER_FIELD) {
@@ -913,7 +923,7 @@ private:
decoder->field.append(data, length);
decoder->header = HEADER_FIELD;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_header_value(http_parser* p, const char* data, size_t length)
@@ -923,12 +933,12 @@ private:
// TODO(alexr): We currently do not support trailers, i.e., headers after
// `on_headers_complete` has been called, and instead treat them as errors.
if (decoder->request == nullptr) {
- return 1;
+ return http_parsing::FAILURE;
}
decoder->value.append(data, length);
decoder->header = HEADER_VALUE;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_headers_complete(http_parser* p)
@@ -985,7 +995,7 @@ private:
if (decoded.isError()) {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
decoder->request->url.query = std::move(decoded.get());
@@ -1014,7 +1024,7 @@ private:
// auxiliary data structure.
decoder->request = nullptr;
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_body(http_parser* p, const char* data, size_t length)
@@ -1032,7 +1042,7 @@ private:
if (decompressed.isError()) {
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
body = std::move(decompressed.get());
@@ -1042,7 +1052,7 @@ private:
writer.write(std::move(body));
- return 0;
+ return http_parsing::SUCCESS;
}
static int on_message_complete(http_parser* p)
@@ -1053,7 +1063,7 @@ private:
// earlier (e.g., due to invalid query parameters).
if (decoder->writer.isNone()) {
CHECK(decoder->failure);
- return 1;
+ return http_parsing::FAILURE;
}
http::Pipe::Writer writer = decoder->writer.get(); // Remove const.
@@ -1062,14 +1072,14 @@ private:
!decoder->decompressor->finished()) {
writer.fail("Failed to decompress body");
decoder->failure = true;
- return 1;
+ return http_parsing::FAILURE;
}
writer.close();
decoder->writer = None();
- return 0;
+ return http_parsing::SUCCESS;
}
bool failure;