RESTinio
Loading...
Searching...
No Matches
sendfile_operation.hpp
Go to the documentation of this file.
1/*
2 restinio
3*/
4
5/*!
6 sendfile routine.
7*/
8
9#pragma once
10
11#include <memory>
12
13#include <restinio/sendfile.hpp>
14
15namespace restinio
16{
17
18namespace impl
19{
20
21//
22// sendfile_operation_base_t
23//
24
25//!Base class for storing sendfile operation context.
28{
29 public:
30 virtual ~sendfile_operation_base_t() = default;
31
32 virtual void
33 start() = 0;
34};
35
37
38//! Callback type for invocation when sendfile operation completes.
40 std::function< void ( const asio_ns::error_code & , file_size_t ) >;
41
42//
43// sendfile_operation_runner_base_t
44//
45
46//! A base runner of sendfile operation (keeps all the data).
47template < typename Socket >
50{
51 public:
53
55 const sendfile_t & sf,
56 default_asio_executor executor,
57 Socket & socket,
58 after_sendfile_cb_t after_sendfile_cb )
64 , m_executor{ std::move( executor )}
65 , m_socket{ socket }
67 {}
68
69 auto expires_after() const noexcept { return m_expires_after; }
70
71 protected:
73 file_offset_t m_next_write_offset;
74 file_size_t m_remained_size;
75 file_size_t m_transfered_size{ 0 };
76
77 const file_size_t m_chunk_size;
78
79 const std::chrono::steady_clock::time_point m_expires_after;
80
81 default_asio_executor m_executor;
82 Socket & m_socket;
84};
85
86template<typename Error_Type>
87auto
88make_error_code( const Error_Type & e ) noexcept
89{
90 return asio_ns::error_code{ static_cast<int>(e), asio_ns::error::get_system_category() };
91}
92
93} /* namespace impl */
94
95} /* namespace restinio */
96
97/*
98 Concrete implementations.
99*/
100
101#if defined(RESTINIO_OS_WINDOWS)
102 #include "sendfile_operation_win.ipp"
103#elif defined(RESTINIO_OS_UNIX) || defined(RESTINIO_OS_APPLE)
104 #include "sendfile_operation_posix.ipp"
105#else
106 #if defined (RESTINIO_ENABLE_SENDFILE_DEFAULT_IMPL)
107 #include "sendfile_operation_default.ipp"
108 #else
109 #error "Sendfile not supported, to enable default implementation define RESTINIO_ENABLE_SENDFILE_DEFAULT_IMPL macro"
110 #endif
111#endif
Base class for storing sendfile operation context.
A base runner of sendfile operation (keeps all the data).
sendfile_operation_runner_base_t(const sendfile_t &sf, default_asio_executor executor, Socket &socket, after_sendfile_cb_t after_sendfile_cb)
const std::chrono::steady_clock::time_point m_expires_after
Send file write operation description.
Definition sendfile.hpp:232
file_descriptor_t file_descriptor() const noexcept
Get the file descriptor of a given sendfile operation.
Definition sendfile.hpp:412
auto size() const noexcept
Get size of data to write.
Definition sendfile.hpp:313
auto chunk_size() const noexcept
Definition sendfile.hpp:361
auto offset() const noexcept
Get offset of data to write.
Definition sendfile.hpp:309
std::function< void(const asio_ns::error_code &, file_size_t) > after_sendfile_cb_t
Callback type for invocation when sendfile operation completes.
std::shared_ptr< sendfile_operation_base_t > sendfile_operation_shared_ptr_t
auto make_error_code(const Error_Type &e) noexcept
std::FILE * file_descriptor_t