join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
httpmessage.hpp
Go to the documentation of this file.
1
25#ifndef __JOIN_HTTP_MESSAGE_HPP__
26#define __JOIN_HTTP_MESSAGE_HPP__
27
28// libjoin.
29#include <join/error.hpp>
30#include <join/utils.hpp>
31
32// C++.
33#include <system_error>
34#include <iostream>
35#include <sstream>
36#include <string>
37#include <map>
38
39namespace join
40{
59
63 class HttpCategory : public std::error_category
64 {
65 public:
70 virtual const char* name () const noexcept;
71
77 virtual std::string message (int code) const;
78
85 virtual bool equivalent (const std::error_code& code, int condition) const noexcept;
86 };
87
92 const std::error_category& httpCategory ();
93
99 std::error_code make_error_code (HttpErrc code);
100
106 std::error_condition make_error_condition (HttpErrc code);
107
112 {
113 Head = 1L << 0,
114 Get = 1L << 1,
115 Put = 1L << 2,
116 Post = 1L << 3,
117 Delete = 1L << 4,
118 };
119
127 { return HttpMethod (static_cast <int> (__a) & static_cast <int> (__b)); }
128
136 { return HttpMethod (static_cast <int> (__a) | static_cast <int> (__b)); }
137
145 { return HttpMethod (static_cast <int> (__a) ^ static_cast <int> (__b)); }
146
153 { return HttpMethod (~static_cast <int> (__a)); }
154
161 __inline__ const HttpMethod& operator&= (HttpMethod& __a, HttpMethod __b)
162 { return __a = __a & __b; }
163
170 __inline__ const HttpMethod& operator|= (HttpMethod& __a, HttpMethod __b)
171 { return __a = __a | __b; }
172
179 __inline__ const HttpMethod& operator^= (HttpMethod& __a, HttpMethod __b)
180 { return __a = __a ^ __b; }
181
186 {
187 public:
188 // headers map.
189 using HeaderMap = std::map <std::string, std::string, details::lessNoCase>;
190
194 HttpMessage ();
195
200 HttpMessage (const HttpMessage& other);
201
207 HttpMessage& operator= (const HttpMessage& other);
208
213 HttpMessage (HttpMessage&& other);
214
221
225 virtual ~HttpMessage () = default;
226
231 const std::string& version () const;
232
237 void version (const std::string& v);
238
244 bool hasHeader (const std::string& name) const;
245
251 std::string header (const std::string& name) const;
252
258 void header (const std::string& name, const std::string& val);
259
264 void header (const HeaderMap::value_type& h);
265
270 const HeaderMap& headers () const;
271
276 void headers (const HeaderMap& heads);
277
282 std::string dumpHeaders () const;
283
288 size_t contentLength () const;
289
293 virtual void clear ();
294
300 virtual int readHeaders (std::istream& in);
301
307 virtual int writeHeaders (std::ostream& out) const = 0;
308
309 protected:
315 virtual int parseFirstLine (const std::string& line) = 0;
316
322 virtual int parseHeader (const std::string& head);
323
325 static const std::streamsize _maxHeaderLen = 2048;
326
328 std::string _version;
329
332 };
333
338 {
339 public:
340 // parameters map.
341 using ParameterMap = std::map <std::string, std::string>;
342
346 HttpRequest ();
347
353
358 HttpRequest (const HttpRequest& other);
359
365 HttpRequest& operator= (const HttpRequest& other);
366
371 HttpRequest (HttpRequest&& other);
372
379
383 virtual ~HttpRequest () = default;
384
389 HttpMethod method () const;
390
395 std::string methodString () const;
396
401 void method (HttpMethod meth);
402
407 const std::string& path () const;
408
413 void path (const std::string& p);
414
420 bool hasParameter (const std::string& name) const;
421
427 std::string parameter (const std::string& name) const;
428
434 void parameter (const std::string& name, const std::string& val);
435
440 void parameter (const ParameterMap::value_type& param);
441
446 const ParameterMap& parameters () const;
447
452 void parameters (const ParameterMap& params);
453
458 std::string dumpParameters () const;
459
464 std::string query () const;
465
470 std::string urn () const;
471
476 std::string host () const;
477
482 std::string auth () const;
483
488 std::string credentials () const;
489
493 virtual void clear () override;
494
500 virtual int writeHeaders (std::ostream& out) const override;
501
502 protected:
508 virtual int parseFirstLine (const std::string& line) override;
509
515 std::string& decodeUrl (std::string &url);
516
522 std::string& normalize (std::string& path);
523
528 void store (const std::string &query);
529
532
534 std::string _path;
535
538 };
539
544 {
545 public:
549 HttpResponse () = default;
550
555 HttpResponse (const HttpResponse& other);
556
562 HttpResponse& operator= (const HttpResponse& other);
563
568 HttpResponse (HttpResponse&& other);
569
576
580 virtual ~HttpResponse () = default;
581
586 const std::string& status () const;
587
592 const std::string& reason () const;
593
599 void response (const std::string& status, const std::string& reason = {});
600
604 virtual void clear () override;
605
611 virtual int writeHeaders (std::ostream& out) const override;
612
613 protected:
619 virtual int parseFirstLine (const std::string& line) override;
620
622 std::string _status;
623
625 std::string _reason;
626 };
627}
628
629namespace std
630{
632 template <> struct is_error_condition_enum <join::HttpErrc> : public true_type {};
633}
634
635#endif
HTTP API generic error category.
Definition httpmessage.hpp:64
virtual std::string message(int code) const
translate HTTP API generic error code to human readable error string.
Definition httpmessage.cpp:49
virtual const char * name() const noexcept
get HTTP API generic error category name.
Definition httpmessage.cpp:40
virtual bool equivalent(const std::error_code &code, int condition) const noexcept
find equivalent from Errc to system error code.
Definition httpmessage.cpp:86
HTTP message.
Definition httpmessage.hpp:186
virtual int parseHeader(const std::string &head)
parse HTTP header.
Definition httpmessage.cpp:344
size_t contentLength() const
get content length.
Definition httpmessage.cpp:283
HeaderMap _headers
HTTP headers.
Definition httpmessage.hpp:331
HttpMessage & operator=(const HttpMessage &other)
assign the HttpMessage instance by copy.
Definition httpmessage.cpp:148
const std::string & version() const
get HTTP version.
Definition httpmessage.cpp:185
std::string _version
HTTP version.
Definition httpmessage.hpp:328
virtual int readHeaders(std::istream &in)
read HTTP header from the given input stream.
Definition httpmessage.cpp:304
virtual int writeHeaders(std::ostream &out) const =0
write HTTP headers to the given output stream.
virtual ~HttpMessage()=default
destroy the HttpMessage instance.
virtual void clear()
clear HTTP message.
Definition httpmessage.cpp:294
virtual int parseFirstLine(const std::string &line)=0
parse first line.
std::string dumpHeaders() const
dump headers.
Definition httpmessage.cpp:266
HttpMessage()
create the HttpMessage instance.
Definition httpmessage.cpp:129
std::map< std::string, std::string, details::lessNoCase > HeaderMap
Definition httpmessage.hpp:189
static const std::streamsize _maxHeaderLen
HTTP max header size.
Definition httpmessage.hpp:325
bool hasHeader(const std::string &name) const
checks if there is a header with the specified name.
Definition httpmessage.cpp:203
std::string header(const std::string &name) const
get header by name.
Definition httpmessage.cpp:212
const HeaderMap & headers() const
get headers map.
Definition httpmessage.cpp:245
HTTP request.
Definition httpmessage.hpp:338
std::string parameter(const std::string &name) const
get a parameter by name.
Definition httpmessage.cpp:510
const ParameterMap & parameters() const
get query parameters map.
Definition httpmessage.cpp:543
HttpMethod _method
HTTP method.
Definition httpmessage.hpp:531
const std::string & path() const
get path.
Definition httpmessage.cpp:483
virtual int writeHeaders(std::ostream &out) const override
write HTTP headers to the given output stream.
Definition httpmessage.cpp:666
std::string dumpParameters() const
dump parameters.
Definition httpmessage.cpp:564
std::string & normalize(std::string &path)
produce a normalized path (collapse duplicated separator and remove dot segment).
Definition httpmessage.cpp:794
HttpRequest()
create the HttpRequest instance by default.
Definition httpmessage.cpp:362
std::string urn() const
get URN.
Definition httpmessage.cpp:601
std::string credentials() const
get credentials.
Definition httpmessage.cpp:639
HttpMethod method() const
get request method.
Definition httpmessage.cpp:442
virtual void clear() override
clear HTTP message.
Definition httpmessage.cpp:654
bool hasParameter(const std::string &name) const
checks if there is a parameter with the specified name.
Definition httpmessage.cpp:501
virtual ~HttpRequest()=default
destroy the HttpRequest instance.
std::map< std::string, std::string > ParameterMap
Definition httpmessage.hpp:341
std::string host() const
get host.
Definition httpmessage.cpp:610
virtual int parseFirstLine(const std::string &line) override
parse first line.
Definition httpmessage.cpp:677
std::string auth() const
get autorization type.
Definition httpmessage.cpp:629
HttpRequest & operator=(const HttpRequest &other)
assign the HttpRequest instance by copy.
Definition httpmessage.cpp:395
ParameterMap _parameters
HTTP query parameters.
Definition httpmessage.hpp:537
std::string _path
HTTP path;.
Definition httpmessage.hpp:534
std::string methodString() const
get request method string.
Definition httpmessage.cpp:451
void store(const std::string &query)
store parameters received in request.
Definition httpmessage.cpp:854
std::string & decodeUrl(std::string &url)
decode url (ex. %20 ==> ' ').
Definition httpmessage.cpp:742
std::string query() const
get query.
Definition httpmessage.cpp:585
HTTP response.
Definition httpmessage.hpp:544
virtual int parseFirstLine(const std::string &line) override
parse first line.
Definition httpmessage.cpp:993
HttpResponse()=default
create the HttpResponse instance.
std::string _reason
HTTP reason.
Definition httpmessage.hpp:625
void response(const std::string &status, const std::string &reason={})
set HTTP response status.
Definition httpmessage.cpp:961
HttpResponse & operator=(const HttpResponse &other)
assign the HttpResponse instance by copy.
Definition httpmessage.cpp:904
virtual ~HttpResponse()=default
destroy the HttpResponse instance.
const std::string & reason() const
get HTTP response reason.
Definition httpmessage.cpp:952
virtual int writeHeaders(std::ostream &out) const override
write HTTP headers to the given output stream.
Definition httpmessage.cpp:982
virtual void clear() override
clear HTTP message.
Definition httpmessage.cpp:971
const std::string & status() const
get HTTP response status.
Definition httpmessage.cpp:943
std::string _status
HTTP status.
Definition httpmessage.hpp:622
Definition acceptor.hpp:32
HttpMethod
enumeration of HTTP methods.
Definition httpmessage.hpp:112
@ Post
Definition httpmessage.hpp:116
@ Put
Definition httpmessage.hpp:115
@ Delete
Definition httpmessage.hpp:117
@ Head
Definition httpmessage.hpp:113
@ Get
Definition httpmessage.hpp:114
IpAddress operator^(const IpAddress &a, const IpAddress &b)
perform XOR operation on IP address.
Definition ipaddress.cpp:1720
std::error_code make_error_code(join::Errc code)
Create an std::error_code object.
Definition error.cpp:154
constexpr const JsonReadMode & operator&=(JsonReadMode &a, JsonReadMode b) noexcept
perform binary AND on JsonReadMode.
Definition json.hpp:902
IpAddress operator&(const IpAddress &a, const IpAddress &b)
perform AND operation on IP address.
Definition ipaddress.cpp:1666
constexpr const JsonReadMode & operator|=(JsonReadMode &a, JsonReadMode b) noexcept
perform binary OR on JsonReadMode.
Definition json.hpp:911
__inline__ ChangeType operator~(ChangeType __a)
perform binary NOT on ChangeType.
Definition interfacemanager.hpp:99
HttpErrc
HTTP API generic error codes.
Definition httpmessage.hpp:45
__inline__ const ChangeType & operator^=(ChangeType &__a, ChangeType __b)
perform binary XOR on ChangeType.
Definition interfacemanager.hpp:126
IpAddress operator|(const IpAddress &a, const IpAddress &b)
perform OR operation on IP address.
Definition ipaddress.cpp:1693
std::error_condition make_error_condition(join::Errc code)
Create an std::error_condition object.
Definition error.cpp:163
const std::error_category & httpCategory()
get error category.
Definition httpmessage.cpp:101
Definition error.hpp:106