diff options
Diffstat (limited to 'doc/html/boost_asio/example/cpp03/http/server3/connection.cpp')
-rw-r--r-- | doc/html/boost_asio/example/cpp03/http/server3/connection.cpp | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/doc/html/boost_asio/example/cpp03/http/server3/connection.cpp b/doc/html/boost_asio/example/cpp03/http/server3/connection.cpp deleted file mode 100644 index 6ec24d1ed4..0000000000 --- a/doc/html/boost_asio/example/cpp03/http/server3/connection.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// -// connection.cpp -// ~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff 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) -// - -#include "connection.hpp" -#include <vector> -#include <boost/bind.hpp> -#include "request_handler.hpp" - -namespace http { -namespace server3 { - -connection::connection(boost::asio::io_service& io_service, - request_handler& handler) - : strand_(io_service), - socket_(io_service), - request_handler_(handler) -{ -} - -boost::asio::ip::tcp::socket& connection::socket() -{ - return socket_; -} - -void connection::start() -{ - socket_.async_read_some(boost::asio::buffer(buffer_), - strand_.wrap( - boost::bind(&connection::handle_read, shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred))); -} - -void connection::handle_read(const boost::system::error_code& e, - std::size_t bytes_transferred) -{ - if (!e) - { - boost::tribool result; - boost::tie(result, boost::tuples::ignore) = request_parser_.parse( - request_, buffer_.data(), buffer_.data() + bytes_transferred); - - if (result) - { - request_handler_.handle_request(request_, reply_); - boost::asio::async_write(socket_, reply_.to_buffers(), - strand_.wrap( - boost::bind(&connection::handle_write, shared_from_this(), - boost::asio::placeholders::error))); - } - else if (!result) - { - reply_ = reply::stock_reply(reply::bad_request); - boost::asio::async_write(socket_, reply_.to_buffers(), - strand_.wrap( - boost::bind(&connection::handle_write, shared_from_this(), - boost::asio::placeholders::error))); - } - else - { - socket_.async_read_some(boost::asio::buffer(buffer_), - strand_.wrap( - boost::bind(&connection::handle_read, shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred))); - } - } - - // If an error occurs then no new asynchronous operations are started. This - // means that all shared_ptr references to the connection object will - // disappear and the object will be destroyed automatically after this - // handler returns. The connection class's destructor closes the socket. -} - -void connection::handle_write(const boost::system::error_code& e) -{ - if (!e) - { - // Initiate graceful connection closure. - boost::system::error_code ignored_ec; - socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_ec); - } - - // No new asynchronous operations are started. This means that all shared_ptr - // references to the connection object will disappear and the object will be - // destroyed automatically after this handler returns. The connection class's - // destructor closes the socket. -} - -} // namespace server3 -} // namespace http |