Program Listing for File http_connection.hpp
↰ Return to documentation for file (/tmp/ws/src/async_web_server_cpp/include/async_web_server_cpp/http_connection.hpp
)
#ifndef CPP_WEB_SERVER_HTTP_CONNECTION_HPP
#define CPP_WEB_SERVER_HTTP_CONNECTION_HPP
#include "async_web_server_cpp/http_request.hpp"
#include "async_web_server_cpp/http_request_handler.hpp"
#include "async_web_server_cpp/http_request_parser.hpp"
#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/thread/mutex.hpp>
namespace async_web_server_cpp
{
class HttpConnection;
typedef boost::shared_ptr<HttpConnection> HttpConnectionPtr;
typedef boost::weak_ptr<HttpConnection> HttpConnectionWeakPtr;
class HttpConnection : public boost::enable_shared_from_this<HttpConnection>,
private boost::noncopyable
{
public:
typedef boost::function<void(const char* begin, const char* end)>
ReadHandler;
typedef std::shared_ptr<const void> ResourcePtr;
explicit HttpConnection(boost::asio::io_service& io_service,
HttpServerRequestHandler request_handler);
boost::asio::ip::tcp::socket& socket();
void start();
void async_read(ReadHandler callback);
void write_and_clear(std::vector<unsigned char>& data);
void write(const std::string&);
void write(const boost::asio::const_buffer& buffer, ResourcePtr resource);
void write(const std::vector<boost::asio::const_buffer>& buffer,
ResourcePtr resource);
private:
void handle_read(const char* begin, const char* end);
void handle_read_raw(ReadHandler callback,
const boost::system::error_code& e,
std::size_t bytes_transferred);
// Must be called while holding write lock
void write_pending();
void handle_write(const boost::system::error_code& e,
std::vector<ResourcePtr> resources);
boost::asio::io_service::strand strand_;
boost::asio::ip::tcp::socket socket_;
HttpServerRequestHandler request_handler_;
boost::array<char, 8192> buffer_;
HttpRequest request_;
HttpRequestParser request_parser_;
boost::mutex write_mutex_;
bool write_in_progress_;
std::vector<boost::asio::const_buffer> pending_write_buffers_;
std::vector<ResourcePtr> pending_write_resources_;
boost::system::error_code last_error_;
ReadHandler read_handler_;
};
} // namespace async_web_server_cpp
#endif