]> git.mxchange.org Git - simgear.git/blob - simgear/io/HTTPRequest.hxx
1c7dc083b06b8c0e8f3b758144f53d08e5108a83
[simgear.git] / simgear / io / HTTPRequest.hxx
1 #ifndef SG_HTTP_REQUEST_HXX
2 #define SG_HTTP_REQUEST_HXX
3
4 #include <map>
5
6 #include <simgear/structure/SGReferenced.hxx>
7 #include <simgear/structure/SGSharedPtr.hxx>
8 #include <simgear/math/sg_types.hxx>
9
10 namespace simgear
11 {
12
13 namespace HTTP
14 {
15
16 class Request : public SGReferenced
17 {
18 public:
19     virtual ~Request();
20     
21     virtual void setUrl(const std::string& url);
22     
23     virtual std::string method() const
24         { return _method; }
25     virtual std::string url() const
26         { return _url; }
27     
28     virtual std::string scheme() const;
29     virtual std::string path() const;
30     virtual std::string host() const;
31     virtual std::string hostAndPort() const;
32     virtual unsigned short port() const;
33     
34     virtual string_list requestHeaders() const;
35     virtual std::string header(const std::string& name) const;
36
37     virtual int responseCode() const
38         { return _responseStatus; }
39         
40     virtual std::string responseReason() const
41         { return _responseReason; }
42         
43     void setResponseLength(unsigned int l);    
44     virtual unsigned int responseLength() const;
45     
46     /**
47      * running total of body bytes received so far. Can be used
48      * to generate a completion percentage, if the response length is
49      * known. 
50      */
51     unsigned int responseBytesReceived() const
52         { return _receivedBodyBytes; }
53 protected:
54     Request(const std::string& url, const std::string method = "GET");
55
56     virtual void responseStart(const std::string& r);
57     virtual void responseHeader(const std::string& key, const std::string& value);
58     virtual void responseHeadersComplete();
59     virtual void responseComplete();
60     virtual void failed();
61     virtual void gotBodyData(const char* s, int n);
62 private:
63     friend class Client;
64     friend class Connection;
65     
66     void processBodyBytes(const char* s, int n);
67     void setFailure(int code, const std::string& reason);
68
69     std::string _method;
70     std::string _url;
71     int _responseStatus;
72     std::string _responseReason;
73     unsigned int _responseLength;
74     unsigned int _receivedBodyBytes;
75     
76     typedef std::map<std::string, std::string> HeaderDict;
77     HeaderDict _responseHeaders; 
78 };
79
80 typedef SGSharedPtr<Request> Request_ptr;
81
82 } // of namespace HTTP
83
84 } // of namespace simgear
85
86 #endif // of SG_HTTP_REQUEST_HXX
87