X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresponse.cpp;h=ede249b7e11afa467e5423f4c4a54faa091fc59c;hb=c8df43e7794dc82d5604dfa612e464bbc5ca3cdd;hp=86d06baf07f42c99097ea3733d0dce6f6d3935e4;hpb=070d56e7b0036ca2e4234eb06dcae83ebfb3df34;p=libs%2Fnet.git diff --git a/source/response.cpp b/source/response.cpp index 86d06ba..ede249b 100644 --- a/source/response.cpp +++ b/source/response.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmsphttp -Copyright © 2008 Mikkosoft Productions, Mikko Rasa -Distributed under the LGPL -*/ - #include #include #include "response.h" @@ -20,8 +13,8 @@ Response::Response(Status s): string Response::str() const { - string result=format("%s %d %s\r\n", version_str(http_version), int(status), status); - result+=str_common(); + string result = format("%s %d %s\r\n", version_str(http_version), static_cast(status), status); + result += str_common(); return result; } @@ -30,33 +23,17 @@ Response Response::parse(const string &str) { Response result; - unsigned lf=str.find('\n'); - vector parts=split(str.substr(0, lf), ' '); + unsigned lf = str.find('\n'); + vector 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(lexical_cast(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"); + throw invalid_argument("Response::parse"); - result.set_header(str.substr(start, colon-start), strip(str.substr(colon+1, lf-colon-1))); + result.http_version = parse_version(parts[0]); + result.status = static_cast(lexical_cast(parts[1])); - start=lf+1; - } + lf += result.parse_headers(str.substr(lf+1)); - result.parse_data(str.substr(lf+1)); + result.parse_content(str.substr(lf+1)); return result; }