]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/url.cpp
small refinements
[wxWidgets.git] / src / common / url.cpp
index 65f2fe726511259b567b42855c4954a8af280092..b48d5dabe71b189f00f05f3912ea9a7aaa9a5d77 100644 (file)
 
 #if wxUSE_URL
 
 
 #if wxUSE_URL
 
+#include "wx/url.h"
+
 #ifndef WX_PRECOMP
     #include "wx/list.h"
 #ifndef WX_PRECOMP
     #include "wx/list.h"
+    #include "wx/string.h"
+    #include "wx/utils.h"
+    #include "wx/module.h"
 #endif
 
 #endif
 
-#include "wx/string.h"
-#include "wx/utils.h"
-#include "wx/module.h"
-#include "wx/url.h"
-
 #include <string.h>
 #include <ctype.h>
 
 #include <string.h>
 #include <ctype.h>
 
@@ -184,7 +184,9 @@ void wxURL::CleanData()
 #if wxUSE_PROTOCOL_HTTP
     if (!m_useProxy)
 #endif // wxUSE_PROTOCOL_HTTP
 #if wxUSE_PROTOCOL_HTTP
     if (!m_useProxy)
 #endif // wxUSE_PROTOCOL_HTTP
-        delete m_protocol;
+        if (m_protocol)
+            // Need to safely delete the socket (pending events)
+            m_protocol->Destroy();
 }
 
 wxURL::~wxURL()
 }
 
 wxURL::~wxURL()
@@ -404,6 +406,8 @@ void wxURL::SetProxy(const wxString& url_proxy)
 class wxURLModule : public wxModule
 {
 public:
 class wxURLModule : public wxModule
 {
 public:
+    wxURLModule();
+
     virtual bool OnInit();
     virtual void OnExit();
 
     virtual bool OnInit();
     virtual void OnExit();
 
@@ -413,6 +417,13 @@ private:
 
 IMPLEMENT_DYNAMIC_CLASS(wxURLModule, wxModule)
 
 
 IMPLEMENT_DYNAMIC_CLASS(wxURLModule, wxModule)
 
+wxURLModule::wxURLModule()
+{
+    // we must be cleaned up before wxSocketModule as otherwise deleting
+    // ms_proxyDefault from our OnExit() won't work (and can actually crash)
+    AddDependency(wxClassInfo::FindClass(_T("wxSocketModule")));
+}
+
 bool wxURLModule::OnInit()
 {
 #if wxUSE_PROTOCOL_HTTP
 bool wxURLModule::OnInit()
 {
 #if wxUSE_PROTOCOL_HTTP
@@ -439,84 +450,5 @@ void wxURLModule::OnExit()
 
 #endif // wxUSE_SOCKETS
 
 
 #endif // wxUSE_SOCKETS
 
-// ---------------------------------------------------------------------------
-//
-//                        wxURL Compatibility
-//
-// ---------------------------------------------------------------------------
-
-#if WXWIN_COMPATIBILITY_2_4
-
-#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...
-
-wxString wxURL::ConvertToValidURI(const wxString& uri, const wxChar* delims)
-{
-  wxString out_str;
-  wxString hexa_code;
-  size_t i;
-
-  for (i = 0; i < uri.Len(); i++)
-  {
-    wxChar c = uri.GetChar(i);
-
-    if (c == wxT(' '))
-    {
-      // GRG, Apr/2000: changed to "%20" instead of '+'
-
-      out_str += wxT("%20");
-    }
-    else
-    {
-      // GRG, Apr/2000: modified according to the URI definition (RFC 2396)
-      //
-      // - Alphanumeric characters are never escaped
-      // - Unreserved marks are never escaped
-      // - Delimiters must be escaped if they appear within a component
-      //     but not if they are used to separate components. Here we have
-      //     no clear way to distinguish between these two cases, so they
-      //     are escaped unless they are passed in the 'delims' parameter
-      //     (allowed delimiters).
-
-      static const wxChar marks[] = wxT("-_.!~*()'");
-
-      if ( !wxIsalnum(c) && !wxStrchr(marks, c) && !wxStrchr(delims, c) )
-      {
-        hexa_code.Printf(wxT("%%%02X"), c);
-        out_str += hexa_code;
-      }
-      else
-      {
-        out_str += c;
-      }
-    }
-  }
-
-  return out_str;
-}
-
-wxString wxURL::ConvertFromURI(const wxString& uri)
-{
-    return wxURI::Unescape(uri);
-}
-
-#endif //WXWIN_COMPATIBILITY_2_4
 
 #endif // wxUSE_URL
 
 #endif // wxUSE_URL