1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: uri.h 3 // Purpose: wxURI - Class for parsing URIs 4 // Author: Ryan Norton 5 // Modified By: 6 // Created: 07/01/2004 7 // RCS-ID: $Id: uri.h 35650 2005-09-23 12:56:45Z MR $ 8 // Copyright: (c) Ryan Norton 9 // Licence: wxWindows Licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_URI_H_ 13 #define _WX_URI_H_ 14 15 #include "wx/defs.h" 16 #include "wx/object.h" 17 #include "wx/string.h" 18 19 // Host Type that the server component can be 20 enum wxURIHostType 21 { 22 wxURI_REGNAME, // Host is a normal register name (www.mysite.com etc.) 23 wxURI_IPV4ADDRESS, // Host is a version 4 ip address (192.168.1.100) 24 wxURI_IPV6ADDRESS, // Host is a version 6 ip address [aa:aa:aa:aa::aa:aa]:5050 25 wxURI_IPVFUTURE // Host is a future ip address (wxURI is unsure what kind) 26 }; 27 28 // Component Flags 29 enum wxURIFieldType 30 { 31 wxURI_SCHEME = 1, 32 wxURI_USERINFO = 2, 33 wxURI_SERVER = 4, 34 wxURI_PORT = 8, 35 wxURI_PATH = 16, 36 wxURI_QUERY = 32, 37 wxURI_FRAGMENT = 64 38 }; 39 40 // Miscellaneous other flags 41 enum wxURIFlags 42 { 43 wxURI_STRICT = 1 44 }; 45 46 47 // Generic class for parsing URIs. 48 // 49 // See RFC 3986 50 class WXDLLIMPEXP_BASE wxURI : public wxObject 51 { 52 public: 53 wxURI(); 54 wxURI(const wxString& uri); 55 wxURI(const wxURI& uri); 56 57 virtual ~wxURI(); 58 59 const wxChar* Create(const wxString& uri); 60 HasScheme()61 bool HasScheme() const { return (m_fields & wxURI_SCHEME) == wxURI_SCHEME; } HasUserInfo()62 bool HasUserInfo() const { return (m_fields & wxURI_USERINFO) == wxURI_USERINFO; } HasServer()63 bool HasServer() const { return (m_fields & wxURI_SERVER) == wxURI_SERVER; } HasPort()64 bool HasPort() const { return (m_fields & wxURI_PORT) == wxURI_PORT; } HasPath()65 bool HasPath() const { return (m_fields & wxURI_PATH) == wxURI_PATH; } HasQuery()66 bool HasQuery() const { return (m_fields & wxURI_QUERY) == wxURI_QUERY; } HasFragment()67 bool HasFragment() const { return (m_fields & wxURI_FRAGMENT) == wxURI_FRAGMENT; } 68 GetScheme()69 const wxString& GetScheme() const { return m_scheme; } GetPath()70 const wxString& GetPath() const { return m_path; } GetQuery()71 const wxString& GetQuery() const { return m_query; } GetFragment()72 const wxString& GetFragment() const { return m_fragment; } GetPort()73 const wxString& GetPort() const { return m_port; } GetUserInfo()74 const wxString& GetUserInfo() const { return m_userinfo; } GetServer()75 const wxString& GetServer() const { return m_server; } GetHostType()76 const wxURIHostType& GetHostType() const { return m_hostType; } 77 78 //Note that the following two get functions are explicitly depreciated by RFC 2396 79 wxString GetUser() const; 80 wxString GetPassword() const; 81 82 wxString BuildURI() const; 83 wxString BuildUnescapedURI() const; 84 85 void Resolve(const wxURI& base, int flags = wxURI_STRICT); 86 bool IsReference() const; 87 88 wxURI& operator = (const wxURI& uri); 89 wxURI& operator = (const wxString& string); 90 bool operator == (const wxURI& uri) const; 91 92 static wxString Unescape (const wxString& szEscapedURI); 93 94 protected: 95 wxURI& Assign(const wxURI& uri); 96 97 void Clear(); 98 99 const wxChar* Parse (const wxChar* uri); 100 const wxChar* ParseAuthority (const wxChar* uri); 101 const wxChar* ParseScheme (const wxChar* uri); 102 const wxChar* ParseUserInfo (const wxChar* uri); 103 const wxChar* ParseServer (const wxChar* uri); 104 const wxChar* ParsePort (const wxChar* uri); 105 const wxChar* ParsePath (const wxChar* uri, 106 bool bReference = false, 107 bool bNormalize = true); 108 const wxChar* ParseQuery (const wxChar* uri); 109 const wxChar* ParseFragment (const wxChar* uri); 110 111 112 static bool ParseH16(const wxChar*& uri); 113 static bool ParseIPv4address(const wxChar*& uri); 114 static bool ParseIPv6address(const wxChar*& uri); 115 static bool ParseIPvFuture(const wxChar*& uri); 116 117 static void Normalize(wxChar* uri, bool bIgnoreLeads = false); 118 static void UpTree(const wxChar* uristart, const wxChar*& uri); 119 120 static wxChar TranslateEscape(const wxChar* s); 121 static void Escape (wxString& s, const wxChar& c); 122 static bool IsEscape(const wxChar*& uri); 123 124 static wxChar CharToHex(const wxChar& c); 125 126 static bool IsUnreserved (const wxChar& c); 127 static bool IsReserved (const wxChar& c); 128 static bool IsGenDelim (const wxChar& c); 129 static bool IsSubDelim (const wxChar& c); 130 static bool IsHex(const wxChar& c); 131 static bool IsAlpha(const wxChar& c); 132 static bool IsDigit(const wxChar& c); 133 134 wxString m_scheme; 135 wxString m_path; 136 wxString m_query; 137 wxString m_fragment; 138 139 wxString m_userinfo; 140 wxString m_server; 141 wxString m_port; 142 143 wxURIHostType m_hostType; 144 145 size_t m_fields; 146 147 DECLARE_DYNAMIC_CLASS(wxURI) 148 }; 149 150 #endif // _WX_URI_H_ 151 152