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 1 : response_view 24 : : public message_view_base 25 : { 26 : friend class response; 27 : friend class response_parser; 28 : 29 : explicit 30 5 : response_view( 31 : detail::header const* ph) noexcept 32 5 : : fields_view_base(ph) 33 : { 34 5 : BOOST_ASSERT(ph_->kind == 35 : detail::kind::response); 36 5 : } 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 : 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