X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8563c6f18aa1a98a07334f6e413756542ef31412..cbbb1f548962b30c43849e29fd64eceb4d8720e8:/src/msw/dialup.cpp diff --git a/src/msw/dialup.cpp b/src/msw/dialup.cpp index b4bb8d55ea..7b536c9e9e 100644 --- a/src/msw/dialup.cpp +++ b/src/msw/dialup.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: msw/dialup.cpp +// Name: src/msw/dialup.cpp // Purpose: MSW implementation of network/dialup classes and functions // Author: Vadim Zeitlin // Modified by: @@ -26,22 +26,24 @@ #if wxUSE_DIALUP_MANAGER +#include "wx/dialup.h" + #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/intl.h" #include "wx/event.h" + #include "wx/app.h" + #include "wx/timer.h" + #include "wx/module.h" #endif -#include "wx/timer.h" -#include "wx/app.h" #include "wx/generic/choicdgg.h" +#include "wx/msw/private.h" #include "wx/dynlib.h" -#include "wx/dialup.h" -#include "wx/module.h" -DEFINE_EVENT_TYPE(wxEVT_DIALUP_CONNECTED) -DEFINE_EVENT_TYPE(wxEVT_DIALUP_DISCONNECTED) +wxDEFINE_EVENT( wxEVT_DIALUP_CONNECTED, wxDialUpEvent ); +wxDEFINE_EVENT( wxEVT_DIALUP_DISCONNECTED, wxDialUpEvent ); // Doesn't yet compile under VC++ 4, BC++, Watcom C++, // Wine: no wininet.h @@ -110,7 +112,7 @@ static const wxChar *gs_classForDialUpWindow = NULL; typedef DWORD (APIENTRY * RASVALIDATEENTRYNAME)( LPCSTR, LPCSTR ); typedef DWORD (APIENTRY * RASCONNECTIONNOTIFICATION)( HRASCONN, HANDLE, DWORD ); - static const wxChar gs_funcSuffix = _T('A'); + static const wxChar gs_funcSuffix = wxT('A'); #else // Unicode typedef DWORD (APIENTRY * RASDIAL)( LPRASDIALEXTENSIONS, LPCWSTR, LPRASDIALPARAMSW, DWORD, LPVOID, LPHRASCONN ); typedef DWORD (APIENTRY * RASENUMCONNECTIONS)( LPRASCONNW, LPDWORD, LPDWORD ); @@ -132,7 +134,7 @@ static const wxChar *gs_classForDialUpWindow = NULL; typedef DWORD (APIENTRY * RASVALIDATEENTRYNAME)( LPCWSTR, LPCWSTR ); typedef DWORD (APIENTRY * RASCONNECTIONNOTIFICATION)( HRASCONN, HANDLE, DWORD ); - static const wxChar gs_funcSuffix = _T('W'); + static const wxChar gs_funcSuffix = wxT('W'); #endif // ASCII/Unicode // structure passed to the secondary thread @@ -162,7 +164,7 @@ struct WXDLLEXPORT wxRasThreadData HANDLE hEventRas, // automatic event which RAS signals when status changes hEventQuit; // manual event which we signal when we terminate - class WXDLLEXPORT wxDialUpManagerMSW *dialUpManager; // the owner + class WXDLLIMPEXP_FWD_CORE wxDialUpManagerMSW *dialUpManager; // the owner }; // ---------------------------------------------------------------------------- @@ -236,7 +238,7 @@ private: private: wxDialUpManagerMSW *m_dialUpManager; - DECLARE_NO_COPY_CLASS(RasTimer) + wxDECLARE_NO_COPY_CLASS(RasTimer); } m_timerStatusPolling; // thread handle for the thread sitting on connection change event @@ -287,7 +289,7 @@ private: // this flag tells us whether a call to RasDial() is in progress static wxDialUpManagerMSW *ms_dialer; - DECLARE_NO_COPY_CLASS(wxDialUpManagerMSW) + wxDECLARE_NO_COPY_CLASS(wxDialUpManagerMSW); }; // module to destroy helper window created by wxDialUpManagerMSW @@ -383,7 +385,7 @@ wxDialUpManager *wxDialUpManager::Create() wxDialUpManagerMSW::wxDialUpManagerMSW() : m_timerStatusPolling(this), - m_dllRas(_T("RASAPI32")) + m_dllRas(wxT("RASAPI32")) { // initialize our data m_autoCheckLevel = 0; @@ -404,7 +406,7 @@ wxDialUpManagerMSW::wxDialUpManagerMSW() // get the function from rasapi32.dll and abort if it's not found #define RESOLVE_RAS_FUNCTION(type, name) \ - ms_pfn##name = (type)m_dllRas.GetSymbol( wxString(_T(#name)) \ + ms_pfn##name = (type)m_dllRas.GetSymbol( wxString(wxT(#name)) \ + gs_funcSuffix); \ if ( !ms_pfn##name ) \ { \ @@ -415,7 +417,7 @@ wxDialUpManagerMSW::wxDialUpManagerMSW() // a variant of above macro which doesn't abort if the function is // not found in the DLL #define RESOLVE_OPTIONAL_RAS_FUNCTION(type, name) \ - ms_pfn##name = (type)m_dllRas.GetSymbol( wxString(_T(#name)) \ + ms_pfn##name = (type)m_dllRas.GetSymbol( wxString(wxT(#name)) \ + gs_funcSuffix); RESOLVE_RAS_FUNCTION(RASDIAL, RasDial); @@ -451,12 +453,10 @@ wxDialUpManagerMSW::wxDialUpManagerMSW() exit: if ( funcName ) { - static const wxChar *msg = wxTRANSLATE( -"The version of remote access service (RAS) installed on this machine is too\ -old, please upgrade (the following required function is missing: %s)." - ); - - wxLogError(wxGetTranslation(msg), funcName); + wxLogError(_("The version of remote access service (RAS) installed " + "on this machine is too old, please upgrade (the " + "following required function is missing: %s)."), + funcName); m_dllRas.Unload(); return; } @@ -583,7 +583,7 @@ void wxDialUpManagerMSW::CleanUpThreadData() { if ( !SetEvent(m_data->hEventQuit) ) { - wxLogLastError(_T("SetEvent(RasThreadQuit)")); + wxLogLastError(wxT("SetEvent(RasThreadQuit)")); } else // sent quit request to the background thread { @@ -597,11 +597,7 @@ void wxDialUpManagerMSW::CleanUpThreadData() m_hThread = 0; } - if ( m_data ) - { - delete m_data; - m_data = NULL; - } + wxDELETE(m_data); } // ---------------------------------------------------------------------------- @@ -710,7 +706,13 @@ size_t wxDialUpManagerMSW::GetISPNames(wxArrayString& names) const if ( dwRet == ERROR_BUFFER_TOO_SMALL ) { // reallocate the buffer - rasEntries = (RASENTRYNAME *)realloc(rasEntries, size); + void *n = realloc(rasEntries, size); + if (n == NULL) + { + free(rasEntries); + return 0; + } + rasEntries = (RASENTRYNAME *)n; } else if ( dwRet != 0 ) { @@ -802,7 +804,7 @@ bool wxDialUpManagerMSW::Dial(const wxString& nameOfISP, RASDIALPARAMS rasDialParams; rasDialParams.dwSize = sizeof(rasDialParams); - wxStrncpy(rasDialParams.szEntryName, entryName, RAS_MaxEntryName); + wxStrlcpy(rasDialParams.szEntryName, entryName.c_str(), RAS_MaxEntryName); // do we have the username and password? if ( !username || !password ) @@ -824,8 +826,8 @@ bool wxDialUpManagerMSW::Dial(const wxString& nameOfISP, } else { - wxStrncpy(rasDialParams.szUserName, username, UNLEN); - wxStrncpy(rasDialParams.szPassword, password, PWLEN); + wxStrlcpy(rasDialParams.szUserName, username.c_str(), UNLEN); + wxStrlcpy(rasDialParams.szPassword, password.c_str(), PWLEN); } // default values for other fields @@ -877,9 +879,16 @@ bool wxDialUpManagerMSW::Dial(const wxString& nameOfISP, if ( dwRet != 0 ) { // can't pass a wxWCharBuffer through ( ... ) - wxLogError(_("Failed to %s dialup connection: %s"), - wxString(async ? _("initiate") : _("establish")).c_str(), - GetErrorString(dwRet).c_str()); + if ( async ) + { + wxLogError(_("Failed to initiate dialup connection: %s"), + GetErrorString(dwRet).c_str()); + } + else + { + wxLogError(_("Failed to establish dialup connection: %s"), + GetErrorString(dwRet).c_str()); + } // we should still call RasHangUp() if we got a non 0 connection if ( ms_hRasConnection ) @@ -947,8 +956,10 @@ bool wxDialUpManagerMSW::HangUp() return false; } - DWORD dwRet = ms_pfnRasHangUp(hRasConn); - if ( dwRet != 0 ) + // note that it's not an error if the connection had been already + // terminated + const DWORD dwRet = ms_pfnRasHangUp(hRasConn); + if ( dwRet != 0 && dwRet != ERROR_NO_CONNECTION ) { wxLogError(_("Failed to terminate the dialup connection: %s"), GetErrorString(dwRet).c_str()); @@ -970,14 +981,14 @@ bool wxDialUpManagerMSW::IsAlwaysOnline() const // but we allow multiple instances of wxDialUpManagerMSW so // we might as well use the ref counted version here too. - wxDynamicLibrary hDll(_T("WININET")); + wxDynamicLibrary hDll(wxT("WININET")); if ( hDll.IsLoaded() ) { typedef BOOL (WINAPI *INTERNETGETCONNECTEDSTATE)(LPDWORD, DWORD); INTERNETGETCONNECTEDSTATE pfnInternetGetConnectedState; #define RESOLVE_FUNCTION(type, name) \ - pfn##name = (type)hDll.GetSymbol(_T(#name)) + pfn##name = (type)hDll.GetSymbol(wxT(#name)) RESOLVE_FUNCTION(INTERNETGETCONNECTEDSTATE, InternetGetConnectedState); @@ -1186,7 +1197,7 @@ void wxDialUpManagerMSW::DisableAutoCheckOnlineStatus() { wxCHECK_RET( IsOk(), wxT("using uninitialized wxDialUpManager") ); - if ( --m_autoCheckLevel ) + if ( --m_autoCheckLevel != 0 ) { // still checking return; @@ -1255,11 +1266,10 @@ static DWORD wxRasMonitorThread(wxRasThreadData *data) break; default: - wxFAIL_MSG( _T("unexpected return of WaitForMultipleObjects()") ); + wxFAIL_MSG( wxT("unexpected return of WaitForMultipleObjects()") ); // fall through case WAIT_FAILED: -#ifdef __WXDEBUG__ // using wxLogLastError() from here is dangerous: we risk to // deadlock the main thread if wxLog sends output to GUI DWORD err = GetLastError(); @@ -1270,7 +1280,6 @@ static DWORD wxRasMonitorThread(wxRasThreadData *data) err, wxSysErrorMsg(err) ); -#endif // __WXDEBUG__ // no sense in continuing, who knows if the handles we're // waiting for even exist yet... @@ -1327,4 +1336,3 @@ static void WINAPI wxRasDialFunc(UINT WXUNUSED(unMsg), #endif // __BORLANDC__ #endif // wxUSE_DIALUP_MANAGER -