Line data Source code
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_RESPONSE_VIEW_HPP
11 : #define BOOST_HTTP_PROTO_RESPONSE_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 reference to an HTTP response header
21 : */
22 : class BOOST_SYMBOL_VISIBLE
23 : response_view
24 : : public message_view_base
25 : {
26 : friend class response;
27 : friend class response_parser;
28 :
29 : explicit
30 53 : response_view(
31 : detail::header const* ph) noexcept
32 53 : : fields_view_base(ph)
33 : {
34 53 : BOOST_ASSERT(ph_->kind ==
35 : detail::kind::response);
36 53 : }
37 :
38 : public:
39 : /** Constructor
40 : */
41 4 : response_view() noexcept
42 4 : : fields_view_base(
43 : detail::header::get_default(
44 4 : detail::kind::response))
45 : {
46 4 : }
47 :
48 : /** Constructor
49 : */
50 1 : response_view(
51 : response_view const&) noexcept = default;
52 :
53 : /** Assignment
54 : */
55 : response_view&
56 1 : operator=(
57 : response_view const&) noexcept = default;
58 :
59 : //--------------------------------------------
60 : //
61 : // Observers
62 : //
63 : //--------------------------------------------
64 :
65 : /** Return the reason string
66 :
67 : This field is obsolete in HTTP/1
68 : and should only be used for display
69 : purposes.
70 : */
71 : core::string_view
72 2 : reason() const noexcept
73 : {
74 4 : return core::string_view(
75 2 : ph_->cbuf + 13,
76 2 : ph_->prefix - 15);
77 : }
78 :
79 : /** Return the status code
80 : */
81 : http_proto::status
82 2 : status() const noexcept
83 : {
84 2 : return ph_->res.status;
85 : }
86 :
87 : /** Return the status code integer
88 : */
89 : unsigned short
90 2 : status_int() const noexcept
91 : {
92 2 : return ph_->res.status_int;
93 : }
94 :
95 : /** Return the HTTP-version
96 : */
97 : http_proto::version
98 2 : version() const noexcept
99 : {
100 2 : return ph_->version;
101 : }
102 :
103 : /** Swap this with another instance
104 : */
105 : void
106 : swap(response_view& other) noexcept
107 : {
108 : auto ph = ph_;
109 : ph_ = other.ph_;
110 : ph_ = ph;
111 : }
112 :
113 : /** Swap two instances
114 : */
115 : // hidden friend
116 : friend
117 : void
118 : swap(
119 : response_view& t0,
120 : response_view& t1) noexcept
121 : {
122 : t0.swap(t1);
123 : }
124 : };
125 :
126 : } // http_proto
127 : } // boost
128 :
129 : #endif
|