LCOV - code coverage report
Current view: top level - include/boost/http - request_base.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 36 36
Test Date: 2026-06-13 19:44:58 Functions: 100.0 % 11 11

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

Generated by: LCOV version 2.3