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_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 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