LCOV - code coverage report
Current view: top level - boost/http_proto/request_base.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 48 48
Test Date: 2025-09-21 18:08:14 Functions: 100.0 % 15 15

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2025 Mohammad Nejati
       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_REQUEST_BASE_HPP
      12              : #define BOOST_HTTP_PROTO_REQUEST_BASE_HPP
      13              : 
      14              : #include <boost/http_proto/detail/config.hpp>
      15              : #include <boost/http_proto/message_base.hpp>
      16              : #include <boost/http_proto/request_view.hpp>
      17              : 
      18              : namespace boost {
      19              : namespace http_proto {
      20              : 
      21              : /** Mixin for modifing HTTP requests.
      22              : 
      23              :     @see
      24              :         @ref message_base,
      25              :         @ref request,
      26              :         @ref static_request.
      27              : */
      28              : class request_base
      29              :     : public message_base
      30              : {
      31              :     friend class request;
      32              :     template<std::size_t>
      33              :     friend class static_request;
      34              : 
      35           61 :     request_base() noexcept
      36              :         : fields_view_base(
      37              :             &this->fields_base::h_)
      38           61 :         , message_base(detail::kind::request)
      39              :     {
      40           61 :     }
      41              : 
      42              :     explicit
      43          204 :     request_base(core::string_view s)
      44              :         : fields_view_base(
      45              :             &this->fields_base::h_)
      46          204 :         , message_base(detail::kind::request, s)
      47              :     {
      48          203 :     }
      49              : 
      50              :     explicit
      51            4 :     request_base(detail::header const& ph)
      52              :         : fields_view_base(
      53              :             &this->fields_base::h_)
      54            4 :         , message_base(ph)
      55              :     {
      56            4 :     }
      57              : 
      58            4 :     request_base(
      59              :         detail::header const& ph,
      60              :         char* storage,
      61              :         std::size_t cap)
      62              :         : fields_view_base(
      63              :             &this->fields_base::h_)
      64            4 :         , message_base(ph, storage, cap)
      65              :     {
      66            4 :     }
      67              : 
      68              : public:
      69           20 :     request_base(
      70              :         char* storage,
      71              :         std::size_t cap) noexcept
      72              :         : fields_view_base(
      73              :             &this->fields_base::h_)
      74              :         , message_base(
      75           20 :             detail::kind::request, storage, cap)
      76              :     {
      77           20 :     }
      78              : 
      79           22 :     request_base(
      80              :         core::string_view s,
      81              :         char* storage,
      82              :         std::size_t cap)
      83              :         : fields_view_base(
      84              :             &this->fields_base::h_)
      85              :         , message_base(
      86           22 :             detail::kind::request, storage, cap, s)
      87              :     {
      88           22 :     }
      89              : 
      90              :     request_base(
      91              :         request_view const& other,
      92              :         char* storage,
      93              :         std::size_t cap)
      94              :         : fields_view_base(
      95              :             &this->fields_base::h_)
      96              :         , message_base(*other.ph_, storage, cap)
      97              :     {
      98              :     }
      99              : 
     100              :     /** Conversion.
     101              : 
     102              :         @see
     103              :             @ref request_view.
     104              : 
     105              :         @return A view of the request.
     106              :     */
     107            4 :     operator request_view() const noexcept
     108              :     {
     109            4 :         return request_view(ph_);
     110              :     }
     111              : 
     112              :     //--------------------------------------------
     113              :     //
     114              :     // Observers
     115              :     //
     116              :     //--------------------------------------------
     117              : 
     118              :     /** Return the method as a name constant.
     119              : 
     120              :         If the method returned is equal to
     121              :         @ref method::unknown, the method may
     122              :         be obtained as a string instead, by
     123              :         calling @ref method_text.
     124              :     */
     125              :     http_proto::method
     126           33 :     method() const noexcept
     127              :     {
     128           33 :         return ph_->req.method;
     129              :     }
     130              : 
     131              :     /** Return the method as a string.
     132              :     */
     133              :     core::string_view
     134           49 :     method_text() const noexcept
     135              :     {
     136           98 :         return core::string_view(
     137           49 :             ph_->cbuf,
     138           49 :             ph_->req.method_len);
     139              :     }
     140              : 
     141              :     /** Return the request-target string.
     142              :     */
     143              :     core::string_view
     144           36 :     target() const noexcept
     145              :     {
     146           72 :         return core::string_view(
     147           36 :             ph_->cbuf +
     148           36 :                 ph_->req.method_len + 1,
     149           36 :             ph_->req.target_len);
     150              :     }
     151              : 
     152              :     //--------------------------------------------
     153              :     //
     154              :     // Modifiers
     155              :     //
     156              :     //--------------------------------------------
     157              : 
     158              :     /** Set the method of the request to the enum.
     159              : 
     160              :         @par Exception Safety
     161              :         Strong guarantee.
     162              :         Calls to allocate may throw.
     163              :         Exception thrown if max capacity exceeded.
     164              : 
     165              :         @throw std::length_error
     166              :         Max capacity would be exceeded.
     167              : 
     168              :         @param m The method to set.
     169              :     */
     170              :     void
     171            4 :     set_method(
     172              :         http_proto::method m)
     173              :     {
     174            4 :         set_start_line_impl(
     175              :             m,
     176              :             to_string(m),
     177              :             target(),
     178              :             version());
     179            4 :     }
     180              : 
     181              :     /** Set the method of the request to the string.
     182              : 
     183              :         @par Exception Safety
     184              :         Strong guarantee.
     185              :         Calls to allocate may throw.
     186              :         Exception thrown on invalid input.
     187              :         Exception thrown if max capacity exceeded.
     188              : 
     189              :         @throw system_error
     190              :         Input is invalid.
     191              : 
     192              :         @throw std::length_error
     193              :         Max capacity would be exceeded.
     194              : 
     195              :         @param s A string view representing the
     196              :         method to set.
     197              :     */
     198              :     void
     199           12 :     set_method(
     200              :         core::string_view s)
     201              :     {
     202           12 :         set_start_line_impl(
     203              :             string_to_method(s),
     204              :             s,
     205              :             target(),
     206              :             version());
     207           12 :     }
     208              : 
     209              :     /** Set the target string of the request.
     210              : 
     211              :         This function sets the request-target.
     212              :         The caller is responsible for ensuring
     213              :         that the string passed is syntactically
     214              :         valid.
     215              : 
     216              :         @par Exception Safety
     217              :         Strong guarantee.
     218              :         Calls to allocate may throw.
     219              :         Exception thrown on invalid input.
     220              :         Exception thrown if max capacity exceeded.
     221              : 
     222              :         @throw system_error
     223              :         Input is invalid.
     224              : 
     225              :         @throw std::length_error
     226              :         Max capacity would be exceeded.
     227              : 
     228              :         @param s A string view representing the
     229              :         target to set.
     230              :     */
     231              :     void
     232           12 :     set_target(
     233              :         core::string_view s)
     234              :     {
     235           12 :         set_start_line_impl(
     236           12 :             ph_->req.method,
     237              :             method_text(),
     238              :             s,
     239              :             version());
     240           11 :     }
     241              : 
     242              :     /** Set the HTTP version of the request.
     243              : 
     244              :         @par Exception Safety
     245              :         Strong guarantee.
     246              :         Calls to allocate may throw.
     247              :         Exception thrown if max capacity exceeded.
     248              : 
     249              :         @throw std::length_error
     250              :         Max capacity would be exceeded.
     251              : 
     252              :         @param v The version to set.
     253              :     */
     254              :     void
     255            4 :     set_version(
     256              :         http_proto::version v)
     257              :     {
     258            4 :         set_start_line_impl(
     259            4 :             ph_->req.method,
     260              :             method_text(),
     261              :             target(),
     262              :             v);
     263            4 :     }
     264              : 
     265              :     /** Set the method, target, and version of the request.
     266              : 
     267              :         This is more efficient than setting the
     268              :         properties individually.
     269              : 
     270              :         @par Exception Safety
     271              :         Strong guarantee.
     272              :         Calls to allocate may throw.
     273              :         Exception thrown on invalid input.
     274              :         Exception thrown if max capacity exceeded.
     275              : 
     276              :         @throw system_error
     277              :         Input is invalid.
     278              : 
     279              :         @throw std::length_error
     280              :         Max capacity would be exceeded.
     281              : 
     282              :         @param m The method to set.
     283              : 
     284              :         @param t A string view representing the
     285              :         target to set.
     286              : 
     287              :         @param v The version to set.
     288              :     */
     289              :     void
     290            2 :     set_start_line(
     291              :         http_proto::method m,
     292              :         core::string_view t,
     293              :         http_proto::version v =
     294              :             http_proto::version::http_1_1)
     295              :     {
     296            2 :         set_start_line_impl(m, to_string(m), t, v);
     297            1 :     }
     298              : 
     299              :     /** Set the method, target, and version of the request.
     300              : 
     301              :         This is more efficient than setting the
     302              :         properties individually.
     303              : 
     304              :         @par Exception Safety
     305              :         Strong guarantee.
     306              :         Calls to allocate may throw.
     307              :         Exception thrown on invalid input.
     308              :         Exception thrown if max capacity exceeded.
     309              : 
     310              :         @throw system_error
     311              :         Input is invalid.
     312              : 
     313              :         @throw std::length_error
     314              :         Max capacity would be exceeded.
     315              : 
     316              :         @param m A string view representing the
     317              :         method to set.
     318              : 
     319              :         @param t A string view representing the
     320              :         target to set.
     321              : 
     322              :         @param v The version to set.
     323              :     */
     324              :     void
     325              :     set_start_line(
     326              :         core::string_view m,
     327              :         core::string_view t,
     328              :         http_proto::version v =
     329              :             http_proto::version::http_1_1)
     330              :     {
     331              :         set_start_line_impl(string_to_method(m), m, t, v);
     332              :     }
     333              : 
     334              :     /** Set the `Expect: 100-continue` header.
     335              : 
     336              :         @par Exception Safety
     337              :         Strong guarantee.
     338              :         Calls to allocate may throw.
     339              :         Exception thrown if max capacity exceeded.
     340              : 
     341              :         @throw std::length_error
     342              :         Max capacity would be exceeded.
     343              : 
     344              :         @param b If `true` sets `Expect: 100-continue`
     345              :         header otherwise erase it.
     346              :     */
     347              :     BOOST_HTTP_PROTO_DECL
     348              :     void
     349              :     set_expect_100_continue(bool b);
     350              : 
     351              : private:
     352              :     BOOST_HTTP_PROTO_DECL
     353              :     void
     354              :     set_start_line_impl(
     355              :         http_proto::method m,
     356              :         core::string_view ms,
     357              :         core::string_view t,
     358              :         http_proto::version v);
     359              : };
     360              : 
     361              : } // http_proto
     362              : } // boost
     363              : 
     364              : #endif
        

Generated by: LCOV version 2.1