#ifndef __DCL_URI_H__ #define __DCL_URI_H__ #ifndef __DCL_EXCEPTION_H__ #include <dcl/core/Exception.h> #endif #ifndef __DCL_STRING_H__ #include <dcl/core/String.h> #endif #ifndef __DCL_COLLECTION_H__ #include <dcl/core/Collection.h> #endif __DCL_BEGIN_NAMESPACE /* References http://www.faqs.org/rfcs/rfc2396.html RFC 2396 - Uniform Resource Identifiers (URI) : Generic Syntax */ class DCLNAPI URLEncoder { public: static String encode(const String& str); }; class DCLNAPI URLDecoder { public: static String decode(const String& str); }; class URISyntaxException; class DCLNAPI URI : public Object { DECLARE_CLASSINFO(URI) public: URI(const char* pszURI) __DCL_THROWS1(URISyntaxException*); URI(const char* pszScheme, const char* pszSchemeSpecificPart, const char* pszFragment ) __DCL_THROWS1(URISyntaxException*); URI(const char* pszScheme, const char* pszUserInfo, const char* pszHost, int nPort, const char* pszPath, const char* pszQuery, const char* pszFragment ) __DCL_THROWS1(URISyntaxException*); URI(const char* pszScheme, const char* pszHost, const char* pszPath, const char* pszFragment ) __DCL_THROWS1(URISyntaxException*); URI(const char* pszScheme, const char* pszAuthority, const char* pszPath, const char* pszQuery, const char* pszFragment ) __DCL_THROWS1(URISyntaxException*); const String& scheme() const; const String& schemeSpecificPart() const; const String& authority() const; const String& userInfo() const; const String& host() const; int port() const; const String& path() const; const String& query() const; const String& fragment() const; String toString() const; bool isAbsolute() const; protected: String m_strScheme; String m_strSchemeSpecificPart; String m_strAuthority; String m_strUserInfo; String m_strHost; int m_nPort; String m_strPath; String m_strQuery; String m_strFragment; String m_strURI; void parse(const char* pszURI) __DCL_THROWS1(URISyntaxException*); void assign( const char* pszScheme, const char* pszUserInfo, const char* pszHost, int nPort, const char* pszPath, const char* pszQuery, const char* pszFragment ) __DCL_THROWS1(URISyntaxException*); }; class DCLNAPI URISyntaxException : public Exception { DECLARE_CLASSINFO(URISyntaxException) public: URISyntaxException(const String& strReason, const String& strSource); virtual String getMessage() const; protected: String m_strMessage; }; inline const String& URI::scheme() const { return m_strScheme; } inline const String& URI::schemeSpecificPart() const { return m_strSchemeSpecificPart; } inline const String& URI::authority() const { return m_strAuthority; } inline const String& URI::userInfo() const { return m_strUserInfo; } inline const String& URI::host() const { return m_strHost; } inline int URI::port() const { return m_nPort; } inline const String& URI::path() const { return m_strPath; } inline const String& URI::query() const { return m_strQuery; } inline const String& URI::fragment() const { return m_strFragment; } inline String URI::toString() const { return m_strURI; } inline bool URI::isAbsolute() const { return !m_strScheme.isEmpty(); } __DCL_END_NAMESPACE #endif // __DCL_URI_H__