From 0e3c3380d519b033500b4ed1ccd3acf707c34372 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sun, 2 Jan 2011 22:28:26 +0100 Subject: Merge HTTPResponse into HTTP::Connection. --- http_connection.cpp | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'http_connection.cpp') diff --git a/http_connection.cpp b/http_connection.cpp index a86d2ac..863aca1 100644 --- a/http_connection.cpp +++ b/http_connection.cpp @@ -1,11 +1,28 @@ #include "http_connection.h" -#include "http.h" +#include #include #include +void HTTP::Connection::send_error(int code, std::string name) { + boost::asio::write(socket, boost::asio::buffer(boost::str(boost::format("HTTP/1.1 %1$d %2$s\r\n\r\n

%1$d %2$s

") % code % name))); +} + +void HTTP::Connection::add_header(std::string key, std::string value) { + response_headers.push_back(std::make_pair(key, value)); +} + +void HTTP::Connection::send_data(const std::string& data) { + boost::asio::write(socket, boost::asio::buffer(data)); +} + +void HTTP::Connection::send_data(const void* data, std::size_t size) { + boost::asio::write(socket, boost::asio::buffer(data, size)); +} + HTTP::Connection::Connection(boost::asio::io_service& io_service) : socket(io_service) { + headers_written = false; } void HTTP::Connection::handle_write(const boost::system::error_code& error, size_t bytes_transferred) { @@ -37,10 +54,6 @@ void HTTP::Connection::handle_read(const boost::system::error_code& error, size_ callback(shared_from_this()); } -void print(char c) { - std::cout << "Char: " << int(c) << std::endl; -} - void HTTP::Connection::read_request(Handler callback) { boost::asio::async_read_until(socket, buf, "\r\n\r\n", boost::bind(&Connection::handle_read, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred, callback)); @@ -57,6 +70,17 @@ std::string HTTP::Connection::pop_path_base() { return base_path.back(); } -void HTTP::Connection::send_error(int code, std::string name) { - boost::asio::write(socket, boost::asio::buffer(boost::str(boost::format("HTTP/1.1 %1$d %2$s\r\n\r\n

%1$d %2$s

") % code % name))); +void HTTP::Connection::write_headers() { + if(headers_written) { + return; + } + headers_written = true; + + boost::asio::write(socket, boost::asio::buffer("HTTP/1.1 200 OK\r\n")); + + for(HeaderList::iterator it = response_headers.begin(); it != response_headers.end(); it++) { + boost::asio::write(socket, boost::asio::buffer(boost::str(boost::format("%s: %s\r\n") % it->first % it->second))); + } + + boost::asio::write(socket, boost::asio::buffer("\r\n")); } -- cgit v1.2.3