summaryrefslogtreecommitdiff
path: root/http_connection.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2011-01-02 22:28:26 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2011-01-02 22:28:26 +0100
commit0e3c3380d519b033500b4ed1ccd3acf707c34372 (patch)
tree115cbbf0200fc34011e68b32e56d58458a72d87f /http_connection.cpp
parent237c3e226b7c2ac391b0e8d354e5fc6f587a41ba (diff)
Merge HTTPResponse into HTTP::Connection.
Diffstat (limited to 'http_connection.cpp')
-rw-r--r--http_connection.cpp38
1 files changed, 31 insertions, 7 deletions
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 <iostream>
#include <boost/bind.hpp>
#include <boost/format.hpp>
+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<h1>%1$d %2$s</h1>") % 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<h1>%1$d %2$s</h1>") % 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"));
}