33 #include <seastar/core/iostream.hh>
34 #include <seastar/core/sstring.hh>
38 #include <seastar/http/common.hh>
39 #include <seastar/http/mime_types.hh>
40 #include <seastar/net/socket_defs.hh>
41 #include <seastar/core/iostream.hh>
42 #include <seastar/util/string_utils.hh>
48 namespace experimental {
class connection; }
56 other, multipart, app_x_www_urlencoded,
64 ctclass content_type_class;
65 size_t content_length = 0;
66 mutable size_t _bytes_written = 0;
67 std::unordered_map<sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp> _headers;
68 std::unordered_map<sstring, sstring> query_parameters;
77 std::unordered_map<sstring, sstring> trailing_headers;
78 std::unordered_map<sstring, sstring> chunk_extensions;
79 sstring protocol_name =
"http";
87 return _client_address;
95 return _server_address;
104 auto res = _headers.find(name);
105 if (res == _headers.end()) {
117 auto res = query_parameters.find(name);
118 if (res == query_parameters.end()) {
128 return protocol_name;
139 bool is_multi_part()
const {
140 return content_type_class == ctclass::multipart;
143 bool is_form_post()
const {
144 return content_type_class == ctclass::app_x_www_urlencoded;
147 bool should_keep_alive()
const {
148 if (_version ==
"0.9") {
154 auto it = _headers.find(
"Connection");
155 if (_version ==
"1.0") {
156 return it != _headers.end()
157 && seastar::internal::case_insensitive_cmp()(it->second,
"keep-alive");
159 return it == _headers.end() || !seastar::internal::case_insensitive_cmp()(it->second,
"close");
183 _headers[
"Content-Type"] = mime;
191 set_mime_type(http::mime_types::extension_to_type(content_type));
205 void write_body(
const sstring& content_type, sstring content);
277 static request make(httpd::operation_type type, sstring host, sstring path);
280 void add_param(
const std::string_view& param);
281 sstring request_line()
const;
289 using request [[deprecated(
"Use http::request instead")]] =
http::request;
Class connection represents an HTTP connection over a given transport.
Definition: client.hh:68
Definition: socket_defs.hh:47
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
Definition: noncopyable_function.hh:37
Definition: request.hh:53
sstring format_url() const
sstring parse_query_param()
sstring get_header(const sstring &name) const
Definition: request.hh:103
void write_body(const sstring &content_type, size_t len, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
Use an output stream to write the message body.
void set_mime_type(const sstring &mime)
Definition: request.hh:182
const socket_address & get_client_address() const
Definition: request.hh:86
void set_content_type(const sstring &content_type="html")
Definition: request.hh:190
void write_body(const sstring &content_type, sstring content)
Write a string as the body.
const socket_address & get_server_address() const
Definition: request.hh:94
static request make(sstring method, sstring host, sstring path)
Make simple request.
void set_expects_continue()
Make request send Expect header.
static request make(httpd::operation_type type, sstring host, sstring path)
Make simple request.
void write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
Use an output stream to write the message body.
sstring get_url() const
Definition: request.hh:135
sstring get_protocol_name() const
Definition: request.hh:127
sstring get_query_param(const sstring &name) const
Definition: request.hh:116