00001
00002
00003 #ifndef BASE_HTTP_HTTPCLIENT_H
00004 #define BASE_HTTP_HTTPCLIENT_H
00005
00006 #include "HTTPResponse.h"
00007 #include "libppbase/base/Random.h"
00008 #include "libppbase/base/Socket.h"
00009
00011 namespace base_http {
00013
00017 class PPBASE_HTTP_EXPORT HTTPClient {
00018 public:
00020
00024 HTTPClient(base::Socket *sock = NULL, const base::String &addr = "");
00025
00027
00030 base::String createBoundary();
00031
00033
00037 HTTPResponse *sendRequest(HTTPRequest &request);
00038
00040
00044 void setSocket(base::Socket *sock, const base::String &addr = "");
00045
00046 protected:
00048
00052 int read(base::String &rbuf);
00053
00055
00058 void readBody(HTTPRequest *ret);
00059
00061
00065 int readChar(char *ch);
00066
00068
00072 HTTPResponse *readHeader(const HTTPRequest &request);
00073
00075
00078 void readHeaders(HTTPRequest *request);
00079
00080 base::String _addr;
00081 size_t _cchunk;
00082 bool _chunked;
00083 bool _chunkend;
00084 size_t _clength;
00085 size_t _cread;
00086 bool _creadeof;
00087 base::Random _rand;
00088 base::Socket *_sock;
00089 };
00090 }
00091
00092 #endif