]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/url.cpp
Hopefully fixed library names generated by wx-config for OS/2's PM port.
[wxWidgets.git] / src / common / url.cpp
index fc8187bd3c7091a25b015782d95273a51a116c61..dfd818b17602e88edfa6e0b990c0cb963e204292 100644 (file)
@@ -40,14 +40,17 @@ wxProtoInfo *wxURL::ms_protocols = NULL;
 // Enforce linking of protocol classes:
 USE_PROTOCOL(wxFileProto)
 
-#if wxUSE_SOCKETS
+#if wxUSE_PROTOCOL_HTTP
 USE_PROTOCOL(wxHTTP)
-USE_PROTOCOL(wxFTP)
 
     wxHTTP *wxURL::ms_proxyDefault = NULL;
     bool wxURL::ms_useDefaultProxy = false;
 #endif
 
+#if wxUSE_PROTOCOL_FTP
+USE_PROTOCOL(wxFTP)
+#endif
+
 // --------------------------------------------------------------
 //
 //                          wxURL
@@ -79,7 +82,7 @@ void wxURL::Init(const wxString& url)
     m_nativeImp = CreateNativeImpObject();
 #endif
 
-#if wxUSE_SOCKETS
+#if wxUSE_PROTOCOL_HTTP
     if ( ms_useDefaultProxy && !ms_proxyDefault )
     {
         SetDefaultProxy( wxGetenv(wxT("HTTP_PROXY")) );
@@ -93,7 +96,7 @@ void wxURL::Init(const wxString& url)
 
     m_useProxy = ms_proxyDefault != NULL;
     m_proxy = ms_proxyDefault;
-#endif // wxUSE_SOCKETS
+#endif // wxUSE_PROTOCOL_HTTP
 
 }
 
@@ -156,12 +159,9 @@ bool wxURL::ParseURL()
     }
   }
 
-#if wxUSE_SOCKETS
+#if wxUSE_PROTOCOL_HTTP
   if (m_useProxy)
   {
-    // destroy the previously created protocol as we'll be using m_proxy
-    delete m_protocol;
-
     // Third, we rebuild the URL.
     m_url = m_scheme + wxT(":");
     if (m_protoinfo->m_needhost)
@@ -170,7 +170,7 @@ bool wxURL::ParseURL()
     // We initialize specific variables.
     m_protocol = m_proxy; // FIXME: we should clone the protocol
   }
-#endif
+#endif // wxUSE_PROTOCOL_HTTP
 
   m_error = wxURL_NOERR;
   return true;
@@ -182,19 +182,19 @@ bool wxURL::ParseURL()
 
 void wxURL::CleanData()
 {
-#if wxUSE_SOCKETS
+#if wxUSE_PROTOCOL_HTTP
   if (!m_useProxy)
-#endif
+#endif // wxUSE_PROTOCOL_HTTP
     delete m_protocol;
 }
 
 wxURL::~wxURL()
 {
     CleanData();
-#if wxUSE_SOCKETS
+#if wxUSE_PROTOCOL_HTTP
     if (m_proxy && m_proxy != ms_proxyDefault)
         delete m_proxy;
-#endif
+#endif // wxUSE_PROTOCOL_HTTP
 #if wxUSE_URL_NATIVE
     delete m_nativeImp;
 #endif
@@ -236,16 +236,16 @@ wxInputStream *wxURL::GetInputStream()
   }
 
   m_error = wxURL_NOERR;
-  if (HasUser())
+  if (HasUserInfo())
   {
-      size_t dwPasswordPos = m_user.find(':');
+      size_t dwPasswordPos = m_userinfo.find(':');
 
       if (dwPasswordPos == wxString::npos)
-          m_protocol->SetUser(m_user);
+          m_protocol->SetUser(m_userinfo);
       else
       {
-          m_protocol->SetUser(m_user(0, dwPasswordPos));
-          m_protocol->SetPassword(m_user(dwPasswordPos+1, m_user.length() + 1));
+          m_protocol->SetUser(m_userinfo(0, dwPasswordPos));
+          m_protocol->SetPassword(m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1));
       }
   }
 
@@ -285,9 +285,24 @@ wxInputStream *wxURL::GetInputStream()
 #endif
 
   // When we use a proxy, we have to pass the whole URL to it.
-  wxInputStream *the_i_stream =
-       (m_useProxy) ? m_protocol->GetInputStream(m_url) :
-                      m_protocol->GetInputStream(m_path);
+  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)
   {
@@ -298,7 +313,7 @@ wxInputStream *wxURL::GetInputStream()
   return the_i_stream;
 }
 
-#if wxUSE_SOCKETS
+#if wxUSE_PROTOCOL_HTTP
 void wxURL::SetDefaultProxy(const wxString& url_proxy)
 {
   if ( !url_proxy )
@@ -378,7 +393,7 @@ void wxURL::SetProxy(const wxString& url_proxy)
         ParseURL();
     }
 }
-#endif // wxUSE_SOCKETS
+#endif // wxUSE_PROTOCOL_HTTP
 
 // ----------------------------------------------------------------------
 // wxURLModule
@@ -402,23 +417,26 @@ IMPLEMENT_DYNAMIC_CLASS(wxURLModule, wxModule)
 
 bool wxURLModule::OnInit()
 {
+#if wxUSE_PROTOCOL_HTTP
     // env var HTTP_PROXY contains the address of the default proxy to use if
     // set, but don't try to create this proxy right now because it will slow
     // down the program startup (especially if there is no DNS server
     // available, in which case it may take up to 1 minute)
 
-    if ( getenv("HTTP_PROXY") )
+    if ( wxGetenv(_T("HTTP_PROXY")) )
     {
         wxURL::ms_useDefaultProxy = true;
     }
-
+#endif // wxUSE_PROTOCOL_HTTP
     return true;
 }
 
 void wxURLModule::OnExit()
 {
+#if wxUSE_PROTOCOL_HTTP
     delete wxURL::ms_proxyDefault;
     wxURL::ms_proxyDefault = NULL;
+#endif // wxUSE_PROTOCOL_HTTP
 }
 
 #endif // wxUSE_SOCKETS