29#ifndef SYMBIAN_HTTP_HTTP1_H_
30#define SYMBIAN_HTTP_HTTP1_H_
38#include <absl/status/status.h>
39#include <absl/status/statusor.h>
46struct Http1RequestHead {
54struct Http1ResponseHead {
72 std::size_t content_length = 0;
85absl::StatusOr<Http1RequestHead>
ParseRequestHead(std::string_view head_block);
88 std::string_view head_block);
97 int status,
const Headers& headers);
107class ChunkedDecoder {
116 absl::Status Feed(std::string_view
data, std::string*
out,
bool* complete);
118 [[nodiscard]]
bool complete()
const {
return state_ == State::kComplete; }
125 [[nodiscard]]
const Headers& trailers()
const {
return trailers_; }
128 enum class State { kSize, kData, kDataCrlf, kTrailer, kComplete };
130 State state_ = State::kSize;
131 std::string pending_;
132 std::uint64_t remaining_ = 0;
133 std::size_t metadata_bytes_ = 0;
155 std::string_view reason = {});
absl::StatusOr< BodyPlan > PlanResponseBody(std::string_view request_method, int status, const Headers &headers)
Definition http1.cc:335
std::optional< std::size_t > FindHeaderBlockEnd(std::string_view data)
Definition http1.cc:208
BodyFraming
How a message body is delimited on the wire.
Definition http1.h:62
@ kChunked
Transfer-Encoding: chunked.
@ kNone
No body (e.g. GET request, 204/304 response).
@ kContentLength
Exactly content_length bytes.
@ kUntilClose
Body runs until the connection closes (response only).
absl::StatusOr< Http1RequestHead > ParseRequestHead(std::string_view head_block)
Parses a request head (start line + headers, no trailing CRLFCRLF needed).
Definition http1.cc:227
std::string EncodeLastChunk(const Headers &trailers)
Definition http1.cc:459
std::string SerializeResponse(int status, const Headers &headers, std::string_view reason)
Serializes an HTTP/1.1 response head (status line + headers + CRLF).
Definition http1.cc:483
std::string_view DefaultReasonPhrase(int status)
Definition http1.cc:493
absl::StatusOr< Http1ResponseHead > ParseResponseHead(std::string_view head_block)
Parses a response head (status line + headers).
Definition http1.cc:254
std::string SerializeRequest(std::string_view method, std::string_view target, const Headers &headers)
Serializes an HTTP/1.1 request head (start line + headers + CRLF).
Definition http1.cc:475
absl::StatusOr< BodyPlan > PlanRequestBody(const Headers &headers)
Definition http1.cc:330
std::string EncodeChunk(std::string_view data)
Definition http1.cc:452
void AppendHeaderBlock(const Headers &headers, std::string *out)
Appends "name: value\r\n" for each header to out (names sent as given).
Definition http1.cc:469
std::vector< std::pair< std::string, std::string > > Headers
Definition types.h:15
std::string target
Definition sis.cc:301
uint8_t out
Definition usb.cc:194
std::vector< unsigned char > data
Definition usb.cc:292