36#include "webdar_tools.hpp"
37#include "exceptions.hpp"
39#include "central_report.hpp"
40#include "connexion.hpp"
48 request(
const std::shared_ptr<central_report> & log) {
clear();
if(log) clog = log;
else throw WEBDAR_BUG; };
78 const std::string &
get_method()
const {
if(status < method_read)
throw WEBDAR_BUG;
return cached_method; };
81 void change_method(
const std::string & val) {
if(status < method_read)
throw WEBDAR_BUG; cached_method = val; };
84 void post_to_get() {
if(status < method_read)
throw WEBDAR_BUG;
if(cached_method ==
"POST") cached_method =
"GET"; };
87 const uri &
get_uri()
const {
if(status < uri_read)
throw WEBDAR_BUG;
return coordinates; };
90 int get_maj_version()
const {
if(status != completed)
throw WEBDAR_BUG;
return maj_vers; };
93 int get_min_version()
const {
if(status != completed)
throw WEBDAR_BUG;
return min_vers; };
96 const std::string &
get_body()
const {
if(status != completed)
throw WEBDAR_BUG;
return body; };
110 void add_cookie(
const std::string & key,
const std::string & value)
const;
113 bool find_cookie(
const std::string & key, std::string & value)
const;
116 bool find_attribute(
const std::string & key, std::string & value)
const;
145 enum { init, method_read, uri_read, reading_all, completed } status;
147 std::string cached_method;
149 unsigned int maj_vers;
150 unsigned int min_vers;
151 std::map<std::string, std::string> attributes;
152 std::map<std::string, std::string> cookies;
154 std::shared_ptr<central_report> clog;
157 typedef std::map<troncon, troncon> mp_header_map;
159 mutable std::deque<mp_header_map> mp_headers;
160 mutable std::deque<troncon> mp_body;
162 void clear_multipart() { mp_headers.
clear(); mp_body.clear(); };
168 void extract_cookies();
171 void set_version(
const std::string & version);
173 void add_attribute(
const std::string & key,
const std::string & value) { attributes.insert(std::pair<std::string, std::string>(webdar_tools_to_canonical_case(key), value)); };
175 void drop_attribute(
const std::string & key);
191 static std::string up_to_length(
proto_connexion & input,
unsigned int length);
215 static bool get_token(
proto_connexion & input,
bool initial,
bool blocking, std::string & token);
229 static bool get_word(
proto_connexion & input,
bool initial,
bool blocking, std::string & word);
buffers data from a TCP connexion, this is a pure virtual class
Definition: proto_connexion.hpp:41
class holding fields of an HTTP request (method, URI, header, cookies, and so on)
Definition: request.hpp:45
int get_min_version() const
obtains the MINOR version string of the read request
Definition: request.hpp:93
bool try_reading(proto_connexion &input)
Definition: request.cpp:44
request(const std::shared_ptr< central_report > &log)
The constructor.
Definition: request.hpp:48
std::map< troncon, troncon > get_header_of_multipart(unsigned int num) const
obtains the headers of multiparts once get_multipart_number() has been executed
Definition: request.cpp:423
void clear()
clear all fields of the request
Definition: request.cpp:34
troncon get_body_of_multipart(unsigned int num) const
obtains the body of multiparts once get_multipart_number() has been executed
Definition: request.cpp:431
bool find_cookie(const std::string &key, std::string &value) const
lookup for a cookie
Definition: request.cpp:201
unsigned int get_multipart_number() const
analyse body as a MIME multipart component (RFC 1521)
Definition: request.cpp:231
void fake_valid_request()
set the fields in consistent state to mimic a valid request
Definition: request.cpp:439
bool find_attribute(const std::string &key, std::string &value) const
raw request header header access
Definition: request.cpp:214
int get_maj_version() const
obtains the MAJOR version string of the read request
Definition: request.hpp:90
void read(proto_connexion &input)
Definition: request.cpp:50
const uri & get_uri() const
obtains the URI of the read request
Definition: request.hpp:87
std::map< std::string, std::string > get_body_form() const
Definition: request.cpp:172
const std::string & get_method() const
obtains the method of the read request
Definition: request.hpp:78
void change_method(const std::string &val)
manually change the method of the request
Definition: request.hpp:81
void add_cookie(const std::string &key, const std::string &value) const
Definition: request.cpp:196
void post_to_get()
change POST request to a GET request, No modification for others
Definition: request.hpp:84
const std::string & get_body() const
obtain the body of the read request
Definition: request.hpp:96
uri type holds the splitted list of the scheme / hostname / path # anchor
Definition: uri.hpp:44
void clear()
clear the uri (empty uri)
Definition: uri.hpp:62
defines a substring portion of a existing string (to avoid data copy)
Definition: webdar_tools.hpp:98