// combine all URI fields in a single string, applying funcDecode to each // component which it may make sense to decode (i.e. "unescape") wxString wxURI::DoBuildURI(wxString (*funcDecode)(const wxString&)) const { wxString ret; if (HasScheme()) ret += m_scheme + ":"; if (HasServer()) { ret += "//"; if (HasUserInfo()) ret += funcDecode(m_userinfo) + "@"; if (m_hostType == wxURI_REGNAME) ret += funcDecode(m_server); else ret += m_server; if (HasPort()) ret += ":" + m_port; } ret += funcDecode(m_path); if (HasQuery()) ret += "?" + funcDecode(m_query); if (HasFragment()) ret += "#" + funcDecode(m_fragment); return ret; }
wxString wxURI::BuildUnescapedURI() const { wxString ret; if (HasScheme()) ret = ret + m_scheme + wxT(":"); if (HasServer()) { ret += wxT("//"); if (HasUserInfo()) ret = ret + wxURI::Unescape(m_userinfo) + wxT("@"); if (m_hostType == wxURI_REGNAME) ret += wxURI::Unescape(m_server); else ret += m_server; if (HasPort()) ret = ret + wxT(":") + m_port; } ret += wxURI::Unescape(m_path); if (HasQuery()) ret = ret + wxT("?") + wxURI::Unescape(m_query); if (HasFragment()) ret = ret + wxT("#") + wxURI::Unescape(m_fragment); return ret; }
wxString wxURI::BuildURI() const { wxString ret; if (HasScheme()) ret = ret + m_scheme + wxT(":"); if (HasServer()) { ret += wxT("//"); if (HasUserInfo()) ret = ret + m_userinfo + wxT("@"); ret += m_server; if (HasPort()) ret = ret + wxT(":") + m_port; } ret += m_path; if (HasQuery()) ret = ret + wxT("?") + m_query; if (HasFragment()) ret = ret + wxT("#") + m_fragment; return ret; }
const BString& BUrl::Authority() const { if (!fAuthorityValid) { fAuthority.Truncate(0); if (HasUserInfo()) fAuthority << UserInfo() << '@'; fAuthority << Host(); if (HasPort()) fAuthority << ':' << fPort; fAuthorityValid = true; } return fAuthority; }
bool wxURI::operator==(const wxURI& uri) const { if (HasScheme()) { if(m_scheme != uri.m_scheme) return false; } else if (uri.HasScheme()) return false; if (HasServer()) { if (HasUserInfo()) { if (m_userinfo != uri.m_userinfo) return false; } else if (uri.HasUserInfo()) return false; if (m_server != uri.m_server || m_hostType != uri.m_hostType) return false; if (HasPort()) { if(m_port != uri.m_port) return false; } else if (uri.HasPort()) return false; } else if (uri.HasServer()) return false; if (HasPath()) { if(m_path != uri.m_path) return false; } else if (uri.HasPath()) return false; if (HasQuery()) { if (m_query != uri.m_query) return false; } else if (uri.HasQuery()) return false; if (HasFragment()) { if (m_fragment != uri.m_fragment) return false; } else if (uri.HasFragment()) return false; return true; }
wxInputStream *wxURL::GetInputStream() { if (!m_protocol) { m_error = wxURL_NOPROTO; return NULL; } m_error = wxURL_NOERR; if (HasUserInfo()) { size_t dwPasswordPos = m_userinfo.find(':'); if (dwPasswordPos == wxString::npos) m_protocol->SetUser(m_userinfo); else { m_protocol->SetUser(m_userinfo(0, dwPasswordPos)); m_protocol->SetPassword(m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1)); } } #if wxUSE_URL_NATIVE // give the native implementation to return a better stream // such as the native WinINet functionality under MS-Windows if (m_nativeImp) { wxInputStream *rc; rc = m_nativeImp->GetInputStream(this); if (rc != 0) return rc; } // else use the standard behaviour #endif // wxUSE_URL_NATIVE #if wxUSE_SOCKETS wxIPV4address addr; // m_protoinfo is NULL when we use a proxy if (!m_useProxy && m_protoinfo->m_needhost) { if (!addr.Hostname(m_server)) { m_error = wxURL_NOHOST; return NULL; } addr.Service(m_port); if (!m_protocol->Connect(addr, true)) // Watcom needs the 2nd arg for some reason { m_error = wxURL_CONNERR; return NULL; } } #endif // When we use a proxy, we have to pass the whole URL to it. wxInputStream *the_i_stream; if (!m_useProxy) { the_i_stream = m_protocol->GetInputStream(m_url); } else { wxString fullPath = m_path; if (HasQuery()) fullPath += wxT("?") + m_query; if (HasFragment()) fullPath += wxT("#") + m_fragment; the_i_stream = m_protocol->GetInputStream(fullPath); } if (!the_i_stream) { m_error = wxURL_PROTOERR; return NULL; } return the_i_stream; }