X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2FHTTPRequest.hxx;h=0e346419d12632abd535f99782e370120d149467;hb=427d6c3316e59aa86bbf4d3e51f522e0aba9c4fd;hp=4afb1c75d8b02b856120c84e16026652576b210e;hpb=04dc28cb3307a2d78b024f533011628dbe5e5a52;p=simgear.git diff --git a/simgear/io/HTTPRequest.hxx b/simgear/io/HTTPRequest.hxx index 4afb1c75..0e346419 100644 --- a/simgear/io/HTTPRequest.hxx +++ b/simgear/io/HTTPRequest.hxx @@ -18,6 +18,8 @@ class Request : public SGReferenced public: virtual ~Request(); + virtual void setUrl(const std::string& url); + virtual std::string method() const { return _method; } virtual std::string url() const @@ -25,7 +27,9 @@ public: virtual std::string scheme() const; virtual std::string path() const; - virtual std::string host() const; // host, including port + virtual std::string host() const; + virtual std::string hostAndPort() const; + virtual unsigned short port() const; virtual string_list requestHeaders() const; virtual std::string header(const std::string& name) const; @@ -33,27 +37,57 @@ public: virtual int responseCode() const { return _responseStatus; } - virtual std::string resposeReason() const + virtual std::string responseReason() const { return _responseReason; } - virtual int contentLength() const; -protected: - friend class Connection; + void setResponseLength(unsigned int l); + virtual unsigned int responseLength() const; + + /** + * running total of body bytes received so far. Can be used + * to generate a completion percentage, if the response length is + * known. + */ + unsigned int responseBytesReceived() const + { return _receivedBodyBytes; } + + enum HTTPVersion { + HTTP_VERSION_UNKNOWN = 0, + HTTP_0_x, // 0.9 or similar + HTTP_1_0, + HTTP_1_1 + }; + + HTTPVersion responseVersion() const + { return _responseVersion; } - Request(const std::string& url, const std::string method = "get"); + static HTTPVersion decodeVersion(const std::string& v); + + bool closeAfterComplete() const; +protected: + Request(const std::string& url, const std::string method = "GET"); virtual void responseStart(const std::string& r); virtual void responseHeader(const std::string& key, const std::string& value); virtual void responseHeadersComplete(); virtual void responseComplete(); - + virtual void failed(); virtual void gotBodyData(const char* s, int n); private: + friend class Client; + friend class Connection; + + void processBodyBytes(const char* s, int n); + void setFailure(int code, const std::string& reason); std::string _method; std::string _url; + HTTPVersion _responseVersion; int _responseStatus; std::string _responseReason; + unsigned int _responseLength; + unsigned int _receivedBodyBytes; + bool _willClose; typedef std::map HeaderDict; HeaderDict _responseHeaders;