summaryrefslogtreecommitdiff
path: root/http.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'http.cpp')
-rw-r--r--http.cpp46
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";
+}