// -*- c++ -*- ////////////////////////////////////////////////////////////////
-// Name: unix/dialup.cpp
+// Name: src/unix/dialup.cpp
// Purpose: Network related wxWidgets classes and functions
-// Author: Karsten Ballüder
+// Author: Karsten Ballüder
// Modified by:
// Created: 03.10.99
// RCS-ID: $Id$
-// Copyright: (c) Karsten Ballüder
+// Copyright: (c) Karsten Ballüder
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-# pragma implementation "dialup.h"
-#endif
-
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#include "wx/setup.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/filename.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>
#include <arpa/inet.h>
#include <errno.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 );
// ----------------------------------------------------------------------------
// A class which groups functions dealing with connecting to the network from a
{
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
virtual void Notify()
{
- wxLogTrace(_T("dialup"), wxT("Checking dial up network status."));
+ wxLogTrace(wxT("dialup"), wxT("Checking dial up network status."));
m_dupman->CheckStatus();
}
m_BeaconPort = 80;
#ifdef __SGI__
- m_ConnectCommand = _T("/usr/etc/ppp");
+ m_ConnectCommand = wxT("/usr/etc/ppp");
#elif defined(__LINUX__)
// default values for Debian/GNU linux
- m_ConnectCommand = _T("pon");
- m_HangUpCommand = _T("poff");
+ m_ConnectCommand = wxT("pon");
+ m_HangUpCommand = wxT("poff");
#endif
- wxChar * dial = wxGetenv(_T("WXDIALUP_DIALCMD"));
- wxChar * hup = wxGetenv(_T("WXDIALUP_HUPCMD"));
+ wxChar * dial = wxGetenv(wxT("WXDIALUP_DIALCMD"));
+ wxChar * hup = wxGetenv(wxT("WXDIALUP_HUPCMD"));
SetConnectCommand(dial ? wxString(dial) : m_ConnectCommand,
hup ? wxString(hup) : m_HangUpCommand);
}
m_DialPId = (int)wxExecute(cmd, false, m_DialProcess);
if(m_DialPId == 0)
{
- delete m_DialProcess;
- m_DialProcess = NULL;
+ wxDELETE(m_DialProcess);
return false;
}
else
bool rc = m_timer->Start(nSeconds*1000);
if(! rc)
{
- delete m_timer;
- m_timer = NULL;
+ wxDELETE(m_timer);
}
return rc;
}
if(m_timer != NULL)
{
m_timer->Stop();
- delete m_timer;
- m_timer = NULL;
+ wxDELETE(m_timer);
}
}
void wxDialUpManagerImpl::SetWellKnownHost(const wxString& hostname, int portno)
{
- if(hostname.Length() == 0)
+ if( hostname.empty() )
{
m_BeaconHost = WXDIALUP_MANAGER_DEFAULT_BEACONHOST;
m_BeaconPort = 80;
// does hostname contain a port number?
wxString port = hostname.After(wxT(':'));
- if(port.Length())
+ if( !port.empty() )
{
m_BeaconHost = hostname.Before(wxT(':'));
m_BeaconPort = wxAtoi(port);
break;
default:
- wxFAIL_MSG(_T("Unexpected netDeviceType"));
+ wxFAIL_MSG(wxT("Unexpected netDeviceType"));
}
}
}
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
}
}
int netDevice = NetDevice_Unknown;
#ifdef __LINUX__
- if (wxFileExists(_T("/proc/net/route")))
+ if (wxFileExists(wxT("/proc/net/route")))
{
// cannot use wxFile::Length because file doesn't support seeking, so
// use stdio directly
while (fgets(output, 256, f) != NULL)
{
- if ( strstr(output, "eth") ) // network card
+ // Test for the known network interface names
+ if ( strstr(output, "eth")
+ || strstr(output, "wlan")
+ || strstr(output, "ath") )
{
netDevice |= NetDevice_LAN;
}
// first time check for ifconfig location
if ( m_CanUseIfconfig == -1 ) // unknown
{
- static const wxChar *ifconfigLocations[] =
+ static const wxChar *const ifconfigLocations[] =
{
- _T("/sbin"), // Linux, FreeBSD, Darwin
- _T("/usr/sbin"), // SunOS, Solaris, AIX, HP-UX
- _T("/usr/etc"), // IRIX
+ wxT("/sbin"), // Linux, FreeBSD, Darwin
+ wxT("/usr/sbin"), // SunOS, Solaris, AIX, HP-UX
+ wxT("/usr/etc"), // IRIX
+ wxT("/etc"), // AIX 5
};
for ( size_t n = 0; n < WXSIZEOF(ifconfigLocations); n++ )
{
wxString path(ifconfigLocations[n]);
- path << _T("/ifconfig");
+ path << wxT("/ifconfig");
if ( wxFileExists(path) )
{
{
wxLogNull ln; // suppress all error messages
- wxASSERT_MSG( m_IfconfigPath.length(),
- _T("can't use ifconfig if it wasn't found") );
+ wxASSERT_MSG( !m_IfconfigPath.empty(),
+ wxT("can't use ifconfig if it wasn't found") );
- wxString tmpfile = wxGetTempFileName( wxT("_wxdialuptest") );
+ wxString tmpfile = wxFileName::CreateTempFileName( 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 << wxT(" -a");
#elif defined(__LINUX__) || defined(__SGI__)
// nothing to be added to ifconfig
-#elif defined(__FREEBSD__) || defined(__DARWIN__)
+#elif defined(__FREEBSD__) || defined(__DARWIN__) || defined(__QNX__)
// add -l flag
cmd << wxT(" -l");
#elif defined(__HPUX__)
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
+ 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 defined(__SOLARIS__) || defined (__SUNOS__)
// dialup device under SunOS/Solaris
- hasModem = strstr(output.fn_str(),"ipdptp") != (char *)NULL;
- hasLAN = strstr(output.fn_str(), "hme") != (char *)NULL;
-#elif defined(__LINUX__) || defined (__FREEBSD__)
+ hasModem = strstr(output.fn_str(),"ipdptp") != NULL;
+ hasLAN = strstr(output.fn_str(), "hme") != NULL;
+#elif defined(__LINUX__) || defined (__FREEBSD__) || defined (__QNX__)
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;
}
else // could not run ifconfig correctly
{
- m_CanUseIfconfig = 0; // don´t try again
+ m_CanUseIfconfig = 0; // don't try again
}
(void) wxRemoveFile(tmpfile);
#ifdef __VMS
if (wxFileExists( wxT("SYS$SYSTEM:TCPIP$PING.EXE") ))
m_PingPath = wxT("$SYS$SYSTEM:TCPIP$PING");
+#elif defined(__AIX__)
+ m_PingPath = wxT("/etc/ping");
+#elif defined(__SGI__)
+ m_PingPath = wxT("/usr/etc/ping");
#else
if (wxFileExists( wxT("/bin/ping") ))
m_PingPath = wxT("/bin/ping");
cmd << m_PingPath << wxT(' ');
#if defined(__SOLARIS__) || defined (__SUNOS__)
// nothing to add to ping command
-#elif defined(__LINUX__) || defined (__BSD__) || defined( __VMS )
+#elif defined(__AIX__) || \
+ defined (__BSD__) || \
+ defined(__LINUX__) || \
+ defined(__OSF__) || \
+ defined(__SGI__) || \
+ defined(__VMS) || \
+ defined(__QNX__)
cmd << wxT("-c 1 "); // only ping once
#elif defined(__HPUX__)
cmd << wxT("64 1 "); // only ping once (need also specify the packet size)