Line data Source code
1 : // 2 : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com) 3 : // Copyright (c) 2024 Christian Mazakas 4 : // 5 : // Distributed under the Boost Software License, Version 1.0. (See accompanying 6 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 : // 8 : // Official repository: https://github.com/cppalliance/http_proto 9 : // 10 : 11 : #ifndef BOOST_HTTP_PROTO_MESSAGE_BASE_HPP 12 : #define BOOST_HTTP_PROTO_MESSAGE_BASE_HPP 13 : 14 : #include <boost/http_proto/detail/config.hpp> 15 : #include <boost/http_proto/fields_base.hpp> 16 : #include <boost/http_proto/message_view_base.hpp> 17 : #include <boost/core/detail/string_view.hpp> 18 : 19 : namespace boost { 20 : namespace http_proto { 21 : 22 : /** Provides message metadata for requests and responses 23 : */ 24 : class message_base 25 : : public fields_base 26 : , public message_view_base 27 : { 28 : friend class request; 29 : friend class response; 30 : 31 : explicit 32 85 : message_base( 33 : detail::kind k) noexcept 34 : : fields_view_base( 35 : &this->fields_base::h_) 36 85 : , fields_base(k) 37 : { 38 85 : } 39 : 40 8 : message_base( 41 : detail::kind k, 42 : std::size_t storage_size) 43 : : fields_view_base( 44 : &this->fields_base::h_) 45 : , fields_base( 46 8 : k, storage_size) 47 : { 48 8 : } 49 : 50 20 : message_base( 51 : detail::kind k, 52 : std::size_t storage_size, 53 : std::size_t max_storage_size) 54 : : fields_view_base( 55 : &this->fields_base::h_) 56 : , fields_base( 57 20 : k, storage_size, max_storage_size) 58 : { 59 12 : } 60 : 61 294 : message_base( 62 : detail::kind k, 63 : core::string_view s) 64 : : fields_view_base( 65 : &this->fields_base::h_) 66 294 : , fields_base(k, s) 67 : { 68 292 : } 69 : 70 : explicit 71 8 : message_base( 72 : detail::header const& ph) noexcept 73 : : fields_view_base( 74 : &this->fields_base::h_) 75 8 : , fields_base(ph) 76 : { 77 8 : } 78 : 79 : public: 80 : //-------------------------------------------- 81 : // 82 : // Metadata 83 : // 84 : //-------------------------------------------- 85 : 86 : /** Set the payload size 87 : */ 88 : BOOST_HTTP_PROTO_DECL 89 : void 90 : set_payload_size( 91 : std::uint64_t n); 92 : 93 : /** Set the Content-Length to the specified value 94 : */ 95 : BOOST_HTTP_PROTO_DECL 96 : void 97 : set_content_length( 98 : std::uint64_t n); 99 : 100 : /** Set whether the payload is chunked. 101 : */ 102 : BOOST_HTTP_PROTO_DECL 103 : void 104 : set_chunked(bool value); 105 : 106 : /** Set whether the connection should stay open. 107 : 108 : Even when keep-alive is set to true, the 109 : semantics of the other header fields may 110 : require the connection to be closed. For 111 : example when there is no content length 112 : specified in a response. 113 : */ 114 : BOOST_HTTP_PROTO_DECL 115 : void 116 : set_keep_alive(bool value); 117 : }; 118 : 119 : } // http_proto 120 : } // boost 121 : 122 : #endif