00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef __CCXX_URL_H__
00042 #define __CCXX_URL_H__
00043
00044 #ifndef __CCXX_SOCKET_H__
00045 #include <socket.h>
00046 #endif
00047
00048 typedef enum
00049 {
00050 URL_SUCCESS = 0,
00051 URL_UNREACHABLE,
00052 URL_MISSING,
00053 URL_DENIED,
00054 URL_INVALID,
00055 URL_FORBIDDEN,
00056 URL_UNAUTHORIZED,
00057 URL_FAILURE
00058 } urlerror_t;
00059
00060 typedef enum
00061 {
00062 URL_ANONYMOUS_AUTH = 0,
00063 URL_BASIC_AUTH
00064 } urlauth_t;
00065
00066 typedef enum
00067 {
00068 URL_BINARY_ENCODING = 0,
00069 URL_CHUNKED_ENCODING
00070 } urlencoding_t;
00071
00072 typedef enum
00073 {
00074 HTTP_GET_METHOD,
00075 HTTP_PUT_METHOD,
00076 HTTP_POST_METHOD,
00077 FTP_GET_METHOD,
00078 FTP_PUT_METHOD,
00079 FILE_GET_METHOD,
00080 FILE_PUT_METHOD
00081 } urlmethod_t;
00082
00083 class __EXPORT URLStream;
00084
00091 class URLStream : public TCPStream
00092 {
00093 private:
00094 const char *agent, *referer, *cookie, *pragma, *user, *password;
00095 InetHostAddress proxyHost, prevHost;
00096 tpport_t proxyPort, prevPort;
00097 InetHostAddress refhost;
00098 urlmethod_t urlmethod;
00099 urlencoding_t encoding;
00100 urlauth_t auth;
00101 timeout_t timeout;
00102 bool persistent;
00103 unsigned chunk;
00104 char authbuf[128];
00105
00106 urlerror_t getHTTPHeaders(char *buffer, unsigned bufsize);
00107
00108 protected:
00109 urlerror_t sendHTTPHeader(const char *path, const char **vars, int bufsize);
00110 int underflow(void);
00111
00118 virtual void httpHeader(const char *header, const char *value)
00119 {return;};
00120
00121 public:
00125 URLStream();
00126
00134 URLStream &getline(char *buffer, size_t len);
00135
00143 urlerror_t Get(const char *path, int buffer = 512);
00144
00154 urlerror_t Submit(const char *path, const char **vars, int buffer = 512);
00155
00164 urlerror_t Post(const char *path, const char **vars, int buffer = 512);
00165
00173 urlerror_t Head(const char *path, int buffer = 512);
00174
00178 void Close();
00179
00185 void setReferer(const char *str);
00186
00192 inline void setCookie(const char *str)
00193 {cookie = str;};
00194
00200 inline void setUser(const char *str)
00201 {user = str;};
00202
00208 inline void setPassword(const char *str)
00209 {password = str;};
00210
00216 void setAuthentication(urlauth_t a, const char *str = NULL);
00217
00223 inline void setPragma(const char *str)
00224 {pragma = str;};
00225
00232 void setProxy(const char *host, tpport_t port);
00233
00239 inline void setAgent(const char *str)
00240 {agent = str;};
00241
00247 inline urlmethod_t getMethod(void)
00248 {return urlmethod;};
00249
00256 inline void setTimeout(timeout_t to)
00257 {timeout = to;};
00258 };
00259
00260 extern __EXPORT char *urldecode(char *source, char *dest = NULL);
00261 extern __EXPORT char *urlencode(const char *source, char *dest, unsigned size);
00262
00263 #ifdef __CCXX_NAMESPACE_H__
00264 #undef __CCXX_NAMESPACE_H__
00265 #include <cc++/namespace.h>
00266 #endif
00267
00268 #endif
00269