]> git.mxchange.org Git - simgear.git/blobdiff - simgear/io/HTTPRequest.cxx
Don't use object returned from vector::end()
[simgear.git] / simgear / io / HTTPRequest.cxx
index 4ed18d6eb87d2277e4a69149594443ee265a3e79..6b06785ad00bf57d79fb12e77b971a9475362138 100644 (file)
@@ -32,6 +32,7 @@ extern const int DEFAULT_HTTP_PORT;
 
 //------------------------------------------------------------------------------
 Request::Request(const std::string& url, const std::string method):
+  _client(0),
   _method(method),
   _url(url),
   _responseVersion(HTTP_VERSION_UNKNOWN),
@@ -39,7 +40,8 @@ Request::Request(const std::string& url, const std::string method):
   _responseLength(0),
   _receivedBodyBytes(0),
   _ready_state(UNSENT),
-  _willClose(false)
+  _willClose(false),
+  _connectionCloseHeader(false)
 {
 
 }
@@ -147,7 +149,10 @@ void Request::responseStart(const std::string& r)
 void Request::responseHeader(const std::string& key, const std::string& value)
 {
   if( key == "connection" ) {
-    _willClose = (value.find("close") != std::string::npos);
+    _connectionCloseHeader = (value.find("close") != std::string::npos);
+      // track willClose seperately because other conditions (abort, for
+      // example) can also set it
+    _willClose = _connectionCloseHeader;
   } else if (key == "content-length") {
     int sz = strutils::to_int(value);
     setResponseLength(sz);
@@ -325,6 +330,7 @@ unsigned int Request::responseLength() const
 //------------------------------------------------------------------------------
 void Request::setFailure(int code, const std::string& reason)
 {
+    SG_LOG(SG_IO, SG_WARN, "HTTP request: set failure:" << code << " reason " << reason);
   _responseStatus = code;
   _responseReason = reason;
 
@@ -360,23 +366,23 @@ void Request::setReadyState(ReadyState state)
 }
 
 //------------------------------------------------------------------------------
-void Request::abort()
+bool Request::closeAfterComplete() const
 {
-  abort("Request aborted.");
+  // for non HTTP/1.1 connections, assume server closes
+  return _willClose || (_responseVersion != HTTP_1_1);
 }
 
-//----------------------------------------------------------------------------
-void Request::abort(const std::string& reason)
+//------------------------------------------------------------------------------
+
+void Request::setCloseAfterComplete()
 {
-  setFailure(-1, reason);
-  _willClose = true;
+    _willClose = true;
 }
 
 //------------------------------------------------------------------------------
-bool Request::closeAfterComplete() const
+bool Request::serverSupportsPipelining() const
 {
-  // for non HTTP/1.1 connections, assume server closes
-  return _willClose || (_responseVersion != HTTP_1_1);
+    return (_responseVersion == HTTP_1_1) && !_connectionCloseHeader;
 }
 
 //------------------------------------------------------------------------------