Line data Source code
1 : // 2 : // Copyright (c) 2022 Vinnie Falco (vinnie.falco@gmail.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 : #include <boost/http_proto/file_body.hpp> 11 : #include <boost/buffers/algorithm.hpp> 12 : #include <boost/assert.hpp> 13 : 14 : namespace boost { 15 : namespace http_proto { 16 : 17 : file_body:: 18 : ~file_body() = default; 19 : 20 : file_body:: 21 : file_body( 22 : file_body&&) noexcept = default; 23 : 24 0 : file_body:: 25 : file_body( 26 : file&& f, 27 0 : std::uint64_t size) noexcept 28 0 : : f_(std::move(f)) 29 0 : , n_(size) 30 : { 31 0 : } 32 : 33 : auto 34 0 : file_body:: 35 : on_read( 36 : buffers::mutable_buffer b) -> 37 : results 38 : { 39 0 : results rv; 40 0 : if(n_ > 0) 41 : { 42 : std::size_t n; 43 0 : if( n_ >= b.size()) 44 0 : n = b.size(); 45 : else 46 0 : n = static_cast<std::size_t>(n_); 47 0 : n = f_.read( 48 : b.data(), n, rv.ec); 49 0 : rv.bytes = n; 50 0 : n_ -= n; 51 : } 52 0 : rv.finished = n_ == 0; 53 0 : return rv; 54 : } 55 : 56 : } // http_proto 57 : } // boost