LCOV - code coverage report
Current view: top level - boost/http_proto - response_base.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 96.6 % 29 28
Test Date: 2025-12-09 20:49:48 Functions: 100.0 % 9 9

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2024 Christian Mazakas
       4              : // Copyright (c) 2025 Mohammad Nejati
       5              : //
       6              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       7              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       8              : //
       9              : // Official repository: https://github.com/cppalliance/http_proto
      10              : //
      11              : 
      12              : #ifndef BOOST_HTTP_PROTO_RESPONSE_BASE_HPP
      13              : #define BOOST_HTTP_PROTO_RESPONSE_BASE_HPP
      14              : 
      15              : #include <boost/http_proto/detail/config.hpp>
      16              : #include <boost/http_proto/message_base.hpp>
      17              : #include <boost/http_proto/status.hpp>
      18              : 
      19              : #if defined(BOOST_MSVC)
      20              : # pragma warning(push)
      21              : # pragma warning(disable:4251)
      22              : #endif
      23              : 
      24              : namespace boost {
      25              : namespace http_proto {
      26              : 
      27              : /** Mixin for modifing HTTP responses.
      28              : 
      29              :     @see
      30              :         @ref message_base,
      31              :         @ref response,
      32              :         @ref static_response.
      33              : */
      34              : class BOOST_HTTP_PROTO_DECL response_base
      35              :     : public message_base
      36              : {
      37              :     friend class response;
      38              :     friend class static_response;
      39              : 
      40          104 :     response_base() noexcept
      41          104 :         : message_base(detail::kind::response)
      42              :     {
      43          104 :     }
      44              : 
      45              :     explicit
      46          101 :     response_base(core::string_view s)
      47          101 :         : message_base(detail::kind::response, s)
      48              :     {
      49          100 :     }
      50              : 
      51            6 :     response_base(
      52              :         void* storage,
      53              :         std::size_t cap) noexcept
      54            6 :         : message_base(
      55            6 :             detail::kind::response, storage, cap)
      56              :     {
      57            6 :     }
      58              : 
      59              : public:
      60              :     //--------------------------------------------
      61              :     //
      62              :     // Observers
      63              :     //
      64              :     //--------------------------------------------
      65              : 
      66              :     /** Return the reason string.
      67              : 
      68              :         This field is obsolete in HTTP/1
      69              :         and should only be used for display
      70              :         purposes.
      71              :     */
      72              :     core::string_view
      73           31 :     reason() const noexcept
      74              :     {
      75           62 :         return core::string_view(
      76           31 :             h_.cbuf + 13,
      77           31 :             h_.prefix - 15);
      78              :     }
      79              : 
      80              :     /** Return the status code.
      81              :     */
      82              :     http_proto::status
      83           32 :     status() const noexcept
      84              :     {
      85           32 :         return h_.res.status;
      86              :     }
      87              : 
      88              :     /** Return the status code as an integral.
      89              :     */
      90              :     unsigned short
      91           32 :     status_int() const noexcept
      92              :     {
      93           32 :         return h_.res.status_int;
      94              :     }
      95              : 
      96              :     //--------------------------------------------
      97              :     //
      98              :     // Modifiers
      99              :     //
     100              :     //--------------------------------------------
     101              : 
     102              :     /** Set the status code and version of the response.
     103              : 
     104              :         The reason-phrase will be set to the
     105              :         standard text for the specified status
     106              :         code.
     107              : 
     108              :         This is more efficient than setting the
     109              :         properties individually.
     110              : 
     111              :         @par Exception Safety
     112              :         Strong guarantee.
     113              :         Calls to allocate may throw.
     114              :         Exception thrown if max capacity exceeded.
     115              : 
     116              :         @throw std::length_error
     117              :         Max capacity would be exceeded.
     118              :         @throw std::invalid_argument
     119              :         `sc == status::unknown`
     120              : 
     121              :         @param sc The status code to set. This
     122              :         must not be @ref status::unknown.
     123              : 
     124              :         @param v The version to set.
     125              :     */
     126              :     void
     127           13 :     set_start_line(
     128              :         http_proto::status sc,
     129              :         http_proto::version v =
     130              :             http_proto::version::http_1_1)
     131              :     {
     132           13 :         set_start_line_impl(sc,
     133              :             static_cast<unsigned short>(sc),
     134              :                 to_string(sc), v);
     135           13 :     }
     136              : 
     137              :     /** Set the HTTP version of the response
     138              : 
     139              :         @par Exception Safety
     140              :         Strong guarantee.
     141              :         Calls to allocate may throw.
     142              :         Exception thrown if maximum capacity exceeded.
     143              : 
     144              :         @throw std::length_error
     145              :         Maximum capacity would be exceeded.
     146              : 
     147              :         @param v The version to set.
     148              :     */
     149              :     void
     150              :     set_version(
     151              :         http_proto::version v);
     152              : 
     153              :     /** Set the status code of the response.
     154              : 
     155              :         The reason-phrase will be set to the
     156              :         standard text for the specified status
     157              :         code. The version will remain unchanged.
     158              : 
     159              :         @par Exception Safety
     160              :         Strong guarantee.
     161              :         Calls to allocate may throw.
     162              :         Exception thrown if maximum capacity exceeded.
     163              : 
     164              :         @throw std::length_error
     165              :         Maximum capacity would be exceeded.
     166              :         @throw std::invalid_argument
     167              :         `sc == status::unknown`
     168              : 
     169              :         @param sc The status code to set. This
     170              :         must not be @ref status::unknown.
     171              :     */
     172              :     void
     173            3 :     set_status(
     174              :         http_proto::status sc)
     175              :     {
     176            3 :         if(sc == http_proto::status::unknown)
     177            0 :             detail::throw_invalid_argument();
     178            3 :         set_start_line_impl(sc,
     179              :             static_cast<unsigned short>(sc),
     180              :             to_string(sc),
     181              :             version());
     182            3 :     }
     183              : 
     184              :     /** Set the status code and version of the response.
     185              : 
     186              :         The reason-phrase will be set to the
     187              :         standard text for the specified status
     188              :         code.
     189              : 
     190              :         This is more efficient than setting the
     191              :         properties individually.
     192              : 
     193              :         @par Exception Safety
     194              :         Strong guarantee.
     195              :         Calls to allocate may throw.
     196              :         Exception thrown on invalid input.
     197              :         Exception thrown if max capacity exceeded.
     198              : 
     199              :         @throw system_error
     200              :         Input is invalid.
     201              : 
     202              :         @throw std::length_error
     203              :         Max capacity would be exceeded.
     204              : 
     205              :         @param si An integral representing the
     206              :         status code to set.
     207              : 
     208              :         @param reason A string view representing the
     209              :         reason string to set.
     210              : 
     211              :         @param v The version to set.
     212              :     */
     213              :     void
     214            8 :     set_start_line(
     215              :         unsigned short si,
     216              :         core::string_view reason,
     217              :         http_proto::version v =
     218              :             http_proto::version::http_1_1)
     219              :     {
     220            8 :         set_start_line_impl(
     221              :             int_to_status(si),
     222              :             si,
     223              :             reason,
     224              :             v);
     225            7 :     }
     226              : 
     227              : private:
     228              :     
     229              :     void
     230              :     set_start_line_impl(
     231              :         http_proto::status sc,
     232              :         unsigned short si,
     233              :         core::string_view reason,
     234              :         http_proto::version v);
     235              : };
     236              : 
     237              : #if defined(BOOST_MSVC)
     238              : # pragma warning(pop)
     239              : #endif
     240              : 
     241              : } // http_proto
     242              : } // boost
     243              : 
     244              : #endif
        

Generated by: LCOV version 2.1