Autoconfiguration for Linux
Change-Id: I6874628f29de327e5ece7ffddf3433cbc88de968
diff --git a/linux/main.cpp b/linux/main.cpp
index f1fc24e..867abdb 100644
--- a/linux/main.cpp
+++ b/linux/main.cpp
@@ -6,7 +6,7 @@
*/
#include <QtGui/QApplication>
-#include "traymenu.h"
+#include "tray-menu.h"
int main(int argc, char *argv[])
{
diff --git a/linux/network-manager.cpp b/linux/network-manager.cpp
new file mode 100644
index 0000000..22e63d2
--- /dev/null
+++ b/linux/network-manager.cpp
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "network-manager.h"
+#include <QProcess>
+
+NetworkManager::NetworkManager()
+{
+ if (!QDBusConnection::systemBus().isConnected())
+ {
+ qDebug() << "Cannot connect to the D-Bus session bus.\n";
+ return;
+ }
+
+ QDBusConnection::systemBus().connect("org.freedesktop.NetworkManager",
+ "/org/freedesktop/NetworkManager",
+ "org.freedesktop.NetworkManager",
+ "StateChanged", this, SLOT(stateChanged(uint)));
+}
+
+void NetworkManager::stateChanged(uint state)
+{
+ qDebug() << "State = " << state;
+
+ if(state == NM_STATE_CONNECTED_GLOBAL)
+ autoconfigDaemon();
+}
+
+void NetworkManager::autoconfigDaemon()
+{
+ QProcess *process = new QProcess();
+ process->start(NDND_AUTOCONFIG_COMMAND);
+}
diff --git a/linux/network-manager.h b/linux/network-manager.h
new file mode 100644
index 0000000..11e5ec7
--- /dev/null
+++ b/linux/network-manager.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include <QtDBus>
+
+#ifndef NETWORKMANAGER_H
+#define NETWORKMANAGER_H
+
+#define NDND_AUTOCONFIG_COMMAND "/usr/local/bin/ndnd-autoconfig"
+#define NM_STATE_DISCONNECTED 20
+#define NM_STATE_CONNECTING 40
+#define NM_STATE_CONNECTED_GLOBAL 70
+
+class NetworkManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ NetworkManager();
+
+private:
+ void autoconfigDaemon();
+
+private slots:
+ void stateChanged(uint state);
+};
+
+
+#endif // NETWORKMANAGER_H
diff --git a/linux/tray-menu.cpp b/linux/tray-menu.cpp
index 3d96ac9..40eb98e 100644
--- a/linux/tray-menu.cpp
+++ b/linux/tray-menu.cpp
@@ -9,6 +9,7 @@
#include "ui_traymenu.h" //generated from traymenu.ui
#include "quit-dialog.h"
#include "fib-input-dialog.h"
+#include "network-manager.h"
#include <QMenu>
#include <QCloseEvent>
@@ -39,6 +40,8 @@
startDaemon();
+ networkManager = new NetworkManager();
+
connect(ui->openTrafficMapButton, SIGNAL(pressed()), this, SLOT(openTrafficMap()));
connect(ui->openRoutingStatusButton, SIGNAL(pressed()), this, SLOT(openRoutingStatus()));
connect(ui->addFibButton, SIGNAL(pressed()), this, SLOT(showFibInputDialog()));
diff --git a/linux/tray-menu.h b/linux/tray-menu.h
index 045bb09..c5dfd66 100644
--- a/linux/tray-menu.h
+++ b/linux/tray-menu.h
@@ -19,8 +19,9 @@
#include <QStandardItemModel>
#include <QtXml>
-#include "FibInputDialog.h"
-#include "QuitDialog.h"
+#include "fib-input-dialog.h"
+#include "quit-dialog.h"
+#include "network-manager.h"
#define NDND_START_COMMAND "/usr/local/bin/ndndstart"
#define NDND_STOP_COMMAND "/usr/local/bin/ndndstop"
@@ -79,6 +80,8 @@
bool enableStartOnLogin;
bool shutdownOnExit;
+ NetworkManager *networkManager;
+
private slots:
void trayIconClicked(QSystemTrayIcon::ActivationReason);
void generalSettingsClicked();