Add string_view local variables to avoid repetition.
Introduce a named variable instead of instantiating the same temporary in
multiple places.
PiperOrigin-RevId: 443129683
diff --git a/quiche/common/balsa/balsa_frame.cc b/quiche/common/balsa/balsa_frame.cc
index 67a8c24..7eecb7a 100644
--- a/quiche/common/balsa/balsa_frame.cc
+++ b/quiche/common/balsa/balsa_frame.cc
@@ -248,40 +248,28 @@
HandleWarning(last_error_);
}
+ const absl::string_view line_input(
+ begin + headers_->non_whitespace_1_idx_,
+ headers_->whitespace_4_idx_ - headers_->non_whitespace_1_idx_);
+ const absl::string_view part1(
+ begin + headers_->non_whitespace_1_idx_,
+ headers_->whitespace_2_idx_ - headers_->non_whitespace_1_idx_);
+ const absl::string_view part2(
+ begin + headers_->non_whitespace_2_idx_,
+ headers_->whitespace_3_idx_ - headers_->non_whitespace_2_idx_);
+ const absl::string_view part3(
+ begin + headers_->non_whitespace_3_idx_,
+ headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_);
+
if (is_request_) {
- size_t version_length =
- headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_;
- visitor_->OnRequestFirstLineInput(
- absl::string_view(
- begin + headers_->non_whitespace_1_idx_,
- headers_->whitespace_4_idx_ - headers_->non_whitespace_1_idx_),
- absl::string_view(
- begin + headers_->non_whitespace_1_idx_,
- headers_->whitespace_2_idx_ - headers_->non_whitespace_1_idx_),
- absl::string_view(
- begin + headers_->non_whitespace_2_idx_,
- headers_->whitespace_3_idx_ - headers_->non_whitespace_2_idx_),
- absl::string_view(begin + headers_->non_whitespace_3_idx_,
- version_length));
- if (version_length == 0) {
+ visitor_->OnRequestFirstLineInput(line_input, part1, part2, part3);
+ if (part3.empty()) {
parse_state_ = BalsaFrameEnums::MESSAGE_FULLY_READ;
}
return;
}
- visitor_->OnResponseFirstLineInput(
- absl::string_view(
- begin + headers_->non_whitespace_1_idx_,
- headers_->whitespace_4_idx_ - headers_->non_whitespace_1_idx_),
- absl::string_view(
- begin + headers_->non_whitespace_1_idx_,
- headers_->whitespace_2_idx_ - headers_->non_whitespace_1_idx_),
- absl::string_view(
- begin + headers_->non_whitespace_2_idx_,
- headers_->whitespace_3_idx_ - headers_->non_whitespace_2_idx_),
- absl::string_view(
- begin + headers_->non_whitespace_3_idx_,
- headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_));
+ visitor_->OnResponseFirstLineInput(line_input, part1, part2, part3);
}
// 'stream_begin' points to the first character of the headers buffer.
@@ -515,18 +503,16 @@
void BalsaFrame::ProcessTransferEncodingLine(HeaderLines::size_type line_idx) {
const HeaderLineDescription& header_line = headers_->header_lines_[line_idx];
const char* stream_begin = headers_->OriginalHeaderStreamBegin();
- const char* line_end = stream_begin + header_line.last_char_idx;
- const char* value_begin = stream_begin + header_line.value_begin_idx;
- size_t value_length = line_end - value_begin;
+ const absl::string_view transfer_encoding(
+ stream_begin + header_line.value_begin_idx,
+ header_line.last_char_idx - header_line.value_begin_idx);
- if (absl::EqualsIgnoreCase(absl::string_view(value_begin, value_length),
- kChunked)) {
+ if (absl::EqualsIgnoreCase(transfer_encoding, kChunked)) {
headers_->transfer_encoding_is_chunked_ = true;
return;
}
- if (absl::EqualsIgnoreCase(absl::string_view(value_begin, value_length),
- kIdentity)) {
+ if (absl::EqualsIgnoreCase(transfer_encoding, kIdentity)) {
headers_->transfer_encoding_is_chunked_ = false;
return;
}
@@ -597,11 +583,9 @@
const HeaderLines::size_type lines_size = headers->header_lines_.size();
for (HeaderLines::size_type i = 0; i < lines_size; ++i) {
const HeaderLineDescription& line = headers->header_lines_[i];
- const char* key_begin = stream_begin + line.first_char_idx;
- const size_t key_len = line.key_end_idx - line.first_char_idx;
- const char c = key_len != 0u ? *key_begin : ' ';
- DVLOG(2) << "[" << i << "]: " << std::string(key_begin, key_len) << " c: '"
- << c << "' key_len: " << key_len;
+ const absl::string_view key(stream_begin + line.first_char_idx,
+ line.key_end_idx - line.first_char_idx);
+ DVLOG(2) << "[" << i << "]: " << key << " key_len: " << key.length();
// If a header begins with either lowercase or uppercase 'c' or 't', then
// the header may be one of content-length, connection, content-encoding
@@ -609,8 +593,7 @@
// that the message is framed, and so the framer is required to search
// for them. However, first check for a formatting error, and skip
// special header treatment on trailer lines (when is_trailer is true).
-
- if (c == ' ') {
+ if (key.empty() || key[0] == ' ') {
parse_state_ = BalsaFrameEnums::ERROR;
HandleError(is_trailer ? BalsaFrameEnums::INVALID_TRAILER_FORMAT
: BalsaFrameEnums::INVALID_HEADER_FORMAT);
@@ -619,8 +602,7 @@
if (is_trailer) {
continue;
}
- if (absl::EqualsIgnoreCase(absl::string_view(key_begin, key_len),
- kContentLength)) {
+ if (absl::EqualsIgnoreCase(key, kContentLength)) {
size_t length = 0;
BalsaHeadersEnums::ContentLengthStatus content_length_status =
ProcessContentLengthLine(i, &length);
@@ -641,8 +623,7 @@
}
continue;
}
- if (absl::EqualsIgnoreCase(absl::string_view(key_begin, key_len),
- kTransferEncoding)) {
+ if (absl::EqualsIgnoreCase(key, kTransferEncoding)) {
if (transfer_encoding_idx != 0) {
HandleError(BalsaFrameEnums::MULTIPLE_TRANSFER_ENCODING_KEYS);
return;
@@ -719,7 +700,7 @@
// everything until the connection is closed is body.
case BalsaHeadersEnums::NO_CONTENT_LENGTH:
if (is_request_) {
- absl::string_view method = headers_->request_method();
+ const absl::string_view method = headers_->request_method();
// POSTs and PUTs should have a detectable body length. If they
// do not we consider it an error.
if (method != "POST" && method != "PUT") {