// the "well-known host" (as specified by SetWellKnownHost) is reachable
virtual bool IsOnline() const
{
- if( (! m_timer) // we are not polling, so test now:
- || m_IsOnline < 0
- )
- CheckStatus();
- return m_IsOnline != 0;
+ CheckStatus();
+ return m_IsOnline > 0;
}
/// do we have a constant net connection? -- GUESS!
/// real status check
void CheckStatusInternal(void);
+ /// Check /proc/net (Linux only)
+ int CheckProcNet(void);
/// Check output of ifconfig command for PPP/SLIP/PLIP devices
int CheckIfconfig(void);
/// Ping a host: 1 on success, -1 if it cannot be used, 0 if unreachable
if ( async )
{
m_DialProcess = new wxDialProcess(this);
- m_DialPId = wxExecute(cmd, FALSE, m_DialProcess);
+ m_DialPId = (int)wxExecute(cmd, FALSE, m_DialProcess);
if(m_DialPId == 0)
{
delete m_DialProcess;
int testResult;
- testResult = CheckConnect();
+ testResult = CheckProcNet();
if(testResult == -1)
testResult = CheckIfconfig();
+ if(testResult == -1)
+ testResult = CheckConnect();
if(testResult == -1)
testResult = CheckPing();
- m_IsOnline = testResult;
+ m_IsOnline = testResult;
}
int
return -1;
}
+
+int
+wxDialUpManagerImpl::CheckProcNet(void)
+{
+ int rc = -1;
+
+#ifdef __LINUX__
+ if (wxFileExists(_T("/proc/net/route")))
+ {
+ // NOTE: cannot use wxFile::Length because file doesn't support
+ // seeking
+ FILE *f = fopen("/proc/net/route", "rt");
+ if (f != NULL)
+ {
+ char output[256];
+
+ while (fgets(output, 256, f) != NULL)
+ {
+ if (strstr(output,"ppp") // ppp
+ || strstr(output,"sl") // slip
+ || strstr(output,"pl")) // plip
+ rc = 1;
+ }
+ if (rc == -1) rc = 0;
+ fclose(f);
+ }
+ }
+#endif
+
+ return rc;
+}
+
+
int
wxDialUpManagerImpl::CheckIfconfig(void)
{
#if defined(__SOLARIS__) || defined (__SUNOS__)
// need to add -a flag
cmd << " -a";
-#elif defined(__LINUX__) || defined (__FREEBSD__) || defined(__SGI__)
+#elif defined(__LINUX__) || defined(__SGI__)
// nothing to be added to ifconfig
+#elif defined(__FREEBSD__)
+ // add -l flag
+ cmd << " -l";
+#elif defined(__HPUX__)
+ // VZ: a wild guess (but without it, ifconfig fails completely)
+ cmd << _T(" ppp0");
#else
# pragma warning "No ifconfig information for this OS."
m_CanUseIfconfig = 0;
|| strstr(output,"sl") // slip
|| strstr(output,"pl"); // plip
#elif defined(__SGI__) // IRIX
- rc = strstr(output, "ppp"); // PPP
+ rc = (int) strstr(output, "ppp"); // PPP
+#elif defined(__HPUX__)
+ // if could run ifconfig on interface, then it exists
+ rc = TRUE;
#endif
}
file.Close();
m_CanUseIfconfig = 0; // donĀ“t try again
(void) wxRemoveFile(tmpfile);
}
- return rc;
+
+ return rc;
}
int
cmd << m_PingPath << ' ';
#if defined(__SOLARIS__) || defined (__SUNOS__)
// nothing to add to ping command
-#elif defined(__LINUX__)
+#elif defined(__LINUX__) || defined ( __FREEBSD__)
cmd << "-c 1 "; // only ping once
+#elif defined(__HPUX__)
+ cmd << "64 1 "; // only ping once (need also specify the packet size)
#else
# pragma warning "No Ping information for this OS."
m_CanUsePing = 0;