Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages | Examples

url.h

Go to the documentation of this file.
00001 // Copyright (C) 2001-2002 Open Source Telecom Corporation. 00002 // 00003 // This program is free software; you can redistribute it and/or modify 00004 // it under the terms of the GNU General Public License as published by 00005 // the Free Software Foundation; either version 2 of the License, or 00006 // (at your option) any later version. 00007 // 00008 // This program is distributed in the hope that it will be useful, 00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00011 // GNU General Public License for more details. 00012 // 00013 // You should have received a copy of the GNU General Public License 00014 // along with this program; if not, write to the Free Software 00015 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00016 // 00017 // As a special exception to the GNU General Public License, permission is 00018 // granted for additional uses of the text contained in its release 00019 // of Common C++. 00020 // 00021 // The exception is that, if you link the Common C++ library with other files 00022 // to produce an executable, this does not by itself cause the 00023 // resulting executable to be covered by the GNU General Public License. 00024 // Your use of that executable is in no way restricted on account of 00025 // linking the Common C++ library code into it. 00026 // 00027 // This exception does not however invalidate any other reasons why 00028 // the executable file might be covered by the GNU General Public License. 00029 // 00030 // This exception applies only to the code released under the 00031 // name Common C++. If you copy code from other releases into a copy of 00032 // Common C++, as the General Public License permits, the exception does 00033 // not apply to the code that you add in this way. To avoid misleading 00034 // anyone as to the status of such modified files, you must delete 00035 // this exception notice from them. 00036 // 00037 // If you write modifications of your own for Common C++, it is your choice 00038 // whether to permit this exception to apply to your modifications. 00039 // If you do not wish that, delete this exception notice. 00040 00046 #ifndef CCXX_URL_H_ 00047 #define CCXX_URL_H_ 00048 00049 #ifndef CCXX_CONFIG_H_ 00050 #include <cc++/config.h> 00051 #endif 00052 00053 #ifndef CCXX_SOCKET_H_ 00054 #include <cc++/socket.h> 00055 #endif 00056 00057 #ifdef CCXX_NAMESPACES 00058 namespace ost { 00059 #endif 00060 00067 class __EXPORT URLStream : public TCPStream 00068 { 00069 public: 00073 typedef enum 00074 { 00075 errSuccess = 0, 00076 errUnreachable, 00077 errMissing, 00078 errDenied, 00079 errInvalid, 00080 errForbidden, 00081 errUnauthorized, 00082 errRelocated, 00083 errFailure, 00084 errTimeout, 00085 errInterface 00086 } Error; 00087 00091 typedef enum 00092 { 00093 authAnonymous = 0, 00094 authBasic 00095 } Authentication; 00096 00100 typedef enum 00101 { 00102 encodingBinary = 0, 00103 encodingChunked 00104 } Encoding; 00105 00109 typedef enum 00110 { 00111 methodHttpGet, 00112 methodHttpPut, 00113 methodHttpPost, 00114 methodFtpGet, 00115 methodFtpPut, 00116 methodFileGet, 00117 methodFilePut 00118 } Method; 00119 00123 typedef enum 00124 { 00125 protocolHttp1_0, 00126 protocolHttp1_1 00127 } Protocol; 00128 00129 private: 00130 const char *agent, *referer, *cookie, *pragma, *user, *password; 00131 const char *proxyUser, *proxyPasswd; 00132 const char *localif; 00133 IPV4Host proxyHost; 00134 #ifdef CCXX_IPV6 00135 IPV6Host v6proxyHost; 00136 #endif 00137 tpport_t proxyPort; 00138 Method urlmethod; 00139 Encoding encoding; 00140 Protocol protocol; 00141 Authentication auth; 00142 Authentication proxyAuth; 00143 timeout_t timeout; 00144 bool persistent; 00145 bool follow; 00146 unsigned chunk; 00147 00148 Error getHTTPHeaders(); 00149 URLStream(const URLStream& rhs); 00150 00151 protected: 00152 ost::String m_host, m_address; 00153 00154 Error sendHTTPHeader(const char *url, const char **vars, size_t bufsize); 00155 int underflow(void); 00156 00157 virtual int aRead(char *buffer, size_t len, timeout_t timer) 00158 #ifndef __MINGW32__ 00159 {return ::read((int)so, buffer, _IOLEN64 len);}; 00160 #else 00161 {return ::recv(so, buffer, _IOLEN64 len, 0); }; 00162 #endif 00163 00164 virtual int aWrite(char *buffer, size_t len, timeout_t timer) 00165 #ifndef __MINGW32__ 00166 {return ::write((int)so, buffer, _IOLEN64 len);}; 00167 #else 00168 {return ::send((int)so, buffer, _IOLEN64 len, 0); }; 00169 #endif 00170 00177 virtual void httpHeader(const char *header, const char *value) 00178 {return;}; 00179 00185 virtual char **extraHeader(void) 00186 {return NULL;}; 00187 00188 public: 00194 URLStream(Family family = IPV4, timeout_t to = 0); 00195 00203 URLStream &getline(char *buffer, size_t len); 00204 00212 Error get(const char *url, size_t buffer = 512); 00213 00222 Error get(size_t buffer = 512); 00223 00233 Error submit(const char *url, const char **vars, size_t buffer = 512); 00234 00243 Error post(const char *url, const char **vars, size_t buffer = 512); 00244 00252 Error head(const char *url, size_t buffer = 512); 00253 00257 void close(); 00258 00264 void setReferer(const char *str); 00265 00271 inline void setHost(const char *str) 00272 {m_host = str;}; 00273 00279 inline void setAddress(const char *str) 00280 {m_address = str;}; 00281 00287 inline void setCookie(const char *str) 00288 {cookie = str;}; 00289 00295 inline void setUser(const char *str) 00296 {user = str;}; 00297 00303 inline void setPassword(const char *str) 00304 {password = str;}; 00305 00312 void setAuthentication(Authentication a, const char *str = NULL); 00313 00319 inline void setProxyUser(const char *str) 00320 {proxyUser = str;}; 00321 00327 inline void setProxyPassword(const char *str) 00328 {proxyPasswd = str;}; 00329 00336 void setProxyAuthentication(Authentication a, const char *str = NULL); 00337 00343 inline void setPragma(const char *str) 00344 {pragma = str;}; 00345 00352 void setProxy(const char *host, tpport_t port); 00353 00359 inline void setAgent(const char *str) 00360 {agent = str;}; 00361 00367 inline Method getMethod(void) 00368 {return urlmethod;}; 00369 00376 inline void setTimeout(timeout_t to) 00377 {timeout = to;}; 00378 00385 inline void setFollow(bool enable) 00386 {follow = enable;}; 00387 00393 inline void setProtocol(Protocol pro) 00394 {protocol = pro;}; 00400 inline void setLocalInterface(const char *intf) 00401 {localif=intf;} 00402 }; 00403 00409 __EXPORT char* urlDecode(char *source, char *dest = NULL); 00410 00417 __EXPORT char* urlEncode(const char *source, char *dest, size_t size); 00418 00429 __EXPORT char* b64Decode(char *src, char *dest = NULL); 00430 00442 __EXPORT char* b64Encode(const char *source, char *dest, size_t size); 00443 00455 __EXPORT size_t b64Encode(const unsigned char *src, size_t srcsize, 00456 char *dst, size_t dstsize); 00457 00467 __EXPORT size_t b64Decode(const char *src, 00468 unsigned char *dst, size_t dstsize); 00469 00475 __EXPORT String b64Encode(const String& src); 00476 00484 __EXPORT String b64Decode(const String& src); 00485 00492 __EXPORT String b64Encode(const unsigned char *src, size_t srcsize); 00493 00503 __EXPORT size_t b64Decode(const String& src, 00504 unsigned char *dst, size_t dstsize); 00505 00506 00507 #ifdef CCXX_NAMESPACES 00508 } 00509 #endif 00510 00511 #endif 00512

Generated on Fri Jan 21 13:36:02 2005 for GNU CommonC++ by doxygen 1.3.8