X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/409a7ba772648e08302956e9bf37e04015d1bb0e..068b764a5a7cc2929b1fd8ea5643f43b5cbc8762:/src/common/uri.cpp diff --git a/src/common/uri.cpp b/src/common/uri.cpp index 0d181449c1..7fdac5d033 100644 --- a/src/common/uri.cpp +++ b/src/common/uri.cpp @@ -62,7 +62,7 @@ wxURI::wxURI(const wxString& uri) : m_hostType(wxURI_REGNAME), m_fields(0) Create(uri); } -wxURI::wxURI(const wxURI& uri) : m_hostType(wxURI_REGNAME), m_fields(0) +wxURI::wxURI(const wxURI& uri) : wxObject(), m_hostType(wxURI_REGNAME), m_fields(0) { Assign(uri); } @@ -78,8 +78,8 @@ wxURI::~wxURI() void wxURI::Clear() { - m_scheme = m_user = m_server = m_port = m_path = - m_query = m_fragment = wxT(""); + m_scheme = m_userinfo = m_server = m_port = m_path = + m_query = m_fragment = wxEmptyString; m_hostType = wxURI_REGNAME; @@ -115,9 +115,9 @@ const wxChar* wxURI::Create(const wxString& uri) wxChar wxURI::TranslateEscape(const wxChar* s) { - wxASSERT_MSG(IsHex(*s) && IsHex(*(s+1)), wxT("Invalid escape!")); + wxASSERT_MSG( IsHex(s[0]) && IsHex(s[1]), wxT("Invalid escape sequence!")); - return CharToHex(*s) * 0x10 + CharToHex(*++s); + return (wxChar)( CharToHex(s[0]) << 4 ) | CharToHex(s[1]); } wxString wxURI::Unescape(const wxString& uri) @@ -131,6 +131,8 @@ wxString wxURI::Unescape(const wxString& uri) new_uri += wxURI::TranslateEscape( &(uri.c_str()[i+1]) ); i += 2; } + else + new_uri += uri[i]; } return new_uri; @@ -156,6 +158,32 @@ bool wxURI::IsEscape(const wxChar*& uri) return false; } +// --------------------------------------------------------------------------- +// GetUser +// GetPassword +// +// Gets the username and password via the old URL method. +// --------------------------------------------------------------------------- +wxString wxURI::GetUser() const +{ + size_t dwPasswordPos = m_userinfo.find(':'); + + if (dwPasswordPos == wxString::npos) + dwPasswordPos = 0; + + return m_userinfo(0, dwPasswordPos); +} + +wxString wxURI::GetPassword() const +{ + size_t dwPasswordPos = m_userinfo.find(':'); + + if (dwPasswordPos == wxString::npos) + return wxT(""); + else + return m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1); +} + // --------------------------------------------------------------------------- // BuildURI // @@ -177,8 +205,8 @@ wxString wxURI::BuildURI() const { ret += wxT("//"); - if (HasUser()) - ret = ret + m_user + wxT("@"); + if (HasUserInfo()) + ret = ret + m_userinfo + wxT("@"); ret += m_server; @@ -208,8 +236,8 @@ wxString wxURI::BuildUnescapedURI() const { ret += wxT("//"); - if (HasUser()) - ret = ret + wxURI::Unescape(m_user) + wxT("@"); + if (HasUserInfo()) + ret = ret + wxURI::Unescape(m_userinfo) + wxT("@"); if (m_hostType == wxURI_REGNAME) ret += wxURI::Unescape(m_server); @@ -242,7 +270,7 @@ wxURI& wxURI::Assign(const wxURI& uri) //ref over components m_scheme = uri.m_scheme; - m_user = uri.m_user; + m_userinfo = uri.m_userinfo; m_server = uri.m_server; m_hostType = uri.m_hostType; m_port = uri.m_port; @@ -281,12 +309,12 @@ bool wxURI::operator == (const wxURI& uri) const if (HasServer()) { - if (HasUser()) + if (HasUserInfo()) { - if (m_user != uri.m_user) + if (m_userinfo != uri.m_userinfo) return false; } - else if (uri.HasUser()) + else if (uri.HasUserInfo()) return false; if (m_server != uri.m_server || @@ -347,7 +375,7 @@ bool wxURI::IsReference() const // Master URI parsing method. Just calls the individual parsing methods // // URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] -// URI-reference = URI / relative-URITestCase +// URI-reference = URI / relative // --------------------------------------------------------------------------- const wxChar* wxURI::Parse(const wxChar* uri) @@ -398,7 +426,7 @@ const wxChar* wxURI::ParseScheme(const wxChar* uri) } else //relative uri with relative path reference - m_scheme = wxT(""); + m_scheme = wxEmptyString; } // else //relative uri with _possible_ relative path reference @@ -413,7 +441,7 @@ const wxChar* wxURI::ParseAuthority(const wxChar* uri) { uri += 2; - uri = ParseUser(uri); + uri = ParseUserInfo(uri); uri = ParseServer(uri); return ParsePort(uri); } @@ -421,7 +449,7 @@ const wxChar* wxURI::ParseAuthority(const wxChar* uri) return uri; } -const wxChar* wxURI::ParseUser(const wxChar* uri) +const wxChar* wxURI::ParseUserInfo(const wxChar* uri) { wxASSERT(uri != NULL); @@ -434,20 +462,20 @@ const wxChar* wxURI::ParseUser(const wxChar* uri) { if(IsUnreserved(*uri) || IsEscape(uri) || IsSubDelim(*uri) || *uri == wxT(':')) - m_user += *uri++; + m_userinfo += *uri++; else - Escape(m_user, *uri++); + Escape(m_userinfo, *uri++); } if(*uri == wxT('@')) { //valid userinfo - m_fields |= wxURI_USER; + m_fields |= wxURI_USERINFO; uricopy = ++uri; } else - m_user = wxT(""); + m_userinfo = wxEmptyString; return uricopy; } @@ -464,26 +492,28 @@ const wxChar* wxURI::ParseServer(const wxChar* uri) // IP-literal = "[" ( IPv6address / IPvFuture ) "]" if (*uri == wxT('[')) { - if (ParseIPv6address(++uri) && *uri == wxT(']')) + ++uri; //some compilers don't support *&ing a ++* + if (ParseIPv6address(uri) && *uri == wxT(']')) { ++uri; m_hostType = wxURI_IPV6ADDRESS; wxStringBufferLength theBuffer(m_server, uri - uricopy); - wxMemcpy(theBuffer, uricopy, uri-uricopy); + wxTmemcpy(theBuffer, uricopy, uri-uricopy); theBuffer.SetLength(uri-uricopy); } else { uri = uricopy; - if (ParseIPvFuture(++uri) && *uri == wxT(']')) + ++uri; //some compilers don't support *&ing a ++* + if (ParseIPvFuture(uri) && *uri == wxT(']')) { ++uri; m_hostType = wxURI_IPVFUTURE; wxStringBufferLength theBuffer(m_server, uri - uricopy); - wxMemcpy(theBuffer, uricopy, uri-uricopy); + wxTmemcpy(theBuffer, uricopy, uri-uricopy); theBuffer.SetLength(uri-uricopy); } else @@ -497,7 +527,7 @@ const wxChar* wxURI::ParseServer(const wxChar* uri) m_hostType = wxURI_IPV4ADDRESS; wxStringBufferLength theBuffer(m_server, uri - uricopy); - wxMemcpy(theBuffer, uricopy, uri-uricopy); + wxTmemcpy(theBuffer, uricopy, uri-uricopy); theBuffer.SetLength(uri-uricopy); } else @@ -591,7 +621,7 @@ const wxChar* wxURI::ParsePath(const wxChar* uri, bool bReference, bool bNormali { wxStringBufferLength theBuffer(m_path, m_path.length() + 1); #if wxUSE_STL - wxMemcpy(theBuffer, m_path.c_str(), m_path.length()+1); + wxTmemcpy(theBuffer, m_path.c_str(), m_path.length()+1); #endif Normalize(theBuffer, true); theBuffer.SetLength(wxStrlen(theBuffer)); @@ -631,7 +661,7 @@ const wxChar* wxURI::ParsePath(const wxChar* uri, bool bReference, bool bNormali { wxStringBufferLength theBuffer(m_path, m_path.length() + 1); #if wxUSE_STL - wxMemcpy(theBuffer, m_path.c_str(), m_path.length()+1); + wxTmemcpy(theBuffer, m_path.c_str(), m_path.length()+1); #endif Normalize(theBuffer); theBuffer.SetLength(wxStrlen(theBuffer)); @@ -734,7 +764,7 @@ void wxURI::Resolve(const wxURI& base, int flags) return; } - //No sheme - inherit + //No scheme - inherit m_scheme = base.m_scheme; m_fields |= wxURI_SCHEME; @@ -750,10 +780,10 @@ void wxURI::Resolve(const wxURI& base, int flags) } //No authority - inherit - if (base.HasUser()) + if (base.HasUserInfo()) { - m_user = base.m_user; - m_fields |= wxURI_USER; + m_userinfo = base.m_userinfo; + m_fields |= wxURI_USERINFO; } m_server = base.m_server; @@ -797,7 +827,7 @@ void wxURI::Resolve(const wxURI& base, int flags) // T.query = R.query; if (m_path[0u] != wxT('/')) { - //Marge paths + //Merge paths const wxChar* op = m_path.c_str(); const wxChar* bp = base.m_path.c_str() + base.m_path.Length(); @@ -1152,9 +1182,9 @@ bool wxURI::ParseIPvFuture(const wxChar*& uri) //static wxChar wxURI::CharToHex(const wxChar& c) { - if ((c >= wxT('A')) && (c <= wxT('Z'))) return c - wxT('A') + 0x0A; - if ((c >= wxT('a')) && (c <= wxT('z'))) return c - wxT('a') + 0x0a; - if ((c >= wxT('0')) && (c <= wxT('9'))) return c - wxT('0') + 0x00; + if ((c >= wxT('A')) && (c <= wxT('Z'))) return wxChar(c - wxT('A') + 0x0A); + if ((c >= wxT('a')) && (c <= wxT('z'))) return wxChar(c - wxT('a') + 0x0a); + if ((c >= wxT('0')) && (c <= wxT('9'))) return wxChar(c - wxT('0') + 0x00); return 0; } @@ -1222,7 +1252,7 @@ bool wxURI::IsDigit(const wxChar& c) // --------------------------------------------------------------------------- // -// wxURL Compatability +// wxURL Compatibility // // --------------------------------------------------------------------------- @@ -1232,6 +1262,21 @@ bool wxURI::IsDigit(const wxChar& c) #include "wx/url.h" +wxString wxURL::GetProtocolName() const +{ + return m_scheme; +} + +wxString wxURL::GetHostName() const +{ + return m_server; +} + +wxString wxURL::GetPath() const +{ + return m_path; +} + //Note that this old code really doesn't convert to a URI that well and looks //more like a dirty hack than anything else...