diff --git a/src/http.cpp b/src/http.cpp index f609df471e64b7069b4ce934257977042adc57e9..42d654030f4f3b04df46fd187e5df2d716921c59 100644 --- a/src/http.cpp +++ b/src/http.cpp @@ -688,34 +688,28 @@ Request::init_parser() { // user registered callbacks wrappers to store its data in the response std::lock_guard<std::mutex> lock(cbs_mutex_); - auto on_status_cb = cbs_.on_status; - cbs_.on_status = [this, on_status_cb](unsigned int status_code){ + cbs_.on_status = [this, statusCb = std::move(cbs_.on_status)](unsigned int status_code){ response_.status_code = status_code; - if (on_status_cb) - on_status_cb(status_code); + if (statusCb) + statusCb(status_code); }; - auto header_field = std::make_shared<std::string>(""); - auto on_header_field_cb = cbs_.on_header_field; - cbs_.on_header_field = [header_field, on_header_field_cb](const char* at, size_t length) { - header_field->erase(); - auto field = std::string(at, length); - header_field->append(field); - if (on_header_field_cb) - on_header_field_cb(at, length); + auto header_field = std::make_shared<std::string>(); + cbs_.on_header_field = [header_field, headerFieldCb = std::move(cbs_.on_header_field)](const char* at, size_t length) { + *header_field = std::string(at, length); + if (headerFieldCb) + headerFieldCb(at, length); }; - auto on_header_value_cb = cbs_.on_header_value; - cbs_.on_header_value = [this, header_field, on_header_value_cb](const char* at, size_t length) { + cbs_.on_header_value = [this, header_field, headerValueCb = std::move(cbs_.on_header_value)](const char* at, size_t length) { response_.headers[*header_field] = std::string(at, length); - if (on_header_value_cb) - on_header_value_cb(at, length); + if (headerValueCb) + headerValueCb(at, length); }; cbs_.on_headers_complete = [this](){ notify_state_change(State::HEADER_RECEIVED); }; - auto on_body_cb = cbs_.on_body; - cbs_.on_body = [on_body_cb](const char* at, size_t length) { - if (on_body_cb) - on_body_cb(at, length); + cbs_.on_body = [bodyCb = std::move(cbs_.on_body)](const char* at, size_t length) { + if (bodyCb) + bodyCb(at, length); }; cbs_.on_message_complete = [this](){ if (logger_) @@ -725,39 +719,27 @@ Request::init_parser() } // 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 { - auto cbs = static_cast<Callbacks*>(parser->data); - if (cbs->on_status) - cbs->on_status(parser->status_code); + static_cast<Callbacks*>(parser->data)->on_status(parser->status_code); return 0; }; parser_s_->on_header_field = [](http_parser* parser, const char* at, size_t length) -> int { - auto cbs = static_cast<Callbacks*>(parser->data); - if (cbs->on_header_field) - cbs->on_header_field(at, length); + static_cast<Callbacks*>(parser->data)->on_header_field(at, length); return 0; }; parser_s_->on_header_value = [](http_parser* parser, const char* at, size_t length) -> int { - auto cbs = static_cast<Callbacks*>(parser->data); - if (cbs->on_header_value) - cbs->on_header_value(at, length); + static_cast<Callbacks*>(parser->data)->on_header_value(at, length); return 0; }; parser_s_->on_body = [](http_parser* parser, const char* at, size_t length) -> int { - auto cbs = static_cast<Callbacks*>(parser->data); - if (cbs->on_body) - cbs->on_body(at, length); + static_cast<Callbacks*>(parser->data)->on_body(at, length); return 0; }; parser_s_->on_headers_complete = [](http_parser* parser) -> int { - auto cbs = static_cast<Callbacks*>(parser->data); - if (cbs->on_headers_complete) - cbs->on_headers_complete(); + static_cast<Callbacks*>(parser->data)->on_headers_complete(); return 0; }; parser_s_->on_message_complete = [](http_parser* parser) -> int { - auto cbs = static_cast<Callbacks*>(parser->data); - if (cbs->on_message_complete) - cbs->on_message_complete(); + static_cast<Callbacks*>(parser->data)->on_message_complete(); return 0; }; } @@ -774,7 +756,7 @@ Request::connect(std::vector<asio::ip::tcp::endpoint>&& endpoints, HandlerCb cb) } if (logger_){ std::string eps = ""; - for (auto& endpoint : endpoints) + for (const auto& endpoint : endpoints) eps.append(endpoint.address().to_string() + " "); logger_->d("[http:client] [request:%i] connect begin: %s", id_, eps.c_str()); }