diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | bcb704366cb5e333a626c18c308c7e0448a8e69f (patch) | |
tree | f0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /kopete/plugins/smpppdcs/detectornetstat.cpp | |
download | tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.tar.gz tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kopete/plugins/smpppdcs/detectornetstat.cpp')
-rw-r--r-- | kopete/plugins/smpppdcs/detectornetstat.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/kopete/plugins/smpppdcs/detectornetstat.cpp b/kopete/plugins/smpppdcs/detectornetstat.cpp new file mode 100644 index 00000000..60dff658 --- /dev/null +++ b/kopete/plugins/smpppdcs/detectornetstat.cpp @@ -0,0 +1,76 @@ +/* + detectornetstat.cpp + + Copyright (c) 2004-2006 by Heiko Schaefer <heiko@rangun.de> + + Kopete (c) 2002-2006 by the Kopete developers <kopete-devel@kde.org> + + ************************************************************************* + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; version 2 of the License. * + * * + ************************************************************************* +*/ + +#include <kdebug.h> +#include <kprocess.h> + +#include "iconnector.h" +#include "detectornetstat.h" + +DetectorNetstat::DetectorNetstat(IConnector* connector) + : Detector(connector), m_buffer(QString::null), m_process(NULL) {} + +DetectorNetstat::~DetectorNetstat() { + delete m_process; +} + +void DetectorNetstat::checkStatus() const { + kdDebug(14312) << k_funcinfo << endl; + + if(m_process) { + kdWarning(14312) << k_funcinfo << "Previous netstat process is still running!" << endl + << "Not starting new netstat. Perhaps your system is under heavy load?" << endl; + + return; + } + + m_buffer = QString::null; + + // Use KProcess to run netstat -r. We'll then parse the output of + // netstat -r in slotProcessStdout() to see if it mentions the + // default gateway. If so, we're connected, if not, we're offline + m_process = new KProcess; + *m_process << "netstat" << "-r"; + + connect(m_process, SIGNAL(receivedStdout(KProcess *, char *, int)), this, SLOT(slotProcessStdout( KProcess *, char *, int))); + connect(m_process, SIGNAL(processExited(KProcess *)), this, SLOT(slotProcessExited(KProcess *))); + + if(!m_process->start(KProcess::NotifyOnExit, KProcess::Stdout)) { + kdWarning(14312) << k_funcinfo << "Unable to start netstat process!" << endl; + + delete m_process; + m_process = 0L; + } +} + +void DetectorNetstat::slotProcessStdout(KProcess *, char *buffer, int buflen) { + // Look for a default gateway + kdDebug(14312) << k_funcinfo << endl; + m_buffer += QString::fromLatin1(buffer, buflen); + kdDebug(14312) << m_buffer << endl; +} + +void DetectorNetstat::slotProcessExited(KProcess *process) { + kdDebug(14312) << k_funcinfo << m_buffer << endl; + if(process == m_process) { + m_connector->setConnectedStatus(m_buffer.contains("default")); + m_buffer = QString::null; + delete m_process; + m_process = 0L; + } +} + +#include "detectornetstat.moc" |