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 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 ,
00114 QStringList() ,
00115 QList<Solid::Control::IPv4Route>() );
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
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"