]> git.mxchange.org Git - simgear.git/blob - simgear/io/HTTPRequest.hxx
Further HTTP improvements, wget-alike test program to check it all behaves!
[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     virtual unsigned int contentLength() const;
44 protected:
45     friend class Connection;
46     
47     Request(const std::string& url, const std::string method = "GET");
48
49     virtual void responseStart(const std::string& r);
50     virtual void responseHeader(const std::string& key, const std::string& value);
51     virtual void responseHeadersComplete();
52     virtual void responseComplete();
53     
54     virtual void gotBodyData(const char* s, int n);
55 private:
56
57     std::string _method;
58     std::string _url;
59     int _responseStatus;
60     std::string _responseReason;
61     
62     typedef std::map<std::string, std::string> HeaderDict;
63     HeaderDict _responseHeaders; 
64 };
65
66 typedef SGSharedPtr<Request> Request_ptr;
67
68 } // of namespace HTTP
69
70 } // of namespace simgear
71
72 #endif // of SG_HTTP_REQUEST_HXX
73