summaryrefslogtreecommitdiffstats
path: root/src/network/kernel/qnetworkinterface_symbian.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/kernel/qnetworkinterface_symbian.cpp')
-rw-r--r--src/network/kernel/qnetworkinterface_symbian.cpp266
1 files changed, 0 insertions, 266 deletions
diff --git a/src/network/kernel/qnetworkinterface_symbian.cpp b/src/network/kernel/qnetworkinterface_symbian.cpp
deleted file mode 100644
index e7d3ca9d99..0000000000
--- a/src/network/kernel/qnetworkinterface_symbian.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtNetwork of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//#define QNETWORKINTERFACE_DEBUG
-
-#include "qnetworkinterface.h"
-#include "qnetworkinterface_p.h"
-#include <private/qcore_symbian_p.h>
-
-#ifndef QT_NO_NETWORKINTERFACE
-
-#include <in_sock.h>
-#include <in_iface.h>
-#include <es_sock.h>
-
-QT_BEGIN_NAMESPACE
-
-
-static QNetworkInterface::InterfaceFlags convertFlags(const TSoInetInterfaceInfo& aInfo)
-{
- QNetworkInterface::InterfaceFlags flags = 0;
- flags |= (aInfo.iState == EIfUp) ? QNetworkInterface::IsUp : QNetworkInterface::InterfaceFlag(0);
- // We do not have separate flag for running in Symbian OS
- flags |= (aInfo.iState == EIfUp) ? QNetworkInterface::IsRunning : QNetworkInterface::InterfaceFlag(0);
- flags |= (aInfo.iFeatures & KIfCanBroadcast) ? QNetworkInterface::CanBroadcast : QNetworkInterface::InterfaceFlag(0);
- flags |= (aInfo.iFeatures & KIfIsLoopback) ? QNetworkInterface::IsLoopBack : QNetworkInterface::InterfaceFlag(0);
- flags |= (aInfo.iFeatures & KIfIsPointToPoint) ? QNetworkInterface::IsPointToPoint : QNetworkInterface::InterfaceFlag(0);
- flags |= (aInfo.iFeatures & KIfCanMulticast) ? QNetworkInterface::CanMulticast : QNetworkInterface::InterfaceFlag(0);
- return flags;
-}
-
-//TODO: share this, at least QHostInfo needs to do the same thing
-static QHostAddress qt_QHostAddressFromTInetAddr(const TInetAddr& addr)
-{
- //TODO: do we want to call v4 mapped addresses v4 or v6 outside of this file?
- if (addr.IsV4Mapped() || addr.Family() == KAfInet) {
- //convert v4 host address
- return QHostAddress(addr.Address());
- } else {
- //convert v6 host address
- return QHostAddress((quint8 *)(addr.Ip6Address().u.iAddr8));
- }
-}
-
-static QList<QNetworkInterfacePrivate *> interfaceListing()
-{
- TInt err(KErrNone);
- QList<QNetworkInterfacePrivate *> interfaces;
- QList<QHostAddress> addressesWithEstimatedNetmasks;
-
- // Open dummy socket for interface queries
- RSocket socket;
- err = socket.Open(qt_symbianGetSocketServer(), _L("udp"));
- if (err) {
- return interfaces;
- }
-
- // Ask socket to start enumerating interfaces
- err = socket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl);
- if (err) {
- socket.Close();
- return interfaces;
- }
-
- int ifindex = 0;
- TPckgBuf<TSoInetInterfaceInfo> infoPckg;
- TSoInetInterfaceInfo &info = infoPckg();
- while (socket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, infoPckg) == KErrNone) {
- if (info.iName != KNullDesC) {
- TName address;
- QNetworkAddressEntry entry;
- QNetworkInterfacePrivate *iface = 0;
-
- iface = new QNetworkInterfacePrivate;
- iface->index = ifindex++;
- interfaces << iface;
- iface->name = qt_TDesC2QString(info.iName);
- iface->flags = convertFlags(info);
-
- if (/*info.iFeatures&KIfHasHardwareAddr &&*/ info.iHwAddr.Family() != KAFUnspec) {
- for (TInt i = sizeof(SSockAddr); i < sizeof(SSockAddr) + info.iHwAddr.GetUserLen(); i++) {
- address.AppendNumFixedWidth(info.iHwAddr[i], EHex, 2);
- if ((i + 1) < sizeof(SSockAddr) + info.iHwAddr.GetUserLen())
- address.Append(_L(":"));
- }
- address.UpperCase();
- iface->hardwareAddress = qt_TDesC2QString(address);
- }
-
- // Get the address of the interface
- entry.setIp(qt_QHostAddressFromTInetAddr(info.iAddress));
-
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << "address is" << info.iAddress.Family() << entry.ip();
- qDebug() << "netmask is" << info.iNetMask.Family() << qt_QHostAddressFromTInetAddr( info.iNetMask );
-#endif
-
- // Get the interface netmask
- if (info.iNetMask.IsUnspecified()) {
- // For some reason netmask is always 0.0.0.0 for IPv4 interfaces
- // and loopback interfaces (which we statically know)
- if (info.iAddress.IsV4Mapped()) {
- if (info.iFeatures & KIfIsLoopback) {
- entry.setPrefixLength(32);
- } else {
- // Workaround: Let Symbian determine netmask based on IP address class (IPv4 only API)
- TInetAddr netmask;
- netmask.NetMask(info.iAddress);
- entry.setNetmask(QHostAddress(netmask.Address())); //binary convert v4 address
- addressesWithEstimatedNetmasks << entry.ip();
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << "address class determined netmask" << entry.netmask();
-#endif
- }
- } else {
- // For IPv6 interfaces
- if (info.iFeatures & KIfIsLoopback) {
- entry.setPrefixLength(128);
- } else if (info.iNetMask.IsUnspecified()) {
- //Don't see this error for IPv6, but try to handle it if it happens
- entry.setPrefixLength(64); //most common
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << "total guess netmask" << entry.netmask();
-#endif
- addressesWithEstimatedNetmasks << entry.ip();
- }
- }
- } else {
- //Expected code path for IPv6 non loopback interfaces (IPv4 could come here if symbian is fixed)
- entry.setNetmask(qt_QHostAddressFromTInetAddr(info.iNetMask));
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << "reported netmask" << entry.netmask();
-#endif
- }
-
- // broadcast address is determined from the netmask in postProcess()
-
- // Add new entry to interface address entries
- iface->addressEntries << entry;
-
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug("\n Found network interface %s, interface flags:\n\
- IsUp = %d, IsRunning = %d, CanBroadcast = %d,\n\
- IsLoopBack = %d, IsPointToPoint = %d, CanMulticast = %d, \n\
- ip = %s, netmask = %s, broadcast = %s,\n\
- hwaddress = %s",
- iface->name.toLatin1().constData(),
- iface->flags & QNetworkInterface::IsUp, iface->flags & QNetworkInterface::IsRunning, iface->flags & QNetworkInterface::CanBroadcast,
- iface->flags & QNetworkInterface::IsLoopBack, iface->flags & QNetworkInterface::IsPointToPoint, iface->flags & QNetworkInterface::CanMulticast,
- entry.ip().toString().toLatin1().constData(), entry.netmask().toString().toLatin1().constData(), entry.broadcast().toString().toLatin1().constData(),
- iface->hardwareAddress.toLatin1().constData());
-#endif
- }
- }
-
- // if we didn't have to guess any netmasks, then we're done.
- if (addressesWithEstimatedNetmasks.isEmpty()) {
- socket.Close();
- return interfaces;
- }
-
- // we will try to use routing info to detect more precisely
- // estimated netmasks and then ::postProcess() should calculate
- // broadcast addresses
-
- // use dummy socket to start enumerating routes
- err = socket.SetOpt(KSoInetEnumRoutes, KSolInetRtCtrl);
- if (err) {
- socket.Close();
- // return what we have
- // up to this moment
- return interfaces;
- }
-
- TSoInetRouteInfo routeInfo;
- TPckg<TSoInetRouteInfo> routeInfoPkg(routeInfo);
- while (socket.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, routeInfoPkg) == KErrNone) {
- // get interface address
- QHostAddress ifAddr(qt_QHostAddressFromTInetAddr(routeInfo.iIfAddr));
- if (ifAddr.isNull())
- continue;
- if (!addressesWithEstimatedNetmasks.contains(ifAddr)) {
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << "skipping route from" << ifAddr << "because it wasn't an estimated netmask";
-#endif
- continue;
- }
-
- QHostAddress destination(qt_QHostAddressFromTInetAddr(routeInfo.iDstAddr));
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << "route from" << ifAddr << "to" << destination;
-#endif
- if (destination.isNull() || destination != ifAddr)
- continue;
-
- // search interfaces
- for (int ifindex = 0; ifindex < interfaces.size(); ++ifindex) {
- QNetworkInterfacePrivate *iface = interfaces.at(ifindex);
- for (int eindex = 0; eindex < iface->addressEntries.size(); ++eindex) {
- QNetworkAddressEntry entry = iface->addressEntries.at(eindex);
- if (entry.ip() != ifAddr) {
- continue;
- } else if (!routeInfo.iNetMask.IsUnspecified()) {
- //the route may also return 0.0.0.0 netmask, in which case don't use it.
- QHostAddress netmask(qt_QHostAddressFromTInetAddr(routeInfo.iNetMask));
- entry.setNetmask(netmask);
-#if defined(QNETWORKINTERFACE_DEBUG)
- qDebug() << " - route netmask" << routeInfo.iNetMask.Family() << netmask << " (using route determined netmask)";
-#endif
- iface->addressEntries.replace(eindex, entry);
- }
- }
- }
- }
-
- socket.Close();
-
- return interfaces;
-}
-
-QList<QNetworkInterfacePrivate *> QNetworkInterfaceManager::scan()
-{
- return interfaceListing();
-}
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_NETWORKINTERFACE