git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34689 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -7,7 +7,8 @@ wxWidgets Change Log - For more verbose changes, see the manual
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
All:
 | 
					All:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Fixed wxScopeGuard to work with VC++, documented it
 | 
					- Fixed wxScopeGuard to work with VC++, documented it.
 | 
				
			||||||
 | 
					- Fixed proxy handling in wxURL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxMSW:
 | 
					wxMSW:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,6 +18,7 @@ wxUniv:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Window creation now honours wxVSCROLL.
 | 
					- Window creation now honours wxVSCROLL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2.6.1
 | 
					2.6.1
 | 
				
			||||||
-----
 | 
					-----
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -127,53 +127,53 @@ wxURL& wxURL::operator = (const wxString& url)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool wxURL::ParseURL()
 | 
					bool wxURL::ParseURL()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  // If the URL was already parsed (m_protocol != NULL), pass this section.
 | 
					    // If the URL was already parsed (m_protocol != NULL), pass this section.
 | 
				
			||||||
  if (!m_protocol)
 | 
					    if (!m_protocol)
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    // Clean up
 | 
					 | 
				
			||||||
    CleanData();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Make sure we have a protocol/scheme
 | 
					 | 
				
			||||||
    if (!HasScheme())
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      m_error = wxURL_SNTXERR;
 | 
					        // Clean up
 | 
				
			||||||
      return false;
 | 
					        CleanData();
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Find and create the protocol object
 | 
					        // Make sure we have a protocol/scheme
 | 
				
			||||||
    if (!FetchProtocol())
 | 
					        if (!HasScheme())
 | 
				
			||||||
    {
 | 
					        {
 | 
				
			||||||
      m_error = wxURL_NOPROTO;
 | 
					            m_error = wxURL_SNTXERR;
 | 
				
			||||||
      return false;
 | 
					            return false;
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Do we need a host name ?
 | 
					        // Find and create the protocol object
 | 
				
			||||||
    if (m_protoinfo->m_needhost)
 | 
					        if (!FetchProtocol())
 | 
				
			||||||
    {
 | 
					        {
 | 
				
			||||||
      //  Make sure we have one, then
 | 
					            m_error = wxURL_NOPROTO;
 | 
				
			||||||
      if (!HasServer())
 | 
					            return false;
 | 
				
			||||||
      {
 | 
					        }
 | 
				
			||||||
        m_error = wxURL_SNTXERR;
 | 
					
 | 
				
			||||||
        return false;
 | 
					        // Do we need a host name ?
 | 
				
			||||||
      }
 | 
					        if (m_protoinfo->m_needhost)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //  Make sure we have one, then
 | 
				
			||||||
 | 
					            if (!HasServer())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_error = wxURL_SNTXERR;
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_PROTOCOL_HTTP
 | 
					#if wxUSE_PROTOCOL_HTTP
 | 
				
			||||||
  if (m_useProxy)
 | 
					    if (m_useProxy)
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    // Third, we rebuild the URL.
 | 
					        // Third, we rebuild the URL.
 | 
				
			||||||
    m_url = m_scheme + wxT(":");
 | 
					        m_url = m_scheme + wxT(":");
 | 
				
			||||||
    if (m_protoinfo->m_needhost)
 | 
					        if (m_protoinfo->m_needhost)
 | 
				
			||||||
      m_url = m_url + wxT("//") + m_server;
 | 
					            m_url = m_url + wxT("//") + m_server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // We initialize specific variables.
 | 
					        // We initialize specific variables.
 | 
				
			||||||
    m_protocol = m_proxy; // FIXME: we should clone the protocol
 | 
					        m_protocol = m_proxy; // FIXME: we should clone the protocol
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
#endif // wxUSE_PROTOCOL_HTTP
 | 
					#endif // wxUSE_PROTOCOL_HTTP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_error = wxURL_NOERR;
 | 
					    m_error = wxURL_NOERR;
 | 
				
			||||||
  return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// --------------------------------------------------------------
 | 
					// --------------------------------------------------------------
 | 
				
			||||||
@@ -183,9 +183,9 @@ bool wxURL::ParseURL()
 | 
				
			|||||||
void wxURL::CleanData()
 | 
					void wxURL::CleanData()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if wxUSE_PROTOCOL_HTTP
 | 
					#if wxUSE_PROTOCOL_HTTP
 | 
				
			||||||
  if (!m_useProxy)
 | 
					    if (!m_useProxy)
 | 
				
			||||||
#endif // wxUSE_PROTOCOL_HTTP
 | 
					#endif // wxUSE_PROTOCOL_HTTP
 | 
				
			||||||
    delete m_protocol;
 | 
					        delete m_protocol;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxURL::~wxURL()
 | 
					wxURL::~wxURL()
 | 
				
			||||||
@@ -206,21 +206,21 @@ wxURL::~wxURL()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool wxURL::FetchProtocol()
 | 
					bool wxURL::FetchProtocol()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxProtoInfo *info = ms_protocols;
 | 
					    wxProtoInfo *info = ms_protocols;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  while (info)
 | 
					    while (info)
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    if (m_scheme == info->m_protoname)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (m_port.IsNull())
 | 
					        if (m_scheme == info->m_protoname)
 | 
				
			||||||
            m_port = info->m_servname;
 | 
					        {
 | 
				
			||||||
        m_protoinfo = info;
 | 
					            if (m_port.IsNull())
 | 
				
			||||||
        m_protocol = (wxProtocol *)m_protoinfo->m_cinfo->CreateObject();
 | 
					                m_port = info->m_servname;
 | 
				
			||||||
        return true;
 | 
					            m_protoinfo = info;
 | 
				
			||||||
 | 
					            m_protocol = (wxProtocol *)m_protoinfo->m_cinfo->CreateObject();
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        info = info->next;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    info = info->next;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return false;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// --------------------------------------------------------------
 | 
					// --------------------------------------------------------------
 | 
				
			||||||
@@ -229,125 +229,124 @@ bool wxURL::FetchProtocol()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wxInputStream *wxURL::GetInputStream()
 | 
					wxInputStream *wxURL::GetInputStream()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (!m_protocol)
 | 
					    if (!m_protocol)
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    m_error = wxURL_NOPROTO;
 | 
					        m_error = wxURL_NOPROTO;
 | 
				
			||||||
    return NULL;
 | 
					        return NULL;
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  m_error = wxURL_NOERR;
 | 
					    m_error = wxURL_NOERR;
 | 
				
			||||||
  if (HasUserInfo())
 | 
					    if (HasUserInfo())
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
      size_t dwPasswordPos = m_userinfo.find(':');
 | 
					        size_t dwPasswordPos = m_userinfo.find(':');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (dwPasswordPos == wxString::npos)
 | 
					        if (dwPasswordPos == wxString::npos)
 | 
				
			||||||
          m_protocol->SetUser(m_userinfo);
 | 
					            m_protocol->SetUser(m_userinfo);
 | 
				
			||||||
      else
 | 
					        else
 | 
				
			||||||
      {
 | 
					        {
 | 
				
			||||||
          m_protocol->SetUser(m_userinfo(0, dwPasswordPos));
 | 
					            m_protocol->SetUser(m_userinfo(0, dwPasswordPos));
 | 
				
			||||||
          m_protocol->SetPassword(m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1));
 | 
					            m_protocol->SetPassword(m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1));
 | 
				
			||||||
      }
 | 
					        }
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_URL_NATIVE
 | 
					#if wxUSE_URL_NATIVE
 | 
				
			||||||
  // give the native implementation to return a better stream
 | 
					    // give the native implementation to return a better stream
 | 
				
			||||||
  // such as the native WinINet functionality under MS-Windows
 | 
					    // such as the native WinINet functionality under MS-Windows
 | 
				
			||||||
  if (m_nativeImp)
 | 
					    if (m_nativeImp)
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
    wxInputStream *rc;
 | 
					        wxInputStream *rc;
 | 
				
			||||||
    rc = m_nativeImp->GetInputStream(this);
 | 
					        rc = m_nativeImp->GetInputStream(this);
 | 
				
			||||||
    if (rc != 0)
 | 
					        if (rc != 0)
 | 
				
			||||||
        return rc;
 | 
					            return rc;
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
  // else use the standard behaviour
 | 
					    // else use the standard behaviour
 | 
				
			||||||
#endif // wxUSE_URL_NATIVE
 | 
					#endif // wxUSE_URL_NATIVE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_SOCKETS
 | 
					#if wxUSE_SOCKETS
 | 
				
			||||||
    wxIPV4address addr;
 | 
					    wxIPV4address addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // m_protoinfo is NULL when we use a proxy
 | 
					    // m_protoinfo is NULL when we use a proxy
 | 
				
			||||||
  if (!m_useProxy && m_protoinfo->m_needhost)
 | 
					    if (!m_useProxy && m_protoinfo->m_needhost)
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    if (!addr.Hostname(m_server))
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      m_error = wxURL_NOHOST;
 | 
					        if (!addr.Hostname(m_server))
 | 
				
			||||||
      return NULL;
 | 
					        {
 | 
				
			||||||
    }
 | 
					            m_error = wxURL_NOHOST;
 | 
				
			||||||
 | 
					            return NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    addr.Service(m_port);
 | 
					        addr.Service(m_port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!m_protocol->Connect(addr, true)) // Watcom needs the 2nd arg for some reason
 | 
					        if (!m_protocol->Connect(addr, true)) // Watcom needs the 2nd arg for some reason
 | 
				
			||||||
    {
 | 
					        {
 | 
				
			||||||
      m_error = wxURL_CONNERR;
 | 
					            m_error = wxURL_CONNERR;
 | 
				
			||||||
      return NULL;
 | 
					            return NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // When we use a proxy, we have to pass the whole URL to it.
 | 
					    wxString fullPath;
 | 
				
			||||||
  wxInputStream *the_i_stream;
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  if (!m_useProxy)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
      the_i_stream = m_protocol->GetInputStream(m_url);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  else
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
      wxString fullPath = m_path;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (HasQuery())
 | 
					    // When we use a proxy, we have to pass the whole URL to it.
 | 
				
			||||||
          fullPath += wxT("?") + m_query;
 | 
					    if (m_useProxy)
 | 
				
			||||||
      
 | 
					        fullPath += m_url;
 | 
				
			||||||
      if (HasFragment())
 | 
					 | 
				
			||||||
          fullPath += wxT("#") + m_fragment;
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      the_i_stream = m_protocol->GetInputStream(fullPath);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!the_i_stream)
 | 
					    if(m_path.empty())
 | 
				
			||||||
  {
 | 
					        fullPath += wxT("/");
 | 
				
			||||||
    m_error = wxURL_PROTOERR;
 | 
					    else
 | 
				
			||||||
    return NULL;
 | 
					        fullPath += m_path;
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return the_i_stream;
 | 
					    if (HasQuery())
 | 
				
			||||||
 | 
					        fullPath += wxT("?") + m_query;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (HasFragment())
 | 
				
			||||||
 | 
					        fullPath += wxT("#") + m_fragment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxInputStream *the_i_stream = m_protocol->GetInputStream(fullPath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!the_i_stream)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_error = wxURL_PROTOERR;
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return the_i_stream;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_PROTOCOL_HTTP
 | 
					#if wxUSE_PROTOCOL_HTTP
 | 
				
			||||||
void wxURL::SetDefaultProxy(const wxString& url_proxy)
 | 
					void wxURL::SetDefaultProxy(const wxString& url_proxy)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if ( !url_proxy )
 | 
					    if ( !url_proxy )
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
      if ( ms_proxyDefault )
 | 
					        if ( ms_proxyDefault )
 | 
				
			||||||
      {
 | 
					        {
 | 
				
			||||||
          ms_proxyDefault->Close();
 | 
					            ms_proxyDefault->Close();
 | 
				
			||||||
          delete ms_proxyDefault;
 | 
					            delete ms_proxyDefault;
 | 
				
			||||||
          ms_proxyDefault = NULL;
 | 
					            ms_proxyDefault = NULL;
 | 
				
			||||||
      }
 | 
					        }
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
  else
 | 
					    else
 | 
				
			||||||
  {
 | 
					    {
 | 
				
			||||||
      wxString tmp_str = url_proxy;
 | 
					        wxString tmp_str = url_proxy;
 | 
				
			||||||
      int pos = tmp_str.Find(wxT(':'));
 | 
					        int pos = tmp_str.Find(wxT(':'));
 | 
				
			||||||
      if (pos == wxNOT_FOUND)
 | 
					        if (pos == wxNOT_FOUND)
 | 
				
			||||||
          return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      wxString hostname = tmp_str(0, pos),
 | 
					        wxString hostname = tmp_str(0, pos),
 | 
				
			||||||
      port = tmp_str(pos+1, tmp_str.Length()-pos);
 | 
					        port = tmp_str(pos+1, tmp_str.Length()-pos);
 | 
				
			||||||
      wxIPV4address addr;
 | 
					        wxIPV4address addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (!addr.Hostname(hostname))
 | 
					        if (!addr.Hostname(hostname))
 | 
				
			||||||
          return;
 | 
					            return;
 | 
				
			||||||
      if (!addr.Service(port))
 | 
					        if (!addr.Service(port))
 | 
				
			||||||
          return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (ms_proxyDefault)
 | 
					        if (ms_proxyDefault)
 | 
				
			||||||
          // Finally, when all is right, we connect the new proxy.
 | 
					            // Finally, when all is right, we connect the new proxy.
 | 
				
			||||||
          ms_proxyDefault->Close();
 | 
					            ms_proxyDefault->Close();
 | 
				
			||||||
      else
 | 
					        else
 | 
				
			||||||
          ms_proxyDefault = new wxHTTP();
 | 
					            ms_proxyDefault = new wxHTTP();
 | 
				
			||||||
      ms_proxyDefault->Connect(addr, true); // Watcom needs the 2nd arg for some reason
 | 
					        ms_proxyDefault->Connect(addr, true); // Watcom needs the 2nd arg for some reason
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxURL::SetProxy(const wxString& url_proxy)
 | 
					void wxURL::SetProxy(const wxString& url_proxy)
 | 
				
			||||||
@@ -442,4 +441,3 @@ void wxURLModule::OnExit()
 | 
				
			|||||||
#endif // wxUSE_SOCKETS
 | 
					#endif // wxUSE_SOCKETS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // wxUSE_URL
 | 
					#endif // wxUSE_URL
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -377,8 +377,12 @@ void URITestCase::URLProxy()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    wxURL url(wxT("http://www.asite.com/index.html"));
 | 
					    wxURL url(wxT("http://www.asite.com/index.html"));
 | 
				
			||||||
    url.SetProxy(wxT("pserv:3122"));
 | 
					    url.SetProxy(wxT("pserv:3122"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxURL::SetDefaultProxy(wxT("fol.singnet.com.sg:8080"));
 | 
				
			||||||
 | 
					    wxURL url2(wxT("http://server-name/path/to/file?query_data=value"));
 | 
				
			||||||
 | 
					    wxInputStream *data = url2.GetInputStream();
 | 
				
			||||||
 | 
					    CPPUNIT_ASSERT(data != NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif // wxUSE_PROTOCOL_HTTP
 | 
					#endif // wxUSE_PROTOCOL_HTTP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TEST_URL
 | 
					#endif // TEST_URL
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user