LCOV - code coverage report
Current view: top level - libs/http_proto/src - response.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 64 64 100.0 %
Date: 2024-03-04 15:37:43 Functions: 9 16 56.2 %

          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             : #include <boost/http_proto/response.hpp>
      12             : #include <boost/http_proto/response_view.hpp>
      13             : #include <boost/http_proto/version.hpp>
      14             : 
      15             : #include <utility>
      16             : 
      17             : namespace boost {
      18             : namespace http_proto {
      19             : 
      20          32 : response::
      21          32 : response() noexcept
      22             :     : fields_view_base(
      23          32 :         &this->fields_base::h_)
      24             :     , message_base(
      25          32 :         detail::kind::response)
      26             : {
      27          32 : }
      28             : 
      29          86 : response::
      30             : response(
      31          86 :     core::string_view s)
      32             :     : fields_view_base(
      33          86 :         &this->fields_base::h_)
      34             :     , message_base(
      35          86 :         detail::kind::response, s)
      36             : {
      37          86 : }
      38             : 
      39           3 : response::
      40             : response(
      41           3 :     response&& other) noexcept
      42           3 :     : response()
      43             : {
      44           3 :     swap(other);
      45           3 : }
      46             : 
      47           2 : response::
      48             : response(
      49           2 :     response const& other)
      50             :     : fields_view_base(
      51           2 :         &this->fields_base::h_)
      52           2 :     , message_base(*other.ph_)
      53             : {
      54           2 : }
      55             : 
      56           2 : response::
      57             : response(
      58           2 :     response_view const& other)
      59             :     : fields_view_base(
      60           2 :         &this->fields_base::h_)
      61           2 :     , message_base(*other.ph_)
      62             : {
      63           2 : }
      64             : 
      65             : response&
      66           1 : response::
      67             : operator=(
      68             :     response&& other) noexcept
      69             : {
      70             :     response temp(
      71           1 :         std::move(other));
      72           1 :     temp.swap(*this);
      73           1 :     return *this;
      74             : }
      75             : 
      76           6 : response::
      77             : response(
      78           6 :     http_proto::status sc)
      79             :     : response(
      80           6 :         sc, http_proto::version::http_1_1)
      81             : {
      82           6 : }
      83             : 
      84          14 : response::
      85             : response(
      86             :     http_proto::status sc,
      87          14 :     http_proto::version v)
      88          14 :     : response()
      89             : {
      90          14 :     if( sc != h_.res.status ||
      91           4 :         v != h_.version)
      92          11 :         set_start_line(sc, v);
      93          14 : }
      94             : 
      95             : //------------------------------------------------
      96             : 
      97             : void
      98          14 : response::
      99             : set_impl(
     100             :     http_proto::status sc,
     101             :     unsigned short si,
     102             :     core::string_view rs,
     103             :     http_proto::version v)
     104             : {
     105             :     // measure and resize
     106          14 :     auto const vs = to_string(v);
     107             :     auto const n =
     108          14 :         vs.size() + 1 +
     109          14 :         3 + 1 +
     110          14 :         rs.size() +
     111          14 :         2;
     112          14 :     auto dest = set_prefix_impl(n);
     113             : 
     114          14 :     h_.version = v;
     115          14 :     vs.copy(dest, vs.size());
     116          14 :     dest += vs.size();
     117          14 :     *dest++ = ' ';
     118             : 
     119          14 :     h_.res.status = sc;
     120          14 :     h_.res.status_int = si;
     121          14 :     dest[0] = '0' + ((h_.res.status_int / 100) % 10);
     122          14 :     dest[1] = '0' + ((h_.res.status_int /  10) % 10);
     123          14 :     dest[2] = '0' + ((h_.res.status_int /   1) % 10);
     124          14 :     dest[3] = ' ';
     125          14 :     dest += 4;
     126             : 
     127          14 :     rs.copy(dest, rs.size());
     128          14 :     dest += rs.size();
     129          14 :     dest[0] = '\r';
     130          14 :     dest[1] = '\n';
     131             : 
     132          14 :     h_.on_start_line();
     133          14 : }
     134             : 
     135             : } // http_proto
     136             : } // boost

Generated by: LCOV version 1.15