]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/dialup.cpp
Revised #ifndef WX_PRECOMP headers, added missing #include wx/wxcrtvararg.h
[wxWidgets.git] / src / unix / dialup.cpp
index f64e45fd903055a597e087040c419fea49e12cba..79b35d5370056078e090e7d18a09ebda929fd615 100644 (file)
@@ -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 <stdlib.h>
 
@@ -46,6 +43,9 @@
 #include <arpa/inet.h>
 #include <errno.h>
 
+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 */