]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/dialup.cpp
send wxEVT_MENU_CLOSE at least sometimes
[wxWidgets.git] / src / unix / dialup.cpp
index 3fb0ef31153ef1b380c4ed7edd8264962ca4995e..3f96dfba4669cef1767a80c706f2515a0f8292f8 100644 (file)
@@ -1,6 +1,6 @@
 // -*- c++ -*- ////////////////////////////////////////////////////////////////
 // Name:        unix/dialup.cpp
 // -*- c++ -*- ////////////////////////////////////////////////////////////////
 // Name:        unix/dialup.cpp
-// Purpose:     Network related wxWindows classes and functions
+// Purpose:     Network related wxWidgets classes and functions
 // Author:      Karsten Ballüder
 // Modified by:
 // Created:     03.10.99
 // Author:      Karsten Ballüder
 // Modified by:
 // Created:     03.10.99
@@ -9,11 +9,10 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "wx/setup.h"
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
 
 
-#ifdef __GNUG__
-#   pragma implementation "dialup.h"
-#endif
+#include "wx/setup.h"
 
 #if wxUSE_DIALUP_MANAGER
 
 
 #if wxUSE_DIALUP_MANAGER
 
@@ -79,16 +78,16 @@ public:
    ~wxDialUpManagerImpl();
 
    /** Could the dialup manager be initialized correctly? If this function
    ~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
        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
 
    /** 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
        message in the latter case.
        @param nameOfISP optional paramater for dial program
        @param username unused
@@ -102,7 +101,7 @@ public:
    // Hang up the currently active dial up connection.
    virtual bool HangUp();
 
    // 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
    // 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
@@ -114,11 +113,11 @@ public:
    // do we have a constant net connection?
    virtual bool IsAlwaysOnline() const;
 
    // 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; }
 
    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();
 
    // NB: this won't result in DISCONNECTED event being sent
    virtual bool CancelDialing();
 
@@ -129,7 +128,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.
    // 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
       { m_IsOnline = isOnline ? Net_Connected : Net_No; }
 
    // set misc wxDialUpManager options
@@ -141,7 +140,7 @@ public:
    // Windows, the notification about the change of connection status is
    // instantenous.
    //
    // 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
    virtual bool EnableAutoCheckOnlineStatus(size_t nSeconds);
 
    // disable automatic check for connection status change - notice that the
@@ -219,7 +218,7 @@ private:
    friend class wxDialProcess;
 
    // determine status
    friend class wxDialProcess;
 
    // determine status
-   void CheckStatus(bool fromAsync = FALSE) const;
+   void CheckStatus(bool fromAsync = false) const;
 
    // real status check
    void CheckStatusInternal();
 
    // real status check
    void CheckStatusInternal();
@@ -247,21 +246,18 @@ class AutoCheckTimer : public wxTimer
 {
 public:
    AutoCheckTimer(wxDialUpManagerImpl *dupman)
 {
 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()
 
    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:
 public:
-   bool m_started;
    wxDialUpManagerImpl *m_dupman;
 };
 
    wxDialUpManagerImpl *m_dupman;
 };
 
@@ -278,7 +274,7 @@ public:
          if(m_DupMan)
          {
             m_DupMan->m_DialProcess = NULL;
          if(m_DupMan)
          {
             m_DupMan->m_DialProcess = NULL;
-            m_DupMan->CheckStatus(TRUE);
+            m_DupMan->CheckStatus(true);
          }
       }
 private:
          }
       }
 private:
@@ -327,54 +323,54 @@ wxDialUpManagerImpl::Dial(const wxString &isp,
                           const wxString & WXUNUSED(password),
                           bool async)
 {
                           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()
 {
 }
 
 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())
 }
 
 
 bool wxDialUpManagerImpl::CancelDialing()
 {
    if(! IsDialing())
-      return FALSE;
+      return false;
    return kill(m_DialPId, SIGTERM) > 0;
 }
 
    return kill(m_DialPId, SIGTERM) > 0;
 }
 
@@ -640,10 +636,10 @@ int
 wxDialUpManagerImpl::CheckIfconfig()
 {
 #ifdef __VMS
 wxDialUpManagerImpl::CheckIfconfig()
 {
 #ifdef __VMS
-       m_CanUseIfconfig = 0;
-        return -1;
+    m_CanUseIfconfig = 0;
+    return -1;
 #else
 #else
-   // assume that the test doesn't work
+    // assume that the test doesn't work
     int netDevice = NetDevice_Unknown;
 
     // first time check for ifconfig location
     int netDevice = NetDevice_Unknown;
 
     // first time check for ifconfig location
@@ -654,6 +650,7 @@ wxDialUpManagerImpl::CheckIfconfig()
             _T("/sbin"),         // Linux, FreeBSD, Darwin
             _T("/usr/sbin"),     // SunOS, Solaris, AIX, HP-UX
             _T("/usr/etc"),      // IRIX
             _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++ )
         };
 
         for ( size_t n = 0; n < WXSIZEOF(ifconfigLocations); n++ )
@@ -676,31 +673,38 @@ wxDialUpManagerImpl::CheckIfconfig()
         wxASSERT_MSG( m_IfconfigPath.length(),
                       _T("can't use ifconfig if it wasn't found") );
 
         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;
         cmd << m_IfconfigPath;
-#if defined(__SOLARIS__) || defined (__SUNOS__)
+#if defined(__AIX__) || \
+    defined(__OSF__) || \
+    defined(__SOLARIS__) || defined (__SUNOS__)
         // need to add -a flag
         // need to add -a flag
-        cmd << " -a";
+        cmd << wxT(" -a");
 #elif defined(__LINUX__) || defined(__SGI__)
         // nothing to be added to ifconfig
 #elif defined(__FREEBSD__) || defined(__DARWIN__)
         // add -l flag
 #elif defined(__LINUX__) || defined(__SGI__)
         // nothing to be added to ifconfig
 #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)
 #elif defined(__HPUX__)
         // VZ: a wild guess (but without it, ifconfig fails completely)
-        cmd << _T(" ppp0");
+        cmd << wxT(" ppp0");
 #else
 #else
-# pragma warning "No ifconfig information for this OS."
-       m_CanUseIfconfig = 0;
+        #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
         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) */
         /* 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;
         {
             m_CanUseIfconfig = 1;
             wxFFile file;
@@ -711,23 +715,23 @@ wxDialUpManagerImpl::CheckIfconfig()
                 {
                     // FIXME shouldn't we grep for "^ppp"? (VZ)
 
                 {
                     // 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
 
 #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__)
 #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
 #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
 #elif defined(__HPUX__)
                     // if could run ifconfig on interface, then it exists
-                    hasModem = TRUE;
+                    hasModem = true;
 #endif
 
                     netDevice = NetDevice_None;
 #endif
 
                     netDevice = NetDevice_None;
@@ -754,51 +758,65 @@ wxDialUpManagerImpl::CheckIfconfig()
 
 wxDialUpManagerImpl::NetConnection wxDialUpManagerImpl::CheckPing()
 {
 
 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
-   {
+    // 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
 #ifdef __VMS
-      if(wxFileExists("SYS$SYSTEM:TCPIP$PING.EXE"))
-         m_PingPath = "$SYS$SYSTEM:TCPIP$PING";
+        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
 #else
-      if(wxFileExists("/bin/ping"))
-         m_PingPath = "/bin/ping";
-      else if(wxFileExists("/usr/sbin/ping"))
-         m_PingPath = "/usr/sbin/ping";
+        if (wxFileExists( wxT("/bin/ping") ))
+            m_PingPath = wxT("/bin/ping");
+        else if (wxFileExists( wxT("/usr/sbin/ping") ))
+            m_PingPath = wxT("/usr/sbin/ping");
 #endif
 #endif
-      if(! m_PingPath)
-      {
-         m_CanUsePing = 0;
-      }
-   }
+        if (!m_PingPath)
+        {
+            m_CanUsePing = 0;
+        }
+    }
 
 
-   if(! m_CanUsePing)
-   {
+    if(! m_CanUsePing)
+    {
        // we didn't find ping
        return Net_Unknown;
        // 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__)
 #if defined(__SOLARIS__) || defined (__SUNOS__)
-   // nothing to add to ping command
-#elif defined(__LINUX__) || defined ( __FREEBSD__) || defined(__DARWIN__) || defined( __VMS )
-   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__)
 #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
 #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
 #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 */
 }
 
 /* static */