30 if (!header_complete_) {
31 auto header_end = buffer.find(
"\r\n\r\n");
32 if (header_end == std::string::npos) {
41 std::istringstream header_stream(buffer.substr(0, header_end));
42 std::string header_line;
43 bool found_length =
false;
44 while (std::getline(header_stream, header_line) && !header_line.empty()) {
45 if (header_line.starts_with(
"Content-Length:")) {
47 expected_length_ = std::stoi(header_line.substr(15));
49 }
catch (
const std::exception&) {
54 .error =
"Invalid Content-Length header"};
64 .error =
"Missing Content-Length header"};
67 header_complete_ =
true;
68 header_size_ = header_end + 4;
72 if (buffer.size() < header_size_ + expected_length_) {
81 std::string message = buffer.substr(header_size_, expected_length_);
82 std::size_t total_consumed = header_size_ + expected_length_;
85 header_complete_ =
false;
92 .consumed_bytes = total_consumed,