X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4ada568223b79c8a5769cc351c36a8e2ccd7841..d78b3d64143f165857922e1e695ba4164d61869f:/src/common/url.cpp diff --git a/src/common/url.cpp b/src/common/url.cpp index 39ad2b6d93..3c8aebe2dc 100644 --- a/src/common/url.cpp +++ b/src/common/url.cpp @@ -12,6 +12,19 @@ #ifdef __GNUG__ #pragma implementation "url.h" #endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#if wxUSE_SOCKETS + +#ifndef WX_PRECOMP +#endif + #include #include @@ -23,10 +36,6 @@ // wxSocket header #include "wx/url.h" -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - #if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxProtoInfo, wxObject) IMPLEMENT_CLASS(wxURL, wxObject) @@ -34,29 +43,28 @@ IMPLEMENT_CLASS(wxURL, wxObject) // Protocols list wxProtoInfo *wxURL::g_protocols = NULL; -wxHTTP wxURL::g_proxy; +wxHTTP *wxURL::g_proxy; -///////////////////////////////////////////////////////////////// -// wxURL //////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////// +// -------------------------------------------------------------- +// wxURL +// -------------------------------------------------------------- -/* - * -------------------------------------------------------------- - * --------- wxURL CONSTRUCTOR DESTRUCTOR ----------------------- - * -------------------------------------------------------------- - */ +// -------------------------------------------------------------- +// --------- wxURL CONSTRUCTOR DESTRUCTOR ----------------------- +// -------------------------------------------------------------- wxURL::wxURL(const wxString& url) { m_protocol = NULL; - if (g_proxy.IsConnected()) { - m_protocol = &g_proxy; + if (g_proxy->IsConnected()) { + m_protocol = g_proxy; m_protoname = "proxy"; m_path = url; return; } m_url = url; m_error = wxURL_NOERR; + ParseURL(); } bool wxURL::ParseURL() @@ -99,7 +107,7 @@ bool wxURL::ParseURL() void wxURL::CleanData() { - if (m_protoname != "proxy") + if (m_protoname != _T("proxy")) delete m_protocol; } @@ -108,11 +116,10 @@ wxURL::~wxURL() CleanData(); } -/* - * -------------------------------------------------------------- - * --------- wxURL urls decoders -------------------------------- - * -------------------------------------------------------------- - */ +// -------------------------------------------------------------- +// --------- wxURL urls decoders -------------------------------- +// -------------------------------------------------------------- + bool wxURL::PrepProto(wxString& url) { int pos; @@ -131,28 +138,52 @@ bool wxURL::PrepProto(wxString& url) bool wxURL::PrepHost(wxString& url) { + wxString temp_url; int pos, pos2; - if ((url[0UL] != '/') || (url[1UL] != '/')) + if ((url.GetChar(0) != '/') || (url.GetChar(1) != '/')) return FALSE; url = url(2, url.Length()); pos = url.Find('/'); if (pos == -1) + pos = url.Length(); + + if (pos == 0) return FALSE; - pos2 = url.Find(':'); + temp_url = url(0, pos); + url = url(url.Find('/'), url.Length()); + + // Retrieve service number + pos2 = temp_url.Find(':', TRUE); if (pos2 != -1 && pos2 < pos) { - m_servname = url(pos2, pos); + m_servname = temp_url(pos2+1, pos); if (!m_servname.IsNumber()) return FALSE; - pos2 = pos; + temp_url = temp_url(0, pos2); } - m_hostname = url(0, pos); + // Retrieve user and password. + pos2 = temp_url.Find('@'); + // Even if pos2 equals -1, this code is right. + m_hostname = temp_url(pos2+1, temp_url.Length()); - url = url(url.Find('/'), url.Length()); + m_user = ""; + m_password = ""; + + if (pos2 == -1) + return TRUE; + + temp_url = temp_url(0, pos2); + pos2 = temp_url.Find(':'); + + if (pos2 == -1) + return FALSE; + + m_user = temp_url(0, pos2); + m_password = temp_url(pos2+1, url.Length()); return TRUE; } @@ -185,11 +216,10 @@ bool wxURL::FetchProtocol() return FALSE; } -/* - * -------------------------------------------------------------- - * --------- wxURL get ------------------------------------------ - * -------------------------------------------------------------- - */ +// -------------------------------------------------------------- +// --------- wxURL get ------------------------------------------ +// -------------------------------------------------------------- + wxInputStream *wxURL::GetInputStream(void) { wxIPV4address addr; @@ -205,6 +235,11 @@ wxInputStream *wxURL::GetInputStream(void) } m_error = wxURL_NOERR; + if (m_user != _T("")) { + m_protocol->SetUser(m_user); + m_protocol->SetPassword(m_password); + } + if (m_protoinfo->m_needhost) { if (!addr.Hostname(m_hostname)) { m_error = wxURL_NOHOST; @@ -213,7 +248,8 @@ wxInputStream *wxURL::GetInputStream(void) addr.Service(m_servname); - if (!m_protocol->Connect(addr)) { + if (!m_protocol->Connect(addr, TRUE)) // Watcom needs the 2nd arg for some reason + { m_error = wxURL_CONNERR; return NULL; } @@ -230,7 +266,7 @@ wxInputStream *wxURL::GetInputStream(void) void wxURL::SetDefaultProxy(const wxString& url_proxy) { - g_proxy.Close(); + g_proxy->Close(); if (url_proxy.IsNull()) return; @@ -244,7 +280,7 @@ void wxURL::SetDefaultProxy(const wxString& url_proxy) addr.Hostname(hostname); addr.Service(port); - g_proxy.Connect(addr); + g_proxy->Connect(addr, TRUE); // Watcom needs the 2nd arg for some reason } void wxURL::SetProxy(const wxString& url_proxy) @@ -269,9 +305,32 @@ void wxURL::SetProxy(const wxString& url_proxy) addr.Hostname(hostname); addr.Service(port); - m_proxy.Connect(addr); + m_proxy.Connect(addr, TRUE); // Watcom needs the 2nd arg for some reason m_protocol = &m_proxy; m_protoname = "proxy"; m_path = url_proxy; } + +wxString wxURL::ConvertToValidURI(const wxString& uri) +{ + wxString out_str; + wxString hexa_code; + size_t i; + + for (i=0;i