![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/beast/http/impl/ |
Upload File : |
// // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // Official repository: https://github.com/boostorg/beast // #ifndef BOOST_BEAST_HTTP_IMPL_BASIC_PARSER_HPP #define BOOST_BEAST_HTTP_IMPL_BASIC_PARSER_HPP #include <boost/beast/core/buffer_traits.hpp> #include <boost/asio/buffer.hpp> #include <boost/make_unique.hpp> namespace boost { namespace beast { namespace http { template<bool isRequest> template<class ConstBufferSequence> std::size_t basic_parser<isRequest>:: put(ConstBufferSequence const& buffers, error_code& ec) { static_assert(net::is_const_buffer_sequence< ConstBufferSequence>::value, "ConstBufferSequence type requirements not met"); auto const p = net::buffer_sequence_begin(buffers); auto const last = net::buffer_sequence_end(buffers); if(p == last) { ec = {}; return 0; } if(std::next(p) == last) { // single buffer return put(net::const_buffer(*p), ec); } auto const size = buffer_bytes(buffers); if(size <= max_stack_buffer) return put_from_stack(size, buffers, ec); if(size > buf_len_) { // reallocate buf_ = boost::make_unique_noinit<char[]>(size); buf_len_ = size; } // flatten net::buffer_copy(net::buffer( buf_.get(), buf_len_), buffers); return put(net::const_buffer{ buf_.get(), buf_len_}, ec); } template<bool isRequest> template<class ConstBufferSequence> std::size_t basic_parser<isRequest>:: put_from_stack(std::size_t size, ConstBufferSequence const& buffers, error_code& ec) { char buf[max_stack_buffer]; net::buffer_copy(net::mutable_buffer( buf, sizeof(buf)), buffers); return put(net::const_buffer{ buf, size}, ec); } } // http } // beast } // boost #endif