Skip to content
Snippets Groups Projects
Commit 090da49f authored by Adrien Béraud's avatar Adrien Béraud
Browse files

http/Request: cleanup

parent 22594396
No related branches found
No related tags found
No related merge requests found
...@@ -688,34 +688,28 @@ Request::init_parser() ...@@ -688,34 +688,28 @@ Request::init_parser()
{ {
// user registered callbacks wrappers to store its data in the response // user registered callbacks wrappers to store its data in the response
std::lock_guard<std::mutex> lock(cbs_mutex_); std::lock_guard<std::mutex> lock(cbs_mutex_);
auto on_status_cb = cbs_.on_status; cbs_.on_status = [this, statusCb = std::move(cbs_.on_status)](unsigned int status_code){
cbs_.on_status = [this, on_status_cb](unsigned int status_code){
response_.status_code = status_code; response_.status_code = status_code;
if (on_status_cb) if (statusCb)
on_status_cb(status_code); statusCb(status_code);
}; };
auto header_field = std::make_shared<std::string>(""); auto header_field = std::make_shared<std::string>();
auto on_header_field_cb = cbs_.on_header_field; cbs_.on_header_field = [header_field, headerFieldCb = std::move(cbs_.on_header_field)](const char* at, size_t length) {
cbs_.on_header_field = [header_field, on_header_field_cb](const char* at, size_t length) { *header_field = std::string(at, length);
header_field->erase(); if (headerFieldCb)
auto field = std::string(at, length); headerFieldCb(at, length);
header_field->append(field);
if (on_header_field_cb)
on_header_field_cb(at, length);
}; };
auto on_header_value_cb = cbs_.on_header_value; cbs_.on_header_value = [this, header_field, headerValueCb = std::move(cbs_.on_header_value)](const char* at, size_t length) {
cbs_.on_header_value = [this, header_field, on_header_value_cb](const char* at, size_t length) {
response_.headers[*header_field] = std::string(at, length); response_.headers[*header_field] = std::string(at, length);
if (on_header_value_cb) if (headerValueCb)
on_header_value_cb(at, length); headerValueCb(at, length);
}; };
cbs_.on_headers_complete = [this](){ cbs_.on_headers_complete = [this](){
notify_state_change(State::HEADER_RECEIVED); notify_state_change(State::HEADER_RECEIVED);
}; };
auto on_body_cb = cbs_.on_body; cbs_.on_body = [bodyCb = std::move(cbs_.on_body)](const char* at, size_t length) {
cbs_.on_body = [on_body_cb](const char* at, size_t length) { if (bodyCb)
if (on_body_cb) bodyCb(at, length);
on_body_cb(at, length);
}; };
cbs_.on_message_complete = [this](){ cbs_.on_message_complete = [this](){
if (logger_) if (logger_)
...@@ -725,39 +719,27 @@ Request::init_parser() ...@@ -725,39 +719,27 @@ Request::init_parser()
} }
// http_parser raw c callback (note: no context can be passed into them) // http_parser raw c callback (note: no context can be passed into them)
parser_s_->on_status = [](http_parser* parser, const char* /*at*/, size_t /*length*/) -> int { parser_s_->on_status = [](http_parser* parser, const char* /*at*/, size_t /*length*/) -> int {
auto cbs = static_cast<Callbacks*>(parser->data); static_cast<Callbacks*>(parser->data)->on_status(parser->status_code);
if (cbs->on_status)
cbs->on_status(parser->status_code);
return 0; return 0;
}; };
parser_s_->on_header_field = [](http_parser* parser, const char* at, size_t length) -> int { parser_s_->on_header_field = [](http_parser* parser, const char* at, size_t length) -> int {
auto cbs = static_cast<Callbacks*>(parser->data); static_cast<Callbacks*>(parser->data)->on_header_field(at, length);
if (cbs->on_header_field)
cbs->on_header_field(at, length);
return 0; return 0;
}; };
parser_s_->on_header_value = [](http_parser* parser, const char* at, size_t length) -> int { parser_s_->on_header_value = [](http_parser* parser, const char* at, size_t length) -> int {
auto cbs = static_cast<Callbacks*>(parser->data); static_cast<Callbacks*>(parser->data)->on_header_value(at, length);
if (cbs->on_header_value)
cbs->on_header_value(at, length);
return 0; return 0;
}; };
parser_s_->on_body = [](http_parser* parser, const char* at, size_t length) -> int { parser_s_->on_body = [](http_parser* parser, const char* at, size_t length) -> int {
auto cbs = static_cast<Callbacks*>(parser->data); static_cast<Callbacks*>(parser->data)->on_body(at, length);
if (cbs->on_body)
cbs->on_body(at, length);
return 0; return 0;
}; };
parser_s_->on_headers_complete = [](http_parser* parser) -> int { parser_s_->on_headers_complete = [](http_parser* parser) -> int {
auto cbs = static_cast<Callbacks*>(parser->data); static_cast<Callbacks*>(parser->data)->on_headers_complete();
if (cbs->on_headers_complete)
cbs->on_headers_complete();
return 0; return 0;
}; };
parser_s_->on_message_complete = [](http_parser* parser) -> int { parser_s_->on_message_complete = [](http_parser* parser) -> int {
auto cbs = static_cast<Callbacks*>(parser->data); static_cast<Callbacks*>(parser->data)->on_message_complete();
if (cbs->on_message_complete)
cbs->on_message_complete();
return 0; return 0;
}; };
} }
...@@ -774,7 +756,7 @@ Request::connect(std::vector<asio::ip::tcp::endpoint>&& endpoints, HandlerCb cb) ...@@ -774,7 +756,7 @@ Request::connect(std::vector<asio::ip::tcp::endpoint>&& endpoints, HandlerCb cb)
} }
if (logger_){ if (logger_){
std::string eps = ""; std::string eps = "";
for (auto& endpoint : endpoints) for (const auto& endpoint : endpoints)
eps.append(endpoint.address().to_string() + " "); eps.append(endpoint.address().to_string() + " ");
logger_->d("[http:client] [request:%i] connect begin: %s", id_, eps.c_str()); logger_->d("[http:client] [request:%i] connect begin: %s", id_, eps.c_str());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment