- string result=format("%s %s %s\r\n", method, path, version_str(http_version));
- result+=str_common();
+ string result = format("%s %s %s\r\n", method, path, version_str(http_version));
+ result += str_common();
+
+ return result;
+}
+
+Request Request::parse(const string &str)
+{
+ unsigned lf = str.find('\n');
+ vector<string> parts = split(str.substr(0, lf-(str[lf-1]=='\r')), ' ', 2);
+ if(parts.size()<3)
+ throw invalid_argument("Request::parse");
+
+ Request result(parts[0], parts[1]);
+ result.http_version = parse_version(parts[2]);
+
+ lf += result.parse_headers(str.substr(lf+1));
+
+ result.parse_content(str.substr(lf+1));