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 
00036 #ifndef OW_HTTPUTILS_HPP_
00037 #define OW_HTTPUTILS_HPP_
00038 #include "OW_config.h"
00039 #include "OW_Array.hpp"
00040 #include "OW_Map.hpp"
00041 #include "OW_String.hpp"
00042 #include "OW_Base64FormatException.hpp"
00043 #include <iosfwd>
00044 
00045 namespace OW_NAMESPACE
00046 {
00047 
00048 typedef Map<String, String> HTTPHeaderMap;
00049 namespace HTTPUtils
00050 {
00051    extern OW_HTTP_API const char* const Header_BypassLocker; 
00052    extern OW_HTTP_API const char* const HeaderValue_true; 
00053    extern OW_HTTP_API const char* const HeaderValue_false; 
00063    OW_HTTP_API bool parseHeader(HTTPHeaderMap& map, Array<String>& array,
00064                            std::istream& istr);
00072    OW_HTTP_API bool parseHeader(HTTPHeaderMap& map, std::istream& istr);
00077    OW_HTTP_API String date( void );
00083    OW_HTTP_API String status2String(int code);
00088    OW_HTTP_API String getCounterStr();
00093    OW_HTTP_API String base64Decode(const String& arg);
00099    OW_HTTP_API Array<char> base64Decode(const char* src);
00104    OW_HTTP_API String base64Encode(const String& arg);
00110    OW_HTTP_API String base64Encode(const char* src);
00117    OW_HTTP_API String base64Encode(const UInt8* src, size_t len);
00118 #ifndef OW_DISABLE_DIGEST
00119    
00120    OW_HTTP_API void DigestCalcHA1(
00121                const String &sAlg,
00122                const String &sUserName,
00123                const String &sRealm,
00124                const String &sPassword,
00125                const String &sNonce,
00126                const String &sCNonce,
00127                String &sSessionKey
00128                  );
00129    
00130    OW_HTTP_API void DigestCalcResponse(
00131                const String &sHA1,        
00132                const String &sNonce,      
00133                const String &sNonceCount, 
00134                const String &sCNonce,     
00135                const String &sQop,        
00136                const String &sMethod,     
00137                const String &sDigestUri,  
00138                const String &sHEntity,    
00139                String &Response
00140                      );
00141 #endif
00142 
00148    OW_HTTP_API bool headerHasKey(const HTTPHeaderMap& headers,
00149       const String& key);
00156    OW_HTTP_API String getHeaderValue(const HTTPHeaderMap& headers,
00157       const String& key);
00164    OW_HTTP_API void addHeader(Array<String>& headers,
00165       const String& key, const String& value);
00174    OW_HTTP_API void eatEntity(std::istream& istr);
00182    OW_HTTP_API void decodeBasicCreds(const String& info, String& name,
00183       String& password);
00184    
00185    OW_HTTP_API bool buildMap(HTTPHeaderMap& map, std::istream& istr);
00192    OW_HTTP_API String escapeCharForURL(char c);
00193 
00194    OW_DECLARE_APIEXCEPTION(UnescapeCharForURL, OW_HTTP_API);
00204    OW_HTTP_API char unescapeCharForURL(const char* str);
00211    OW_HTTP_API String escapeForURL(const String& input);
00218    OW_HTTP_API String unescapeForURL(const String& input);
00219 };
00220 
00221 } 
00222 
00223 namespace OW_HTTPUtils = OW_NAMESPACE::HTTPUtils;
00224 
00225 #endif   // OW_HTTPUTILS_HPP_