1#ifndef BEAST_RFC2616_HPP 
    2#define BEAST_RFC2616_HPP 
    4#include <boost/beast/http/message.hpp> 
    5#include <boost/beast/http/rfc7230.hpp> 
    6#include <boost/range/algorithm/equal.hpp> 
    7#include <boost/range/iterator_range.hpp> 
    8#include <boost/utility/string_ref.hpp> 
   29        return std::tolower(
static_cast<unsigned char>(c1)) ==
 
   30            std::tolower(
static_cast<unsigned char>(c2));
 
 
 
   41    return c == 
' ' || c == 
'\t';
 
 
   61template <
class FwdIter>
 
   72    } 
while (last != first);
 
 
   76template <
class String>
 
 
  104split(FwdIt first, FwdIt last, Char delim)
 
  106    using namespace detail;
 
  107    using string = 
typename Result::value_type;
 
  132                        e.append(1, *iter++);
 
  137                    e.append(1, *iter++);
 
  142                result.emplace_back(std::move(e));
 
  146        else if (*iter == delim)
 
  151                result.emplace_back(std::move(e));
 
  156        else if (is_lws(*iter))
 
  162            e.append(1, *iter++);
 
  170            result.emplace_back(std::move(e));
 
 
  182    return split(first, last, 
',');
 
 
  185template <
class Result = std::vector<std::
string>>
 
  233        return !(*
this == other);
 
 
  264    template <
class = 
void>
 
 
  273    using namespace detail;
 
  291                        value_ = boost::string_ref(
 
  297                        value_ = boost::string_ref(
 
  306        else if (*
it_ == 
',')
 
  311        else if (is_lws(*
it_))
 
 
  337ci_equal(boost::string_ref s1, boost::string_ref s2)
 
 
  343inline boost::iterator_range<list_iterator>
 
  346    return boost::iterator_range<list_iterator>{
 
 
  355template <
class = 
void>
 
  357token_in_list(boost::string_ref 
const& value, boost::string_ref 
const& token)
 
  359    for (
auto const& item : 
make_list(value))
 
 
  365template <
bool isRequest, 
class Body, 
class Fields>
 
  369    if (m.version() <= 10)
 
  370        return boost::beast::http::token_list{
 
  371            m[boost::beast::http::field::connection]}
 
  372            .exists(
"keep-alive");
 
  373    return !boost::beast::http::token_list{
 
  374        m[boost::beast::http::field::connection]}
 
 
 
Iterates through a comma separated list.
 
pointer operator->() const
 
boost::string_ref::const_iterator iter_type
 
value_type const  * pointer
 
list_iterator(iter_type begin, iter_type end)
 
boost::string_ref value_type
 
bool operator!=(list_iterator const &other) const
 
reference operator*() const
 
list_iterator & operator++()
 
bool operator==(list_iterator const &other) const
 
value_type const  & reference
 
list_iterator operator++(int)
 
bool is_white(char c)
Returns true if c is any whitespace character.
 
bool is_lws(char c)
Returns true if c is linear white space.
 
FwdIter trim_right(FwdIter first, FwdIter last)
 
boost::iterator_range< list_iterator > make_list(boost::string_ref const &field)
Returns a range representing the list.
 
Result split_commas(FwdIt first, FwdIt last)
 
Result split(FwdIt first, FwdIt last, Char delim)
Parse a character sequence of values separated by commas.
 
bool is_keep_alive(boost::beast::http::message< isRequest, Body, Fields > const &m)
 
bool ci_equal(boost::string_ref s1, boost::string_ref s2)
Returns true if two strings are equal.
 
bool token_in_list(boost::string_ref const &value, boost::string_ref const &token)
Returns true if the specified token exists in the list.
 
field_t< CharT, Traits, Allocator > field(std::basic_string< CharT, Traits, Allocator > const &text, int width=8, int pad=0, bool right=false)
 
bool operator()(char c1, char c2)