X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..4b5d2be39657bb364c9111c4d13b1eecb8f3b69f:/src/unix/dialup.cpp diff --git a/src/unix/dialup.cpp b/src/unix/dialup.cpp index f64e45fd90..79b35d5370 100644 --- a/src/unix/dialup.cpp +++ b/src/unix/dialup.cpp @@ -1,6 +1,6 @@ // -*- c++ -*- //////////////////////////////////////////////////////////////// -// Name: unix/dialup.cpp -// Purpose: Network related wxWindows classes and functions +// Name: src/unix/dialup.cpp +// Purpose: Network related wxWidgets classes and functions // Author: Karsten Ballüder // Modified by: // Created: 03.10.99 @@ -9,30 +9,27 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#include "wx/setup.h" - -#ifdef __GNUG__ -# pragma implementation "dialup.h" -#endif +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" #if wxUSE_DIALUP_MANAGER +#include "wx/dialup.h" + #ifndef WX_PRECOMP -# include "wx/defs.h" + #include "wx/string.h" + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/event.h" + #include "wx/app.h" + #include "wx/utils.h" + #include "wx/timer.h" #endif // !PCH -#include "wx/string.h" -#include "wx/event.h" -#include "wx/dialup.h" -#include "wx/timer.h" #include "wx/filefn.h" -#include "wx/utils.h" -#include "wx/log.h" #include "wx/ffile.h" #include "wx/process.h" -#include "wx/intl.h" -#include "wx/app.h" -#include "wx/wxchar.h" +#include "wx/crt.h" #include @@ -46,6 +43,9 @@ #include #include +DEFINE_EVENT_TYPE(wxEVT_DIALUP_CONNECTED) +DEFINE_EVENT_TYPE(wxEVT_DIALUP_DISCONNECTED) + // ---------------------------------------------------------------------------- // A class which groups functions dealing with connecting to the network from a // workstation using dial-up access to the net. There is at most one instance @@ -73,19 +73,19 @@ class WXDLLEXPORT wxDialUpManagerImpl : public wxDialUpManager { public: wxDialUpManagerImpl(); - ~wxDialUpManagerImpl(); + virtual ~wxDialUpManagerImpl(); /** Could the dialup manager be initialized correctly? If this function - returns FALSE, no other functions will work neither, so it's a good idea + returns false, no other functions will work neither, so it's a good idea to call this function and check its result before calling any other wxDialUpManager methods. */ virtual bool IsOk() const - { return TRUE; } + { return true; } /** The simplest way to initiate a dial up: this function dials the given ISP (exact meaning of the parameter depends on the platform), returns - TRUE on success or FALSE on failure and logs the appropriate error + true on success or false on failure and logs the appropriate error message in the latter case. @param nameOfISP optional paramater for dial program @param username unused @@ -99,7 +99,7 @@ public: // Hang up the currently active dial up connection. virtual bool HangUp(); - // returns TRUE if the computer is connected to the network: under Windows, + // returns true if the computer is connected to the network: under Windows, // this just means that a RAS connection exists, under Unix we check that // the "well-known host" (as specified by SetWellKnownHost) is reachable virtual bool IsOnline() const @@ -111,11 +111,11 @@ public: // do we have a constant net connection? virtual bool IsAlwaysOnline() const; - // returns TRUE if (async) dialing is in progress + // returns true if (async) dialing is in progress virtual bool IsDialing() const { return m_DialProcess != NULL; } - // cancel dialing the number initiated with Dial(async = TRUE) + // cancel dialing the number initiated with Dial(async = true) // NB: this won't result in DISCONNECTED event being sent virtual bool CancelDialing(); @@ -126,7 +126,7 @@ public: // so, in general, the user should be allowed to override it. This function // allows to forcefully set the online status - whatever our internal // algorithm may think about it. - virtual void SetOnlineStatus(bool isOnline = TRUE) + virtual void SetOnlineStatus(bool isOnline = true) { m_IsOnline = isOnline ? Net_Connected : Net_No; } // set misc wxDialUpManager options @@ -138,7 +138,7 @@ public: // Windows, the notification about the change of connection status is // instantenous. // - // Returns FALSE if couldn't set up automatic check for online status. + // Returns false if couldn't set up automatic check for online status. virtual bool EnableAutoCheckOnlineStatus(size_t nSeconds); // disable automatic check for connection status change - notice that the @@ -216,7 +216,7 @@ private: friend class wxDialProcess; // determine status - void CheckStatus(bool fromAsync = FALSE) const; + void CheckStatus(bool fromAsync = false) const; // real status check void CheckStatusInternal(); @@ -244,21 +244,18 @@ class AutoCheckTimer : public wxTimer { public: AutoCheckTimer(wxDialUpManagerImpl *dupman) - { - m_dupman = dupman; - m_started = FALSE; - } - - virtual bool Start( int millisecs = -1, bool WXUNUSED(one_shot) = FALSE ) - { m_started = TRUE; return wxTimer::Start(millisecs, FALSE); } + { + m_dupman = dupman; + } virtual void Notify() - { wxLogTrace(wxT("Checking dial up network status.")); m_dupman->CheckStatus(); } + { + wxLogTrace(_T("dialup"), wxT("Checking dial up network status.")); + + m_dupman->CheckStatus(); + } - virtual void Stop() - { if ( m_started ) wxTimer::Stop(); } public: - bool m_started; wxDialUpManagerImpl *m_dupman; }; @@ -275,7 +272,7 @@ public: if(m_DupMan) { m_DupMan->m_DialProcess = NULL; - m_DupMan->CheckStatus(TRUE); + m_DupMan->CheckStatus(true); } } private: @@ -324,54 +321,54 @@ wxDialUpManagerImpl::Dial(const wxString &isp, const wxString & WXUNUSED(password), bool async) { - if(m_IsOnline == Net_Connected) - return FALSE; - m_ISPname = isp; - wxString cmd; - if(m_ConnectCommand.Find(wxT("%s"))) - cmd.Printf(m_ConnectCommand,m_ISPname.c_str()); - else - cmd = m_ConnectCommand; + if(m_IsOnline == Net_Connected) + return false; + m_ISPname = isp; + wxString cmd; + if(m_ConnectCommand.Find(wxT("%s"))) + cmd.Printf(m_ConnectCommand,m_ISPname.c_str()); + else + cmd = m_ConnectCommand; - if ( async ) - { - m_DialProcess = new wxDialProcess(this); - m_DialPId = (int)wxExecute(cmd, FALSE, m_DialProcess); - if(m_DialPId == 0) - { - delete m_DialProcess; - m_DialProcess = NULL; - return FALSE; - } - else - return TRUE; - } - else - return wxExecute(cmd, /* sync */ TRUE) == 0; + if ( async ) + { + m_DialProcess = new wxDialProcess(this); + m_DialPId = (int)wxExecute(cmd, false, m_DialProcess); + if(m_DialPId == 0) + { + delete m_DialProcess; + m_DialProcess = NULL; + return false; + } + else + return true; + } + else + return wxExecute(cmd, /* sync */ true) == 0; } bool wxDialUpManagerImpl::HangUp() { - if(m_IsOnline == Net_No) - return FALSE; - if(IsDialing()) - { - wxLogError(_("Already dialling ISP.")); - return FALSE; - } - wxString cmd; - if(m_HangUpCommand.Find(wxT("%s"))) - cmd.Printf(m_HangUpCommand,m_ISPname.c_str(), m_DialProcess); - else - cmd = m_HangUpCommand; - return wxExecute(cmd, /* sync */ TRUE) == 0; + if(m_IsOnline == Net_No) + return false; + if(IsDialing()) + { + wxLogError(_("Already dialling ISP.")); + return false; + } + wxString cmd; + if(m_HangUpCommand.Find(wxT("%s"))) + cmd.Printf(m_HangUpCommand,m_ISPname.c_str(), m_DialProcess); + else + cmd = m_HangUpCommand; + return wxExecute(cmd, /* sync */ true) == 0; } bool wxDialUpManagerImpl::CancelDialing() { if(! IsDialing()) - return FALSE; + return false; return kill(m_DialPId, SIGTERM) > 0; } @@ -401,7 +398,7 @@ void wxDialUpManagerImpl::DisableAutoCheckOnlineStatus() void wxDialUpManagerImpl::SetWellKnownHost(const wxString& hostname, int portno) { - if(hostname.Length() == 0) + if(hostname.length() == 0) { m_BeaconHost = WXDIALUP_MANAGER_DEFAULT_BEACONHOST; m_BeaconPort = 80; @@ -410,7 +407,7 @@ void wxDialUpManagerImpl::SetWellKnownHost(const wxString& hostname, int portno) // does hostname contain a port number? wxString port = hostname.After(wxT(':')); - if(port.Length()) + if(port.length()) { m_BeaconHost = hostname.Before(wxT(':')); m_BeaconPort = wxAtoi(port); @@ -583,9 +580,11 @@ wxDialUpManagerImpl::NetConnection wxDialUpManagerImpl::CheckConnect() } else // failed to connect { +#ifdef ENETUNREACH if(errno == ENETUNREACH) return Net_No; // network is unreachable else +#endif return Net_Unknown; // connect failed, but don't know why } } @@ -636,6 +635,10 @@ wxDialUpManagerImpl::CheckProcNet() int wxDialUpManagerImpl::CheckIfconfig() { +#ifdef __VMS + m_CanUseIfconfig = 0; + return -1; +#else // assume that the test doesn't work int netDevice = NetDevice_Unknown; @@ -644,9 +647,10 @@ wxDialUpManagerImpl::CheckIfconfig() { static const wxChar *ifconfigLocations[] = { - _T("/sbin"), // Linux, FreeBSD + _T("/sbin"), // Linux, FreeBSD, Darwin _T("/usr/sbin"), // SunOS, Solaris, AIX, HP-UX _T("/usr/etc"), // IRIX + _T("/etc"), // AIX 5 }; for ( size_t n = 0; n < WXSIZEOF(ifconfigLocations); n++ ) @@ -669,31 +673,39 @@ wxDialUpManagerImpl::CheckIfconfig() wxASSERT_MSG( m_IfconfigPath.length(), _T("can't use ifconfig if it wasn't found") ); - wxString tmpfile = wxGetTempFileName("_wxdialuptest"); - wxString cmd = "/bin/sh -c \'"; + wxString tmpfile = wxGetTempFileName( wxT("_wxdialuptest") ); + wxString cmd = wxT("/bin/sh -c \'"); cmd << m_IfconfigPath; -#if defined(__SOLARIS__) || defined (__SUNOS__) +#if defined(__AIX__) || \ + defined(__NETBSD__) || \ + defined(__OSF__) || \ + defined(__SOLARIS__) || defined (__SUNOS__) // need to add -a flag - cmd << " -a"; + cmd << wxT(" -a"); #elif defined(__LINUX__) || defined(__SGI__) // nothing to be added to ifconfig -#elif defined(__FREEBSD__) +#elif defined(__FREEBSD__) || defined(__DARWIN__) // add -l flag - cmd << " -l"; + cmd << wxT(" -l"); #elif defined(__HPUX__) // VZ: a wild guess (but without it, ifconfig fails completely) - cmd << _T(" ppp0"); + cmd << wxT(" ppp0"); #else -# pragma warning "No ifconfig information for this OS." + #if defined(__GNUG__) + #warning "No ifconfig information for this OS." + #else + #pragma warning "No ifconfig information for this OS." + #endif + m_CanUseIfconfig = 0; return -1; #endif - cmd << " >" << tmpfile << '\''; + cmd << wxT(" >") << tmpfile << wxT('\''); /* I tried to add an option to wxExecute() to not close stdout, so we could let ifconfig write directly to the tmpfile, but this does not work. That should be faster, as it doesn´t call the shell first. I have no idea why. :-( (KB) */ - if ( wxExecute(cmd,TRUE /* sync */) == 0 ) + if ( wxExecute(cmd,true /* sync */) == 0 ) { m_CanUseIfconfig = 1; wxFFile file; @@ -704,23 +716,23 @@ wxDialUpManagerImpl::CheckIfconfig() { // FIXME shouldn't we grep for "^ppp"? (VZ) - bool hasModem = FALSE, - hasLAN = FALSE; + bool hasModem = false, + hasLAN = false; #if defined(__SOLARIS__) || defined (__SUNOS__) // dialup device under SunOS/Solaris - hasModem = strstr(output,"ipdptp") != (char *)NULL; - hasLAN = strstr(output, "hme") != (char *)NULL; + hasModem = strstr(output.fn_str(),"ipdptp") != (char *)NULL; + hasLAN = strstr(output.fn_str(), "hme") != (char *)NULL; #elif defined(__LINUX__) || defined (__FREEBSD__) - hasModem = strstr(output,"ppp") // ppp - || strstr(output,"sl") // slip - || strstr(output,"pl"); // plip - hasLAN = strstr(output, "eth") != NULL; + hasModem = strstr(output.fn_str(),"ppp") // ppp + || strstr(output.fn_str(),"sl") // slip + || strstr(output.fn_str(),"pl"); // plip + hasLAN = strstr(output.fn_str(), "eth") != NULL; #elif defined(__SGI__) // IRIX - hasModem = strstr(output, "ppp") != NULL; // PPP + hasModem = strstr(output.fn_str(), "ppp") != NULL; // PPP #elif defined(__HPUX__) // if could run ifconfig on interface, then it exists - hasModem = TRUE; + hasModem = true; #endif netDevice = NetDevice_None; @@ -742,50 +754,70 @@ wxDialUpManagerImpl::CheckIfconfig() } return netDevice; +#endif } wxDialUpManagerImpl::NetConnection wxDialUpManagerImpl::CheckPing() { - // First time check for ping location. We only use the variant - // which does not take arguments, a la GNU. - if(m_CanUsePing == -1) // unknown - { - if(wxFileExists("/bin/ping")) - m_PingPath = "/bin/ping"; - else if(wxFileExists("/usr/sbin/ping")) - m_PingPath = "/usr/sbin/ping"; - if(! m_PingPath) - { - m_CanUsePing = 0; - } - } + // First time check for ping location. We only use the variant + // which does not take arguments, a la GNU. + if(m_CanUsePing == -1) // unknown + { +#ifdef __VMS + if (wxFileExists( wxT("SYS$SYSTEM:TCPIP$PING.EXE") )) + m_PingPath = wxT("$SYS$SYSTEM:TCPIP$PING"); +#elif defined(__AIX__) + m_PingPath = _T("/etc/ping"); +#elif defined(__SGI__) + m_PingPath = _T("/usr/etc/ping"); +#else + if (wxFileExists( wxT("/bin/ping") )) + m_PingPath = wxT("/bin/ping"); + else if (wxFileExists( wxT("/usr/sbin/ping") )) + m_PingPath = wxT("/usr/sbin/ping"); +#endif + if (!m_PingPath) + { + m_CanUsePing = 0; + } + } - if(! m_CanUsePing) - { + if(! m_CanUsePing) + { // we didn't find ping return Net_Unknown; - } + } - wxLogNull ln; // suppress all error messages - wxASSERT(m_PingPath.length()); - wxString cmd; - cmd << m_PingPath << ' '; + wxLogNull ln; // suppress all error messages + wxASSERT(m_PingPath.length()); + wxString cmd; + cmd << m_PingPath << wxT(' '); #if defined(__SOLARIS__) || defined (__SUNOS__) - // nothing to add to ping command -#elif defined(__LINUX__) || defined ( __FREEBSD__) - cmd << "-c 1 "; // only ping once + // nothing to add to ping command +#elif defined(__AIX__) || \ + defined (__BSD__) || \ + defined(__LINUX__) || \ + defined(__OSF__) || \ + defined(__SGI__) || \ + defined(__VMS) + cmd << wxT("-c 1 "); // only ping once #elif defined(__HPUX__) - cmd << "64 1 "; // only ping once (need also specify the packet size) + cmd << wxT("64 1 "); // only ping once (need also specify the packet size) #else -# pragma warning "No Ping information for this OS." - m_CanUsePing = 0; - return Net_Unknown; + #if defined(__GNUG__) + #warning "No Ping information for this OS." + #else + #pragma warning "No Ping information for this OS." + #endif + + m_CanUsePing = 0; + return Net_Unknown; #endif - cmd << m_BeaconHost; - if(wxExecute(cmd, TRUE /* sync */) == 0) - return Net_Connected; - else - return Net_No; + cmd << m_BeaconHost; + if(wxExecute(cmd, true /* sync */) == 0) + return Net_Connected; + else + return Net_No; } /* static */