00001
00004
00005
00006
00007
00008 #ifndef _cel_http_h_
00009 #define _cel_http_h_
00010
00011 #include "cel_referable.h"
00012 #include "cel_iostream.h"
00013 #include "cel_storage.h"
00014 #include "cel_string.h"
00015 #include "cel_credprovider.h"
00016 #include "cel_storagecache.h"
00017
00018 namespace Celartem
00019 {
00020 class HttpConnection;
00021 class HttpRequestStream;
00022 class HttpResponseStream;
00023
00024
00031 struct HttpHeaderEntry
00032 {
00033 String name;
00034 String value;
00035 };
00036
00037
00043 typedef AdvCachedStorage HttpStorage;
00044
00045
00046
00050 enum ProxyType
00051 {
00052 proxyAuto = 0,
00053 proxyManual = 1,
00054 proxyDirect = 2
00055 };
00056
00057
00101 class HttpManager : public Referable
00102 {
00103 public:
00122 virtual AutoPtr<HttpConnection> createConnection(
00123 const String& inHostName,
00124 u16 inPort = 80) = 0;
00125
00150 virtual AutoPtr<HttpConnection> createSecureConnection(
00151 const String& inHostName,
00152 u16 inPort = 443,
00153 bool inVerifyServer = false) = 0;
00154
00196 virtual AutoPtr<HttpStorage> createHttpStorage(
00197 const String& inUrl,
00198 bool inVerifyServer = false,
00199 DuplicateStreamCallback inLoadCallback = NULL,
00200 void* inContext = NULL);
00201
00213 virtual void setProxy(
00214 ProxyType inType,
00215 const String& inHostName = "",
00216 u16 inPort = 0) = 0;
00217
00223 virtual CredentialProvider* getCredentialProvider() = 0;
00224
00241 static AutoPtr<HttpManager> create(
00242 const String& inUserAgentName = NullString,
00243 CredentialProvider *inCredentialProvider = NULL);
00244
00250 static String getDefaultUserAgentName();
00251
00258 static String getUserAgentPlatformSpec();
00259 };
00260
00261
00269 class HttpConnection : public Referable
00270 {
00271 public:
00301 virtual AutoPtr<HttpRequestStream> createRequestStream(
00302 const String& inMethod,
00303 const String& inRequest,
00304 bool inReqIsEscaped = false,
00305 CredentialProvider* inCredProv = NULL) = 0;
00306
00314 virtual AutoPtr<HttpManager> getHttpManager() = 0;
00315
00321 virtual String getHostName() const = 0;
00322
00328 virtual u16 getPort() const = 0;
00329
00336 virtual bool isOnSSL() const = 0;
00337 };
00338
00339
00351
00352 class HttpRequestStream : public Stream
00353 {
00354 public:
00360 virtual void addRequestHeader(
00361 const String& inHeader) = 0;
00362
00379 virtual AutoPtr<HttpResponseStream> post(
00380 const void *inAdditionalData = NULL, size_t inSize = 0) = 0;
00381
00387 virtual String getHostName() const = 0;
00388
00394 virtual u16 getPort() const = 0;
00395
00402 virtual bool isOnSSL() const = 0;
00403
00410 virtual String getUrl() const = 0;
00411 };
00412
00413
00420 class HttpResponseStream : public Stream
00421 {
00422 public:
00429 virtual unsigned int getStatusCode() const = 0;
00430
00436 virtual size_t getHeaderCount() const = 0;
00437
00445 virtual void getNthHeader(
00446 HttpHeaderEntry& outHeader, size_t inIndex) const = 0;
00447
00455 virtual String getHeader(const String& inHeaderName) const = 0;
00456
00463 virtual uint64_t getContentLength() const = 0;
00464 };
00465
00466 }
00467
00468 #endif // _cel_http_h_