SolidModules
NetworkManager-networkinterface.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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() , dnsServers,
00115 QStringList() , QString() ,
00116 QList<quint32>() );
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
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"