• Skip to content
  • Skip to link menu
KDE 4.2 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     QList<quint32> dnsServers;
00109     dnsServers.append(parseIPv4Address(dev.primaryDNS));
00110     dnsServers.append(parseIPv4Address(dev.secondaryDNS));
00111     return Solid::Control::IPv4Config(
00112         QList<Solid::Control::IPv4Address>() << address,
00113         dnsServers /*nameservers*/,
00114         QStringList() /* domains */,
00115         QList<Solid::Control::IPv4Route>() /* routes*/);
00116 }
00117 
00118 
00119 NMNetworkInterfacePrivate::NMNetworkInterfacePrivate(const QString  & objPath)
00120     : iface(NM_DBUS_SERVICE, objPath, NM_DBUS_INTERFACE_DEVICES, QDBusConnection::systemBus())
00121     , objectPath(objPath)
00122     , manager(0)
00123     , active(false)
00124     , type(Solid::Control::NetworkInterface::UnknownType)
00125     , activationStage(NM_ACT_STAGE_UNKNOWN)
00126     , designSpeed(0)
00127 {
00128 }
00129 
00130 NMNetworkInterfacePrivate::~NMNetworkInterfacePrivate()
00131 {
00132 }
00133 
00134 
00135 NMNetworkInterface::NMNetworkInterface(const QString  & objectPath)
00136 : NetworkInterface(), QObject(), d_ptr(new NMNetworkInterfacePrivate(objectPath))
00137 {
00138     Q_D(NMNetworkInterface);
00139     d->q_ptr = this;
00140     d->initGeneric();
00141 }
00142 
00143 NMNetworkInterface::NMNetworkInterface(NMNetworkInterfacePrivate &dd)
00144     : NetworkInterface(), QObject(), d_ptr(&dd)
00145 {
00146     Q_D(NMNetworkInterface);
00147     d->q_ptr = this;
00148     d->initGeneric();
00149 }
00150 
00151 
00152 void NMNetworkInterfacePrivate::initGeneric()
00153 {
00154     QDBusMessage reply = iface.call("getProperties");
00155     NMDBusDeviceProperties dev;
00156     deserialize(reply, dev);
00157     //dump(dev);
00158     applyProperties(dev);
00159     QDBusReply<QString> dbusdriver = iface.call("getDriver");
00160     if (dbusdriver.isValid())
00161         driver = dbusdriver.value();
00162     ipv4Config = parseIPv4Config(dev);
00163 }
00164 
00165 NMNetworkInterface::~NMNetworkInterface()
00166 {
00167     delete d_ptr;
00168 }
00169 
00170 QString NMNetworkInterface::uni() const
00171 {
00172     Q_D(const NMNetworkInterface);
00173     return d->objectPath;
00174 }
00175 
00176 bool NMNetworkInterface::isActive() const
00177 {
00178     Q_D(const NMNetworkInterface);
00179     return d->active;
00180 }
00181 
00182 Solid::Control::NetworkInterface::Type NMNetworkInterface::type() const
00183 {
00184     Q_D(const NMNetworkInterface);
00185     return d->type;
00186 }
00187 
00188 Solid::Control::NetworkInterface::ConnectionState NMNetworkInterface::connectionState() const
00189 {
00190     Q_D(const NMNetworkInterface);
00191     Solid::Control::NetworkInterface::ConnectionState state = Solid::Control::NetworkInterface::UnknownState;
00192     switch (d->activationStage)
00193     {
00194     default:
00195     case NM_ACT_STAGE_UNKNOWN:
00196         state = Solid::Control::NetworkInterface::UnknownState;
00197         break;
00198     case NM_ACT_STAGE_DEVICE_PREPARE:
00199         state = Solid::Control::NetworkInterface::Preparing;
00200         break;
00201     case NM_ACT_STAGE_DEVICE_CONFIG:
00202         state = Solid::Control::NetworkInterface::Configuring;
00203         break;
00204     case NM_ACT_STAGE_NEED_USER_KEY:
00205         state = Solid::Control::NetworkInterface::NeedAuth;
00206         break;
00207     case NM_ACT_STAGE_IP_CONFIG_START:
00208         state = Solid::Control::NetworkInterface::IPConfig;
00209         break;
00210     case NM_ACT_STAGE_IP_CONFIG_GET:
00211         state = Solid::Control::NetworkInterface::IPConfig;
00212         break;
00213     case NM_ACT_STAGE_IP_CONFIG_COMMIT:
00214         state = Solid::Control::NetworkInterface::IPConfig;
00215         break;
00216     case NM_ACT_STAGE_ACTIVATED:
00217         state = Solid::Control::NetworkInterface::Activated;
00218         break;
00219     case NM_ACT_STAGE_FAILED:
00220         state = Solid::Control::NetworkInterface::Failed;
00221         break;
00222     case NM_ACT_STAGE_CANCELLED:
00223         state = Solid::Control::NetworkInterface::Disconnected;
00224         break;
00225     }
00226     return state;
00227 }
00228 
00229 int NMNetworkInterface::designSpeed() const
00230 {
00231     Q_D(const NMNetworkInterface);
00232     return d->designSpeed;
00233 }
00234 
00235 Solid::Control::NetworkInterface::Capabilities NMNetworkInterface::capabilities() const
00236 {
00237     Q_D(const NMNetworkInterface);
00238     return d->capabilities;
00239 }
00240 
00241 QString NMNetworkInterface::activeNetwork() const
00242 {
00243     Q_D(const NMNetworkInterface);
00244     return d->activeNetPath;
00245 }
00246 
00247 void NMNetworkInterfacePrivate::applyProperties(const NMDBusDeviceProperties & props)
00248 {
00249     switch (props.type)
00250     {
00251     case DEVICE_TYPE_UNKNOWN:
00252         type = Solid::Control::NetworkInterface::UnknownType;
00253         break;
00254     case DEVICE_TYPE_802_3_ETHERNET:
00255         type = Solid::Control::NetworkInterface::Ieee8023;
00256         break;
00257     case DEVICE_TYPE_802_11_WIRELESS:
00258         type = Solid::Control::NetworkInterface::Ieee80211;
00259         break;
00260     default:
00261         type = Solid::Control::NetworkInterface::UnknownType;
00262         break;
00263     }
00264     active = props.active;
00265     activationStage = static_cast<NMActStage>(props.activationStage);
00266     designSpeed = props.speed;
00267     if (props.capabilities  & NM_DEVICE_CAP_NM_SUPPORTED)
00268         capabilities |= Solid::Control::NetworkInterface::IsManageable;
00269     if (props.capabilities  & NM_DEVICE_CAP_CARRIER_DETECT)
00270         capabilities |= Solid::Control::NetworkInterface::SupportsCarrierDetect;
00271 #if 0
00272     if (props.capabilities  & NM_DEVICE_CAP_WIRELESS_SCAN)
00273         capabilities |= Solid::Control::NetworkInterface::SupportsWirelessScan;
00274 #endif
00275     activeNetPath = props.activeNetPath;
00276     interface = props.interface;
00277 }
00278 
00279 void NMNetworkInterface::setActive(bool active)
00280 {
00281     Q_D(NMNetworkInterface);
00282     d->active = active;
00283 #if 0
00284     emit activeChanged(active);
00285 #endif
00286 }
00287 
00288 void NMNetworkInterface::setActivationStage(int activationStage)
00289 {
00290     Q_D(NMNetworkInterface);
00291     d->activationStage = static_cast<NMActStage>(activationStage);
00292     emit connectionStateChanged(connectionState());
00293 }
00294 
00295 void NMNetworkInterface::addNetwork(const QDBusObjectPath  & netPath)
00296 {
00297     Q_D(NMNetworkInterface);
00298     d->notifyNewNetwork(netPath);
00299 }
00300 
00301 void NMNetworkInterface::removeNetwork(const QDBusObjectPath  & netPath)
00302 {
00303     Q_D(NMNetworkInterface);
00304     d->notifyRemoveNetwork(netPath);
00305 }
00306 
00307 void NMNetworkInterface::setManagerInterface(QDBusInterface * manager)
00308 {
00309     Q_D(NMNetworkInterface);
00310     d->manager = manager;
00311 }
00312 
00313 QString NMNetworkInterface::interfaceName() const
00314 {
00315     Q_D(const NMNetworkInterface);
00316     return d->interface;
00317 }
00318 
00319 QString NMNetworkInterface::driver() const
00320 {
00321     Q_D(const NMNetworkInterface);
00322     return d->driver;
00323 }
00324 
00325 Solid::Control::IPv4Config NMNetworkInterface::ipV4Config() const
00326 {
00327     Q_D(const NMNetworkInterface);
00328     return d->ipv4Config;
00329 }
00330 
00331 bool NMNetworkInterface::activateConnection(const QString & connectionUni, const QVariantMap & connectionParameters)
00332 {
00333     Q_UNUSED(connectionUni)
00334     Q_UNUSED(connectionParameters)
00335     return false;
00336 }
00337 
00338 bool NMNetworkInterface::deactivateConnection()
00339 {
00340     return false;
00341 }
00342 
00343 #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
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.7
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