typedef std::multimap<std::string, Connection*> ConnectionDict;
typedef std::list<Request_ptr> RequestList;
+static bool isFailureStatus(int httpStatus)
+{
+ int majorCode = httpStatus / 100;
+ return (majorCode != 2);
+}
+
class Client::ClientPrivate
{
public:
assert(state == STATE_WAITING_FOR_RESPONSE);
activeRequest = sentRequests.front();
-
- activeRequest->responseStart(buffer);
+ activeRequest->responseStart(buffer);
+ if (isFailureStatus(activeRequest->responseCode())) {
+ handleError(EIO);
+ return;
+ }
+
state = STATE_GETTING_HEADERS;
buffer.clear();
if (activeRequest->responseCode() == 204) {
const int maxSplit = 2; // HTTP/1.1 nnn reason-string
string_list parts = strutils::split(r, NULL, maxSplit);
if (parts.size() != 3) {
- SG_LOG(SG_IO, SG_WARN, "HTTP::Request: malformed response start:" << r);
setFailure(400, "malformed HTTP response header");
return;
}