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);
- if (isFailureStatus(activeRequest->responseCode())) {
- handleError(EIO);
- return;
- }
-
+ try {
+ activeRequest->responseStart(buffer);
+ } catch (sg_exception& e) {
+ handleError(EIO);
+ }
+
state = STATE_GETTING_HEADERS;
buffer.clear();
if (activeRequest->responseCode() == 204) {
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/strutils.hxx>
#include <simgear/props/props_io.hxx>
+#include <simgear/structure/exception.hxx>
namespace simgear
{
const int maxSplit = 2; // HTTP/1.1 nnn reason-string
string_list parts = strutils::split(r, NULL, maxSplit);
if (parts.size() != 3) {
- setFailure(400, "malformed HTTP response header");
- return;
+ throw sg_io_exception("bad HTTP response");
}
_responseVersion = decodeHTTPVersion(parts[0]);