• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

SolidModules

NetworkManager-networkinterface.cpp

Go to the documentation of this file.
00001 /*  This file is part of the KDE project
00002     Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
00003     Copyright (C) 2008 Pino Toscano <pino@kde.org>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License version 2 as published by the Free Software Foundation.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public License
00015     along with this library; see the file COPYING.LIB.  If not, write to
00016     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017     Boston, MA 02110-1301, USA.
00018 
00019 */
00020 
00021 #include "NetworkManager-networkinterface.h"
00022 #include "NetworkManager-networkinterface_p.h"
00023 
00024 #include <QtDBus/QDBusConnection>
00025 #include <QtDBus/QDBusReply>
00026 
00027 #include <kdebug.h>
00028 
00029 #include <solid/control/networkinterface.h>
00030 
00031 void dump(const NMDBusDeviceProperties &device)
00032 {
00033     kDebug(1441)
00034         << "\n    path:" << device.path.path()
00035         << "\n    interface:" << device.interface
00036         << "\n    type:" << device.type
00037         << "\n    udi:" << device.udi
00038         << "\n    active:" << device.active
00039         << "\n    activationStage:" << device.activationStage
00040         << "\n    ipv4Address:" << device.ipv4Address
00041         << "\n    subnetMask:" << device.subnetMask
00042         << "\n    broadcast:" << device.broadcast
00043         << "\n    hardwareAddress:" << device.hardwareAddress
00044         << "\n    route:" << device.route
00045         << "\n    primaryDNS:" << device.primaryDNS
00046         << "\n    secondaryDNS:" << device.secondaryDNS
00047         << "\n    strength:" << device.strength
00048         << "\n    linkActive:" << device.linkActive
00049         << "\n    speed:" << device.speed
00050         << "\n    capabilities:" << device.capabilities
00051         << "\n    capabilitiesType:" << device.capabilitiesType
00052         << "\n    activeNetPath:" << device.activeNetPath
00053         << "\n    networks:" << device.networks
00054         ;
00055 }
00056 
00057 void deserialize(const QDBusMessage &message, NMDBusDeviceProperties & device)
00058 {
00059     //kDebug(1441) << /*"deserialize args: " << message.arguments() << */"signature: " << message.signature();
00060     QList<QVariant> args = message.arguments();
00061     device.path = ((args.size() != 0) ? args.takeFirst().value<QDBusObjectPath>() : QDBusObjectPath());
00062     device.interface = (args.size() != 0) ? args.takeFirst().toString() : QString();
00063     device.type = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
00064     device.udi = (args.size() != 0) ? args.takeFirst().toString() : QString();
00065     device.active = (args.size() != 0) ? args.takeFirst().toBool() : false;
00066     device.activationStage = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
00067     device.ipv4Address = (args.size() != 0) ? args.takeFirst().toString() : QString();
00068     device.subnetMask = (args.size() != 0) ? args.takeFirst().toString() : QString();
00069     device.broadcast = (args.size() != 0) ? args.takeFirst().toString() : QString();
00070     device.hardwareAddress = (args.size() != 0) ? args.takeFirst().toString() : QString();
00071     device.route = (args.size() != 0) ? args.takeFirst().toString() : QString();
00072     device.primaryDNS = (args.size() != 0) ? args.takeFirst().toString() : QString();
00073     device.secondaryDNS = (args.size() != 0) ? args.takeFirst().toString() : QString();
00074     device.mode = (args.size() != 0) ? args.takeFirst().toInt() : 0;
00075     device.strength = (args.size() != 0) ? args.takeFirst().toInt() : 0;
00076     device.linkActive = (args.size() != 0) ? args.takeFirst().toBool() : false;
00077     device.speed = (args.size() != 0) ? args.takeFirst().toInt() : 0;
00078     device.capabilities = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
00079     device.capabilitiesType = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
00080     device.activeNetPath = (args.size() != 0) ? args.takeFirst().toString() : QString();
00081     device.networks = (args.size() != 0) ? args.takeFirst().toStringList() : QStringList();
00082 }
00083 
00084 quint32 parseIPv4Address(const QString & addressString)
00085 {
00086     const QStringList parts = addressString.split(QChar::fromLatin1('.'), QString::SkipEmptyParts);
00087     if (parts.count() != 4)
00088         return 0;
00089 
00090     quint32 address = 0;
00091     for (int i = 0; i < 4; ++i)
00092     {
00093         bool ok = false;
00094         const short value = parts.at(i).toShort(&ok);
00095         if (value < 0 || value > 255)
00096             return 0;
00097         address |= (value << ((3 - i) * 8));
00098     }
00099     return address;
00100 }
00101 
00102 Solid::Control::IPv4Config parseIPv4Config(const NMDBusDeviceProperties & dev)
00103 {
00104     Solid::Control::IPv4Address address(
00105         parseIPv4Address(dev.ipv4Address),
00106         parseIPv4Address(dev.subnetMask),
00107         parseIPv4Address(dev.route));
00108     quint32 broadcast = parseIPv4Address(dev.broadcast);
00109     QList<quint32> dnsServers;
00110     dnsServers.append(parseIPv4Address(dev.primaryDNS));
00111     dnsServers.append(parseIPv4Address(dev.secondaryDNS));
00112     return Solid::Control::IPv4Config(
00113         QList<Solid::Control::IPv4Address>() << address,
00114         broadcast, QString() /* hostname */, dnsServers,
00115         QStringList() /* domains */, QString() /* nisDomain */,
00116         QList<quint32>() /* nisServers */);
00117 }
00118 
00119 
00120 NMNetworkInterfacePrivate::NMNetworkInterfacePrivate(const QString  & objPath)
00121     : iface(NM_DBUS_SERVICE, objPath, NM_DBUS_INTERFACE_DEVICES, QDBusConnection::systemBus())
00122     , objectPath(objPath)
00123     , manager(0)
00124     , active(false)
00125     , type(Solid::Control::NetworkInterface::UnknownType)
00126     , activationStage(NM_ACT_STAGE_UNKNOWN)
00127     , designSpeed(0)
00128 {
00129 }
00130 
00131 NMNetworkInterfacePrivate::~NMNetworkInterfacePrivate()
00132 {
00133 }
00134 
00135 
00136 NMNetworkInterface::NMNetworkInterface(const QString  & objectPath)
00137 : NetworkInterface(), QObject(), d_ptr(new NMNetworkInterfacePrivate(objectPath))
00138 {
00139     Q_D(NMNetworkInterface);
00140     d->q_ptr = this;
00141     d->initGeneric();
00142 }
00143 
00144 NMNetworkInterface::NMNetworkInterface(NMNetworkInterfacePrivate &dd)
00145     : NetworkInterface(), QObject(), d_ptr(&dd)
00146 {
00147     Q_D(NMNetworkInterface);
00148     d->q_ptr = this;
00149     d->initGeneric();
00150 }
00151 
00152 
00153 void NMNetworkInterfacePrivate::initGeneric()
00154 {
00155     QDBusMessage reply = iface.call("getProperties");
00156     NMDBusDeviceProperties dev;
00157     deserialize(reply, dev);
00158     //dump(dev);
00159     applyProperties(dev);
00160     QDBusReply<QString> dbusdriver = iface.call("getDriver");
00161     if (dbusdriver.isValid())
00162         driver = dbusdriver.value();
00163     ipv4Config = parseIPv4Config(dev);
00164 }
00165 
00166 NMNetworkInterface::~NMNetworkInterface()
00167 {
00168     delete d_ptr;
00169 }
00170 
00171 QString NMNetworkInterface::uni() const
00172 {
00173     Q_D(const NMNetworkInterface);
00174     return d->objectPath;
00175 }
00176 
00177 bool NMNetworkInterface::isActive() const
00178 {
00179     Q_D(const NMNetworkInterface);
00180     return d->active;
00181 }
00182 
00183 Solid::Control::NetworkInterface::Type NMNetworkInterface::type() const
00184 {
00185     Q_D(const NMNetworkInterface);
00186     return d->type;
00187 }
00188 
00189 Solid::Control::NetworkInterface::ConnectionState NMNetworkInterface::connectionState() const
00190 {
00191     Q_D(const NMNetworkInterface);
00192     Solid::Control::NetworkInterface::ConnectionState state = Solid::Control::NetworkInterface::UnknownState;
00193     switch (d->activationStage)
00194     {
00195     default:
00196     case NM_ACT_STAGE_UNKNOWN:
00197         state = Solid::Control::NetworkInterface::UnknownState;
00198         break;
00199     case NM_ACT_STAGE_DEVICE_PREPARE:
00200         state = Solid::Control::NetworkInterface::Preparing;
00201         break;
00202     case NM_ACT_STAGE_DEVICE_CONFIG:
00203         state = Solid::Control::NetworkInterface::Configuring;
00204         break;
00205     case NM_ACT_STAGE_NEED_USER_KEY:
00206         state = Solid::Control::NetworkInterface::NeedAuth;
00207         break;
00208     case NM_ACT_STAGE_IP_CONFIG_START:
00209         state = Solid::Control::NetworkInterface::IPConfig;
00210         break;
00211     case NM_ACT_STAGE_IP_CONFIG_GET:
00212         state = Solid::Control::NetworkInterface::IPConfig;
00213         break;
00214     case NM_ACT_STAGE_IP_CONFIG_COMMIT:
00215         state = Solid::Control::NetworkInterface::IPConfig;
00216         break;
00217     case NM_ACT_STAGE_ACTIVATED:
00218         state = Solid::Control::NetworkInterface::Activated;
00219         break;
00220     case NM_ACT_STAGE_FAILED:
00221         state = Solid::Control::NetworkInterface::Failed;
00222         break;
00223     case NM_ACT_STAGE_CANCELLED:
00224         state = Solid::Control::NetworkInterface::Disconnected;
00225         break;
00226     }
00227     return state;
00228 }
00229 
00230 int NMNetworkInterface::designSpeed() const
00231 {
00232     Q_D(const NMNetworkInterface);
00233     return d->designSpeed;
00234 }
00235 
00236 Solid::Control::NetworkInterface::Capabilities NMNetworkInterface::capabilities() const
00237 {
00238     Q_D(const NMNetworkInterface);
00239     return d->capabilities;
00240 }
00241 
00242 QString NMNetworkInterface::activeNetwork() const
00243 {
00244     Q_D(const NMNetworkInterface);
00245     return d->activeNetPath;
00246 }
00247 
00248 void NMNetworkInterfacePrivate::applyProperties(const NMDBusDeviceProperties & props)
00249 {
00250     switch (props.type)
00251     {
00252     case DEVICE_TYPE_UNKNOWN:
00253         type = Solid::Control::NetworkInterface::UnknownType;
00254         break;
00255     case DEVICE_TYPE_802_3_ETHERNET:
00256         type = Solid::Control::NetworkInterface::Ieee8023;
00257         break;
00258     case DEVICE_TYPE_802_11_WIRELESS:
00259         type = Solid::Control::NetworkInterface::Ieee80211;
00260         break;
00261     default:
00262         type = Solid::Control::NetworkInterface::UnknownType;
00263         break;
00264     }
00265     active = props.active;
00266     activationStage = static_cast<NMActStage>(props.activationStage);
00267     designSpeed = props.speed;
00268     if (props.capabilities  & NM_DEVICE_CAP_NM_SUPPORTED)
00269         capabilities |= Solid::Control::NetworkInterface::IsManageable;
00270     if (props.capabilities  & NM_DEVICE_CAP_CARRIER_DETECT)
00271         capabilities |= Solid::Control::NetworkInterface::SupportsCarrierDetect;
00272 #if 0
00273     if (props.capabilities  & NM_DEVICE_CAP_WIRELESS_SCAN)
00274         capabilities |= Solid::Control::NetworkInterface::SupportsWirelessScan;
00275 #endif
00276     activeNetPath = props.activeNetPath;
00277     interface = props.interface;
00278 }
00279 
00280 void NMNetworkInterface::setActive(bool active)
00281 {
00282     Q_D(NMNetworkInterface);
00283     d->active = active;
00284 #if 0
00285     emit activeChanged(active);
00286 #endif
00287 }
00288 
00289 void NMNetworkInterface::setActivationStage(int activationStage)
00290 {
00291     Q_D(NMNetworkInterface);
00292     d->activationStage = static_cast<NMActStage>(activationStage);
00293     emit connectionStateChanged(connectionState());
00294 }
00295 
00296 void NMNetworkInterface::addNetwork(const QDBusObjectPath  & netPath)
00297 {
00298     Q_D(NMNetworkInterface);
00299     d->notifyNewNetwork(netPath);
00300 }
00301 
00302 void NMNetworkInterface::removeNetwork(const QDBusObjectPath  & netPath)
00303 {
00304     Q_D(NMNetworkInterface);
00305     d->notifyRemoveNetwork(netPath);
00306 }
00307 
00308 void NMNetworkInterface::setManagerInterface(QDBusInterface * manager)
00309 {
00310     Q_D(NMNetworkInterface);
00311     d->manager = manager;
00312 }
00313 
00314 QString NMNetworkInterface::interfaceName() const
00315 {
00316     Q_D(const NMNetworkInterface);
00317     return d->interface;
00318 }
00319 
00320 QString NMNetworkInterface::driver() const
00321 {
00322     Q_D(const NMNetworkInterface);
00323     return d->driver;
00324 }
00325 
00326 Solid::Control::IPv4Config NMNetworkInterface::ipV4Config() const
00327 {
00328     Q_D(const NMNetworkInterface);
00329     return d->ipv4Config;
00330 }
00331 
00332 bool NMNetworkInterface::activateConnection(const QString & connectionUni, const QVariantMap & connectionParameters)
00333 {
00334     Q_UNUSED(connectionUni)
00335     Q_UNUSED(connectionParameters)
00336     return false;
00337 }
00338 
00339 bool NMNetworkInterface::deactivateConnection()
00340 {
00341     return false;
00342 }
00343 
00344 #include "NetworkManager-networkinterface.moc"

SolidModules

Skip menu "SolidModules"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libplasma
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal