2
Copyright 2013 Jan Grulich <jgrulich@redhat.com>
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Lesser General Public
6
License as published by the Free Software Foundation; either
7
version 2.1 of the License, or (at your option) version 3, or any
8
later version accepted by the membership of KDE e.V. (or its
9
successor approved by the membership of KDE e.V.), which shall
10
act as a proxy defined in Section 6 of version 3 of the license.
12
This library is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
Lesser General Public License for more details.
17
You should have received a copy of the GNU Lesser General Public
18
License along with this library. If not, see <http://www.gnu.org/licenses/>.
24
#include "lib/editor/connectiondetaileditor.h"
26
#include <NetworkManagerQt/Manager>
27
#include <NetworkManagerQt/AccessPoint>
28
#include <NetworkManagerQt/WiredDevice>
29
#include <NetworkManagerQt/WirelessDevice>
30
#include <NetworkManagerQt/Settings>
31
#include <NetworkManagerQt/Setting>
32
#include <NetworkManagerQt/Utils>
33
#include <NetworkManagerQt/ConnectionSettings>
34
#include <NetworkManagerQt/WiredSetting>
35
#include <NetworkManagerQt/WirelessSetting>
36
#include <NetworkManagerQt/ActiveConnection>
38
#include <QInputDialog>
42
#include <KWindowSystem>
44
Handler::Handler(QObject* parent):
53
void Handler::activateConnection(const QString& connection, const QString& device, const QString& specificObject)
55
NetworkManager::Connection::Ptr con = NetworkManager::findConnection(connection);
58
NMHandlerDebug() << "Not possible to activate this connection";
61
NMHandlerDebug() << "Activating " << con->name() << " connection";
63
NetworkManager::activateConnection(connection, device, specificObject);
66
void Handler::addAndActivateConnection(const QString& device, const QString& specificObject, const QString& password, bool autoConnect)
68
NetworkManager::AccessPoint::Ptr ap;
69
NetworkManager::WirelessDevice::Ptr wifiDev;
70
foreach (const NetworkManager::Device::Ptr & dev, NetworkManager::networkInterfaces()) {
71
if (dev->type() == NetworkManager::Device::Wifi) {
72
wifiDev = dev.objectCast<NetworkManager::WirelessDevice>();
73
ap = wifiDev->findAccessPoint(specificObject);
84
NetworkManager::ConnectionSettings::Ptr settings = NetworkManager::ConnectionSettings::Ptr(new NetworkManager::ConnectionSettings(NetworkManager::ConnectionSettings::Wireless));
85
settings->setId(ap->ssid());
86
settings->setUuid(NetworkManager::ConnectionSettings::createNewUuid());
87
settings->setAutoconnect(autoConnect);
88
settings->addToPermissions(KUser().loginName(), QString());
90
NetworkManager::WirelessSetting::Ptr wifiSetting = settings->setting(NetworkManager::Setting::Wireless).dynamicCast<NetworkManager::WirelessSetting>();
91
wifiSetting->setInitialized(true);
92
wifiSetting = settings->setting(NetworkManager::Setting::Wireless).dynamicCast<NetworkManager::WirelessSetting>();
93
wifiSetting->setSsid(ap->ssid().toUtf8());
95
NetworkManager::WirelessSecuritySetting::Ptr wifiSecurity = settings->setting(NetworkManager::Setting::WirelessSecurity).dynamicCast<NetworkManager::WirelessSecuritySetting>();
97
NetworkManager::Utils::WirelessSecurityType securityType = NetworkManager::Utils::findBestWirelessSecurity(wifiDev->wirelessCapabilities(), true, (ap->mode() == NetworkManager::AccessPoint::Adhoc), ap->capabilities(), ap->wpaFlags(), ap->rsnFlags());
99
if (securityType != NetworkManager::Utils::None) {
100
wifiSecurity->setInitialized(true);
101
wifiSetting->setSecurity("802-11-wireless-security");
104
if (securityType == NetworkManager::Utils::Leap ||
105
securityType == NetworkManager::Utils::DynamicWep ||
106
securityType == NetworkManager::Utils::Wpa2Eap ||
107
securityType == NetworkManager::Utils::WpaEap) {
108
if (securityType == NetworkManager::Utils::DynamicWep || securityType == NetworkManager::Utils::Leap) {
109
wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::Ieee8021x);
110
if (securityType == NetworkManager::Utils::Leap) {
111
wifiSecurity->setAuthAlg(NetworkManager::WirelessSecuritySetting::Leap);
114
wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaEap);
116
m_tmpConnectionUuid = settings->uuid();
117
m_tmpDevicePath = device;
118
m_tmpSpecificPath = specificObject;
120
QPointer<ConnectionDetailEditor> editor = new ConnectionDetailEditor(settings, 0, 0, true);
122
KWindowSystem::setState(editor->winId(), NET::KeepAbove);
123
KWindowSystem::forceActiveWindow(editor->winId());
124
connect(editor, SIGNAL(accepted()), SLOT(editDialogAccepted()));
126
if (securityType == NetworkManager::Utils::StaticWep) {
127
wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::Wep);
128
wifiSecurity->setWepKey0(password);
129
wifiSecurity->setWepKeyFlags(NetworkManager::Setting::AgentOwned);
131
wifiSecurity->setKeyMgmt(NetworkManager::WirelessSecuritySetting::WpaPsk);
132
wifiSecurity->setPsk(password);
133
wifiSecurity->setPskFlags(NetworkManager::Setting::AgentOwned);
135
NetworkManager::addAndActivateConnection(settings->toMap(), device, specificObject);
141
void Handler::deactivateConnection(const QString& connection)
143
NetworkManager::Connection::Ptr con = NetworkManager::findConnection(connection);
146
NMHandlerDebug() << "Not possible to deactivate this connection";
150
foreach (const NetworkManager::ActiveConnection::Ptr & active, NetworkManager::activeConnections()) {
151
if (active->uuid() == con->uuid()) {
153
NetworkManager::deactivateConnection(active->path());
155
if (active->devices().isEmpty()) {
156
NetworkManager::deactivateConnection(connection);
158
NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(active->devices().first());
160
device->disconnectInterface();
166
NMHandlerDebug() << "Deactivating " << con->name() << " connection";
169
void Handler::disconnectAll()
171
foreach (const NetworkManager::Device::Ptr & device, NetworkManager::networkInterfaces()) {
172
device->disconnectInterface();
176
void Handler::enableNetworking(bool enable)
178
NMHandlerDebug() << "Networking enabled: " << enable;
179
NetworkManager::setNetworkingEnabled(enable);
182
void Handler::enableWireless(bool enable)
184
NMHandlerDebug() << "Wireless enabled: " << enable;
185
NetworkManager::setWirelessEnabled(enable);
188
void Handler::enableWimax(bool enable)
190
NMHandlerDebug() << "Wimax enabled: " << enable;
191
NetworkManager::setWimaxEnabled(enable);
194
void Handler::enableWwan(bool enable)
196
NMHandlerDebug() << "Wwan enabled: " << enable;
197
NetworkManager::setWwanEnabled(enable);
200
void Handler::editConnection(const QString& uuid)
204
KProcess::startDetached("kde-nm-connection-editor", args);
207
void Handler::removeConnection(const QString& connection)
209
NetworkManager::Connection::Ptr con = NetworkManager::findConnection(connection);
211
if (!con || con->uuid().isEmpty()) {
212
NMHandlerDebug() << "Not possible to remove this connection";
216
foreach (const NetworkManager::Connection::Ptr &masterConnection, NetworkManager::listConnections()) {
217
NetworkManager::ConnectionSettings::Ptr settings = masterConnection->settings();
218
if (settings->master() == con->uuid()) {
219
masterConnection->remove();
226
void Handler::openEditor()
228
KProcess::startDetached("kde-nm-connection-editor");
232
void Handler::editDialogAccepted()
234
NetworkManager::Connection::Ptr newConnection = NetworkManager::findConnectionByUuid(m_tmpConnectionUuid);
236
activateConnection(newConnection->path(), m_tmpDevicePath, m_tmpSpecificPath);