LCOV - code coverage report
Current view: top level - http_proto - request.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 38 39 97.4 %
Date: 2023-01-09 16:11:12 Functions: 12 12 100.0 %

          Line data    Source code
       1             : //
       2             : // Copyright (c) 2021 Vinnie Falco (vinnie dot falco at gmail dot 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_HPP
      11             : #define BOOST_HTTP_PROTO_REQUEST_HPP
      12             : 
      13             : #include <boost/http_proto/detail/config.hpp>
      14             : #include <boost/http_proto/message_base.hpp>
      15             : #include <boost/http_proto/request_view.hpp>
      16             : 
      17             : namespace boost {
      18             : namespace http_proto {
      19             : 
      20             : /** Container for HTTP requests
      21             : */
      22             : class BOOST_SYMBOL_VISIBLE
      23             :     request
      24             :     : public message_base
      25             : {
      26             : public:
      27             :     /** Constructor
      28             :     */
      29             :     BOOST_HTTP_PROTO_DECL
      30             :     request() noexcept;
      31             : 
      32             :     /** Constructor
      33             : 
      34             :         The moved-from object will be
      35             :         left in the default-constructed
      36             :         state.
      37             :     */
      38             :     BOOST_HTTP_PROTO_DECL
      39             :     request(request&& other) noexcept;
      40             : 
      41             :     /** Constructor
      42             :     */
      43             :     BOOST_HTTP_PROTO_DECL
      44             :     request(request const& other);
      45             : 
      46             :     /** Constructor
      47             :     */
      48             :     BOOST_HTTP_PROTO_DECL
      49             :     request(
      50             :         request_view const& other);
      51             : 
      52             :     /** Assignment
      53             :     */
      54             :     BOOST_HTTP_PROTO_DECL
      55             :     request&
      56             :     operator=(request&&) noexcept;
      57             : 
      58             :     /** Assignment
      59             :     */
      60             :     request&
      61           2 :     operator=(request const& other)
      62             :     {
      63           2 :         copy_impl(*other.ph_);
      64           2 :         return *this;
      65             :     }
      66             : 
      67             :     /** Assignment
      68             :     */
      69             :     request&
      70             :     operator=(
      71             :         request_view const& other)
      72             :     {
      73             :         copy_impl(*other.ph_);
      74             :         return *this;
      75             :     }
      76             : 
      77             :     /** Return a read-only view to the request
      78             :     */
      79             :     operator
      80             :     request_view() const noexcept
      81             :     {
      82             :         return request_view(ph_);
      83             :     }
      84             : 
      85             :     //--------------------------------------------
      86             :     //
      87             :     // Observers
      88             :     //
      89             :     //--------------------------------------------
      90             : 
      91             :     /** Return the method as an integral constant
      92             : 
      93             :         If the method returned is equal to
      94             :         @ref method::unknown, the method may
      95             :         be obtained as a string instead, by
      96             :         calling @ref method_text.
      97             :     */
      98             :     http_proto::method
      99          17 :     method() const noexcept
     100             :     {
     101          17 :         return ph_->req.method;
     102             :     }
     103             : 
     104             :     /** Return the method as a string
     105             :     */
     106             :     string_view
     107          21 :     method_text() const noexcept
     108             :     {
     109          42 :         return string_view(
     110          21 :             ph_->cbuf,
     111          21 :             ph_->req.method_len);
     112             :     }
     113             : 
     114             :     /** Return the request-target string
     115             :     */
     116             :     string_view
     117          13 :     target() const noexcept
     118             :     {
     119          26 :         return string_view(
     120          13 :             ph_->cbuf +
     121          13 :                 ph_->req.method_len + 1,
     122          13 :             ph_->req.target_len);
     123             :     }
     124             : 
     125             :     /** Return the HTTP-version
     126             :     */
     127             :     http_proto::version
     128          21 :     version() const noexcept
     129             :     {
     130          21 :         return ph_->version;
     131             :     }
     132             : 
     133             :     //--------------------------------------------
     134             :     //
     135             :     // Modifiers
     136             :     //
     137             :     //--------------------------------------------
     138             : 
     139             :     /** Set the method of the request to the enum
     140             :     */
     141             :     void
     142           2 :     set_method(
     143             :         http_proto::method m)
     144             :     {
     145           2 :         set_impl(
     146             :             m,
     147             :             to_string(m),
     148             :             target(),
     149             :             version());
     150           2 :     }
     151             : 
     152             :     /** Set the method of the request to the string
     153             :     */
     154             :     void
     155           3 :     set_method(
     156             :         string_view s)
     157             :     {
     158           3 :         set_impl(
     159             :             string_to_method(s),
     160             :             s,
     161             :             target(),
     162             :             version());
     163           3 :     }
     164             : 
     165             :     /** Set the target string of the request
     166             : 
     167             :         This function sets the request-target.
     168             :         The caller is responsible for ensuring
     169             :         that the string passed is syntactically
     170             :         valid.
     171             :     */
     172             :     void
     173           2 :     set_target(
     174             :         string_view s)
     175             :     {
     176           2 :         set_impl(
     177           2 :             ph_->req.method,
     178             :             method_text(),
     179             :             s,
     180             :             version());
     181           2 :     }
     182             : 
     183             :     /** Set the HTTP version of the request
     184             :     */
     185             :     void
     186           2 :     set_version(
     187             :         http_proto::version v)
     188             :     {
     189           2 :         set_impl(
     190           2 :             ph_->req.method,
     191             :             method_text(),
     192             :             target(),
     193             :             v);
     194           2 :     }
     195             : 
     196             :     /** Set the method, target, and version of the request
     197             : 
     198             :         This is more efficient than setting the
     199             :         properties individually.
     200             :     */
     201             :     void
     202           1 :     set_start_line(
     203             :         http_proto::method m,
     204             :         string_view t,
     205             :         http_proto::version v)
     206             :     {
     207           1 :         set_impl(m, to_string(m), t, v);
     208           0 :     }
     209             : 
     210             :     /** Set the method, target, and version of the request
     211             : 
     212             :         This is more efficient than setting the
     213             :         properties individually.
     214             :     */
     215             :     void
     216         180 :     set_start_line(
     217             :         string_view m,
     218             :         string_view t,
     219             :         http_proto::version v)
     220             :     {
     221         180 :         set_impl(string_to_method(m), m, t, v);
     222         180 :     }
     223             : 
     224             :     /** Set the Expect header
     225             :     */
     226             :     BOOST_HTTP_PROTO_DECL
     227             :     void
     228             :     set_expect_100_continue(bool b);
     229             : 
     230             :     //--------------------------------------------
     231             : 
     232             :     /** Swap this with another instance
     233             :     */
     234             :     void
     235          42 :     swap(request& other) noexcept
     236             :     {
     237          42 :         h_.swap(other.h_);
     238          42 :     }
     239             : 
     240             :     /** Swap two instances
     241             :     */
     242             :     // hidden friend
     243             :     friend
     244             :     void
     245             :     swap(
     246             :         request& t0,
     247             :         request& t1) noexcept
     248             :     {
     249             :         t0.swap(t1);
     250             :     }
     251             : 
     252             : private:
     253             :     BOOST_HTTP_PROTO_DECL
     254             :     void
     255             :     set_impl(
     256             :         http_proto::method m,
     257             :         string_view ms,
     258             :         string_view t,
     259             :         http_proto::version v);
     260             : };
     261             : 
     262             : } // http_proto
     263             : } // boost
     264             : 
     265             : #endif

Generated by: LCOV version 1.15