added Linux-only /proc/net/route check, IsOnline proceeds check always, not only if timer is not running, changed order of tests (/proc/net, ifconfig, connect to well-known host, ping)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5798 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -104,11 +104,8 @@ public:
|
|||||||
// the "well-known host" (as specified by SetWellKnownHost) is reachable
|
// the "well-known host" (as specified by SetWellKnownHost) is reachable
|
||||||
virtual bool IsOnline() const
|
virtual bool IsOnline() const
|
||||||
{
|
{
|
||||||
if( (! m_timer) // we are not polling, so test now:
|
|
||||||
|| m_IsOnline < 0
|
|
||||||
)
|
|
||||||
CheckStatus();
|
CheckStatus();
|
||||||
return m_IsOnline != 0;
|
return m_IsOnline > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// do we have a constant net connection? -- GUESS!
|
/// do we have a constant net connection? -- GUESS!
|
||||||
@@ -203,6 +200,8 @@ private:
|
|||||||
/// real status check
|
/// real status check
|
||||||
void CheckStatusInternal(void);
|
void CheckStatusInternal(void);
|
||||||
|
|
||||||
|
/// Check /proc/net (Linux only)
|
||||||
|
int CheckProcNet(void);
|
||||||
/// Check output of ifconfig command for PPP/SLIP/PLIP devices
|
/// Check output of ifconfig command for PPP/SLIP/PLIP devices
|
||||||
int CheckIfconfig(void);
|
int CheckIfconfig(void);
|
||||||
/// Ping a host: 1 on success, -1 if it cannot be used, 0 if unreachable
|
/// Ping a host: 1 on success, -1 if it cannot be used, 0 if unreachable
|
||||||
@@ -447,9 +446,11 @@ wxDialUpManagerImpl::CheckStatusInternal(void)
|
|||||||
|
|
||||||
int testResult;
|
int testResult;
|
||||||
|
|
||||||
testResult = CheckConnect();
|
testResult = CheckProcNet();
|
||||||
if(testResult == -1)
|
if(testResult == -1)
|
||||||
testResult = CheckIfconfig();
|
testResult = CheckIfconfig();
|
||||||
|
if(testResult == -1)
|
||||||
|
testResult = CheckConnect();
|
||||||
if(testResult == -1)
|
if(testResult == -1)
|
||||||
testResult = CheckPing();
|
testResult = CheckPing();
|
||||||
m_IsOnline = testResult;
|
m_IsOnline = testResult;
|
||||||
@@ -490,6 +491,39 @@ wxDialUpManagerImpl::CheckConnect(void)
|
|||||||
return -1;
|
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
|
int
|
||||||
wxDialUpManagerImpl::CheckIfconfig(void)
|
wxDialUpManagerImpl::CheckIfconfig(void)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user