diff options
Diffstat (limited to 'http.cpp')
-rw-r--r-- | http.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/http.cpp b/http.cpp new file mode 100644 index 0000000..8d69f93 --- /dev/null +++ b/http.cpp @@ -0,0 +1,46 @@ +#include "http.h" + +#include <boost/format.hpp> +#include <boost/algorithm/string.hpp> +#include <boost/algorithm/string/regex.hpp> + +#include <vector> + +HTTPRequest::HTTPRequest(std::istream& is) { + std::string line, firstline; + std::getline(is, firstline); + + std::vector<std::string> 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; + + while(is.good()) { + std::string line; + std::getline(is, line); + boost::trim(line); + if(!line.size()) continue; + std::vector<std::string> v; + boost::algorithm::split_regex(v, line, boost::regex(": ")); + headers[v[0]] = v[1]; + } +} + +HTTPResponse::HTTPResponse() { + httpver = "1.1"; +} + +void HTTPResponse::add_header(std::string key, std::string value) { + headers[key] = value; +} + +void HTTPResponse::write_headers(std::ostream& os) { + os << boost::format("HTTP/%s %d %s\r\n") % httpver % code % status; + for(HTTPHeaders::iterator it = headers.begin(); it != headers.end(); it++) { + os << boost::format("%s: %s\r\n") % it->first % it->second; + } + os << "\r\n"; +} |