Line | Branch | Exec | Source |
---|---|---|---|
1 | // | ||
2 | // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) | ||
3 | // | ||
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | ||
5 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
6 | // | ||
7 | // Official repository: https://github.com/CPPAlliance/http_proto | ||
8 | // | ||
9 | |||
10 | #ifndef BOOST_HTTP_PROTO_REQUEST_VIEW_HPP | ||
11 | #define BOOST_HTTP_PROTO_REQUEST_VIEW_HPP | ||
12 | |||
13 | #include <boost/http_proto/detail/config.hpp> | ||
14 | #include <boost/http_proto/message_view_base.hpp> | ||
15 | #include <boost/core/detail/string_view.hpp> | ||
16 | |||
17 | namespace boost { | ||
18 | namespace http_proto { | ||
19 | |||
20 | /** A read-only reference to an HTTP request | ||
21 | */ | ||
22 | class BOOST_SYMBOL_VISIBLE | ||
23 | 1 | request_view | |
24 | : public message_view_base | ||
25 | { | ||
26 | friend class request; | ||
27 | friend class request_parser; | ||
28 | |||
29 | explicit | ||
30 | 55 | request_view( | |
31 | detail::header const* ph) noexcept | ||
32 | 55 | : fields_view_base(ph) | |
33 | { | ||
34 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 55 times.
|
55 | BOOST_ASSERT(ph_->kind == |
35 | detail::kind::request); | ||
36 | 55 | } | |
37 | |||
38 | public: | ||
39 | /** Constructor | ||
40 | */ | ||
41 | 4 | request_view() noexcept | |
42 | 4 | : fields_view_base( | |
43 | detail::header::get_default( | ||
44 | 4 | detail::kind::request)) | |
45 | { | ||
46 | 4 | } | |
47 | |||
48 | /** Constructor | ||
49 | */ | ||
50 | 1 | request_view( | |
51 | request_view const&) noexcept = default; | ||
52 | |||
53 | /** Assignment | ||
54 | */ | ||
55 | request_view& | ||
56 | operator=( | ||
57 | request_view const&) noexcept = default; | ||
58 | |||
59 | //-------------------------------------------- | ||
60 | // | ||
61 | // Observers | ||
62 | // | ||
63 | //-------------------------------------------- | ||
64 | |||
65 | /** Return the method as an integral constant | ||
66 | |||
67 | If the method returned is equal to | ||
68 | @ref method::unknown, the method may | ||
69 | be obtained as a string instead, by | ||
70 | calling @ref method_text. | ||
71 | */ | ||
72 | http_proto::method | ||
73 | 55 | method() const noexcept | |
74 | { | ||
75 | 55 | return ph_->req.method; | |
76 | }; | ||
77 | |||
78 | /** Return the method as a string | ||
79 | */ | ||
80 | core::string_view | ||
81 | 55 | method_text() const noexcept | |
82 | { | ||
83 | 110 | return core::string_view( | |
84 | 55 | ph_->cbuf, | |
85 | 55 | ph_->req.method_len); | |
86 | } | ||
87 | |||
88 | /** Return the request-target string | ||
89 | */ | ||
90 | core::string_view | ||
91 | 55 | target_text() const noexcept | |
92 | { | ||
93 | 110 | return core::string_view( | |
94 | 55 | ph_->cbuf + | |
95 | 55 | ph_->req.method_len + 1, | |
96 | 55 | ph_->req.target_len); | |
97 | } | ||
98 | |||
99 | /** Return the HTTP-version | ||
100 | */ | ||
101 | http_proto::version | ||
102 | 55 | version() const noexcept | |
103 | { | ||
104 | 55 | return ph_->version; | |
105 | } | ||
106 | |||
107 | /** Swap this with another instance | ||
108 | */ | ||
109 | void | ||
110 | swap(request_view& other) noexcept | ||
111 | { | ||
112 | auto ph = ph_; | ||
113 | ph_ = other.ph_; | ||
114 | ph_ = ph; | ||
115 | } | ||
116 | |||
117 | /** Swap two instances | ||
118 | */ | ||
119 | // hidden friend | ||
120 | friend | ||
121 | void | ||
122 | swap( | ||
123 | request_view& t0, | ||
124 | request_view& t1) noexcept | ||
125 | { | ||
126 | t0.swap(t1); | ||
127 | } | ||
128 | }; | ||
129 | |||
130 | } // http_proto | ||
131 | } // boost | ||
132 | |||
133 | #endif | ||
134 |