00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _SWORD_NETWORK_HTTPCLIENT_
00020 #define _SWORD_NETWORK_HTTPCLIENT_
00021
00022 #include "sword/network.HttpSession.h"
00023 #include "sword/network.InetClient.h"
00024 #include "sword/streams.IStorage.h"
00025
00026 namespace sword {
00027
00029 class SWORDDECL HttpClient : public IStorage {
00030 public:
00031 HttpClient(const URL &url, HttpSession &session);
00032 ~HttpClient();
00033
00034
00035
00037
00039 void addHeader(const std::string &line);
00040
00041
00042
00043 enum Code {
00044 Success,
00045 AuthRequired,
00046 FileNotFound,
00047 Error
00048 };
00049
00050 typedef std::map<std::string, std::string> Arguments;
00051 enum PostMethod {
00052 Get,
00053 Post
00054 };
00055
00057 Code fetch();
00058
00060 Code fetch(const Arguments &arguments, PostMethod method);
00061
00062
00063
00065
00070 std::string replyValue(const std::string& name) const;
00071
00073
00078 word size() const;
00079
00081 word read(void* buffer, word length);
00082
00083 private:
00084 URL url_;
00085 InetClient client_;
00086 HttpSession &session_;
00087 std::ostringstream optionalHeader_;
00088
00089
00090 typedef std::map<std::string, std::string> ReplyLines;
00091 ReplyLines replyLines_;
00092 word size_;
00093
00094
00095 enum State { FixedSize_, Streamed_, NeedChunk_, InChunk_ };
00096 word size1_;
00097 State state_;
00098 };
00099
00100 }
00101
00102 #include "sword.private/network.HttpClient.inl"
00103
00104 #endif // _SWORD_NETWORK_HTTPCLIENT_