10 #ifndef __PION_HTTP_REQUEST_WRITER_HEADER__ 11 #define __PION_HTTP_REQUEST_WRITER_HEADER__ 13 #include <boost/asio.hpp> 14 #include <boost/bind.hpp> 15 #include <boost/noncopyable.hpp> 16 #include <boost/shared_ptr.hpp> 17 #include <boost/enable_shared_from_this.hpp> 18 #include <pion/config.hpp> 19 #include <pion/http/writer.hpp> 20 #include <pion/http/request.hpp> 32 public boost::enable_shared_from_this<request_writer>
48 static inline boost::shared_ptr<request_writer>
create(
const tcp::connection_ptr& tcp_conn,
51 return boost::shared_ptr<request_writer>(
new request_writer(tcp_conn, handler));
64 static inline boost::shared_ptr<request_writer>
create(
const tcp::connection_ptr& tcp_conn,
65 const http::request_ptr& http_request_ptr,
68 return boost::shared_ptr<request_writer>(
new request_writer(tcp_conn, http_request_ptr, handler));
84 : http::
writer(tcp_conn, handler), m_http_request(new http::
request)
86 set_logger(PION_GET_LOGGER(
"pion.http.request_writer"));
96 request_writer(
const tcp::connection_ptr& tcp_conn,
const http::request_ptr& http_request_ptr,
98 : http::
writer(tcp_conn, handler), m_http_request(http_request_ptr)
100 set_logger(PION_GET_LOGGER(
"pion.http.request_writer"));
103 if (m_http_request->get_content_length() > 0
104 && m_http_request->get_content() != NULL
105 && m_http_request->get_content()[0] !=
'\0')
108 m_http_request->get_content_length());
121 m_http_request->prepare_buffers_for_send(write_buffers,
129 boost::asio::placeholders::error,
130 boost::asio::placeholders::bytes_transferred);
139 virtual void handle_write(
const boost::system::error_code& write_error,
140 std::size_t bytes_written)
146 PION_LOG_DEBUG(log_ptr,
"Sent HTTP request chunk of " << bytes_written <<
" bytes");
149 PION_LOG_DEBUG(log_ptr,
"Sent HTTP request of " << bytes_written <<
" bytes");
159 http::request_ptr m_http_request;
162 std::string m_request_line;
167 typedef boost::shared_ptr<request_writer> request_writer_ptr;
171 template <
typename T>
172 const request_writer_ptr& operator<<(
const request_writer_ptr&
writer,
const T& data) {
void clear(void)
clears out all of the memory buffers used to cache payload content data
boost::function2< void, const boost::system::error_code &, std::size_t > write_handler_t
data type for a function that handles write operations
size_t get_content_length(void) const
returns the length of the payload content (in bytes)
writer(const tcp::connection_ptr &tcp_conn, finished_handler_t handler)
static boost::shared_ptr< request_writer > create(const tcp::connection_ptr &tcp_conn, finished_handler_t handler=finished_handler_t())
logger get_logger(void)
returns the logger currently in use
virtual void handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)
virtual ~request_writer()
default destructor
void finished_writing(const boost::system::error_code &ec)
called after we have finished sending the HTTP message
http::request & get_request(void)
returns a non-const reference to the request that will be sent
tcp::connection_ptr & get_connection(void)
returns a shared pointer to the TCP connection
boost::function1< void, const boost::system::error_code & > finished_handler_t
function called after the HTTP message has been sent
request_writer(const tcp::connection_ptr &tcp_conn, finished_handler_t handler)
void write_no_copy(const std::string &data)
void set_logger(logger log_ptr)
sets the logger to be used
virtual void prepare_buffers_for_send(http::message::write_buffers_t &write_buffers)
static boost::shared_ptr< request_writer > create(const tcp::connection_ptr &tcp_conn, const http::request_ptr &http_request_ptr, finished_handler_t handler=finished_handler_t())
virtual write_handler_t bind_to_write_handler(void)
returns a function bound to http::writer::handle_write()
bool sending_chunked_message() const
returns true if we are sending a chunked message to the client
request_writer(const tcp::connection_ptr &tcp_conn, const http::request_ptr &http_request_ptr, finished_handler_t handler)
std::vector< boost::asio::const_buffer > write_buffers_t
data type for I/O write buffers (these wrap existing data to be sent)