]> git.tdb.fi Git - libs/net.git/blobdiff - source/http/response.cpp
Prepare for assimilation into mspnet
[libs/net.git] / source / http / response.cpp
diff --git a/source/http/response.cpp b/source/http/response.cpp
new file mode 100644 (file)
index 0000000..ede249b
--- /dev/null
@@ -0,0 +1,42 @@
+#include <msp/strings/formatter.h>
+#include <msp/strings/utils.h>
+#include "response.h"
+
+using namespace std;
+
+namespace Msp {
+namespace Http {
+
+Response::Response(Status s):
+       status(s)
+{ }
+
+string Response::str() const
+{
+       string result = format("%s %d %s\r\n", version_str(http_version), static_cast<int>(status), status);
+       result += str_common();
+
+       return result;
+}
+
+Response Response::parse(const string &str)
+{
+       Response result;
+
+       unsigned lf = str.find('\n');
+       vector<string> parts = split(str.substr(0, lf), ' ', 2);
+       if(parts.size()<2)
+               throw invalid_argument("Response::parse");
+
+       result.http_version = parse_version(parts[0]);
+       result.status = static_cast<Status>(lexical_cast<unsigned>(parts[1]));
+
+       lf += result.parse_headers(str.substr(lf+1));
+
+       result.parse_content(str.substr(lf+1));
+
+       return result;
+}
+
+} // namespace Http
+} // namespace Msp