LibHTTP: Include request body in HttpRequest::from_raw_request()
This commit is contained in:
parent
437c6fc277
commit
f754f45680
Notes:
sideshowbarker
2024-07-17 06:02:10 +09:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/SerenityOS/serenity/commit/f754f45680 Pull-request: https://github.com/SerenityOS/serenity/pull/15533 Reviewed-by: https://github.com/linusg
1 changed files with 26 additions and 1 deletions
|
@ -83,6 +83,7 @@ Optional<HttpRequest> HttpRequest::from_raw_request(ReadonlyBytes raw_request)
|
|||
InProtocol,
|
||||
InHeaderName,
|
||||
InHeaderValue,
|
||||
InBody,
|
||||
};
|
||||
|
||||
State state { State::InMethod };
|
||||
|
@ -106,6 +107,7 @@ Optional<HttpRequest> HttpRequest::from_raw_request(ReadonlyBytes raw_request)
|
|||
String protocol;
|
||||
Vector<Header> headers;
|
||||
Header current_header;
|
||||
ByteBuffer body;
|
||||
|
||||
auto commit_and_advance_to = [&](auto& output, State new_state) {
|
||||
output = String::copy(buffer);
|
||||
|
@ -156,12 +158,33 @@ Optional<HttpRequest> HttpRequest::from_raw_request(ReadonlyBytes raw_request)
|
|||
if (peek(0) == '\r' && peek(1) == '\n') {
|
||||
consume();
|
||||
consume();
|
||||
commit_and_advance_to(current_header.value, State::InHeaderName);
|
||||
|
||||
// Detect end of headers
|
||||
auto next_state = State::InHeaderName;
|
||||
if (peek(0) == '\r' && peek(1) == '\n') {
|
||||
consume();
|
||||
consume();
|
||||
next_state = State::InBody;
|
||||
}
|
||||
|
||||
commit_and_advance_to(current_header.value, next_state);
|
||||
headers.append(move(current_header));
|
||||
break;
|
||||
}
|
||||
buffer.append(consume());
|
||||
break;
|
||||
case State::InBody:
|
||||
buffer.append(consume());
|
||||
if (index + 1 == raw_request.size()) {
|
||||
// End of data, so store the body
|
||||
auto maybe_body = ByteBuffer::copy(buffer);
|
||||
// FIXME: Propagate this error somehow.
|
||||
if (maybe_body.is_error())
|
||||
return {};
|
||||
body = maybe_body.release_value();
|
||||
buffer.clear();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,6 +223,8 @@ Optional<HttpRequest> HttpRequest::from_raw_request(ReadonlyBytes raw_request)
|
|||
request.m_url.set_paths({ resource });
|
||||
}
|
||||
|
||||
request.set_body(move(body));
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue