]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dialup.cpp
fix for IsAlive() called after Kill() or Exit()
[wxWidgets.git] / src / msw / dialup.cpp
index e8480bd8a34fec5b79c70f047819e5d213e496e7..fa9bb8143f98e72501b2fd6aee628a9df4fe30b3 100644 (file)
 DEFINE_EVENT_TYPE(wxEVT_DIALUP_CONNECTED)
 DEFINE_EVENT_TYPE(wxEVT_DIALUP_DISCONNECTED)
 
-// Doesn't yet compile under VC++ 4, BC++, Watcom C++: no wininet.h
-#if !defined(__BORLANDC__) && \
+// Doesn't yet compile under VC++ 4, BC++, Watcom C++,
+// Wine: no wininet.h
+#if (!defined(__BORLANDC__) || (__BORLANDC__>=0x550)) && \
     (!defined(__GNUWIN32__) || wxCHECK_W32API_VERSION(0, 5)) && \
     !defined(__GNUWIN32_OLD__) && \
     !defined(__WATCOMC__) && \
+    !defined(__WINE__) && \
     (!defined(__VISUALC__) || (__VISUALC__ >= 1020))
 
 #include <ras.h>
@@ -223,7 +225,7 @@ private:
     wxRasThreadData m_data;
 
     // the handle of rasapi32.dll when it's loaded
-    wxPluginManager m_dllRas;
+    wxDynamicLibrary m_dllRas;
 
     // the hidden window we use for passing messages between threads
     static HWND ms_hwndRas;
@@ -231,12 +233,6 @@ private:
     // the handle of the connection we initiated or 0 if none
     static HRASCONN ms_hRasConnection;
 
-    // FIXME: There is probably no reason these really need to
-    //        be static anymore since the dll refcounting is
-    //        handled by wxPluginManager now.  Whether or not
-    //        we still _want_ them to be static is another
-    //        issue entirely..
-
     // the pointers to RAS functions
     static RASDIAL ms_pfnRasDial;
     static RASENUMCONNECTIONS ms_pfnRasEnumConnections;
@@ -266,10 +262,6 @@ private:
     // this flag tells us if we're online
     static int ms_isConnected;
 
-    // this flag is the result of the call to IsAlwaysOnline() (-1 if not
-    // called yet)
-    static int ms_isAlwaysOnline;
-
     // this flag tells us whether a call to RasDial() is in progress
     static wxDialUpManagerMSW *ms_dialer;
 };
@@ -321,7 +313,6 @@ RASCONNECTIONNOTIFICATION wxDialUpManagerMSW::ms_pfnRasConnectionNotification =
 
 int wxDialUpManagerMSW::ms_userSpecifiedOnlineStatus = -1;
 int wxDialUpManagerMSW::ms_isConnected = -1;
-int wxDialUpManagerMSW::ms_isAlwaysOnline = -1;
 wxDialUpManagerMSW *wxDialUpManagerMSW::ms_dialer = NULL;
 
 // ----------------------------------------------------------------------------
@@ -340,8 +331,8 @@ wxDialUpManager *wxDialUpManager::Create()
 #endif // VC++
 
 wxDialUpManagerMSW::wxDialUpManagerMSW()
-                  : m_timerStatusPolling(this)
-                  , m_dllRas(_T("RASAPI32"))
+                  : m_timerStatusPolling(this),
+                    m_dllRas(_T("RASAPI32"))
 {
     // initialize our data
     m_hThread = 0;
@@ -350,7 +341,7 @@ wxDialUpManagerMSW::wxDialUpManagerMSW()
     {
         wxLogError(_("Dial up functions are unavailable because the remote access service (RAS) is not installed on this machine. Please install it."));
     }
-    else if( ms_pfnRasDial == 0 )
+    else if ( !ms_pfnRasDial )
     {
         // resolve the functions we need
 
@@ -830,12 +821,12 @@ bool wxDialUpManagerMSW::Dial(const wxString& nameOfISP,
 
     DWORD dwRet = ms_pfnRasDial
                   (
-                   (LPRASDIALEXTENSIONS)NULL,   // no extended features
-                   NULL,                  // default phone book file (NT only)
+                   NULL,                    // no extended features
+                   NULL,                    // default phone book file (NT only)
                    &rasDialParams,
-                   0,                     // use callback for notifications
-                   async ? wxRasDialFunc  // the callback
-                         : 0,             // no notifications - sync operation
+                   0,                       // use callback for notifications
+                   async ? (void *)wxRasDialFunc  // cast needed for gcc 3.1
+                         : 0,               // no notifications, sync operation
                    &ms_hRasConnection
                   );
 
@@ -926,20 +917,16 @@ bool wxDialUpManagerMSW::HangUp()
 
 bool wxDialUpManagerMSW::IsAlwaysOnline() const
 {
-    // we cache the result (presumably this won't change while the program is
-    // running!)
-    if ( ms_isAlwaysOnline != -1 )
-    {
-        return ms_isAlwaysOnline != 0;
-    }
+    // assume no permanent connection by default
+    bool isAlwaysOnline = FALSE;
 
-    // try to use WinInet function first
+    // try to use WinInet functions
 
     // NB: we could probably use wxDynamicLibrary here just as well,
     //     but we allow multiple instances of wxDialUpManagerMSW so
     //     we might as well use the ref counted version here too.
 
-    wxPluginManager hDll(_T("WININET"));
+    wxDynamicLibrary hDll(_T("WININET"));
     if ( hDll.IsLoaded() )
     {
         typedef BOOL (WINAPI *INTERNETGETCONNECTEDSTATE)(LPDWORD, DWORD);
@@ -956,39 +943,14 @@ bool wxDialUpManagerMSW::IsAlwaysOnline() const
             if ( pfnInternetGetConnectedState(&flags, 0 /* reserved */) )
             {
                 // there is some connection to the net, see of which type
-                ms_isAlwaysOnline = ((flags & INTERNET_CONNECTION_LAN) != 0)
-                                    || ((flags & INTERNET_CONNECTION_PROXY) != 0);
+                isAlwaysOnline = (flags & (INTERNET_CONNECTION_LAN |
+                                           INTERNET_CONNECTION_PROXY)) != 0;
             }
-            else
-            {
-                // no Internet connection at all
-                ms_isAlwaysOnline = FALSE;
-            }
-        }
-    }
-
-    // did we succeed with WinInet? if not, try something else
-    if ( ms_isAlwaysOnline == -1 )
-    {
-        if ( !IsOnline() )
-        {
-            // definitely no permanent connection because we are not connected
-            // now
-            ms_isAlwaysOnline = FALSE;
-        }
-        else
-        {
-            // of course, having a modem doesn't prevent us from having a
-            // permanent connection as well, but we have to guess somehow and
-            // it's probably more common that a system connected via a modem
-            // doesn't have any other net access, so:
-            ms_isAlwaysOnline = FALSE;
+            //else: no Internet connection at all
         }
     }
 
-    wxASSERT_MSG( ms_isAlwaysOnline != -1, wxT("logic error") );
-
-    return ms_isAlwaysOnline != 0;
+    return isAlwaysOnline;
 }
 
 bool wxDialUpManagerMSW::IsOnline() const
@@ -1250,16 +1212,25 @@ static DWORD wxRasMonitorThread(wxRasThreadData *data)
 static LRESULT APIENTRY wxRasStatusWindowProc(HWND hWnd, UINT message,
                                               WPARAM wParam, LPARAM lParam)
 {
-    if ( message == wxWM_RAS_STATUS_CHANGED )
-    {
-        wxRasThreadData *data = (wxRasThreadData *)lParam;
-        data->dialUpManager->OnConnectStatusChange();
-    }
-    else if ( message == wxWM_RAS_DIALING_PROGRESS )
+    switch ( message )
     {
-        wxDialUpManagerMSW *dialUpManager = wxDialUpManagerMSW::GetDialer();
+        case wxWM_RAS_STATUS_CHANGED:
+            {
+                wxRasThreadData *data = (wxRasThreadData *)lParam;
+                data->dialUpManager->OnConnectStatusChange();
+            }
+            break;
+
+        case wxWM_RAS_DIALING_PROGRESS:
+            {
+                wxDialUpManagerMSW *dialMan = wxDialUpManagerMSW::GetDialer();
+
+                dialMan->OnDialProgress((RASCONNSTATE)wParam, lParam);
+            }
+            break;
 
-        dialUpManager->OnDialProgress((RASCONNSTATE)wParam, lParam);
+        default:
+            return ::DefWindowProc(hWnd, message, wParam, lParam);
     }
 
     return 0;
@@ -1277,8 +1248,7 @@ static void WINAPI wxRasDialFunc(UINT unMsg,
                 rasconnstate, dwError);
 }
 
-#endif
-  // __BORLANDC__
+#endif // __BORLANDC__
+
 #endif // wxUSE_DIALUP_MANAGER
 
-// vi:sts=4:sw=4:et