summaryrefslogtreecommitdiffstats
path: root/kopete/plugins/smpppdcs/detectornetstat.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitbcb704366cb5e333a626c18c308c7e0448a8e69f (patch)
treef0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /kopete/plugins/smpppdcs/detectornetstat.cpp
downloadtdenetwork-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.cpp76
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"