]> git.tdb.fi Git - libs/net.git/blobdiff - source/response.cpp
Add Server class
[libs/net.git] / source / response.cpp
index 0defebd5afb12a7fe3297649bd65b428e5bef22a..4da67422fa221735ea234f64d7430e0d2e857d88 100644 (file)
@@ -20,7 +20,7 @@ Response::Response(Status s):
 
 string Response::str() const
 {
-       string result=format("%s %d %s\r\n", version_str(http_version), int(status), status);
+       string result=format("%s %d %s\r\n", version_str(http_version), static_cast<int>(status), status);
        result+=str_common();
 
        return result;
@@ -31,30 +31,14 @@ Response Response::parse(const string &str)
        Response result;
 
        unsigned lf=str.find('\n');
-       vector<string> parts=split(str.substr(0, lf), ' ');
+       vector<string> parts=split(str.substr(0, lf), ' ', 2);
        if(parts.size()<2)
                throw InvalidParameterValue("Invalid response");
 
        result.http_version=parse_version(parts[0]);
        result.status=static_cast<Status>(lexical_cast<unsigned>(parts[1]));
 
-       unsigned start=lf+1;
-       while(1)
-       {
-               lf=str.find('\n', start);
-               if(lf==string::npos)
-                       throw InvalidParameterValue("Incomplete response");
-               if(lf==start || (str[start]=='\r' && lf==start+1))
-                       break;
-
-               unsigned colon=str.find(':', start);
-               if(colon>lf)
-                       throw InvalidParameterValue("No colon in header");
-
-               result.set_header(str.substr(start, colon-start), strip(str.substr(colon+1, lf-colon-1)));
-
-               start=lf+1;
-       }
+       lf+=result.parse_headers(str.substr(lf+1));
 
        result.parse_content(str.substr(lf+1));