From 1a8f351248c38445189a397035e8a2cb3182ea6a Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Mon, 27 Dec 2010 20:48:35 +0100 Subject: Added HTTPRequest and HTTPResponse classes. --- httpd.cpp | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) (limited to 'httpd.cpp') diff --git a/httpd.cpp b/httpd.cpp index 3d25a0e..8eac976 100644 --- a/httpd.cpp +++ b/httpd.cpp @@ -1,5 +1,6 @@ #include "httpd.h" #include "music.h" +#include "http.h" #include #include @@ -17,42 +18,29 @@ void HTTPConnection::handle_write(const boost::system::error_code& error, size_t void HTTPConnection::handle_read(const boost::system::error_code& error, size_t bytes_transferred) { std::istream is(&buf); - std::string line, firstline; - std::getline(is, firstline); - std::string type, path, httpver; - std::vector splitvec; - boost::algorithm::split(splitvec, firstline, boost::algorithm::is_space()); - - type = splitvec[0]; - path = splitvec[1]; - httpver = splitvec[2]; - std::cout << boost::format("%s %s %s\n") % type % path % httpver; - - if(boost::algorithm::ends_with(path, "/")) - path = path.substr(0, path.size()-1); + HTTPRequest req(is); boost::asio::streambuf b; std::ostream os(&b); - MusicListing *ml = music::find(path); + HTTPResponse res; + + MusicListing *ml = music::find(req.path); if(ml) { - os << "HTTP/1.1 200 OK\r\n"; - os << "content-type: text/html\r\n"; - os << "\r\n"; + res.code = 200; + res.status = "OK"; + res.add_header("content-type", "text/html"); + res.write_headers(os); ml->render(os); } else { - os << "HTTP/1.1 404 Not Found\r\n"; - os << "\r\n"; + res.code = 404; + res.status = "Not Found"; + res.write_headers(os); } boost::asio::write(socket, b); - - while(is.good()) { - std::getline(is, line); - std::cout << line << std::endl; - } } HTTPConnection::pointer HTTPConnection::create(boost::asio::io_service& io_service) { -- cgit v1.2.3