diff options
author | Shane Kearns <shane.kearns@accenture.com> | 2011-04-12 12:18:29 (GMT) |
---|---|---|
committer | Shane Kearns <shane.kearns@accenture.com> | 2011-04-12 12:18:29 (GMT) |
commit | 04d1cbce75e77392077ce4ae014fe8774c32a8fc (patch) | |
tree | d8e52dbced2f087d75e3889d7d2c0b3c19f98570 | |
parent | f62e846c7ebe243a2a36e7577d070f1275f2ec47 (diff) | |
parent | d01f82879dd4d40ece8afb54d6d25f1ef9e35624 (diff) | |
download | Qt-04d1cbce75e77392077ce4ae014fe8774c32a8fc.zip Qt-04d1cbce75e77392077ce4ae014fe8774c32a8fc.tar.gz Qt-04d1cbce75e77392077ce4ae014fe8774c32a8fc.tar.bz2 |
Merge branch 'symbian-socket-engine' of scm.dev.troll.no:qt/qt-symbian-network
Conflicts:
configure.exe
src/s60installs/bwins/QtCoreu.def
src/s60installs/bwins/QtGuiu.def
src/s60installs/eabi/QtCoreu.def
124 files changed, 6607 insertions, 1073 deletions
@@ -6533,13 +6533,9 @@ fi # find if the platform supports IPv6 if [ "$CFG_IPV6" != "no" ]; then - # - # We accidently enabled IPv6 for Qt Symbian in 4.6.x. However the underlying OpenC does not fully support IPV6. - # Therefore for 4.7.1 and following we disable it until OpenC either supports it or we have the native Qt - # symbian socket engine. - # if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then - CFG_IPV6=no + #IPV6 should always be enabled for Symbian release + CFG_IPV6=yes elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/ipv6 "IPv6" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_IPV6=yes else diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index 2b61192..f67600d 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -110,7 +110,7 @@ win32 { SOURCES += io/qfilesystemwatcher_symbian.cpp HEADERS += io/qfilesystemwatcher_symbian_p.h INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE - LIBS += -lplatformenv + LIBS += -lplatformenv -lesock } } integrity { diff --git a/src/corelib/io/qfilesystemiterator_symbian.cpp b/src/corelib/io/qfilesystemiterator_symbian.cpp index 23c726a..a39f9c3 100644 --- a/src/corelib/io/qfilesystemiterator_symbian.cpp +++ b/src/corelib/io/qfilesystemiterator_symbian.cpp @@ -88,8 +88,6 @@ QFileSystemIterator::QFileSystemIterator(const QFileSystemEntry &path, QDir::Fil else if (symbianMask == 0) { if ((filters & QDir::PermissionMask) == QDir::Writable) symbianMask = KEntryAttMatchExclude | KEntryAttReadOnly; - else if ((filters & QDir::PermissionMask) == QDir::Readable) - symbianMask = KEntryAttMatchExclusive | KEntryAttReadOnly; } lastError = dirHandle.Open(fs, qt_QString2TPtrC(absPath), symbianMask); diff --git a/src/corelib/kernel/qcore_symbian_p.cpp b/src/corelib/kernel/qcore_symbian_p.cpp index 801d63f..c717cb9 100644 --- a/src/corelib/kernel/qcore_symbian_p.cpp +++ b/src/corelib/kernel/qcore_symbian_p.cpp @@ -44,6 +44,7 @@ #include <e32uid.h> #include "qcore_symbian_p.h" #include <string> +#include <in_sock.h> QT_BEGIN_NAMESPACE @@ -203,6 +204,11 @@ private: RFs iFs; }; +uint qHash(const RSubSessionBase& key) +{ + return qHash(key.SubSessionHandle()); +} + Q_GLOBAL_STATIC(QS60RFsSession, qt_s60_RFsSession); Q_CORE_EXPORT RFs& qt_s60GetRFs() @@ -210,4 +216,102 @@ Q_CORE_EXPORT RFs& qt_s60GetRFs() return qt_s60_RFsSession()->GetRFs(); } +QSymbianSocketManager::QSymbianSocketManager() : + iNextSocket(0), iDefaultConnection(0) +{ + TSessionPref preferences; + // ### In future this could be changed to KAfInet6 when that is more common than IPv4 + preferences.iAddrFamily = KAfInet; + preferences.iProtocol = KProtocolInetIp; + //use global message pool, as we do not know how many sockets app will use + //TODO: is this the right choice? + qt_symbian_throwIfError(iSocketServ.Connect(preferences, -1)); + qt_symbian_throwIfError(iSocketServ.ShareAuto()); +} + +QSymbianSocketManager::~QSymbianSocketManager() +{ + iSocketServ.Close(); + if(!socketMap.isEmpty()) { + qWarning("leaked %d sockets on exit", socketMap.count()); + } +} + +RSocketServ& QSymbianSocketManager::getSocketServer() { + return iSocketServ; +} + +int QSymbianSocketManager::addSocket(const RSocket& socket) { + QHashableSocket sock(static_cast<const QHashableSocket &>(socket)); + QMutexLocker l(&iMutex); + Q_ASSERT(!socketMap.contains(sock)); + if(socketMap.contains(sock)) + return socketMap.value(sock); + // allocate socket number + int guard = 0; + while(reverseSocketMap.contains(iNextSocket)) { + iNextSocket++; + iNextSocket %= max_sockets; + guard++; + if(guard > max_sockets) + return -1; + } + int id = iNextSocket; + + socketMap[sock] = id; + reverseSocketMap[id] = sock; + return id + socket_offset; +} + +bool QSymbianSocketManager::removeSocket(const RSocket &socket) { + QHashableSocket sock(static_cast<const QHashableSocket &>(socket)); + QMutexLocker l(&iMutex); + if(!socketMap.contains(sock)) + return false; + int id = socketMap.value(sock); + socketMap.remove(sock); + reverseSocketMap.remove(id); + return true; +} + +int QSymbianSocketManager::lookupSocket(const RSocket& socket) const { + QHashableSocket sock(static_cast<const QHashableSocket &>(socket)); + QMutexLocker l(&iMutex); + if(!socketMap.contains(sock)) + return -1; + int id = socketMap.value(sock); + return id + socket_offset; +} + +bool QSymbianSocketManager::lookupSocket(int fd, RSocket& socket) const { + QMutexLocker l(&iMutex); + int id = fd - socket_offset; + if(!reverseSocketMap.contains(id)) + return false; + socket = reverseSocketMap.value(id); + return true; +} + +void QSymbianSocketManager::setDefaultConnection(RConnection* con) +{ + iDefaultConnection = con; +} + +RConnection* QSymbianSocketManager::defaultConnection() const +{ + return iDefaultConnection; +} + +Q_GLOBAL_STATIC(QSymbianSocketManager, qt_symbianSocketManager); + +QSymbianSocketManager& QSymbianSocketManager::instance() +{ + return *(qt_symbianSocketManager()); +} + +Q_CORE_EXPORT RSocketServ& qt_symbianGetSocketServer() +{ + return QSymbianSocketManager::instance().getSocketServer(); +} + QT_END_NAMESPACE diff --git a/src/corelib/kernel/qcore_symbian_p.h b/src/corelib/kernel/qcore_symbian_p.h index 5b48689..cbe84a8 100644 --- a/src/corelib/kernel/qcore_symbian_p.h +++ b/src/corelib/kernel/qcore_symbian_p.h @@ -55,10 +55,12 @@ #include <e32std.h> #include <QtCore/qglobal.h> +#include <QtCore/qmutex.h> #include <qstring.h> #include <qrect.h> #include <qhash.h> #include <f32file.h> +#include <es_sock.h> #define QT_LSTRING2(x) L##x #define QT_LSTRING(x) QT_LSTRING2(x) @@ -154,6 +156,7 @@ enum S60PluginFuncOrdinals Q_CORE_EXPORT TLibraryFunction qt_resolveS60PluginFunc(int ordinal); Q_CORE_EXPORT RFs& qt_s60GetRFs(); +Q_CORE_EXPORT RSocketServ& qt_symbianGetSocketServer(); // Defined in qlocale_symbian.cpp. Q_CORE_EXPORT QByteArray qt_symbianLocaleName(int code); @@ -174,6 +177,104 @@ struct QScopedPointerRCloser } }; +//Wrapper for RSocket so it can be used as a key in QHash or QMap +class QHashableSocket : public RSocket +{ +public: + bool operator==(const QHashableSocket &other) const + { + return SubSessionHandle() == other.SubSessionHandle() + && Session().Handle() == other.Session().Handle(); + } + bool operator<(const QHashableSocket &other) const + { + if (Session().Handle() == other.Session().Handle()) + return SubSessionHandle() < other.SubSessionHandle(); + return Session().Handle() < other.Session().Handle(); + } +}; + +uint qHash(const RSubSessionBase& key); + +/*! + \internal + This class exists in QtCore for the benefit of QSocketNotifier, which uses integer + file descriptors in its public API. + So we need a way to map between int and RSocket. + Additionally, it is used to host the global RSocketServ session +*/ +class Q_CORE_EXPORT QSymbianSocketManager +{ +public: + QSymbianSocketManager(); + ~QSymbianSocketManager(); + + /*! + \internal + \return handle to the socket server + */ + RSocketServ& getSocketServer(); + /*! + \internal + Adds a symbian socket to the global map + \param an open socket + \return pseudo file descriptor, -1 if out of resources + */ + int addSocket(const RSocket &sock); + /*! + \internal + Removes a symbian socket from the global map + \param an open socket + \return true if the socket was in the map + */ + bool removeSocket(const RSocket &sock); + /*! + \internal + Get pseudo file descriptor for a socket + \param an open socket + \return integer handle, or -1 if not in map + */ + int lookupSocket(const RSocket &sock) const; + /*! + \internal + Get socket for a pseudo file descriptor + \param an open socket fd + \param sock (out) socket handle + \return true on success or false if not in map + */ + bool lookupSocket(int fd, RSocket& sock) const; + + /*! + \internal + Set the default connection to use for new sockets + \param an open connection + */ + void setDefaultConnection(RConnection* con); + /*! + \internal + Get the default connection to use for new sockets + \return the connection, or null pointer if there is none set + */ + RConnection *defaultConnection() const; + + /*! + \internal + Gets a reference to the singleton socket manager + */ + static QSymbianSocketManager& instance(); +private: + int allocateSocket(); + + const static int max_sockets = 0x20000; //covers all TCP and UDP ports, probably run out of memory first + const static int socket_offset = 0x40000000; //hacky way of separating sockets from file descriptors + int iNextSocket; + QHash<QHashableSocket, int> socketMap; + QHash<int, RSocket> reverseSocketMap; + mutable QMutex iMutex; + RSocketServ iSocketServ; + RConnection *iDefaultConnection; +}; + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 4c01bde..79f2596 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -135,7 +135,7 @@ private: * The QCompleteDeferredAOs class is a special object that runs after all others, which will * reactivate the objects that were previously not run. */ -inline QActiveObject::QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher) +QActiveObject::QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher) : CActive(priority), m_dispatcher(dispatcher), m_hasAlreadyRun(false), @@ -167,12 +167,25 @@ bool QActiveObject::maybeQueueForLater() } } +bool QActiveObject::maybeDeferSocketEvent() +{ + Q_ASSERT(!m_hasRunAgain); + Q_ASSERT(m_dispatcher); + if (!m_dispatcher->areSocketEventsBlocked()) { + return false; + } + m_hasRunAgain = true; + m_dispatcher->addDeferredSocketActiveObject(this); + return true; +} + void QActiveObject::reactivateAndComplete() { + TInt error = iStatus.Int(); iStatus = KRequestPending; SetActive(); TRequestStatus *status = &iStatus; - QEventDispatcherSymbian::RequestComplete(status, KErrNone); + QEventDispatcherSymbian::RequestComplete(status, error); m_hasRunAgain = false; m_hasAlreadyRun = false; @@ -635,10 +648,28 @@ void QSocketActiveObject::DoCancel() void QSocketActiveObject::RunL() { + if (maybeDeferSocketEvent()) + return; if (maybeQueueForLater()) return; - QT_TRYCATCH_LEAVING(m_dispatcher->socketFired(this)); + QT_TRYCATCH_LEAVING(run()); +} + +void QSocketActiveObject::run() +{ + QEvent e(QEvent::SockAct); + m_inSocketEvent = true; + QCoreApplication::sendEvent(m_notifier, &e); + m_inSocketEvent = false; + + if (m_deleteLater) { + delete this; + } else { + iStatus = KRequestPending; + SetActive(); + m_dispatcher->reactivateSocketNotifier(m_notifier); + } } void QSocketActiveObject::deleteLater() @@ -849,6 +880,14 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla CActiveScheduler::Current()->WaitForAnyRequest(); } else { if (thread.RequestCount() == 0) { +#ifdef QT_SYMBIAN_PRIORITY_DROP + if (idleDetectorThread()->hasRun()) { + m_lastIdleRequestTimer.start(); + idleDetectorThread()->kick(); + } else if (m_lastIdleRequestTimer.elapsed() > maxBusyTime) { + User::AfterHighRes(m_delay); + } +#endif break; } // This one should return without delay. @@ -934,27 +973,6 @@ void QEventDispatcherSymbian::timerFired(int timerId) return; } -void QEventDispatcherSymbian::socketFired(QSocketActiveObject *socketAO) -{ - if (m_noSocketEvents) { - m_deferredSocketEvents.append(socketAO); - return; - } - - QEvent e(QEvent::SockAct); - socketAO->m_inSocketEvent = true; - QCoreApplication::sendEvent(socketAO->m_notifier, &e); - socketAO->m_inSocketEvent = false; - - if (socketAO->m_deleteLater) { - delete socketAO; - } else { - socketAO->iStatus = KRequestPending; - socketAO->SetActive(); - reactivateSocketNotifier(socketAO->m_notifier); - } -} - void QEventDispatcherSymbian::wakeUpWasCalled() { // The reactivation should happen in RunL, right before the call to this function. @@ -1015,6 +1033,12 @@ inline void QEventDispatcherSymbian::addDeferredActiveObject(QActiveObject *obje inline void QEventDispatcherSymbian::removeDeferredActiveObject(QActiveObject *object) { m_deferredActiveObjects.removeAll(object); + m_deferredSocketEvents.removeAll(object); +} + +inline void QEventDispatcherSymbian::addDeferredSocketActiveObject(QActiveObject *object) +{ + m_deferredSocketEvents.append(object); } void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion() @@ -1040,7 +1064,8 @@ bool QEventDispatcherSymbian::sendDeferredSocketEvents() bool sentAnyEvents = false; while (!m_deferredSocketEvents.isEmpty()) { sentAnyEvents = true; - socketFired(m_deferredSocketEvents.takeFirst()); + QActiveObject *object = m_deferredSocketEvents.takeFirst(); + object->reactivateAndComplete(); } return sentAnyEvents; @@ -1059,6 +1084,8 @@ bool QEventDispatcherSymbian::hasPendingEvents() void QEventDispatcherSymbian::registerSocketNotifier ( QSocketNotifier * notifier ) { + //note - this is only for "open C" file descriptors + //for native sockets, an active object in the symbian socket engine handles this QSocketActiveObject *socketAO = new QSocketActiveObject(this, notifier); Q_CHECK_PTR(socketAO); m_notifiers.insert(notifier, socketAO); @@ -1067,6 +1094,8 @@ void QEventDispatcherSymbian::registerSocketNotifier ( QSocketNotifier * notifie void QEventDispatcherSymbian::unregisterSocketNotifier ( QSocketNotifier * notifier ) { + //note - this is only for "open C" file descriptors + //for native sockets, an active object in the symbian socket engine handles this if (m_selectThread) m_selectThread->cancelSocketEvents(notifier); if (m_notifiers.contains(notifier)) { @@ -1169,6 +1198,86 @@ void CQtActiveScheduler::Error(TInt aError) const QT_CATCH (const std::bad_alloc&) {} // ignore alloc fails, nothing more can be done } +bool QActiveObject::wait(CActive* ao, int ms) +{ + if (!ao->IsActive()) + return true; //request already complete + bool timedout = false; + if (ms > 0) { + TRequestStatus tstat; + RTimer t; + if (KErrNone != t.CreateLocal()) + return false; + t.HighRes(tstat, ms*1000); + User::WaitForRequest(tstat, ao->iStatus); + if (tstat != KRequestPending) { + timedout = true; + } else { + t.Cancel(); + //balance thread semaphore + User::WaitForRequest(tstat); + } + t.Close(); + } else { + User::WaitForRequest(ao->iStatus); + } + if (timedout) + return false; + + //evil cast to allow calling of protected virtual + ((QActiveObject*)ao)->RunL(); + + //clear active & pending flags + ao->iStatus = TRequestStatus(); + + return true; +} + +bool QActiveObject::wait(QList<CActive*> aos, int ms) +{ + QVector<TRequestStatus*> stati; + stati.reserve(aos.count() + 1); + foreach (CActive* ao, aos) { + if (!ao->IsActive()) + return true; //request already complete + stati.append(&(ao->iStatus)); + } + bool timedout = false; + TRequestStatus tstat; + RTimer t; + if (ms > 0) { + if (KErrNone != t.CreateLocal()) + return false; + t.HighRes(tstat, ms*1000); + stati.append(&tstat); + } + User::WaitForNRequest(stati.data(), stati.count()); + if (ms > 0) { + if (tstat != KRequestPending) { + timedout = true; + } else { + t.Cancel(); + //balance thread semaphore + User::WaitForRequest(tstat); + } + t.Close(); + } + if (timedout) + return false; + + foreach (CActive* ao, aos) { + if (ao->iStatus != KRequestPending) { + //evil cast to allow calling of protected virtual + ((QActiveObject*)ao)->RunL(); + + //clear active & pending flags + ao->iStatus = TRequestStatus(); + break; //only call one + } + } + return true; +} + QT_END_NAMESPACE #include "moc_qeventdispatcher_symbian_p.cpp" diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h index bdb6dce..e07d475 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian_p.h +++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h @@ -77,16 +77,19 @@ QT_BEGIN_NAMESPACE class QEventDispatcherSymbian; class QTimerActiveObject; -class QActiveObject : public CActive +class Q_CORE_EXPORT QActiveObject : public CActive { public: QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher); ~QActiveObject(); bool maybeQueueForLater(); + bool maybeDeferSocketEvent(); void reactivateAndComplete(); + static bool wait(CActive* ao, int ms); + static bool wait(QList<CActive*> aos, int ms); protected: QEventDispatcherSymbian *m_dispatcher; @@ -174,6 +177,7 @@ public: protected: void DoCancel(); void RunL(); + void run(); private: QSocketNotifier *m_notifier; @@ -242,7 +246,6 @@ public: void closingDown(); void timerFired(int timerId); - void socketFired(QSocketActiveObject *socketAO); void wakeUpWasCalled(); void reactivateSocketNotifier(QSocketNotifier *notifier); @@ -254,6 +257,9 @@ public: inline int iterationCount() const { return m_iterationCount; } + void addDeferredSocketActiveObject(QActiveObject *object); + inline bool areSocketEventsBlocked() const { return m_noSocketEvents; } + static void RequestComplete(TRequestStatus *&status, TInt reason); static void RequestComplete(RThread &threadHandle, TRequestStatus *&status, TInt reason); @@ -279,8 +285,9 @@ private: unsigned char m_iterationCount; bool m_insideTimerEvent; bool m_noSocketEvents; - QList<QSocketActiveObject *> m_deferredSocketEvents; - + //deferred until socket events are enabled + QList<QActiveObject *> m_deferredSocketEvents; + //deferred until idle QList<QActiveObject *> m_deferredActiveObjects; int m_delay; diff --git a/src/corelib/kernel/qsystemerror.cpp b/src/corelib/kernel/qsystemerror.cpp index 3381afa..18622c7 100644 --- a/src/corelib/kernel/qsystemerror.cpp +++ b/src/corelib/kernel/qsystemerror.cpp @@ -154,7 +154,7 @@ static QString symbianErrorString(int errorCode) case KErrInUse: return QLatin1String("in use"); case KErrNotReady: - return QLatin1String("not ready (e.g. FS dismounted, no memory card)"); + return QLatin1String("not ready (e.g. FS dismounted, network down)"); case KErrCorrupt: return QLatin1String("corrupt"); case KErrAccessDenied: @@ -190,7 +190,7 @@ static QString symbianErrorString(int errorCode) case KErrPermissionDenied: return QLatin1String("permission denied"); default: - return QString(QLatin1String("symbian error %d")).arg(errorCode); + return QString(QLatin1String("symbian error %1")).arg(errorCode); } } #endif diff --git a/src/corelib/thread/qthread_symbian.cpp b/src/corelib/thread/qthread_symbian.cpp index 1474b36..15e6898 100644 --- a/src/corelib/thread/qthread_symbian.cpp +++ b/src/corelib/thread/qthread_symbian.cpp @@ -113,6 +113,7 @@ QThreadData *QThreadData::current() } data->deref(); } + data->threadId = QThread::currentThreadId(); if (!QCoreApplicationPrivate::theMainThread) QCoreApplicationPrivate::theMainThread = data->thread; } @@ -312,6 +313,7 @@ void *QThreadPrivate::start(void *arg) // attribute of the thread again once the app gains control in run() User::SetCritical(User::EProcessCritical); + data->threadId = QThread::currentThreadId(); set_thread_data(data); { diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index 69e59d1..4ff45ba 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -319,6 +319,10 @@ void QFtpDTP::connectToHost(const QString & host, quint16 port) socket = 0; } socket = new QTcpSocket(this); +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket + socket->setProperty("_q_networksession", property("_q_networksession")); +#endif socket->setObjectName(QLatin1String("QFtpDTP Passive state socket")); connect(socket, SIGNAL(connected()), SLOT(socketConnected())); connect(socket, SIGNAL(readyRead()), SLOT(socketReadyRead())); @@ -331,6 +335,10 @@ void QFtpDTP::connectToHost(const QString & host, quint16 port) int QFtpDTP::setupListener(const QHostAddress &address) { +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket + listener.setProperty("_q_networksession", property("_q_networksession")); +#endif if (!listener.isListening() && !listener.listen(address, 0)) return -1; return listener.serverPort(); @@ -808,6 +816,11 @@ QFtpPI::QFtpPI(QObject *parent) : void QFtpPI::connectToHost(const QString &host, quint16 port) { emit connectState(QFtp::HostLookup); +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket & DTP + commandSocket.setProperty("_q_networksession", property("_q_networksession")); + dtp.setProperty("_q_networksession", property("_q_networksession")); +#endif commandSocket.connectToHost(host, port); } @@ -2240,6 +2253,10 @@ void QFtpPrivate::_q_startNextCommand() c->rawCmds.clear(); _q_piFinished(QLatin1String("Proxy set to ") + proxyHost + QLatin1Char(':') + QString::number(proxyPort)); } else if (c->command == QFtp::ConnectToHost) { +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the PI + pi.setProperty("_q_networksession", q->property("_q_networksession")); +#endif if (!proxyHost.isEmpty()) { host = c->rawCmds[0]; port = c->rawCmds[1].toUInt(); diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 29ae5b0..83156c6 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -117,9 +117,14 @@ QHttpNetworkConnectionPrivate::~QHttpNetworkConnectionPrivate() void QHttpNetworkConnectionPrivate::init() { + Q_Q(QHttpNetworkConnection); for (int i = 0; i < channelCount; i++) { channels[i].setConnection(this->q_func()); channels[i].ssl = encrypt; +#ifndef QT_NO_BEARERMANAGEMENT + //push session down to channels + channels[i].networkSession = networkSession; +#endif channels[i].init(); } } @@ -830,6 +835,23 @@ void QHttpNetworkConnectionPrivate::readMoreLater(QHttpNetworkReply *reply) } } +#ifndef QT_NO_BEARERMANAGEMENT +QHttpNetworkConnection::QHttpNetworkConnection(const QString &hostName, quint16 port, bool encrypt, QObject *parent, QSharedPointer<QNetworkSession> networkSession) + : QObject(*(new QHttpNetworkConnectionPrivate(hostName, port, encrypt)), parent) +{ + Q_D(QHttpNetworkConnection); + d->networkSession = networkSession; + d->init(); +} + +QHttpNetworkConnection::QHttpNetworkConnection(quint16 connectionCount, const QString &hostName, quint16 port, bool encrypt, QObject *parent, QSharedPointer<QNetworkSession> networkSession) + : QObject(*(new QHttpNetworkConnectionPrivate(connectionCount, hostName, port, encrypt)), parent) +{ + Q_D(QHttpNetworkConnection); + d->networkSession = networkSession; + d->init(); +} +#else QHttpNetworkConnection::QHttpNetworkConnection(const QString &hostName, quint16 port, bool encrypt, QObject *parent) : QObject(*(new QHttpNetworkConnectionPrivate(hostName, port, encrypt)), parent) { @@ -843,6 +865,7 @@ QHttpNetworkConnection::QHttpNetworkConnection(quint16 connectionCount, const QS Q_D(QHttpNetworkConnection); d->init(); } +#endif QHttpNetworkConnection::~QHttpNetworkConnection() { diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 874ea22..adb779f4 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -55,6 +55,7 @@ #include <QtNetwork/qnetworkrequest.h> #include <QtNetwork/qnetworkreply.h> #include <QtNetwork/qabstractsocket.h> +#include <QtNetwork/qnetworksession.h> #include <private/qobject_p.h> #include <qauthenticator.h> @@ -88,8 +89,13 @@ class Q_AUTOTEST_EXPORT QHttpNetworkConnection : public QObject Q_OBJECT public: +#ifndef QT_NO_BEARERMANAGEMENT + QHttpNetworkConnection(const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0, QSharedPointer<QNetworkSession> networkSession = QSharedPointer<QNetworkSession>()); + QHttpNetworkConnection(quint16 channelCount, const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0, QSharedPointer<QNetworkSession> networkSession = QSharedPointer<QNetworkSession>()); +#else QHttpNetworkConnection(const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0); QHttpNetworkConnection(quint16 channelCount, const QString &hostName, quint16 port = 80, bool encrypt = false, QObject *parent = 0); +#endif ~QHttpNetworkConnection(); //The hostname to which this is connected to. @@ -208,6 +214,10 @@ public: QList<HttpMessagePair> highPriorityQueue; QList<HttpMessagePair> lowPriorityQueue; +#ifndef QT_NO_BEARERMANAGEMENT + QSharedPointer<QNetworkSession> networkSession; +#endif + friend class QHttpNetworkConnectionChannel; }; diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 6564b4b..6fbc6f8 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -54,6 +54,10 @@ # include <QtNetwork/qsslconfiguration.h> #endif +#ifndef QT_NO_BEARERMANAGEMENT +#include "private/qnetworksession_p.h" +#endif + QT_BEGIN_NAMESPACE // TODO: Put channel specific stuff here so it does not polute qhttpnetworkconnection.cpp @@ -91,6 +95,11 @@ void QHttpNetworkConnectionChannel::init() #else socket = new QTcpSocket; #endif +#ifndef QT_NO_BEARERMANAGEMENT + //push session down to socket + if (networkSession) + socket->setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif #ifndef QT_NO_NETWORKPROXY // Set by QNAM anyway, but let's be safe here socket->setProxy(QNetworkProxy::NoProxy); @@ -833,7 +842,10 @@ void QHttpNetworkConnectionChannel::handleStatus() bool QHttpNetworkConnectionChannel::resetUploadData() { - Q_ASSERT(reply); + if (!reply) { + //this happens if server closes connection while QHttpNetworkConnectionPrivate::_q_startNextRequest is pending + return false; + } QNonContiguousByteDevice* uploadByteDevice = request.uploadByteDevice(); if (!uploadByteDevice) return true; diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index 893d75e..f27c6f5 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -117,6 +117,9 @@ public: bool ignoreAllSslErrors; QList<QSslError> ignoreSslErrorsList; #endif +#ifndef QT_NO_BEARERMANAGEMENT + QSharedPointer<QNetworkSession> networkSession; +#endif // HTTP pipelining -> http://en.wikipedia.org/wiki/Http_pipelining enum PipeliningSupport { diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp index 8573364..2c67e87 100644 --- a/src/network/access/qhttpnetworkrequest.cpp +++ b/src/network/access/qhttpnetworkrequest.cpp @@ -158,8 +158,10 @@ QByteArray QHttpNetworkRequestPrivate::header(const QHttpNetworkRequest &request } if (request.d->operation == QHttpNetworkRequest::Post) { // add content type, if not set in the request - if (request.headerField("content-type").isEmpty()) - ba += "Content-Type: application/x-www-form-urlencoded\r\n"; + if (request.headerField("content-type").isEmpty()) { + qWarning("content-type missing in HTTP POST, defaulting to application/octet-stream"); + ba += "Content-Type: application/octet-stream\r\n"; + } if (!request.d->uploadByteDevice && request.d->url.hasQuery()) { QByteArray query = request.d->url.encodedQuery(); ba += "Content-Length: "; diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp index 16fd9bb..7a17a7f 100644 --- a/src/network/access/qhttpthreaddelegate.cpp +++ b/src/network/access/qhttpthreaddelegate.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +//#define QHTTPTHREADDELEGATE_DEBUG #include "qhttpthreaddelegate_p.h" #include <QThread> @@ -146,8 +147,13 @@ class QNetworkAccessCachedHttpConnection: public QHttpNetworkConnection, { // Q_OBJECT public: +#ifdef QT_NO_BEARERMANAGEMENT QNetworkAccessCachedHttpConnection(const QString &hostName, quint16 port, bool encrypt) : QHttpNetworkConnection(hostName, port, encrypt) +#else + QNetworkAccessCachedHttpConnection(const QString &hostName, quint16 port, bool encrypt, QSharedPointer<QNetworkSession> networkSession) + : QHttpNetworkConnection(hostName, port, encrypt, /*parent=*/0, networkSession) +#endif { setExpires(true); setShareable(true); @@ -195,12 +201,16 @@ QHttpThreadDelegate::QHttpThreadDelegate(QObject *parent) : , downloadBuffer(0) , httpConnection(0) , httpReply(0) + , synchronousRequestLoop(0) { } // This is invoked as BlockingQueuedConnection from QNetworkAccessHttpBackend in the user thread void QHttpThreadDelegate::startRequestSynchronously() { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::startRequestSynchronously() thread=" << QThread::currentThreadId(); +#endif synchronous = true; QEventLoop synchronousRequestLoop; @@ -215,12 +225,18 @@ void QHttpThreadDelegate::startRequestSynchronously() connections.localData()->releaseEntry(cacheKey); connections.setLocalData(0); +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::startRequestSynchronously() thread=" << QThread::currentThreadId() << "finished"; +#endif } // This is invoked as QueuedConnection from QNetworkAccessHttpBackend in the user thread void QHttpThreadDelegate::startRequest() { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::startRequest() thread=" << QThread::currentThreadId(); +#endif // Check QThreadStorage for the QNetworkAccessCache // If not there, create this connection cache if (!connections.hasLocalData()) { @@ -244,7 +260,11 @@ void QHttpThreadDelegate::startRequest() if (httpConnection == 0) { // no entry in cache; create an object // the http object is actually a QHttpNetworkConnection +#ifdef QT_NO_BEARERMANAGEMENT httpConnection = new QNetworkAccessCachedHttpConnection(urlCopy.host(), urlCopy.port(), ssl); +#else + httpConnection = new QNetworkAccessCachedHttpConnection(urlCopy.host(), urlCopy.port(), ssl, networkSession); +#endif #ifndef QT_NO_OPENSSL // Set the QSslConfiguration from this QNetworkRequest. if (ssl) { @@ -305,15 +325,22 @@ void QHttpThreadDelegate::startRequest() // This gets called from the user thread or by the synchronous HTTP timeout timer void QHttpThreadDelegate::abortRequest() { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::abortRequest() thread=" << QThread::currentThreadId() << "sync=" << synchronous; +#endif if (httpReply) { delete httpReply; httpReply = 0; - this->deleteLater(); } // Got aborted by the timeout timer - if (synchronous) + if (synchronous) { incomingErrorCode = QNetworkReply::TimeoutError; + QMetaObject::invokeMethod(synchronousRequestLoop, "quit", Qt::QueuedConnection); + } else { + //only delete this for asynchronous mode or QNetworkAccessHttpBackend will crash - see QNetworkAccessHttpBackend::postRequest() + this->deleteLater(); + } } void QHttpThreadDelegate::readyReadSlot() @@ -334,6 +361,9 @@ void QHttpThreadDelegate::finishedSlot() qWarning() << "QHttpThreadDelegate::finishedSlot: HTTP reply had already been deleted, internal problem. Please report."; return; } +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::finishedSlot() thread=" << QThread::currentThreadId() << "result=" << httpReply->statusCode(); +#endif // If there is still some data left emit that now while (httpReply->readAnyAvailable()) { @@ -363,6 +393,9 @@ void QHttpThreadDelegate::finishedSlot() void QHttpThreadDelegate::synchronousFinishedSlot() { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::synchronousFinishedSlot() thread=" << QThread::currentThreadId() << "result=" << httpReply->statusCode(); +#endif if (httpReply->statusCode() >= 400) { // it's an error reply QString msg = QLatin1String(QT_TRANSLATE_NOOP("QNetworkReply", @@ -384,6 +417,9 @@ void QHttpThreadDelegate::finishedWithErrorSlot(QNetworkReply::NetworkError erro qWarning() << "QHttpThreadDelegate::finishedWithErrorSlot: HTTP reply had already been deleted, internal problem. Please report."; return; } +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::finishedWithErrorSlot() thread=" << QThread::currentThreadId() << "error=" << errorCode << detail; +#endif #ifndef QT_NO_OPENSSL if (ssl) @@ -401,6 +437,9 @@ void QHttpThreadDelegate::finishedWithErrorSlot(QNetworkReply::NetworkError erro void QHttpThreadDelegate::synchronousFinishedWithErrorSlot(QNetworkReply::NetworkError errorCode, const QString &detail) { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::synchronousFinishedWithErrorSlot() thread=" << QThread::currentThreadId() << "error=" << errorCode << detail; +#endif incomingErrorCode = errorCode; incomingErrorDetail = detail; @@ -416,6 +455,10 @@ static void downloadBufferDeleter(char *ptr) void QHttpThreadDelegate::headerChangedSlot() { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::headerChangedSlot() thread=" << QThread::currentThreadId(); +#endif + #ifndef QT_NO_OPENSSL if (ssl) emit sslConfigurationChanged(httpReply->sslConfiguration()); @@ -448,6 +491,9 @@ void QHttpThreadDelegate::headerChangedSlot() void QHttpThreadDelegate::synchronousHeaderChangedSlot() { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::synchronousHeaderChangedSlot() thread=" << QThread::currentThreadId(); +#endif // Store the information we need in this object, the QNetworkAccessHttpBackend will later read it incomingHeaders = httpReply->header(); incomingStatusCode = httpReply->statusCode(); @@ -492,6 +538,9 @@ void QHttpThreadDelegate::sslErrorsSlot(const QList<QSslError> &errors) void QHttpThreadDelegate::synchronousAuthenticationRequiredSlot(const QHttpNetworkRequest &request, QAuthenticator *a) { Q_UNUSED(request); +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::synchronousAuthenticationRequiredSlot() thread=" << QThread::currentThreadId(); +#endif // Ask the credential cache QNetworkAuthenticationCredential credential = authenticationManager->fetchCachedCredentials(httpRequest.url(), a); @@ -507,6 +556,9 @@ void QHttpThreadDelegate::synchronousAuthenticationRequiredSlot(const QHttpNetwo #ifndef QT_NO_NETWORKPROXY void QHttpThreadDelegate::synchronousProxyAuthenticationRequiredSlot(const QNetworkProxy &p, QAuthenticator *a) { +#ifdef QHTTPTHREADDELEGATE_DEBUG + qDebug() << "QHttpThreadDelegate::synchronousProxyAuthenticationRequiredSlot() thread=" << QThread::currentThreadId(); +#endif // Ask the credential cache QNetworkAuthenticationCredential credential = authenticationManager->fetchCachedProxyCredentials(p, a); if (!credential.isNull()) { diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h index 3b598aa..752bc09 100644 --- a/src/network/access/qhttpthreaddelegate_p.h +++ b/src/network/access/qhttpthreaddelegate_p.h @@ -110,6 +110,9 @@ public: qint64 incomingContentLength; QNetworkReply::NetworkError incomingErrorCode; QString incomingErrorDetail; +#ifndef QT_NO_BEARERMANAGEMENT + QSharedPointer<QNetworkSession> networkSession; +#endif protected: // The zerocopy download buffer, if used: diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 5aedac9..6220abe 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -46,7 +46,7 @@ #include "qnetworkreply_p.h" #include "QtCore/qhash.h" #include "QtCore/qmutex.h" -#include "QtNetwork/qnetworksession.h" +#include "QtNetwork/private/qnetworksession_p.h" #include "qnetworkaccesscachebackend_p.h" #include "qabstractnetworkcache.h" @@ -369,6 +369,8 @@ bool QNetworkAccessBackend::start() if (manager->networkSession->isOpen() && manager->networkSession->state() == QNetworkSession::Connected) { + //copy network session down to the backend + setProperty("_q_networksession", QVariant::fromValue(manager->networkSession)); open(); return true; } diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp index e34e6bb..3ad1961 100644 --- a/src/network/access/qnetworkaccessftpbackend.cpp +++ b/src/network/access/qnetworkaccessftpbackend.cpp @@ -153,6 +153,10 @@ void QNetworkAccessFtpBackend::open() if (!objectCache->requestEntry(cacheKey, this, SLOT(ftpConnectionReady(QNetworkAccessCache::CacheableObject*)))) { ftp = new QNetworkAccessCachedFtpConnection; +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the QFtp + ftp->setProperty("_q_networksession", property("_q_networksession")); +#endif #ifndef QT_NO_NETWORKPROXY if (proxy.type() == QNetworkProxy::FtpCachingProxy) ftp->setProxy(proxy.hostName(), proxy.port()); diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index d827b03..c619114 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -47,6 +47,7 @@ #include "qabstractnetworkcache.h" #include "qnetworkrequest.h" #include "qnetworkreply.h" +#include "QtNetwork/private/qnetworksession_p.h" #include "qnetworkrequest_p.h" #include "qnetworkcookie_p.h" #include "QtCore/qdatetime.h" @@ -522,6 +523,11 @@ void QNetworkAccessHttpBackend::postRequest() // Create the HTTP thread delegate QHttpThreadDelegate *delegate = new QHttpThreadDelegate; +#ifndef Q_NO_BEARERMANAGEMENT + QVariant v(property("_q_networksession")); + if (v.isValid()) + delegate->networkSession = qvariant_cast<QSharedPointer<QNetworkSession> >(v); +#endif // For the synchronous HTTP, this is the normal way the delegate gets deleted // For the asynchronous HTTP this is a safety measure, the delegate deletes itself when HTTP is finished diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 0337607..5a7521e 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1168,8 +1168,25 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co initializeSession = false; - if (!config.isValid()) { - networkSession.clear(); + QSharedPointer<QNetworkSession> newSession; + if (config.isValid()) + newSession = QSharedNetworkSessionManager::getSession(config); + + if (networkSession) { + //do nothing if new and old session are the same + if (networkSession == newSession) + return; + //disconnect from old session + QObject::disconnect(networkSession.data(), SIGNAL(opened()), q, SIGNAL(networkSessionConnected())); + QObject::disconnect(networkSession.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed())); + QObject::disconnect(networkSession.data(), SIGNAL(stateChanged(QNetworkSession::State)), + q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State))); + } + + //switch to new session (null if config was invalid) + networkSession = newSession; + + if (!networkSession) { online = false; if (networkAccessible == QNetworkAccessManager::NotAccessible) @@ -1180,8 +1197,7 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co return; } - networkSession = QSharedNetworkSessionManager::getSession(config); - + //connect to new session QObject::connect(networkSession.data(), SIGNAL(opened()), q, SIGNAL(networkSessionConnected()), Qt::QueuedConnection); //QueuedConnection is used to avoid deleting the networkSession inside its closed signal QObject::connect(networkSession.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()), Qt::QueuedConnection); @@ -1193,9 +1209,15 @@ void QNetworkAccessManagerPrivate::createSession(const QNetworkConfiguration &co void QNetworkAccessManagerPrivate::_q_networkSessionClosed() { + Q_Q(QNetworkAccessManager); if (networkSession) { networkConfiguration = networkSession->configuration().identifier(); + //disconnect from old session + QObject::disconnect(networkSession.data(), SIGNAL(opened()), q, SIGNAL(networkSessionConnected())); + QObject::disconnect(networkSession.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed())); + QObject::disconnect(networkSession.data(), SIGNAL(stateChanged(QNetworkSession::State)), + q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State))); networkSession.clear(); } } @@ -1204,8 +1226,12 @@ void QNetworkAccessManagerPrivate::_q_networkSessionStateChanged(QNetworkSession { Q_Q(QNetworkAccessManager); - if (state == QNetworkSession::Connected) + //Do not emit the networkSessionConnected signal here, except for roaming -> connected + //transition, otherwise it is emitted twice in a row when opening a connection. + if (state == QNetworkSession::Connected && lastSessionState == QNetworkSession::Roaming) emit q->networkSessionConnected(); + lastSessionState = state; + if (online) { if (state != QNetworkSession::Connected && state != QNetworkSession::Roaming) { online = false; diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h index 0f18221..f64cc4d 100644 --- a/src/network/access/qnetworkaccessmanager_p.h +++ b/src/network/access/qnetworkaccessmanager_p.h @@ -79,6 +79,7 @@ public: #endif #ifndef QT_NO_BEARERMANAGEMENT networkSession(0), + lastSessionState(QNetworkSession::Invalid), networkAccessible(QNetworkAccessManager::Accessible), online(false), initializeSession(true), @@ -136,6 +137,7 @@ public: #ifndef QT_NO_BEARERMANAGEMENT QSharedPointer<QNetworkSession> networkSession; + QNetworkSession::State lastSessionState; QString networkConfiguration; QNetworkAccessManager::NetworkAccessibility networkAccessible; bool online; diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index c3f75a5..9eb505d 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -74,7 +74,7 @@ inline QNetworkReplyImplPrivate::QNetworkReplyImplPrivate() void QNetworkReplyImplPrivate::_q_startOperation() { // ensure this function is only being called once - if (state == Working) { + if (state == Working || state == Finished) { qDebug("QNetworkReplyImpl::_q_startOperation was called more than once"); return; } diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index af60a43..21e64d9 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -44,10 +44,16 @@ #include <QEventLoop> #include <QTimer> +#include <QThread> #include "qnetworkconfigmanager_p.h" #include "qnetworksession_p.h" +#ifdef Q_OS_SYMBIAN +#include <es_sock.h> +#include <private/qcore_symbian_p.h> +#endif + #ifndef QT_NO_BEARERMANAGEMENT QT_BEGIN_NAMESPACE @@ -705,6 +711,40 @@ void QNetworkSession::disconnectNotify(const char *signal) d->setALREnabled(false); } +#ifdef Q_OS_SYMBIAN +RConnection* QNetworkSessionPrivate::nativeSession(QNetworkSession &s) +{ + if (!s.d) + return 0; + if (s.thread() != QThread::currentThread()) + qWarning("QNetworkSessionPrivate::nativeSession called in wrong thread"); + return s.d->nativeSession(); +} + +TInt QNetworkSessionPrivate::nativeOpenSocket(QNetworkSession& s, RSocket& sock, TUint family, TUint type, TUint protocol) +{ + if (!s.d) + return 0; + QMutexLocker lock(&(s.d->mutex)); + RConnection *con = s.d->nativeSession(); + if (!con || !con->SubSessionHandle()) + return KErrNotReady; + return sock.Open(qt_symbianGetSocketServer(), family, type, protocol, *con); +} + +TInt QNetworkSessionPrivate::nativeOpenHostResolver(QNetworkSession& s, RHostResolver& resolver, TUint family, TUint protocol) +{ + if (!s.d) + return 0; + QMutexLocker lock(&(s.d->mutex)); + RConnection *con = s.d->nativeSession(); + if (!con || !con->SubSessionHandle()) + return KErrNotReady; + return resolver.Open(qt_symbianGetSocketServer(), family, protocol, *con); +} + +#endif + #include "moc_qnetworksession.cpp" QT_END_NAMESPACE diff --git a/src/network/bearer/qnetworksession_p.h b/src/network/bearer/qnetworksession_p.h index 707ad37..a92b7ce 100644 --- a/src/network/bearer/qnetworksession_p.h +++ b/src/network/bearer/qnetworksession_p.h @@ -55,9 +55,16 @@ #include "qnetworksession.h" #include "qnetworkconfiguration_p.h" +#include "QtCore/qsharedpointer.h" #ifndef QT_NO_BEARERMANAGEMENT +#ifdef Q_OS_SYMBIAN +class RConnection; +class RSocket; +class RHostResolver; +#endif + QT_BEGIN_NAMESPACE class Q_NETWORK_EXPORT QNetworkSessionPrivate : public QObject @@ -68,7 +75,7 @@ class Q_NETWORK_EXPORT QNetworkSessionPrivate : public QObject public: QNetworkSessionPrivate() : QObject(), - state(QNetworkSession::Invalid), isOpen(false) + state(QNetworkSession::Invalid), isOpen(false), mutex(QMutex::Recursive) {} virtual ~QNetworkSessionPrivate() {} @@ -102,6 +109,15 @@ public: virtual quint64 bytesReceived() const = 0; virtual quint64 activeTime() const = 0; +#ifdef Q_OS_SYMBIAN + // get internal RConnection (not thread safe, call only from thread that owns the QNetworkSession) + static RConnection* nativeSession(QNetworkSession&); + virtual RConnection* nativeSession() = 0; + // open socket using the internal RConnection (thread safe) + static TInt nativeOpenSocket(QNetworkSession& session, RSocket& socket, TUint family, TUint type, TUint protocol); + // open host resolver using the internal RConnection (thread safe) + static TInt nativeOpenHostResolver(QNetworkSession& session, RHostResolver& resolver, TUint family, TUint protocol); +#endif protected: inline QNetworkConfigurationPrivatePointer privateConfiguration(const QNetworkConfiguration &config) const { @@ -141,10 +157,14 @@ protected: QNetworkSession::State state; bool isOpen; + + QMutex mutex; }; QT_END_NAMESPACE +Q_DECLARE_METATYPE(QSharedPointer<QNetworkSession>) + #endif // QT_NO_BEARERMANAGEMENT #endif // QNETWORKSESSIONPRIVATE_H diff --git a/src/network/kernel/kernel.pri b/src/network/kernel/kernel.pri index bd3e6ec..bb98305 100644 --- a/src/network/kernel/kernel.pri +++ b/src/network/kernel/kernel.pri @@ -20,7 +20,7 @@ SOURCES += kernel/qauthenticator.cpp \ kernel/qnetworkproxy.cpp \ kernel/qnetworkinterface.cpp -symbian: SOURCES += kernel/qhostinfo_unix.cpp kernel/qnetworkinterface_symbian.cpp +symbian: SOURCES += kernel/qhostinfo_symbian.cpp kernel/qnetworkinterface_symbian.cpp unix:!symbian:SOURCES += kernel/qhostinfo_unix.cpp kernel/qnetworkinterface_unix.cpp win32:SOURCES += kernel/qhostinfo_win.cpp kernel/qnetworkinterface_win.cpp integrity:SOURCES += kernel/qhostinfo_unix.cpp kernel/qnetworkinterface_unix.cpp diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 5ec6041..a16d4ca 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -49,6 +49,7 @@ #include <qstringlist.h> #include <qthread.h> #include <qurl.h> +#include <private/qnetworksession_p.h> #ifdef Q_OS_UNIX # include <unistd.h> @@ -56,10 +57,14 @@ QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QHostInfoLookupManager, theHostInfoLookupManager) - //#define QHOSTINFO_DEBUG +#ifndef Q_OS_SYMBIAN +Q_GLOBAL_STATIC(QHostInfoLookupManager, theHostInfoLookupManager) +#else +Q_GLOBAL_STATIC(QSymbianHostInfoLookupManager, theHostInfoLookupManager) +#endif + /*! \class QHostInfo \brief The QHostInfo class provides static functions for host name lookups. @@ -152,6 +157,7 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver, qDebug("QHostInfo::lookupHost(\"%s\", %p, %s)", name.toLatin1().constData(), receiver, member ? member + 1 : 0); #endif + if (!QAbstractEventDispatcher::instance(QThread::currentThread())) { qWarning("QHostInfo::lookupHost() called with no event dispatcher"); return -1; @@ -172,7 +178,9 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver, return id; } +#ifndef Q_OS_SYMBIAN QHostInfoLookupManager *manager = theHostInfoLookupManager(); + if (manager) { // the application is still alive if (manager->cache.isEnabled()) { @@ -187,11 +195,45 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver, return id; } } + // cache is not enabled or it was not in the cache, do normal lookup QHostInfoRunnable* runnable = new QHostInfoRunnable(name, id); QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); manager->scheduleLookup(runnable); } +#else + QSymbianHostInfoLookupManager *manager = theHostInfoLookupManager(); + + if (manager) { + // the application is still alive + if (manager->cache.isEnabled()) { + // check cache first + bool valid = false; + QHostInfo info = manager->cache.get(name, &valid); + if (valid) { + info.setLookupId(id); + QHostInfoResult result; + QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); + result.emitResultsReady(info); + return id; + } + } + + // cache is not enabled or it was not in the cache, do normal lookup +#ifndef QT_NO_BEARERMANAGEMENT + QSharedPointer<QNetworkSession> networkSession; + QVariant v(receiver->property("_q_networksession")); + if (v.isValid()) + networkSession = qvariant_cast< QSharedPointer<QNetworkSession> >(v); +#endif + + QSymbianHostResolver *symbianResolver = 0; + QT_TRAP_THROWING(symbianResolver = new QSymbianHostResolver(name, id, networkSession)); + QObject::connect(&symbianResolver->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); + manager->scheduleLookup(symbianResolver); + } +#endif + return id; } @@ -225,10 +267,33 @@ QHostInfo QHostInfo::fromName(const QString &name) #endif QHostInfo hostInfo = QHostInfoAgent::fromName(name); - QHostInfoLookupManager *manager = theHostInfoLookupManager(); + QAbstractHostInfoLookupManager* manager = theHostInfoLookupManager(); + manager->cache.put(name, hostInfo); + return hostInfo; +} + +#ifndef QT_NO_BEARERMANAGEMENT +QHostInfo QHostInfoPrivate::fromName(const QString &name, QSharedPointer<QNetworkSession> session) +{ +#if defined QHOSTINFO_DEBUG + qDebug("QHostInfoPrivate::fromName(\"%s\") with session %p",name.toLatin1().constData(), session.data()); +#endif + + QHostInfo hostInfo = QHostInfoAgent::fromName(name, session); + QAbstractHostInfoLookupManager* manager = theHostInfoLookupManager(); manager->cache.put(name, hostInfo); return hostInfo; } +#endif + +#ifndef Q_OS_SYMBIAN +// This function has a special implementation for symbian right now in qhostinfo_symbian.cpp but not on other OS. +QHostInfo QHostInfoAgent::fromName(const QString &hostName, QSharedPointer<QNetworkSession> networkSession) +{ + return QHostInfoAgent::fromName(hostName); +} +#endif + /*! \enum QHostInfo::HostInfoError @@ -406,6 +471,7 @@ void QHostInfo::setErrorString(const QString &str) \sa hostName() */ +#ifndef Q_OS_SYMBIAN QHostInfoRunnable::QHostInfoRunnable(QString hn, int i) : toBeLookedUp(hn), id(i) { setAutoDelete(true); @@ -632,6 +698,7 @@ void QHostInfoLookupManager::lookupFinished(QHostInfoRunnable *r) finishedLookups.append(r); work(); } +#endif // This function returns immediately when we had a result in the cache, else it will later emit a signal QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id) @@ -640,7 +707,7 @@ QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *id = -1; // check cache - QHostInfoLookupManager* manager = theHostInfoLookupManager(); + QAbstractHostInfoLookupManager* manager = theHostInfoLookupManager(); if (manager && manager->cache.isEnabled()) { QHostInfo info = manager->cache.get(name, valid); if (*valid) { @@ -657,7 +724,7 @@ QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char void qt_qhostinfo_clear_cache() { - QHostInfoLookupManager* manager = theHostInfoLookupManager(); + QAbstractHostInfoLookupManager* manager = theHostInfoLookupManager(); if (manager) { manager->clear(); } @@ -665,7 +732,7 @@ void qt_qhostinfo_clear_cache() void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(bool e) { - QHostInfoLookupManager* manager = theHostInfoLookupManager(); + QAbstractHostInfoLookupManager* manager = theHostInfoLookupManager(); if (manager) { manager->cache.setEnabled(e); } @@ -733,4 +800,9 @@ void QHostInfoCache::clear() cache.clear(); } +QAbstractHostInfoLookupManager* QAbstractHostInfoLookupManager::globalInstance() +{ + return theHostInfoLookupManager(); +} + QT_END_NAMESPACE diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index b568ec2..8da0692 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -69,9 +69,19 @@ #include <QElapsedTimer> #include <QCache> +#include <QNetworkSession> +#include <QSharedPointer> + +#ifdef Q_OS_SYMBIAN +// Symbian Headers +#include <es_sock.h> +#include <in_sock.h> +#endif + QT_BEGIN_NAMESPACE + class QHostInfoResult : public QObject { Q_OBJECT @@ -91,6 +101,12 @@ class QHostInfoAgent : public QObject Q_OBJECT public: static QHostInfo fromName(const QString &hostName); + static QHostInfo fromName(const QString &hostName, QSharedPointer<QNetworkSession> networkSession); + +#ifdef Q_OS_SYMBIAN + static int lookupHost(const QString &name, QObject *receiver, const char *member); + static void abortHostLookup(int lookupId); +#endif }; class QHostInfoPrivate @@ -102,6 +118,10 @@ public: lookupId(0) { } +#ifndef QT_NO_BEARERMANAGEMENT + //not a public API yet + static QHostInfo fromName(const QString &hostName, QSharedPointer<QNetworkSession> networkSession); +#endif QHostInfo::HostInfoError err; QString errorStr; @@ -151,7 +171,25 @@ public: QHostInfoResult resultEmitter; }; -class QHostInfoLookupManager : public QObject + +class QAbstractHostInfoLookupManager : public QObject +{ + Q_OBJECT + +public: + ~QAbstractHostInfoLookupManager() {} + virtual void clear() = 0; + + QHostInfoCache cache; + +protected: + QAbstractHostInfoLookupManager() {} + static QAbstractHostInfoLookupManager* globalInstance(); + +}; + +#ifndef Q_OS_SYMBIAN +class QHostInfoLookupManager : public QAbstractHostInfoLookupManager { Q_OBJECT public: @@ -169,8 +207,6 @@ public: void lookupFinished(QHostInfoRunnable *r); bool wasAborted(int id); - QHostInfoCache cache; - friend class QHostInfoRunnable; protected: QList<QHostInfoRunnable*> currentLookups; // in progress @@ -189,6 +225,95 @@ private slots: void waitForThreadPoolDone() { threadPool.waitForDone(); } }; +#else + +class QSymbianHostResolver : public CActive +{ +public: + QSymbianHostResolver(const QString &hostName, int id, QSharedPointer<QNetworkSession> networkSession); + ~QSymbianHostResolver(); + + void requestHostLookup(); + void abortHostLookup(); + int id(); + + void returnResults(); + + QHostInfoResult resultEmitter; + +private: + void DoCancel(); + void RunL(); + void run(); + TInt RunError(TInt aError); + + void processNameResult(); + void nextNameResult(); + void processAddressResult(); + +private: + int iId; + + const QString iHostName; + QString iEncodedHostName; + TPtrC iHostNamePtr; + + RSocketServ& iSocketServ; + RHostResolver iHostResolver; + QSharedPointer<QNetworkSession> iNetworkSession; + + TNameEntry iNameResult; + TInetAddr IpAdd; + + QHostAddress iAddress; + + QHostInfo iResults; + + QList<QHostAddress> iHostAddresses; + + enum { + EIdle, + EGetByName, + EGetByAddress, + ECompleteFromCache, + EError + } iState; +}; + +class QSymbianHostInfoLookupManager : public QAbstractHostInfoLookupManager +{ + Q_OBJECT +public: + QSymbianHostInfoLookupManager(); + ~QSymbianHostInfoLookupManager(); + + static QSymbianHostInfoLookupManager* globalInstance(); + + int id(); + void clear(); + + // called from QHostInfo + void scheduleLookup(QSymbianHostResolver *r); + void abortLookup(int id); + + // called from QSymbianHostResolver + void lookupFinished(QSymbianHostResolver *r); + +private: + void runNextLookup(); + + // this is true for single threaded use, with multiple threads the max is ((number of threads) + KMaxConcurrentLookups - 1) + static const int KMaxConcurrentLookups = 5; + + QList<QSymbianHostResolver*> iCurrentLookups; + QList<QSymbianHostResolver*> iScheduledLookups; + + QMutex mutex; +}; +#endif + + + QT_END_NAMESPACE #endif // QHOSTINFO_P_H diff --git a/src/network/kernel/qhostinfo_symbian.cpp b/src/network/kernel/qhostinfo_symbian.cpp new file mode 100644 index 0000000..2a8de1d --- /dev/null +++ b/src/network/kernel/qhostinfo_symbian.cpp @@ -0,0 +1,600 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtNetwork module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//#define QHOSTINFO_DEBUG + +// Qt Headers +#include <QByteArray> +#include <QUrl> +#include <QList> + +#include "qplatformdefs.h" + +#include "qhostinfo_p.h" +#include <private/qcore_symbian_p.h> +#include <private/qsystemerror_p.h> +#include <private/qnetworksession_p.h> + +// Header does not exist in the S60 5.0 SDK +//#include <networking/dnd_err.h> +const TInt KErrDndNameNotFound = -5120; // Returned when no data found for GetByName +const TInt KErrDndAddrNotFound = -5121; // Returned when no data found for GetByAddr + +QT_BEGIN_NAMESPACE + +static void setError_helper(QHostInfo &info, TInt symbianError) +{ + switch (symbianError) { + case KErrDndNameNotFound: + case KErrDndAddrNotFound: + case KErrNotFound: + case KErrEof: + // various "no more results" error codes + info.setError(QHostInfo::HostNotFound); + info.setErrorString(QObject::tr("Host not found")); + break; + default: + // Unknown error + info.setError(QHostInfo::UnknownError); + info.setErrorString(QSystemError(symbianError, QSystemError::NativeError).toString()); + break; + } +} + +QHostInfo QHostInfoAgent::fromName(const QString &hostName, QSharedPointer<QNetworkSession> networkSession) +{ + QHostInfo results; + + // Connect to ESOCK + RSocketServ socketServ(qt_symbianGetSocketServer()); + RHostResolver hostResolver; + + + int err; + if (networkSession) + err = QNetworkSessionPrivate::nativeOpenHostResolver(*networkSession, hostResolver, KAfInet, KProtocolInetUdp); + else + err = hostResolver.Open(socketServ, KAfInet, KProtocolInetUdp); + if (err) { + setError_helper(results, err); + return results; + } + + TNameEntry nameResult; + +#if defined(QHOSTINFO_DEBUG) + qDebug("QHostInfoAgent::fromName(%s) looking up...", + hostName.toLatin1().constData()); +#endif + + QHostAddress address; + if (address.setAddress(hostName)) { + // Reverse lookup +#if defined(QHOSTINFO_DEBUG) + qDebug("(reverse lookup)"); +#endif + TInetAddr IpAdd; + IpAdd.Input(qt_QString2TPtrC(hostName)); + + // Synchronous request. nameResult returns Host Name. + err = hostResolver.GetByAddress(IpAdd, nameResult); + if (err) { + //for behavioural compatibility with Qt 4.7 and unix/windows + //backends: don't report error, return ip address as host name + results.setHostName(address.toString()); + } else { + results.setHostName(qt_TDesC2QString(nameResult().iName)); + } + results.setAddresses(QList<QHostAddress>() << address); + return results; + } + + // IDN support + QByteArray aceHostname = QUrl::toAce(hostName); + results.setHostName(hostName); + if (aceHostname.isEmpty()) { + results.setError(QHostInfo::HostNotFound); + results.setErrorString(hostName.isEmpty() ? + QCoreApplication::translate("QHostInfoAgent", "No host name given") : + QCoreApplication::translate("QHostInfoAgent", "Invalid hostname")); + return results; + } + + + // Call RHostResolver::GetByAddress, and place all IPv4 addresses at the start and + // the IPv6 addresses at the end of the address list in results. + + // Synchronous request. + err = hostResolver.GetByName(qt_QString2TPtrC(QString::fromLatin1(aceHostname)), nameResult); + if (err) { + setError_helper(results, err); + return results; + } + + QList<QHostAddress> hostAddresses; + + TInetAddr hostAdd = nameResult().iAddr; + // 39 is the maximum length of an IPv6 address. + TBuf<39> ipAddr; + + // Fill ipAddr with the IP address from hostAdd + hostAdd.Output(ipAddr); + if (ipAddr.Length() > 0) + hostAddresses.append(QHostAddress(qt_TDesC2QString(ipAddr))); + + // Check if there's more than one IP address linkd to this name + while (hostResolver.Next(nameResult) == KErrNone) { + hostAdd = nameResult().iAddr; + hostAdd.Output(ipAddr); + + // Ensure that record is valid (not an alias and with length greater than 0) + if (!(nameResult().iFlags & TNameRecord::EAlias) && !(hostAdd.IsUnspecified())) { + hostAddresses.append(QHostAddress(qt_TDesC2QString(ipAddr))); + } + } + + hostResolver.Close(); + + results.setAddresses(hostAddresses); + return results; +} + +QHostInfo QHostInfoAgent::fromName(const QString &hostName) +{ + // null shared pointer + QSharedPointer<QNetworkSession> networkSession; + return fromName(hostName, networkSession); +} + +QString QHostInfo::localHostName() +{ + // Connect to ESOCK + RSocketServ socketServ(qt_symbianGetSocketServer()); + RHostResolver hostResolver; + + // RConnection not required to get the host name + int err = hostResolver.Open(socketServ, KAfInet, KProtocolInetUdp); + if (err) + return QString(); + + THostName hostName; + err = hostResolver.GetHostName(hostName); + if (err) + return QString(); + + hostResolver.Close(); + + return qt_TDesC2QString(hostName); +} + +QString QHostInfo::localDomainName() +{ + // This concept does not exist on Symbian OS because the device can be on + // multiple networks with multiple "local domain" names. + // For now, return a null string. + return QString(); +} + + +QSymbianHostResolver::QSymbianHostResolver(const QString &hostName, int identifier, QSharedPointer<QNetworkSession> networkSession) + : CActive(CActive::EPriorityStandard), iHostName(hostName), + iSocketServ(qt_symbianGetSocketServer()), iNetworkSession(networkSession), iResults(identifier) +{ + CActiveScheduler::Add(this); +} + +QSymbianHostResolver::~QSymbianHostResolver() +{ +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostInfoLookupManager::~QSymbianHostResolver" << id(); +#endif + Cancel(); + iHostResolver.Close(); +} + +// Async equivalent to QHostInfoAgent::fromName() +void QSymbianHostResolver::requestHostLookup() +{ + +#if defined(QHOSTINFO_DEBUG) + qDebug("QSymbianHostResolver::requestHostLookup(%s) looking up... (id = %d)", + iHostName.toLatin1().constData(), id()); +#endif + + QSymbianHostInfoLookupManager *manager = QSymbianHostInfoLookupManager::globalInstance(); + if (manager->cache.isEnabled()) { + //check if name has been put in the cache while this request was queued + bool valid; + QHostInfo cachedResult = manager->cache.get(iHostName, &valid); + if (valid) { +#if defined(QHOSTINFO_DEBUG) + qDebug("...found in cache"); +#endif + iResults = cachedResult; + iState = ECompleteFromCache; + SetActive(); + TRequestStatus* stat = &iStatus; + User::RequestComplete(stat, KErrNone); + return; + } + } + + int err; + if (iNetworkSession) { + err = QNetworkSessionPrivate::nativeOpenHostResolver(*iNetworkSession, iHostResolver, KAfInet, KProtocolInetUdp); +#if defined(QHOSTINFO_DEBUG) + qDebug("using resolver from session (err = %d)", err); +#endif + } else { + err = iHostResolver.Open(iSocketServ, KAfInet, KProtocolInetUdp); +#if defined(QHOSTINFO_DEBUG) + qDebug("using default resolver (err = %d)", err); +#endif + } + if (err) { + setError_helper(iResults, err); + } else { + + if (iAddress.setAddress(iHostName)) { + // Reverse lookup + IpAdd.Input(qt_QString2TPtrC(iHostName)); + + // Asynchronous request. + iHostResolver.GetByAddress(IpAdd, iNameResult, iStatus); // <---- ASYNC + iState = EGetByAddress; + + } else { + + // IDN support + QByteArray aceHostname = QUrl::toAce(iHostName); + iResults.setHostName(iHostName); + if (aceHostname.isEmpty()) { + iResults.setError(QHostInfo::HostNotFound); + iResults.setErrorString(iHostName.isEmpty() ? + QCoreApplication::translate("QHostInfoAgent", "No host name given") : + QCoreApplication::translate("QHostInfoAgent", "Invalid hostname")); + + err = KErrArgument; + } else { + iEncodedHostName = QString::fromLatin1(aceHostname); + iHostNamePtr.Set(qt_QString2TPtrC(iEncodedHostName)); + + // Asynchronous request. + iHostResolver.GetByName(iHostNamePtr, iNameResult, iStatus); + iState = EGetByName; + } + } + } + SetActive(); + if (err) { + iHostResolver.Close(); + + //self complete so that RunL can inform manager without causing recursion + iState = EError; + TRequestStatus* stat = &iStatus; + User::RequestComplete(stat, err); + } +} + +void QSymbianHostResolver::abortHostLookup() +{ + if (resultEmitter.thread() == QThread::currentThread()) { +#ifdef QHOSTINFO_DEBUG + qDebug("QSymbianHostResolver::abortHostLookup - deleting %d", id()); +#endif + //normal case, abort from same thread it was started + delete this; //will cancel outstanding request + } else { +#ifdef QHOSTINFO_DEBUG + qDebug("QSymbianHostResolver::abortHostLookup - detaching %d", id()); +#endif + //abort from different thread, carry on but don't report the results + resultEmitter.disconnect(); + } +} + +void QSymbianHostResolver::DoCancel() +{ +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostResolver::DoCancel" << QThread::currentThreadId() << id() << (int)iState << this; +#endif + if (iState == EGetByAddress || iState == EGetByName) { + //these states have made an async request to host resolver + iHostResolver.Cancel(); + } else { + //for the self completing states there is nothing to cancel + Q_ASSERT(iState == EError || iState == ECompleteFromCache); + } +} + +void QSymbianHostResolver::RunL() +{ + QT_TRYCATCH_LEAVING(run()); +} + +void QSymbianHostResolver::run() +{ + switch (iState) { + case EGetByName: + processNameResult(); + break; + case EGetByAddress: + processAddressResult(); + break; + case ECompleteFromCache: + case EError: + returnResults(); + break; + default: + qWarning("QSymbianHostResolver internal error, bad state in run()"); + iResults.setError(QHostInfo::UnknownError); + iResults.setErrorString(QSystemError(KErrCorrupt,QSystemError::NativeError).toString()); + returnResults(); + } +} + +void QSymbianHostResolver::returnResults() +{ +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostResolver::returnResults" << iResults.error() << iResults.errorString(); + foreach (QHostAddress addr, iResults.addresses()) + qDebug() << addr; +#endif + iState = EIdle; + + QSymbianHostInfoLookupManager *manager = QSymbianHostInfoLookupManager::globalInstance(); + if (manager->cache.isEnabled()) { + manager->cache.put(iHostName, iResults); + } + manager->lookupFinished(this); + + resultEmitter.emitResultsReady(iResults); + + delete this; +} + +TInt QSymbianHostResolver::RunError(TInt aError) +{ + QT_TRY { + iState = EIdle; + + QSymbianHostInfoLookupManager *manager = QSymbianHostInfoLookupManager::globalInstance(); + manager->lookupFinished(this); + + setError_helper(iResults, aError); + + resultEmitter.emitResultsReady(iResults); + } + QT_CATCH(...) {} + + delete this; + + return KErrNone; +} + +void QSymbianHostResolver::processNameResult() +{ + if (iStatus.Int() == KErrNone) { + TInetAddr hostAdd = iNameResult().iAddr; + // 39 is the maximum length of an IPv6 address. + TBuf<39> ipAddr; + + hostAdd.Output(ipAddr); + + // Ensure that record is valid (not an alias and with length greater than 0) + if (!(iNameResult().iFlags & TNameRecord::EAlias) && !(hostAdd.IsUnspecified())) { + iHostAddresses.append(QHostAddress(qt_TDesC2QString(ipAddr))); + } + + iState = EGetByName; + iHostResolver.Next(iNameResult, iStatus); + SetActive(); + } + else { + // No more addresses, so return the results (or an error if there aren't any). +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostResolver::processNameResult with err=" << iStatus.Int() << "count=" << iHostAddresses.count(); +#endif + if (iHostAddresses.count() > 0) { + iResults.setAddresses(iHostAddresses); + } else { + iState = EError; + setError_helper(iResults, iStatus.Int()); + } + returnResults(); + } +} + +void QSymbianHostResolver::processAddressResult() +{ + TInt err = iStatus.Int(); + + if (err < 0) { + //For behavioural compatibility with Qt 4.7, don't report errors on reverse lookup, + //return the address as a string (same as unix/windows backends) + iResults.setHostName(iAddress.toString()); + } else { + iResults.setHostName(qt_TDesC2QString(iNameResult().iName)); + } + iResults.setAddresses(QList<QHostAddress>() << iAddress); + returnResults(); +} + + +int QSymbianHostResolver::id() +{ + return iResults.lookupId(); +} + +QSymbianHostInfoLookupManager::QSymbianHostInfoLookupManager() +{ +} + +QSymbianHostInfoLookupManager::~QSymbianHostInfoLookupManager() +{ +} + +void QSymbianHostInfoLookupManager::clear() +{ + QMutexLocker locker(&mutex); +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostInfoLookupManager::clear" << QThread::currentThreadId(); +#endif + foreach (QSymbianHostResolver *hr, iCurrentLookups) + hr->abortHostLookup(); + iCurrentLookups.clear(); + qDeleteAll(iScheduledLookups); + cache.clear(); +} + +void QSymbianHostInfoLookupManager::lookupFinished(QSymbianHostResolver *r) +{ + QMutexLocker locker(&mutex); + +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostInfoLookupManager::lookupFinished" << QThread::currentThreadId() << r->id() << "current" << iCurrentLookups.count() << "queued" << iScheduledLookups.count(); +#endif + // remove finished lookup from array and destroy + TInt count = iCurrentLookups.count(); + for (TInt i = 0; i < count; i++) { + if (iCurrentLookups[i]->id() == r->id()) { + iCurrentLookups.removeAt(i); + break; + } + } + + runNextLookup(); +} + +void QSymbianHostInfoLookupManager::runNextLookup() +{ +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostInfoLookupManager::runNextLookup" << QThread::currentThreadId() << "current" << iCurrentLookups.count() << "queued" << iScheduledLookups.count(); +#endif + // check to see if there are any scheduled lookups + for (int i=0; i<iScheduledLookups.count(); i++) { + QSymbianHostResolver* hostResolver = iScheduledLookups.at(i); + if (hostResolver->resultEmitter.thread() == QThread::currentThread()) { + // if so, move one to the current lookups and run it + iCurrentLookups.append(hostResolver); + iScheduledLookups.removeAt(i); + hostResolver->requestHostLookup(); + // if spare capacity, try to start another one + if (iCurrentLookups.count() >= KMaxConcurrentLookups) + break; + i--; //compensate for removeAt + } + } +} + +// called from QHostInfo +void QSymbianHostInfoLookupManager::scheduleLookup(QSymbianHostResolver* r) +{ + QMutexLocker locker(&mutex); + +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostInfoLookupManager::scheduleLookup" << QThread::currentThreadId() << r->id() << "current" << iCurrentLookups.count() << "queued" << iScheduledLookups.count(); +#endif + // Check to see if we have space on the current lookups pool. + bool defer = false; + if (iCurrentLookups.count() >= KMaxConcurrentLookups) { + // busy, defer unless there are no request in this thread + // at least one active request per thread with queued requests is needed + for (int i=0; i < iCurrentLookups.count();i++) { + if (iCurrentLookups.at(i)->resultEmitter.thread() == QThread::currentThread()) { + defer = true; + break; + } + } + } + if (defer) { + // If no, schedule for later. + iScheduledLookups.append(r); +#if defined(QHOSTINFO_DEBUG) + qDebug(" - scheduled"); +#endif + return; + } else { + // If yes, add it to the current lookups. + iCurrentLookups.append(r); + + // ... and trigger the async call. + r->requestHostLookup(); + } +} + +void QSymbianHostInfoLookupManager::abortLookup(int id) +{ + QMutexLocker locker(&mutex); + +#if defined(QHOSTINFO_DEBUG) + qDebug() << "QSymbianHostInfoLookupManager::abortLookup" << QThread::currentThreadId() << id << "current" << iCurrentLookups.count() << "queued" << iScheduledLookups.count(); +#endif + int i = 0; + // Find the aborted lookup by ID. + // First in the current lookups. + for (i = 0; i < iCurrentLookups.count(); i++) { + if (id == iCurrentLookups[i]->id()) { + QSymbianHostResolver* r = iCurrentLookups.at(i); + iCurrentLookups.removeAt(i); + r->abortHostLookup(); + runNextLookup(); + return; + } + } + // Then in the scheduled lookups. + for (i = 0; i < iScheduledLookups.count(); i++) { + if (id == iScheduledLookups[i]->id()) { + QSymbianHostResolver* r = iScheduledLookups.at(i); + iScheduledLookups.removeAt(i); + delete r; + return; + } + } +} + +QSymbianHostInfoLookupManager* QSymbianHostInfoLookupManager::globalInstance() +{ + return static_cast<QSymbianHostInfoLookupManager*> + (QAbstractHostInfoLookupManager::globalInstance()); +} + +QT_END_NAMESPACE diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index 22f6e0d..8fc6bf6 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -147,7 +147,7 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName) if (address.setAddress(hostName)) { // Reverse lookup // Reverse lookups using getnameinfo are broken on darwin, use gethostbyaddr instead. -#if !defined (QT_NO_GETADDRINFO) && !defined (Q_OS_DARWIN) && !defined (Q_OS_SYMBIAN) +#if !defined (QT_NO_GETADDRINFO) && !defined (Q_OS_DARWIN) sockaddr_in sa4; #ifndef QT_NO_IPV6 sockaddr_in6 sa6; @@ -208,23 +208,12 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName) #ifdef Q_ADDRCONFIG hints.ai_flags = Q_ADDRCONFIG; #endif -#ifdef Q_OS_SYMBIAN -# ifdef QHOSTINFO_DEBUG - qDebug() << "Setting flags: 'hints.ai_flags &= AI_V4MAPPED | AI_ALL'"; -# endif -#endif int result = getaddrinfo(aceHostname.constData(), 0, &hints, &res); # ifdef Q_ADDRCONFIG if (result == EAI_BADFLAGS) { // if the lookup failed with AI_ADDRCONFIG set, try again without it hints.ai_flags = 0; -#ifdef Q_OS_SYMBIAN -# ifdef QHOSTINFO_DEBUG - qDebug() << "Setting flags: 'hints.ai_flags &= AI_V4MAPPED | AI_ALL'"; -# endif - hints.ai_flags &= AI_V4MAPPED | AI_ALL; -#endif result = getaddrinfo(aceHostname.constData(), 0, &hints, &res); } # endif diff --git a/src/network/kernel/qnetworkinterface_symbian.cpp b/src/network/kernel/qnetworkinterface_symbian.cpp index 8e5db3c..7767f54 100644 --- a/src/network/kernel/qnetworkinterface_symbian.cpp +++ b/src/network/kernel/qnetworkinterface_symbian.cpp @@ -67,22 +67,29 @@ static QNetworkInterface::InterfaceFlags convertFlags(const TSoInetInterfaceInfo 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; - - // Connect to Native socket server - RSocketServ socketServ; - err = socketServ.Connect(); - if (err) - return interfaces; + QList<QHostAddress> addressesWithEstimatedNetmasks; // Open dummy socket for interface queries RSocket socket; - err = socket.Open(socketServ, _L("udp")); + err = socket.Open(qt_symbianGetSocketServer(), _L("udp")); if (err) { - socketServ.Close(); return interfaces; } @@ -90,7 +97,6 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() err = socket.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl); if (err) { socket.Close(); - socketServ.Close(); return interfaces; } @@ -98,8 +104,7 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() TPckgBuf<TSoInetInterfaceInfo> infoPckg; TSoInetInterfaceInfo &info = infoPckg(); while (socket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, infoPckg) == KErrNone) { - // Do not include IPv6 addresses because netmask and broadcast address cannot be determined correctly - if (info.iName != KNullDesC && info.iAddress.IsV4Mapped()) { + if (info.iName != KNullDesC) { TName address; QNetworkAddressEntry entry; QNetworkInterfacePrivate *iface = 0; @@ -121,40 +126,58 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() } // Get the address of the interface - info.iAddress.Output(address); - entry.setIp(QHostAddress(qt_TDesC2QString(address))); + 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 - // For some reason netmask is always 0.0.0.0 - // info.iNetMask.Output(address); - // entry.setNetmask( QHostAddress( qt_TDesC2QString( address ) ) ); - - // Workaround: Let Symbian determine netmask based on IP address class - // TODO: Works only for IPv4 - Task: 259128 Implement IPv6 support - TInetAddr netmask; - netmask.NetMask(info.iAddress); - netmask.Output(address); - entry.setNetmask(QHostAddress(qt_TDesC2QString(address))); - - // Get the interface broadcast address - if (iface->flags & QNetworkInterface::CanBroadcast) { - // For some reason broadcast address is always 0.0.0.0 - // info.iBrdAddr.Output(address); - // entry.setBroadcast( QHostAddress( qt_TDesC2QString( address ) ) ); - - // Workaround: Let Symbian determine broadcast address based on IP address - // TODO: Works only for IPv4 - Task: 259128 Implement IPv6 support - TInetAddr broadcast; - broadcast.NetBroadcast(info.iAddress); - broadcast.Output(address); - entry.setBroadcast(QHostAddress(qt_TDesC2QString(address))); + 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) - printf("\n Found network interface %s, interface flags:\n\ + 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\ @@ -168,15 +191,20 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() } } + // 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 - // netmask and then ::postProcess() should calculate + // 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(); - socketServ.Close(); // return what we have // up to this moment return interfaces; @@ -185,16 +213,21 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() TSoInetRouteInfo routeInfo; TPckg<TSoInetRouteInfo> routeInfoPkg(routeInfo); while (socket.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, routeInfoPkg) == KErrNone) { - TName address; - // get interface address - routeInfo.iIfAddr.Output(address); - QHostAddress ifAddr(qt_TDesC2QString(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; + } - routeInfo.iDstAddr.Output(address); - QHostAddress destination(qt_TDesC2QString(address)); + QHostAddress destination(qt_QHostAddressFromTInetAddr(routeInfo.iDstAddr)); +#if defined(QNETWORKINTERFACE_DEBUG) + qDebug() << "route from" << ifAddr << "to" << destination; +#endif if (destination.isNull() || destination != ifAddr) continue; @@ -205,17 +238,13 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() QNetworkAddressEntry entry = iface->addressEntries.at(eindex); if (entry.ip() != ifAddr) { continue; - } else if (entry.ip().protocol() != QAbstractSocket::IPv4Protocol) { - // skip if not IPv4 address (e.g. IPv6) - // as results not reliable on Symbian - continue; - } else { - routeInfo.iNetMask.Output(address); - QHostAddress netmask(qt_TDesC2QString(address)); + } 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); - // NULL boradcast address for - // ::postProcess to have effect - entry.setBroadcast(QHostAddress()); +#if defined(QNETWORKINTERFACE_DEBUG) + qDebug() << " - route netmask" << routeInfo.iNetMask.Family() << netmask << " (using route determined netmask)"; +#endif iface->addressEntries.replace(eindex, entry); } } @@ -223,7 +252,6 @@ static QList<QNetworkInterfacePrivate *> interfaceListing() } socket.Close(); - socketServ.Close(); return interfaces; } diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index c7c2e82..7af71cc 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -367,6 +367,7 @@ #include "qabstractsocket_p.h" #include "private/qhostinfo_p.h" +#include "private/qnetworksession_p.h" #include <qabstracteventdispatcher.h> #include <qhostaddress.h> @@ -375,6 +376,7 @@ #include <qpointer.h> #include <qtimer.h> #include <qelapsedtimer.h> +#include <qscopedvaluerollback.h> #ifndef QT_NO_OPENSSL #include <QtNetwork/qsslsocket.h> @@ -545,6 +547,10 @@ bool QAbstractSocketPrivate::initSocketLayer(QAbstractSocket::NetworkLayerProtoc resetSocketLayer(); socketEngine = QAbstractSocketEngine::createSocketEngine(q->socketType(), proxyInUse, q); +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket engine (if it has been set) + socketEngine->setProperty("_q_networksession", q->property("_q_networksession")); +#endif if (!socketEngine) { socketError = QAbstractSocket::UnsupportedSocketOperationError; q->setErrorString(QAbstractSocket::tr("Operation on socket is not supported")); @@ -592,6 +598,7 @@ bool QAbstractSocketPrivate::canReadNotification() socketEngine->setReadNotificationEnabled(false); } } + QScopedValueRollback<bool> rsncrollback(readSocketNotifierCalled); readSocketNotifierCalled = true; if (!isBuffered) @@ -605,7 +612,6 @@ bool QAbstractSocketPrivate::canReadNotification() #if defined (QABSTRACTSOCKET_DEBUG) qDebug("QAbstractSocketPrivate::canReadNotification() buffer is full"); #endif - readSocketNotifierCalled = false; return false; } @@ -617,7 +623,6 @@ bool QAbstractSocketPrivate::canReadNotification() qDebug("QAbstractSocketPrivate::canReadNotification() disconnecting socket"); #endif q->disconnectFromHost(); - readSocketNotifierCalled = false; return false; } newBytes = readBuffer.size() - newBytes; @@ -637,9 +642,9 @@ bool QAbstractSocketPrivate::canReadNotification() ; if (!emittedReadyRead && hasData) { + QScopedValueRollback<bool> r(emittedReadyRead); emittedReadyRead = true; emit q->readyRead(); - emittedReadyRead = false; } // If we were closed as a result of the readyRead() signal, @@ -648,7 +653,6 @@ bool QAbstractSocketPrivate::canReadNotification() #if defined (QABSTRACTSOCKET_DEBUG) qDebug("QAbstractSocketPrivate::canReadNotification() socket is closing - returning"); #endif - readSocketNotifierCalled = false; return true; } @@ -662,7 +666,6 @@ bool QAbstractSocketPrivate::canReadNotification() socketEngine->setReadNotificationEnabled(readSocketNotifierState); readSocketNotifierStateSet = false; } - readSocketNotifierCalled = false; return true; } @@ -749,11 +752,11 @@ bool QAbstractSocketPrivate::flush() if (written < 0) { socketError = socketEngine->error(); q->setErrorString(socketEngine->errorString()); - emit q->error(socketError); - // an unexpected error so close the socket. #if defined (QABSTRACTSOCKET_DEBUG) qDebug() << "QAbstractSocketPrivate::flush() write error, aborting." << socketEngine->errorString(); #endif + emit q->error(socketError); + // an unexpected error so close the socket. q->abort(); return false; } @@ -768,9 +771,9 @@ bool QAbstractSocketPrivate::flush() if (written > 0) { // Don't emit bytesWritten() recursively. if (!emittedBytesWritten) { + QScopedValueRollback<bool> r(emittedBytesWritten); emittedBytesWritten = true; emit q->bytesWritten(written); - emittedBytesWritten = false; } } @@ -1602,6 +1605,10 @@ bool QAbstractSocket::setSocketDescriptor(int socketDescriptor, SocketState sock d->resetSocketLayer(); d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this); +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket engine (if it has been set) + d->socketEngine->setProperty("_q_networksession", property("_q_networksession")); +#endif if (!d->socketEngine) { d->socketError = UnsupportedSocketOperationError; setErrorString(tr("Operation on socket is not supported")); @@ -1780,6 +1787,14 @@ bool QAbstractSocket::waitForConnected(int msecs) #endif QHostInfo::abortHostLookup(d->hostLookupId); d->hostLookupId = -1; +#ifndef QT_NO_BEARERMANAGEMENT + QSharedPointer<QNetworkSession> networkSession; + QVariant v(property("_q_networksession")); + if (v.isValid()) { + networkSession = qvariant_cast< QSharedPointer<QNetworkSession> >(v); + d->_q_startConnecting(QHostInfoPrivate::fromName(d->hostName, networkSession)); + } else +#endif d->_q_startConnecting(QHostInfo::fromName(d->hostName)); } if (state() == UnconnectedState) diff --git a/src/network/socket/qabstractsocket_p.h b/src/network/socket/qabstractsocket_p.h index 7e6343e..7662f47 100644 --- a/src/network/socket/qabstractsocket_p.h +++ b/src/network/socket/qabstractsocket_p.h @@ -59,7 +59,7 @@ #include "QtCore/qtimer.h" #include "private/qringbuffer_p.h" #include "private/qiodevice_p.h" -#include "private/qnativesocketengine_p.h" +#include "private/qabstractsocketengine_p.h" #include "qnetworkproxy.h" QT_BEGIN_NAMESPACE diff --git a/src/network/socket/qabstractsocketengine.cpp b/src/network/socket/qabstractsocketengine.cpp index 9fe6959..c29f936 100644 --- a/src/network/socket/qabstractsocketengine.cpp +++ b/src/network/socket/qabstractsocketengine.cpp @@ -40,7 +40,13 @@ ****************************************************************************/ #include "qabstractsocketengine_p.h" + +#ifdef Q_OS_SYMBIAN +#include "qsymbiansocketengine_p.h" +#else #include "qnativesocketengine_p.h" +#endif + #include "qmutex.h" #include "qnetworkproxy.h" @@ -113,7 +119,11 @@ QAbstractSocketEngine *QAbstractSocketEngine::createSocketEngine(QAbstractSocket return 0; #endif +#ifdef Q_OS_SYMBIAN + return new QSymbianSocketEngine(parent); +#else return new QNativeSocketEngine(parent); +#endif } QAbstractSocketEngine *QAbstractSocketEngine::createSocketEngine(int socketDescripter, QObject *parent) @@ -123,7 +133,11 @@ QAbstractSocketEngine *QAbstractSocketEngine::createSocketEngine(int socketDescr if (QAbstractSocketEngine *ret = socketHandlers()->at(i)->createSocketEngine(socketDescripter, parent)) return ret; } +#ifdef Q_OS_SYMBIAN + return new QSymbianSocketEngine(parent); +#else return new QNativeSocketEngine(parent); +#endif } QAbstractSocket::SocketError QAbstractSocketEngine::error() const diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index df06a46..7846056 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -72,6 +72,9 @@ bool QHttpSocketEngine::initialize(QAbstractSocket::SocketType type, QAbstractSo setProtocol(protocol); setSocketType(type); d->socket = new QTcpSocket(this); +#ifndef QT_NO_BEARERMANAGEMENT + d->socket->setProperty("_q_networkSession", property("_q_networkSession")); +#endif // Explicitly disable proxying on the proxy socket itself to avoid // unwanted recursion. @@ -706,11 +709,10 @@ void QHttpSocketEngine::slotSocketError(QAbstractSocket::SocketError error) d->state = None; setError(error, d->socket->errorString()); - if (error == QAbstractSocket::RemoteHostClosedError) { - emitReadNotification(); - } else { + if (error != QAbstractSocket::RemoteHostClosedError) qDebug() << "QHttpSocketEngine::slotSocketError: got weird error =" << error; - } + //read notification needs to always be emitted, otherwise the higher layer doesn't get the disconnected signal + emitReadNotification(); } void QHttpSocketEngine::slotSocketStateChanged(QAbstractSocket::SocketState state) diff --git a/src/network/socket/qlocalserver.cpp b/src/network/socket/qlocalserver.cpp index 019759c..46822d7b 100644 --- a/src/network/socket/qlocalserver.cpp +++ b/src/network/socket/qlocalserver.cpp @@ -274,11 +274,11 @@ QLocalSocket *QLocalServer::nextPendingConnection() if (d->pendingConnections.isEmpty()) return 0; QLocalSocket *nextSocket = d->pendingConnections.dequeue(); +#ifndef QT_LOCALSOCKET_TCP #ifdef Q_OS_SYMBIAN if(!d->socketNotifier) return nextSocket; #endif -#ifndef QT_LOCALSOCKET_TCP if (d->pendingConnections.size() <= d->maxPendingConnections) #ifndef Q_OS_WIN d->socketNotifier->setEnabled(true); diff --git a/src/network/socket/qlocalserver_p.h b/src/network/socket/qlocalserver_p.h index fe10959..1ee5df2 100644 --- a/src/network/socket/qlocalserver_p.h +++ b/src/network/socket/qlocalserver_p.h @@ -65,7 +65,7 @@ # include <qt_windows.h> # include <private/qwineventnotifier_p.h> #else -# include <private/qnativesocketengine_p.h> +# include <private/qabstractsocketengine_p.h> # include <qsocketnotifier.h> #endif diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index b042680..09e50f5 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -67,7 +67,7 @@ # include "private/qringbuffer_p.h" # include <private/qwineventnotifier_p.h> #else -# include "private/qnativesocketengine_p.h" +# include "private/qabstractsocketengine_p.h" # include <qtcpsocket.h> # include <qsocketnotifier.h> # include <errno.h> diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 7c9911a..f5a88e2 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -158,12 +158,12 @@ QT_BEGIN_NAMESPACE concurrent QNativeSocketEngine. This is safe, because WSAStartup and WSACleanup are reference counted. */ -QNativeSocketEnginePrivate::QNativeSocketEnginePrivate() +QNativeSocketEnginePrivate::QNativeSocketEnginePrivate() : + socketDescriptor(-1), + readNotifier(0), + writeNotifier(0), + exceptNotifier(0) { - socketDescriptor = -1; - readNotifier = 0; - writeNotifier = 0; - exceptNotifier = 0; } /*! \internal @@ -387,7 +387,6 @@ bool QNativeSocketEngine::initialize(QAbstractSocket::SocketType socketType, QAb // Make sure we receive out-of-band data - // On Symbian OS this works only with native IP stack, not with WinSock if (socketType == QAbstractSocket::TcpSocket && !setOption(ReceiveOutOfBandData, 1)) { qWarning("QNativeSocketEngine::initialize unable to inline out-of-band data"); diff --git a/src/network/socket/qnativesocketengine_p.h b/src/network/socket/qnativesocketengine_p.h index d2ccb21..35054fb 100644 --- a/src/network/socket/qnativesocketengine_p.h +++ b/src/network/socket/qnativesocketengine_p.h @@ -60,11 +60,6 @@ # include <winsock2.h> #endif -#ifdef Q_OS_SYMBIAN -#include <private/qeventdispatcher_symbian_p.h> -#include <unistd.h> -#endif - QT_BEGIN_NAMESPACE // Use our own defines and structs which we know are correct diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index 091b285..4318427 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -65,12 +65,7 @@ #include <ctype.h> #endif -#ifdef Q_OS_SYMBIAN // ### TODO: Are these headers right? -#include <sys/socket.h> -#include <netinet/in.h> -#else #include <netinet/tcp.h> -#endif QT_BEGIN_NAMESPACE @@ -174,11 +169,8 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc int protocol = AF_INET; #endif int type = (socketType == QAbstractSocket::UdpSocket) ? SOCK_DGRAM : SOCK_STREAM; -#ifdef Q_OS_SYMBIAN - int socket = ::socket(protocol, type, 0); -#else + int socket = qt_safe_socket(protocol, type, 0); -#endif if (socket <= 0) { switch (errno) { @@ -320,11 +312,9 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt } #else // Q_OS_VXWORKS int onoff = 1; -#ifdef Q_OS_SYMBIAN - if (::ioctl(socketDescriptor, FIONBIO, &onoff) < 0) { -#else + if (qt_safe_ioctl(socketDescriptor, FIONBIO, &onoff) < 0) { -#endif + #ifdef QNATIVESOCKETENGINE_DEBUG perror("QNativeSocketEnginePrivate::setOption(): ioctl(FIONBIO, 1) failed"); #endif @@ -334,7 +324,7 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt return true; } case QNativeSocketEngine::AddressReusable: -#if defined(SO_REUSEPORT) && !defined(Q_OS_SYMBIAN) +#if defined(SO_REUSEPORT) n = SO_REUSEPORT; #else n = SO_REUSEADDR; @@ -427,11 +417,8 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &addr, quint16 } else { // unreachable } -#ifdef Q_OS_SYMBIAN - int connectResult = ::connect(socketDescriptor, sockAddrPtr, sockAddrSize); -#else + int connectResult = qt_safe_connect(socketDescriptor, sockAddrPtr, sockAddrSize); -#endif if (connectResult == -1) { switch (errno) { case EISCONN: @@ -474,9 +461,6 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &addr, quint16 case EBADF: case EFAULT: case ENOTSOCK: -#ifdef Q_OS_SYMBIAN - case EPIPE: -#endif socketState = QAbstractSocket::UnconnectedState; default: break; @@ -575,11 +559,7 @@ bool QNativeSocketEnginePrivate::nativeBind(const QHostAddress &address, quint16 bool QNativeSocketEnginePrivate::nativeListen(int backlog) { -#ifdef Q_OS_SYMBIAN - if (::listen(socketDescriptor, backlog) < 0) { -#else if (qt_safe_listen(socketDescriptor, backlog) < 0) { -#endif switch (errno) { case EADDRINUSE: setError(QAbstractSocket::AddressInUseError, @@ -606,11 +586,7 @@ bool QNativeSocketEnginePrivate::nativeListen(int backlog) int QNativeSocketEnginePrivate::nativeAccept() { -#ifdef Q_OS_SYMBIAN - int acceptedDescriptor = ::accept(socketDescriptor, 0, 0); -#else int acceptedDescriptor = qt_safe_accept(socketDescriptor, 0, 0); -#endif return acceptedDescriptor; } @@ -788,11 +764,7 @@ qint64 QNativeSocketEnginePrivate::nativeBytesAvailable() const int nbytes = 0; // gives shorter than true amounts on Unix domain sockets. qint64 available = 0; -#ifdef Q_OS_SYMBIAN - if (::ioctl(socketDescriptor, FIONREAD, (char *) &nbytes) >= 0) -#else if (qt_safe_ioctl(socketDescriptor, FIONREAD, (char *) &nbytes) >= 0) -#endif available = (qint64) nbytes; #if defined (QNATIVESOCKETENGINE_DEBUG) @@ -811,15 +783,10 @@ bool QNativeSocketEnginePrivate::nativeHasPendingDatagrams() const // Peek 0 bytes into the next message. The size of the message may // well be 0, so we can't check recvfrom's return value. ssize_t readBytes; -#ifdef Q_OS_SYMBIAN - char c; - readBytes = ::recvfrom(socketDescriptor, &c, 1, MSG_PEEK, &storage.a, &storageSize); -#else do { char c; readBytes = ::recvfrom(socketDescriptor, &c, 1, MSG_PEEK, &storage.a, &storageSize); } while (readBytes == -1 && errno == EINTR); -#endif // If there's no error, or if our buffer was too small, there must be a // pending datagram. @@ -832,14 +799,6 @@ bool QNativeSocketEnginePrivate::nativeHasPendingDatagrams() const return result; } -#ifdef Q_OS_SYMBIAN -qint64 QNativeSocketEnginePrivate::nativePendingDatagramSize() const -{ - size_t nbytes = 0; - ::ioctl(socketDescriptor, E32IONREAD, (char *) &nbytes); - return qint64(nbytes-28); -} -#else qint64 QNativeSocketEnginePrivate::nativePendingDatagramSize() const { QVarLengthArray<char, 8192> udpMessagePeekBuffer(8192); @@ -866,7 +825,7 @@ qint64 QNativeSocketEnginePrivate::nativePendingDatagramSize() const return qint64(recvResult); } -#endif + qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxSize, QHostAddress *address, quint16 *port) { @@ -876,17 +835,11 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxS sz = sizeof(aa); ssize_t recvFromResult = 0; -#ifdef Q_OS_SYMBIAN - char c; - recvFromResult = ::recvfrom(socketDescriptor, maxSize ? data : &c, maxSize ? maxSize : 1, - 0, &aa.a, &sz); -#else do { char c; recvFromResult = ::recvfrom(socketDescriptor, maxSize ? data : &c, maxSize ? maxSize : 1, 0, &aa.a, &sz); } while (recvFromResult == -1 && errno == EINTR); -#endif if (recvFromResult == -1) { setError(QAbstractSocket::NetworkError, ReceiveDatagramErrorString); @@ -935,13 +888,8 @@ qint64 QNativeSocketEnginePrivate::nativeSendDatagram(const char *data, qint64 l // ignore the SIGPIPE signal qt_ignore_sigpipe(); -#ifdef Q_OS_SYMBIAN - ssize_t sentBytes = ::sendto(socketDescriptor, data, len, - 0, sockAddrPtr, sockAddrSize); -#else ssize_t sentBytes = qt_safe_sendto(socketDescriptor, data, len, 0, sockAddrPtr, sockAddrSize); -#endif if (sentBytes < 0) { switch (errno) { @@ -1039,11 +987,7 @@ void QNativeSocketEnginePrivate::nativeClose() qDebug("QNativeSocketEngine::nativeClose()"); #endif -#ifdef Q_OS_SYMBIAN - ::close(socketDescriptor); -#else - qt_safe_close(socketDescriptor); -#endif + qt_safe_close(socketDescriptor); } qint64 QNativeSocketEnginePrivate::nativeWrite(const char *data, qint64 len) @@ -1054,12 +998,7 @@ qint64 QNativeSocketEnginePrivate::nativeWrite(const char *data, qint64 len) qt_ignore_sigpipe(); ssize_t writtenBytes; -#ifdef Q_OS_SYMBIAN - // Symbian does not support signals natively and Open C returns EINTR when moving to offline - writtenBytes = ::write(socketDescriptor, data, len); -#else writtenBytes = qt_safe_write(socketDescriptor, data, len); -#endif if (writtenBytes < 0) { switch (errno) { @@ -1099,11 +1038,7 @@ qint64 QNativeSocketEnginePrivate::nativeRead(char *data, qint64 maxSize) } ssize_t r = 0; -#ifdef Q_OS_SYMBIAN - r = ::read(socketDescriptor, data, maxSize); -#else r = qt_safe_read(socketDescriptor, data, maxSize); -#endif if (r < 0) { r = -1; @@ -1120,9 +1055,6 @@ qint64 QNativeSocketEnginePrivate::nativeRead(char *data, qint64 maxSize) case EIO: //error string is now set in read(), not here in nativeRead() break; -#ifdef Q_OS_SYMBIAN - case EPIPE: -#endif case ECONNRESET: #if defined(Q_OS_VXWORKS) case ESHUTDOWN: @@ -1153,40 +1085,11 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) co tv.tv_sec = timeout / 1000; tv.tv_usec = (timeout % 1000) * 1000; -#ifdef Q_OS_SYMBIAN - fd_set fdexception; - FD_ZERO(&fdexception); - FD_SET(socketDescriptor, &fdexception); -#endif - int retval; if (selectForRead) -#ifdef Q_OS_SYMBIAN - retval = ::select(socketDescriptor + 1, &fds, 0, &fdexception, timeout < 0 ? 0 : &tv); -#else retval = qt_safe_select(socketDescriptor + 1, &fds, 0, 0, timeout < 0 ? 0 : &tv); -#endif else -#ifdef Q_OS_SYMBIAN - retval = ::select(socketDescriptor + 1, 0, &fds, &fdexception, timeout < 0 ? 0 : &tv); -#else retval = qt_safe_select(socketDescriptor + 1, 0, &fds, 0, timeout < 0 ? 0 : &tv); -#endif - - -#ifdef Q_OS_SYMBIAN - bool selectForExec = false; - if(retval != 0) { - if(retval < 0) { - qWarning("nativeSelect(....) returned < 0 for socket %d", socketDescriptor); - } - selectForExec = FD_ISSET(socketDescriptor, &fdexception); - } - if(selectForExec) { - qWarning("nativeSelect (selectForRead %d, retVal %d, errno %d) Unexpected exception for fd %d", - selectForRead, retval, errno, socketDescriptor); - } -#endif return retval; } @@ -1204,65 +1107,12 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool c if (checkWrite) FD_SET(socketDescriptor, &fdwrite); -#ifdef Q_OS_SYMBIAN - fd_set fdexception; - FD_ZERO(&fdexception); - FD_SET(socketDescriptor, &fdexception); -#endif - struct timeval tv; tv.tv_sec = timeout / 1000; tv.tv_usec = (timeout % 1000) * 1000; int ret; -#ifndef Q_OS_SYMBIAN ret = qt_safe_select(socketDescriptor + 1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv); -#else - QElapsedTimer timer; - timer.start(); - - do { - ret = ::select(socketDescriptor + 1, &fdread, &fdwrite, &fdexception, timeout < 0 ? 0 : &tv); - bool selectForExec = false; - if(ret != 0) { - if(ret < 0) { - qWarning("nativeSelect(....) returned < 0 for socket %d", socketDescriptor); - } - selectForExec = FD_ISSET(socketDescriptor, &fdexception); - } - if(selectForExec) { - qWarning("nativeSelect (checkRead %d, checkWrite %d, ret %d, errno %d): Unexpected expectfds ready in fd %d", - checkRead, checkWrite, ret, errno, socketDescriptor); - if (checkWrite){ - FD_CLR(socketDescriptor, &fdread); - FD_SET(socketDescriptor, &fdwrite); - } else if (checkRead) - FD_SET(socketDescriptor, &fdread); - - - if ((ret == -1) && ( errno == ECONNREFUSED || errno == EPIPE )) - ret = 1; - - } - - if (ret != -1 || errno != EINTR) { - break; - } - - if (timeout > 0) { - // recalculate the timeout - int t = timeout - timer.elapsed(); - if (t < 0) { - // oops, timeout turned negative? - ret = -1; - break; - } - - tv.tv_sec = t / 1000; - tv.tv_usec = (t % 1000) * 1000; - } - } while (true); -#endif if (ret <= 0) return ret; diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index 10a2695..c365635 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -556,6 +556,9 @@ void QSocks5SocketEnginePrivate::initialize(Socks5Mode socks5Mode) udpData = new QSocks5UdpAssociateData; data = udpData; udpData->udpSocket = new QUdpSocket(q); +#ifndef QT_NO_BEARERMANAGEMENT + udpData->udpSocket->setProperty("_q_networksession", q->property("_q_networksession")); +#endif udpData->udpSocket->setProxy(QNetworkProxy::NoProxy); QObject::connect(udpData->udpSocket, SIGNAL(readyRead()), q, SLOT(_q_udpSocketReadNotification()), @@ -567,6 +570,9 @@ void QSocks5SocketEnginePrivate::initialize(Socks5Mode socks5Mode) } data->controlSocket = new QTcpSocket(q); +#ifndef QT_NO_BEARERMANAGEMENT + data->controlSocket->setProperty("_q_networksession", q->property("_q_networksession")); +#endif data->controlSocket->setProxy(QNetworkProxy::NoProxy); QObject::connect(data->controlSocket, SIGNAL(connected()), q, SLOT(_q_controlSocketConnected()), Qt::DirectConnection); @@ -1376,6 +1382,9 @@ bool QSocks5SocketEngine::bind(const QHostAddress &address, quint16 port) d->udpData->associatePort = d->localPort; d->localPort = 0; QUdpSocket dummy; +#ifndef QT_NO_BEARERMANAGEMENT + dummy.setProperty("_q_networksession", property("_q_networksession")); +#endif dummy.setProxy(QNetworkProxy::NoProxy); if (!dummy.bind() || writeDatagram(0,0, d->data->controlSocket->localAddress(), dummy.localPort()) != 0 diff --git a/src/network/socket/qsymbiansocketengine.cpp b/src/network/socket/qsymbiansocketengine.cpp new file mode 100644 index 0000000..f1b2982 --- /dev/null +++ b/src/network/socket/qsymbiansocketengine.cpp @@ -0,0 +1,1730 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtNetwork module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//#define QNATIVESOCKETENGINE_DEBUG +#include "qsymbiansocketengine_p.h" + +#include "qiodevice.h" +#include "qhostaddress.h" +#include "qelapsedtimer.h" +#include "qvarlengtharray.h" +#include "qnetworkinterface.h" +#include <private/qnetworksession_p.h> +#include <es_sock.h> +#include <in_sock.h> +#include <net/if.h> + +#include <private/qcore_symbian_p.h> + +#if !defined(QT_NO_NETWORKPROXY) +# include "qnetworkproxy.h" +# include "qabstractsocket.h" +# include "qtcpserver.h" +#endif + +#include <QCoreApplication> + +#include <qabstracteventdispatcher.h> +#include <private/qeventdispatcher_symbian_p.h> +#include <qsocketnotifier.h> +#include <qnetworkinterface.h> + +#include <private/qthread_p.h> +#include <private/qobject_p.h> +#include <private/qsystemerror_p.h> + +#if defined QNATIVESOCKETENGINE_DEBUG +#include <qstring.h> +#include <ctype.h> +#endif + +QT_BEGIN_NAMESPACE + +#define Q_VOID +// Common constructs +#define Q_CHECK_VALID_SOCKETLAYER(function, returnValue) do { \ + if (!isValid()) { \ + qWarning(""#function" was called on an uninitialized socket device"); \ + return returnValue; \ + } } while (0) +#define Q_CHECK_INVALID_SOCKETLAYER(function, returnValue) do { \ + if (isValid()) { \ + qWarning(""#function" was called on an already initialized socket device"); \ + return returnValue; \ + } } while (0) +#define Q_CHECK_STATE(function, checkState, returnValue) do { \ + if (d->socketState != (checkState)) { \ + qWarning(""#function" was not called in "#checkState); \ + return (returnValue); \ + } } while (0) +#define Q_CHECK_NOT_STATE(function, checkState, returnValue) do { \ + if (d->socketState == (checkState)) { \ + qWarning(""#function" was called in "#checkState); \ + return (returnValue); \ + } } while (0) +#define Q_CHECK_STATES(function, state1, state2, returnValue) do { \ + if (d->socketState != (state1) && d->socketState != (state2)) { \ + qWarning(""#function" was called" \ + " not in "#state1" or "#state2); \ + return (returnValue); \ + } } while (0) +#define Q_CHECK_TYPE(function, type, returnValue) do { \ + if (d->socketType != (type)) { \ + qWarning(#function" was called by a" \ + " socket other than "#type""); \ + return (returnValue); \ + } } while (0) + +#if defined QNATIVESOCKETENGINE_DEBUG + +/* + Returns a human readable representation of the first \a len + characters in \a data. +*/ +static QByteArray qt_prettyDebug(const char *data, int len, int maxSize) +{ + if (!data) return "(null)"; + QByteArray out; + for (int i = 0; i < len; ++i) { + char c = data[i]; + if (isprint(c)) { + out += c; + } else switch (c) { + case '\n': out += "\\n"; break; + case '\r': out += "\\r"; break; + case '\t': out += "\\t"; break; + default: + QString tmp; + tmp.sprintf("\\%o", c); + out += tmp.toLatin1(); + } + } + + if (len < maxSize) + out += "..."; + + return out; +} +#endif + +void QSymbianSocketEnginePrivate::getPortAndAddress(const TInetAddr& a, quint16 *port, QHostAddress *addr) +{ + if (a.Family() == KAfInet6 && !a.IsV4Compat() && !a.IsV4Mapped()) { + Q_IPV6ADDR tmp; + memcpy(&tmp, a.Ip6Address().u.iAddr8, sizeof(tmp)); + if (addr) { + QHostAddress tmpAddress; + tmpAddress.setAddress(tmp); + *addr = tmpAddress; + TPckgBuf<TSoInetIfQuery> query; + query().iSrcAddr = a; + TInt err = nativeSocket.GetOpt(KSoInetIfQueryBySrcAddr, KSolInetIfQuery, query); + if (!err) + addr->setScopeId(qt_TDesC2QString(query().iName)); + else + addr->setScopeId(QString::number(a.Scope())); + } + if (port) + *port = a.Port(); + return; + } + if (port) + *port = a.Port(); + if (addr) { + QHostAddress tmpAddress; + tmpAddress.setAddress(a.Address()); + *addr = tmpAddress; + } +} +/*! \internal + + Creates and returns a new socket descriptor of type \a socketType + and \a socketProtocol. Returns -1 on failure. +*/ +bool QSymbianSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType socketType, + QAbstractSocket::NetworkLayerProtocol socketProtocol) +{ + Q_Q(QSymbianSocketEngine); + TUint family = KAfInet; // KAfInet6 is only used as an address family, not as a protocol family + TUint type = (socketType == QAbstractSocket::UdpSocket) ? KSockDatagram : KSockStream; + TUint protocol = (socketType == QAbstractSocket::UdpSocket) ? KProtocolInetUdp : KProtocolInetTcp; + + //Check if there is a user specified session + QVariant v(q->property("_q_networksession")); + TInt err; + if (v.isValid()) { + QSharedPointer<QNetworkSession> s = qvariant_cast<QSharedPointer<QNetworkSession> >(v); + err = QNetworkSessionPrivate::nativeOpenSocket(*s, nativeSocket, family, type, protocol); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::createNewSocket - _q_networksession was set" << err; +#endif + } else + err = nativeSocket.Open(socketServer, family, type, protocol); //TODO: FIXME - deprecated API, make sure we always have a connection instead + + if (err != KErrNone) { + switch (err) { + case KErrNotSupported: + case KErrNotFound: + setError(QAbstractSocket::UnsupportedSocketOperationError, + ProtocolUnsupportedErrorString); + break; + default: + setError(err); + break; + } + + return false; + } +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::createNewSocket - created" << nativeSocket.SubSessionHandle(); +#endif + socketDescriptor = QSymbianSocketManager::instance().addSocket(nativeSocket); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << " - allocated socket descriptor" << socketDescriptor; +#endif + return true; +} + +void QSymbianSocketEnginePrivate::setPortAndAddress(TInetAddr& nativeAddr, quint16 port, const QHostAddress &addr) +{ + nativeAddr.SetPort(port); + if (addr.protocol() == QAbstractSocket::IPv6Protocol) { + TPckgBuf<TSoInetIfQuery> query; + query().iName = qt_QString2TPtrC(addr.scopeId()); + TInt err = nativeSocket.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery, query); + if (!err) + nativeAddr.SetScope(query().iIndex); + else + nativeAddr.SetScope(0); + Q_IPV6ADDR ip6 = addr.toIPv6Address(); + TIp6Addr v6addr; + memcpy(v6addr.u.iAddr8, ip6.c, 16); + nativeAddr.SetAddress(v6addr); + } else if (addr.protocol() == QAbstractSocket::IPv4Protocol) { + nativeAddr.SetAddress(addr.toIPv4Address()); + } else { + qWarning("unsupported network protocol (%d)", addr.protocol()); + } +} + +QSymbianSocketEnginePrivate::QSymbianSocketEnginePrivate() : + socketDescriptor(-1), + socketServer(QSymbianSocketManager::instance().getSocketServer()), + readNotificationsEnabled(false), + writeNotificationsEnabled(false), + exceptNotificationsEnabled(false), + asyncSelect(0) +{ +} + +QSymbianSocketEnginePrivate::~QSymbianSocketEnginePrivate() +{ +} + + +QSymbianSocketEngine::QSymbianSocketEngine(QObject *parent) + : QAbstractSocketEngine(*new QSymbianSocketEnginePrivate(), parent) +{ +} + + +QSymbianSocketEngine::~QSymbianSocketEngine() +{ + close(); +} + +/*! + Initializes a QSymbianSocketEngine by creating a new socket of type \a + socketType and network layer protocol \a protocol. Returns true on + success; otherwise returns false. + + If the socket was already initialized, this function closes the + socket before reeinitializing it. + + The new socket is non-blocking, and for UDP sockets it's also + broadcast enabled. +*/ +bool QSymbianSocketEngine::initialize(QAbstractSocket::SocketType socketType, QAbstractSocket::NetworkLayerProtocol protocol) +{ + Q_D(QSymbianSocketEngine); + if (isValid()) + close(); + + // Create the socket + if (!d->createNewSocket(socketType, protocol)) { +#if defined (QNATIVESOCKETENGINE_DEBUG) + QString typeStr = QLatin1String("UnknownSocketType"); + if (socketType == QAbstractSocket::TcpSocket) typeStr = QLatin1String("TcpSocket"); + else if (socketType == QAbstractSocket::UdpSocket) typeStr = QLatin1String("UdpSocket"); + QString protocolStr = QLatin1String("UnknownProtocol"); + if (protocol == QAbstractSocket::IPv4Protocol) protocolStr = QLatin1String("IPv4Protocol"); + else if (protocol == QAbstractSocket::IPv6Protocol) protocolStr = QLatin1String("IPv6Protocol"); + qDebug("QSymbianSocketEngine::initialize(type == %s, protocol == %s) failed: %s", + typeStr.toLatin1().constData(), protocolStr.toLatin1().constData(), d->socketErrorString.toLatin1().constData()); +#endif + return false; + } + + // Make the socket nonblocking. + if (!setOption(NonBlockingSocketOption, 1)) { + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + d->NonBlockingInitFailedErrorString); + close(); + return false; + } + + // Set the broadcasting flag if it's a UDP socket. + if (socketType == QAbstractSocket::UdpSocket + && !setOption(BroadcastSocketOption, 1)) { + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + d->BroadcastingInitFailedErrorString); + close(); + return false; + } + + + // Make sure we receive out-of-band data + if (socketType == QAbstractSocket::TcpSocket + && !setOption(ReceiveOutOfBandData, 1)) { + qWarning("QSymbianSocketEngine::initialize unable to inline out-of-band data"); + } + + + d->socketType = socketType; + d->socketProtocol = protocol; + return true; +} + +/*! \overload + + Initializes the socket using \a socketDescriptor instead of + creating a new one. The socket type and network layer protocol are + determined automatically. The socket's state is set to \a + socketState. + + If the socket type is either TCP or UDP, it is made non-blocking. + UDP sockets are also broadcast enabled. + */ +bool QSymbianSocketEngine::initialize(int socketDescriptor, QAbstractSocket::SocketState socketState) +{ + Q_D(QSymbianSocketEngine); + + if (isValid()) + close(); + + if (!QSymbianSocketManager::instance().lookupSocket(socketDescriptor, d->nativeSocket)) { + qWarning("QSymbianSocketEngine::initialize - socket descriptor not found"); + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + QSymbianSocketEnginePrivate::InvalidSocketErrorString); + return false; + } +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::initialize - attached to" << d->nativeSocket.SubSessionHandle() << socketDescriptor; +#endif + Q_ASSERT(d->socketDescriptor == socketDescriptor || d->socketDescriptor == -1); + d->socketDescriptor = socketDescriptor; + + // determine socket type and protocol + if (!d->fetchConnectionParameters()) { +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::initialize(socketDescriptor == %i) failed: %s", + socketDescriptor, d->socketErrorString.toLatin1().constData()); +#endif + d->socketDescriptor = -1; + return false; + } + + if (d->socketType != QAbstractSocket::UnknownSocketType) { + // Make the socket nonblocking. + if (!setOption(NonBlockingSocketOption, 1)) { + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + d->NonBlockingInitFailedErrorString); + close(); + return false; + } + + // Set the broadcasting flag if it's a UDP socket. + if (d->socketType == QAbstractSocket::UdpSocket + && !setOption(BroadcastSocketOption, 1)) { + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + d->BroadcastingInitFailedErrorString); + close(); + return false; + } + + // Make sure we receive out-of-band data + if (d->socketType == QAbstractSocket::TcpSocket + && !setOption(ReceiveOutOfBandData, 1)) { + qWarning("QSymbianSocketEngine::initialize unable to inline out-of-band data"); + } + } + + d->socketState = socketState; + return true; +} + +/*! + Returns true if the socket is valid; otherwise returns false. A + socket is valid if it has not been successfully initialized, or if + it has been closed. +*/ +bool QSymbianSocketEngine::isValid() const +{ + Q_D(const QSymbianSocketEngine); + return d->socketDescriptor != -1; +} + + +/*! + Returns the native socket descriptor. Any use of this descriptor + stands the risk of being non-portable. +*/ +int QSymbianSocketEngine::socketDescriptor() const +{ + Q_D(const QSymbianSocketEngine); + return d->socketDescriptor; +} + +/* + Sets the socket option \a opt to \a v. +*/ +bool QSymbianSocketEngine::setOption(QAbstractSocketEngine::SocketOption opt, int v) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setOption(), false); + + TUint n = 0; + TUint level = KSOLSocket; // default + + if (!QSymbianSocketEnginePrivate::translateSocketOption(opt, n, level)) + return false; + + if (!level && !n) + return true; + + return (KErrNone == d->nativeSocket.SetOpt(n, level, v)); +} + +/* + Returns the value of the socket option \a opt. +*/ +int QSymbianSocketEngine::option(QAbstractSocketEngine::SocketOption opt) const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::option(), -1); + + TUint n; + TUint level = KSOLSocket; // default + + if (!QSymbianSocketEnginePrivate::translateSocketOption(opt, n, level)) + return false; + + if (!level && !n) + return 1; + + int v = -1; + //GetOpt() is non const + TInt err = d->nativeSocket.GetOpt(n, level, v); + if (!err) + return v; + + return -1; +} + +bool QSymbianSocketEnginePrivate::translateSocketOption(QAbstractSocketEngine::SocketOption opt, TUint &n, TUint &level) +{ + + switch (opt) { + case QAbstractSocketEngine::ReceiveBufferSocketOption: + n = KSORecvBuf; + break; + case QAbstractSocketEngine::SendBufferSocketOption: + n = KSOSendBuf; + break; + case QAbstractSocketEngine::NonBlockingSocketOption: + n = KSONonBlockingIO; + break; + case QAbstractSocketEngine::AddressReusable: + level = KSolInetIp; + n = KSoReuseAddr; + break; + case QAbstractSocketEngine::BroadcastSocketOption: + case QAbstractSocketEngine::BindExclusively: + level = 0; + n = 0; + return true; + case QAbstractSocketEngine::ReceiveOutOfBandData: + level = KSolInetTcp; + n = KSoTcpOobInline; + break; + case QAbstractSocketEngine::LowDelayOption: + level = KSolInetTcp; + n = KSoTcpNoDelay; + break; + case QAbstractSocketEngine::KeepAliveOption: + level = KSolInetTcp; + n = KSoTcpKeepAlive; + break; + case QAbstractSocketEngine::MulticastLoopbackOption: + level = KSolInetIp; + n = KSoIp6MulticastLoop; + break; + case QAbstractSocketEngine::MulticastTtlOption: + level = KSolInetIp; + n = KSoIp6MulticastHops; + break; + default: + return false; + } + return true; +} + +qint64 QSymbianSocketEngine::receiveBufferSize() const +{ + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::receiveBufferSize(), -1); + return option(ReceiveBufferSocketOption); +} + +void QSymbianSocketEngine::setReceiveBufferSize(qint64 size) +{ + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setReceiveBufferSize(), Q_VOID); + setOption(ReceiveBufferSocketOption, size); +} + +qint64 QSymbianSocketEngine::sendBufferSize() const +{ + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setSendBufferSize(), -1); + return option(SendBufferSocketOption); +} + +void QSymbianSocketEngine::setSendBufferSize(qint64 size) +{ + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setSendBufferSize(), Q_VOID); + setOption(SendBufferSocketOption, size); +} + +/*! + Connects to the remote host name given by \a name on port \a + port. When this function is called, the upper-level will not + perform a hostname lookup. + + The native socket engine does not support this operation, + but some other socket engines (notably proxy-based ones) do. +*/ +bool QSymbianSocketEngine::connectToHostByName(const QString &name, quint16 port) +{ + Q_UNUSED(name); + Q_UNUSED(port); + Q_D(QSymbianSocketEngine); + d->setError(QAbstractSocket::UnsupportedSocketOperationError, + QSymbianSocketEnginePrivate::OperationUnsupportedErrorString); + return false; +} + +/*! + If there's a connection activity on the socket, process it. Then + notify our parent if there really was activity. +*/ +void QSymbianSocketEngine::connectionNotification() +{ + // FIXME check if we really need to do it like that in Symbian + Q_D(QSymbianSocketEngine); + Q_ASSERT(state() == QAbstractSocket::ConnectingState); + + connectToHost(d->peerAddress, d->peerPort); + if (state() != QAbstractSocket::ConnectingState) { + // we changed states + QAbstractSocketEngine::connectionNotification(); + } +} + + +bool QSymbianSocketEngine::connectToHost(const QHostAddress &addr, quint16 port) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::connectToHost(), false); + +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug("QSymbianSocketEngine::connectToHost() : %d ", d->socketDescriptor); +#endif + + if (!d->checkProxy(addr)) + return false; + + d->peerAddress = addr; + d->peerPort = port; + + TInetAddr nativeAddr; + d->setPortAndAddress(nativeAddr, port, addr); + TRequestStatus status; + d->nativeSocket.Connect(nativeAddr, status); + User::WaitForRequest(status); + TInt err = status.Int(); + //For non blocking connect, KErrAlreadyExists is returned from the second Connect() to indicate + //the connection is up. So treat this the same as KErrNone which would be returned from the first + //call if it wouldn't block. (e.g. winsock wrapper in the emulator ignores the nonblocking flag) + if (err && err != KErrAlreadyExists) { + switch (err) { + case KErrWouldBlock: + d->socketState = QAbstractSocket::ConnectingState; + break; + default: + d->setError(err); + d->socketState = QAbstractSocket::UnconnectedState; + break; + } + + if (d->socketState != QAbstractSocket::ConnectedState) { +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::connectToHost(%s, %i) == false (%s)", + addr.toString().toLatin1().constData(), port, + d->socketState == QAbstractSocket::ConnectingState + ? "Connection in progress" : d->socketErrorString.toLatin1().constData()); +#endif + return false; + } + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::Connect(%s, %i) == true", + addr.toString().toLatin1().constData(), port); +#endif + + d->socketState = QAbstractSocket::ConnectedState; + d->fetchConnectionParameters(); + return true; +} + +bool QSymbianSocketEngine::bind(const QHostAddress &address, quint16 port) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::bind(), false); + + if (!d->checkProxy(address)) + return false; + + Q_CHECK_STATE(QSymbianSocketEngine::bind(), QAbstractSocket::UnconnectedState, false); + + TInetAddr nativeAddr; + if (address == QHostAddress::Any || address == QHostAddress::AnyIPv6) { + //Should allow both IPv4 and IPv6 + //Listening on "0.0.0.0" accepts ONLY ipv4 connections + //Listening on "::" accepts ONLY ipv6 connections + nativeAddr.SetFamily(KAFUnspec); + nativeAddr.SetPort(port); + } else { + d->setPortAndAddress(nativeAddr, port, address); + } + + TInt err = d->nativeSocket.Bind(nativeAddr); +#ifdef __WINS__ + if (err == KErrArgument) // winsock prt returns wrong error code + err = KErrInUse; +#endif + + if (err) { + switch (err) { + case KErrNotFound: + // the specified interface was not found - use the error code expected + d->setError(QAbstractSocket::SocketAddressNotAvailableError, QSymbianSocketEnginePrivate::AddressNotAvailableErrorString); + break; + default: + d->setError(err); + break; + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::bind(%s, %i) == false (%s)", + address.toString().toLatin1().constData(), port, d->socketErrorString.toLatin1().constData()); +#endif + + return false; + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::bind(%s, %i) == true", + address.toString().toLatin1().constData(), port); +#endif + d->socketState = QAbstractSocket::BoundState; + + d->fetchConnectionParameters(); + + // When we bind to unspecified address (to get a dual mode socket), report back the + // same type of address that was requested. This is required for SOCKS proxy to work. + if (nativeAddr.Family() == KAFUnspec) + d->localAddress = address; + return true; +} + +bool QSymbianSocketEngine::listen() +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::listen(), false); + Q_CHECK_STATE(QSymbianSocketEngine::listen(), QAbstractSocket::BoundState, false); + Q_CHECK_TYPE(QSymbianSocketEngine::listen(), QAbstractSocket::TcpSocket, false); + TInt err = d->nativeSocket.Listen(50); + if (err) { + d->setError(err); + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::listen() == false (%s)", + d->socketErrorString.toLatin1().constData()); +#endif + return false; + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::listen() == true"); +#endif + + d->socketState = QAbstractSocket::ListeningState; + return true; +} + +int QSymbianSocketEngine::accept() +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::accept(), -1); + Q_CHECK_STATE(QSymbianSocketEngine::accept(), QAbstractSocket::ListeningState, false); + Q_CHECK_TYPE(QSymbianSocketEngine::accept(), QAbstractSocket::TcpSocket, false); + RSocket blankSocket; + blankSocket.Open(d->socketServer); + TRequestStatus status; + d->nativeSocket.Accept(blankSocket, status); + User::WaitForRequest(status); + if (status.Int()) { + blankSocket.Close(); + if (status != KErrWouldBlock) + qWarning("QSymbianSocketEngine::accept() - error %d", status.Int()); + return -1; + } + +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::accept - created" << blankSocket.SubSessionHandle(); +#endif + int fd = QSymbianSocketManager::instance().addSocket(blankSocket); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << " - allocated socket descriptor" << fd; +#endif + return fd; +} + +qint64 QSymbianSocketEngine::bytesAvailable() const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::bytesAvailable(), -1); + Q_CHECK_NOT_STATE(QSymbianSocketEngine::bytesAvailable(), QAbstractSocket::UnconnectedState, false); + int nbytes = 0; + qint64 available = 0; + TInt err = d->nativeSocket.GetOpt(KSOReadBytesPending, KSOLSocket, nbytes); + if (err) + return 0; + available = (qint64) nbytes; + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::bytesAvailable() == %lli", available); +#endif + return available; +} + +bool QSymbianSocketEngine::hasPendingDatagrams() const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::hasPendingDatagrams(), false); + Q_CHECK_NOT_STATE(QSymbianSocketEngine::hasPendingDatagrams(), QAbstractSocket::UnconnectedState, false); + Q_CHECK_TYPE(QSymbianSocketEngine::hasPendingDatagrams(), QAbstractSocket::UdpSocket, false); + int nbytes; + TInt err = d->nativeSocket.GetOpt(KSOReadBytesPending,KSOLSocket, nbytes); + return err == KErrNone && nbytes > 0; +} + +qint64 QSymbianSocketEngine::pendingDatagramSize() const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::pendingDatagramSize(), false); + Q_CHECK_TYPE(QSymbianSocketEngine::hasPendingDatagrams(), QAbstractSocket::UdpSocket, false); + int nbytes; + TInt err = d->nativeSocket.GetOpt(KSOReadBytesPending,KSOLSocket, nbytes); + if (nbytes > 0) { + //nbytes includes IP header, which is of variable length (IPv4 with or without options, IPv6...) + QByteArray next(nbytes,0); + TPtr8 buffer((TUint8*)next.data(), next.size()); + TInetAddr addr; + TRequestStatus status; + //TODO: rather than peek, should we save this for next call to readDatagram? + //what if calls don't match though? + d->nativeSocket.RecvFrom(buffer, addr, KSockReadPeek, status); + User::WaitForRequest(status); + if (status.Int()) + return 0; + return buffer.Length(); + } + return qint64(nbytes); +} + + +qint64 QSymbianSocketEngine::readDatagram(char *data, qint64 maxSize, + QHostAddress *address, quint16 *port) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::readDatagram(), -1); + Q_CHECK_TYPE(QSymbianSocketEngine::readDatagram(), QAbstractSocket::UdpSocket, false); + TPtr8 buffer((TUint8*)data, (int)maxSize); + TInetAddr addr; + TRequestStatus status; + d->nativeSocket.RecvFrom(buffer, addr, 0, status); + User::WaitForRequest(status); //Non blocking receive + + if (status.Int()) { + d->setError(QAbstractSocket::NetworkError, d->ReceiveDatagramErrorString); + } else if (port || address) { + d->getPortAndAddress(addr, port, address); + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + int len = buffer.Length(); + qDebug("QSymbianSocketEngine::receiveDatagram(%p \"%s\", %lli, %s, %i) == %lli", + data, qt_prettyDebug(data, qMin(len, ssize_t(16)), len).data(), maxSize, + address ? address->toString().toLatin1().constData() : "(nil)", + port ? *port : 0, (qint64) len); +#endif + + if (status.Int()) + return -1; + return qint64(buffer.Length()); +} + + +qint64 QSymbianSocketEngine::writeDatagram(const char *data, qint64 len, + const QHostAddress &host, quint16 port) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::writeDatagram(), -1); + Q_CHECK_TYPE(QSymbianSocketEngine::writeDatagram(), QAbstractSocket::UdpSocket, -1); + TPtrC8 buffer((TUint8*)data, (int)len); + TInetAddr addr; + d->setPortAndAddress(addr, port, host); + TSockXfrLength sentBytes; + TRequestStatus status; + d->nativeSocket.SendTo(buffer, addr, 0, status, sentBytes); + User::WaitForRequest(status); //Non blocking send + TInt err = status.Int(); + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::writeDatagram(%p \"%s\", %lli, \"%s\", %i) == %lli (err=%d)", data, + qt_prettyDebug(data, qMin<int>(len, 16), len).data(), len, host.toString().toLatin1().constData(), + port, (qint64) sentBytes(), err); +#endif + + if (err) { + switch (err) { + case KErrWouldBlock: + // do not error the socket. (otherwise socket layer is reset) + // On symbian^1 and earlier, KErrWouldBlock is returned when interface is not up yet + // On symbian^3, KErrNone is returned but sentBytes = 0 + return 0; + case KErrTooBig: + d->setError(QAbstractSocket::DatagramTooLargeError, d->DatagramTooLargeErrorString); + break; + default: + d->setError(QAbstractSocket::NetworkError, d->SendDatagramErrorString); + } + return -1; + } + + if (QSysInfo::s60Version() <= QSysInfo::SV_S60_5_0) { + // This is evil hack, but for some reason native RSocket::SendTo returns 0, + // for large datagrams (such as 600 bytes). Based on comments from Open C team + // this should happen only in platforms <= S60 5.0. + return len; + } + return sentBytes(); +} + +// FIXME check where the native socket engine called that.. +bool QSymbianSocketEnginePrivate::fetchConnectionParameters() +{ + localPort = 0; + localAddress.clear(); + peerPort = 0; + peerAddress.clear(); + + if (socketDescriptor == -1) + return false; + + if (!nativeSocket.SubSessionHandle()) { + if (!QSymbianSocketManager::instance().lookupSocket(socketDescriptor, nativeSocket)) { + setError(QAbstractSocket::UnsupportedSocketOperationError, InvalidSocketErrorString); + return false; + } + } + + // Determine local address + TSockAddr addr; + nativeSocket.LocalName(addr); + getPortAndAddress(addr, &localPort, &localAddress); + + // Determine protocol family + socketProtocol = localAddress.protocol(); + + // Determine the remote address + nativeSocket.RemoteName(addr); + getPortAndAddress(addr, &peerPort, &peerAddress); + + // Determine the socket type (UDP/TCP) + TProtocolDesc protocol; + TInt err = nativeSocket.Info(protocol); + if (err) { + setError(err); + return false; + } else { + switch (protocol.iProtocol) { + case KProtocolInetTcp: + socketType = QAbstractSocket::TcpSocket; + break; + case KProtocolInetUdp: + socketType = QAbstractSocket::UdpSocket; + break; + default: + socketType = QAbstractSocket::UnknownSocketType; + break; + } + } +#if defined (QNATIVESOCKETENGINE_DEBUG) + QString socketProtocolStr = QLatin1String("UnknownProtocol"); + if (socketProtocol == QAbstractSocket::IPv4Protocol) socketProtocolStr = QLatin1String("IPv4Protocol"); + else if (socketProtocol == QAbstractSocket::IPv6Protocol) socketProtocolStr = QLatin1String("IPv6Protocol"); + + QString socketTypeStr = QLatin1String("UnknownSocketType"); + if (socketType == QAbstractSocket::TcpSocket) socketTypeStr = QLatin1String("TcpSocket"); + else if (socketType == QAbstractSocket::UdpSocket) socketTypeStr = QLatin1String("UdpSocket"); + + qDebug("QSymbianSocketEnginePrivate::fetchConnectionParameters() local == %s:%i," + " peer == %s:%i, socket == %s - %s", + localAddress.toString().toLatin1().constData(), localPort, + peerAddress.toString().toLatin1().constData(), peerPort,socketTypeStr.toLatin1().constData(), + socketProtocolStr.toLatin1().constData()); +#endif + return true; +} + +void QSymbianSocketEngine::close() +{ + if (!isValid()) + return; + Q_D(QSymbianSocketEngine); +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::close()"); +#endif + + d->readNotificationsEnabled = false; + d->writeNotificationsEnabled = false; + d->exceptNotificationsEnabled = false; + if (d->asyncSelect) { + d->asyncSelect->deleteLater(); + d->asyncSelect = 0; + } + + //TODO: call nativeSocket.Shutdown(EImmediate) in some cases? + if (d->socketType == QAbstractSocket::UdpSocket) { + //TODO: Close hangs without this, but only for UDP - why? + TRequestStatus stat; + d->nativeSocket.Shutdown(RSocket::EImmediate, stat); + User::WaitForRequest(stat); + } +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::close - closing socket" << d->nativeSocket.SubSessionHandle() << d->socketDescriptor; +#endif + //remove must come before close to avoid a race where another thread gets the old subsession handle + //reused & asserts when calling QSymbianSocketManager::instance->addSocket + QSymbianSocketManager::instance().removeSocket(d->nativeSocket); + d->nativeSocket.Close(); + d->socketDescriptor = -1; + + d->socketState = QAbstractSocket::UnconnectedState; + d->hasSetSocketError = false; + d->localPort = 0; + d->localAddress.clear(); + d->peerPort = 0; + d->peerAddress.clear(); +} + +qint64 QSymbianSocketEngine::write(const char *data, qint64 len) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::write(), -1); + Q_CHECK_STATE(QSymbianSocketEngine::write(), QAbstractSocket::ConnectedState, -1); + TPtrC8 buffer((TUint8*)data, (int)len); + TSockXfrLength sentBytes = 0; + TRequestStatus status; + d->nativeSocket.Send(buffer, 0, status, sentBytes); + User::WaitForRequest(status); //TODO: on emulator this blocks for write >16kB (non blocking IO not implemented properly?) + TInt err = status.Int(); + + if (err) { + switch (err) { + case KErrDisconnected: + case KErrEof: + sentBytes = -1; + d->setError(QAbstractSocket::RemoteHostClosedError, d->RemoteHostClosedErrorString); + close(); + break; + case KErrTooBig: + d->setError(QAbstractSocket::DatagramTooLargeError, d->DatagramTooLargeErrorString); + break; + case KErrWouldBlock: + break; + default: + sentBytes = -1; + d->setError(err); + close(); + break; + } + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::write(%p \"%s\", %llu) == %i", + data, qt_prettyDebug(data, qMin((int) len, 16), + (int) len).data(), len, (int) sentBytes()); +#endif + + return qint64(sentBytes()); +} +/* +*/ +qint64 QSymbianSocketEngine::read(char *data, qint64 maxSize) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::read(), -1); + Q_CHECK_STATES(QSymbianSocketEngine::read(), QAbstractSocket::ConnectedState, QAbstractSocket::BoundState, -1); + + TPtr8 buffer((TUint8*)data, (int)maxSize); + TSockXfrLength received = 0; + TRequestStatus status; + TSockAddr dummy; + if (d->socketType == QAbstractSocket::UdpSocket) { + //RecvOneOrMore() can only be used with stream-interfaced connected sockets; datagram interface sockets will return KErrNotSupported. + d->nativeSocket.RecvFrom(buffer, dummy, 0, status); + } else { + d->nativeSocket.RecvOneOrMore(buffer, 0, status, received); + } + User::WaitForRequest(status); //Non blocking receive + TInt err = status.Int(); + int r = buffer.Length(); + + if (err == KErrWouldBlock) { + // No data was available for reading + r = -2; + } else if (err != KErrNone) { + d->setError(err); + close(); + r = -1; + } + +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug("QSymbianSocketEngine::read(%p \"%s\", %llu) == %i (err = %d)", + data, qt_prettyDebug(data, qMin(r, ssize_t(16)), r).data(), + maxSize, r, err); +#endif + + return qint64(r); +} + +int QSymbianSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const +{ + bool readyRead = false; + bool readyWrite = false; + if (selectForRead) + return nativeSelect(timeout, true, false, &readyRead, &readyWrite); + else + return nativeSelect(timeout, false, true, &readyRead, &readyWrite); +} + +/*! + \internal + \param timeout timeout in milliseconds + \param checkRead caller is interested if the socket is ready to read + \param checkWrite caller is interested if the socket is ready for write + \param selectForRead (out) should set to true if ready to read + \param selectForWrite (out) should set to true if ready to write + \return 0 on timeout, >0 on success, <0 on error + */ +int QSymbianSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool checkWrite, + bool *selectForRead, bool *selectForWrite) const +{ + //cancel asynchronous notifier (only one IOCTL allowed at a time) + if (asyncSelect) + asyncSelect->Cancel(); + + TPckgBuf<TUint> selectFlags; + selectFlags() = KSockSelectExcept; + if (checkRead) + selectFlags() |= KSockSelectRead; + if (checkWrite) + selectFlags() |= KSockSelectWrite; + TInt err; + if (timeout == 0) { + //if timeout is zero, poll + err = nativeSocket.GetOpt(KSOSelectPoll, KSOLSocket, selectFlags); + } else { + TRequestStatus selectStat; + nativeSocket.Ioctl(KIOctlSelect, selectStat, &selectFlags, KSOLSocket); + + if (timeout < 0) + User::WaitForRequest(selectStat); //negative means no timeout + else { + if (!selectTimer.Handle()) + qt_symbian_throwIfError(selectTimer.CreateLocal()); + TRequestStatus timerStat; + selectTimer.HighRes(timerStat, timeout * 1000); + User::WaitForRequest(timerStat, selectStat); + if (selectStat == KRequestPending) { + nativeSocket.CancelIoctl(); + //CancelIoctl completes the request (most likely with KErrCancel) + //We need to wait for this to keep the thread semaphore balanced (or active scheduler will panic) + User::WaitForRequest(selectStat); + //restart asynchronous notifier (only one IOCTL allowed at a time) + if (asyncSelect) + asyncSelect->IssueRequest(); + #ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::nativeSelect: select timeout"; + #endif + return 0; //timeout + } else { + selectTimer.Cancel(); + User::WaitForRequest(timerStat); + } + } + + #ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::nativeSelect: select status" << selectStat.Int() << (int)selectFlags(); + #endif + err = selectStat.Int(); + } + + if (!err && (selectFlags() & KSockSelectExcept)) { + nativeSocket.GetOpt(KSOSelectLastError, KSOLSocket, err); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::nativeSelect: select last error" << err; +#endif + } + if (err) { + //TODO: avoidable cast? + //set the error here, because read won't always return the same error again as select. + const_cast<QSymbianSocketEnginePrivate*>(this)->setError(err); + //restart asynchronous notifier (only one IOCTL allowed at a time) + if (asyncSelect) + asyncSelect->IssueRequest(); //TODO: in error case should we restart or not? + return err; + } + if (checkRead && (selectFlags() & KSockSelectRead)) { + Q_ASSERT(selectForRead); + *selectForRead = true; + } + if (checkWrite && (selectFlags() & KSockSelectWrite)) { + Q_ASSERT(selectForWrite); + *selectForWrite = true; + } + //restart asynchronous notifier (only one IOCTL allowed at a time) + if (asyncSelect) + asyncSelect->IssueRequest(); + return 1; +} + +bool QSymbianSocketEngine::joinMulticastGroup(const QHostAddress &groupAddress, + const QNetworkInterface &iface) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::joinMulticastGroup(), false); + Q_CHECK_STATE(QSymbianSocketEngine::joinMulticastGroup(), QAbstractSocket::BoundState, false); + Q_CHECK_TYPE(QSymbianSocketEngine::joinMulticastGroup(), QAbstractSocket::UdpSocket, false); + return d->multicastGroupMembershipHelper(groupAddress, iface, KSoIp6JoinGroup); +} + +bool QSymbianSocketEngine::leaveMulticastGroup(const QHostAddress &groupAddress, + const QNetworkInterface &iface) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::leaveMulticastGroup(), false); + Q_CHECK_STATE(QSymbianSocketEngine::leaveMulticastGroup(), QAbstractSocket::BoundState, false); + Q_CHECK_TYPE(QSymbianSocketEngine::leaveMulticastGroup(), QAbstractSocket::UdpSocket, false); + return d->multicastGroupMembershipHelper(groupAddress, iface, KSoIp6LeaveGroup); +} + +bool QSymbianSocketEnginePrivate::multicastGroupMembershipHelper(const QHostAddress &groupAddress, + const QNetworkInterface &iface, + TUint operation) +{ +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug() << "QSymbianSocketEnginePrivate::multicastGroupMembershipHelper" << groupAddress << iface << operation; +#endif + //translate address + TPckgBuf<TIp6Mreq> option; + if (groupAddress.protocol() == QAbstractSocket::IPv6Protocol) { + Q_IPV6ADDR ip6 = groupAddress.toIPv6Address(); + memcpy(option().iAddr.u.iAddr8, ip6.c, 16); + } else { + TInetAddr wrapped; + wrapped.SetAddress(groupAddress.toIPv4Address()); + wrapped.ConvertToV4Mapped(); + option().iAddr = wrapped.Ip6Address(); + } + option().iInterface = iface.index(); + //join or leave group + TInt err = nativeSocket.SetOpt(operation, KSolInetIp, option); +#if defined (QNATIVESOCKETENGINE_DEBUG) + qDebug() << "address" << qt_prettyDebug((const char *)(option().iAddr.u.iAddr8), 16, 16); + qDebug() << "interface" << option().iInterface; + qDebug() << "error" << err; +#endif + if (err) { + setError(err); + } + return (KErrNone == err); +} + +QNetworkInterface QSymbianSocketEngine::multicastInterface() const +{ + //TODO + const Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::multicastInterface(), QNetworkInterface()); + Q_CHECK_TYPE(QSymbianSocketEngine::multicastInterface(), QAbstractSocket::UdpSocket, QNetworkInterface()); + return QNetworkInterface(); +} + +bool QSymbianSocketEngine::setMulticastInterface(const QNetworkInterface &iface) +{ + //TODO - this is possibly a unix'ism as the RConnection on which the socket was created is probably controlling this + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setMulticastInterface(), false); + Q_CHECK_TYPE(QSymbianSocketEngine::setMulticastInterface(), QAbstractSocket::UdpSocket, false); + return false; +} + +bool QSymbianSocketEnginePrivate::checkProxy(const QHostAddress &address) +{ + if (address == QHostAddress::LocalHost || address == QHostAddress::LocalHostIPv6) + return true; + +#if !defined(QT_NO_NETWORKPROXY) + QObject *parent = q_func()->parent(); + QNetworkProxy proxy; + if (QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(parent)) { + proxy = socket->proxy(); + } else if (QTcpServer *server = qobject_cast<QTcpServer *>(parent)) { + proxy = server->proxy(); + } else { + // no parent -> no proxy + return true; + } + + if (proxy.type() == QNetworkProxy::DefaultProxy) + proxy = QNetworkProxy::applicationProxy(); + + if (proxy.type() != QNetworkProxy::DefaultProxy && + proxy.type() != QNetworkProxy::NoProxy) { + // QSymbianSocketEngine doesn't do proxies + setError(QAbstractSocket::UnsupportedSocketOperationError, + InvalidProxyTypeString); + return false; + } +#endif + + return true; +} + +// FIXME this is also in QNativeSocketEngine, unify it +/*! \internal + + Sets the error and error string if not set already. The only + interesting error is the first one that occurred, and not the last + one. +*/ +void QSymbianSocketEnginePrivate::setError(QAbstractSocket::SocketError error, ErrorString errorString) const +{ + if (hasSetSocketError) { + // Only set socket errors once for one engine; expect the + // socket to recreate its engine after an error. Note: There's + // one exception: SocketError(11) bypasses this as it's purely + // a temporary internal error condition. + // Another exception is the way the waitFor*() functions set + // an error when a timeout occurs. After the call to setError() + // they reset the hasSetSocketError to false + return; + } + if (error != QAbstractSocket::SocketError(11)) + hasSetSocketError = true; + + socketError = error; + + switch (errorString) { + case NonBlockingInitFailedErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unable to initialize non-blocking socket"); + break; + case BroadcastingInitFailedErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unable to initialize broadcast socket"); + break; + case NoIpV6ErrorString: + socketErrorString = QSymbianSocketEngine::tr("Attempt to use IPv6 socket on a platform with no IPv6 support"); + break; + case RemoteHostClosedErrorString: + socketErrorString = QSymbianSocketEngine::tr("The remote host closed the connection"); + break; + case TimeOutErrorString: + socketErrorString = QSymbianSocketEngine::tr("Network operation timed out"); + break; + case ResourceErrorString: + socketErrorString = QSymbianSocketEngine::tr("Out of resources"); + break; + case OperationUnsupportedErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unsupported socket operation"); + break; + case ProtocolUnsupportedErrorString: + socketErrorString = QSymbianSocketEngine::tr("Protocol type not supported"); + break; + case InvalidSocketErrorString: + socketErrorString = QSymbianSocketEngine::tr("Invalid socket descriptor"); + break; + case HostUnreachableErrorString: + socketErrorString = QSymbianSocketEngine::tr("Host unreachable"); + break; + case NetworkUnreachableErrorString: + socketErrorString = QSymbianSocketEngine::tr("Network unreachable"); + break; + case AccessErrorString: + socketErrorString = QSymbianSocketEngine::tr("Permission denied"); + break; + case ConnectionTimeOutErrorString: + socketErrorString = QSymbianSocketEngine::tr("Connection timed out"); + break; + case ConnectionRefusedErrorString: + socketErrorString = QSymbianSocketEngine::tr("Connection refused"); + break; + case AddressInuseErrorString: + socketErrorString = QSymbianSocketEngine::tr("The bound address is already in use"); + break; + case AddressNotAvailableErrorString: + socketErrorString = QSymbianSocketEngine::tr("The address is not available"); + break; + case AddressProtectedErrorString: + socketErrorString = QSymbianSocketEngine::tr("The address is protected"); + break; + case DatagramTooLargeErrorString: + socketErrorString = QSymbianSocketEngine::tr("Datagram was too large to send"); + break; + case SendDatagramErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unable to send a message"); + break; + case ReceiveDatagramErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unable to receive a message"); + break; + case WriteErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unable to write"); + break; + case ReadErrorString: + socketErrorString = QSymbianSocketEngine::tr("Network error"); + break; + case PortInuseErrorString: + socketErrorString = QSymbianSocketEngine::tr("Another socket is already listening on the same port"); + break; + case NotSocketErrorString: + socketErrorString = QSymbianSocketEngine::tr("Operation on non-socket"); + break; + case InvalidProxyTypeString: + socketErrorString = QSymbianSocketEngine::tr("The proxy type is invalid for this operation"); + break; + case InvalidAddressErrorString: + socketErrorString = QSymbianSocketEngine::tr("The address is invalid for this operation"); + break; + case SessionNotOpenErrorString: + socketErrorString = QSymbianSocketEngine::tr("The specified network session is not opened"); + break; + case UnknownSocketErrorString: + socketErrorString = QSymbianSocketEngine::tr("Unknown error"); + break; + } +} + +void QSymbianSocketEnginePrivate::setError(TInt symbianError) +{ + switch (symbianError) { + case KErrDisconnected: + case KErrEof: + case KErrConnectionTerminated: //interface stopped externally - RConnection::Stop(EStopAuthoritative) + setError(QAbstractSocket::RemoteHostClosedError, + QSymbianSocketEnginePrivate::RemoteHostClosedErrorString); + break; + case KErrNetUnreach: + setError(QAbstractSocket::NetworkError, + QSymbianSocketEnginePrivate::NetworkUnreachableErrorString); + break; + case KErrHostUnreach: + setError(QAbstractSocket::NetworkError, + QSymbianSocketEnginePrivate::HostUnreachableErrorString); + break; + case KErrNoProtocolOpt: + setError(QAbstractSocket::NetworkError, + QSymbianSocketEnginePrivate::ProtocolUnsupportedErrorString); + break; + case KErrInUse: + setError(QAbstractSocket::AddressInUseError, AddressInuseErrorString); + break; + case KErrPermissionDenied: + setError(QAbstractSocket::SocketAccessError, AccessErrorString); + break; + case KErrNotSupported: + setError(QAbstractSocket::UnsupportedSocketOperationError, OperationUnsupportedErrorString); + break; + case KErrNoMemory: + setError(QAbstractSocket::SocketResourceError, ResourceErrorString); + break; + case KErrCouldNotConnect: + setError(QAbstractSocket::ConnectionRefusedError, ConnectionRefusedErrorString); + break; + case KErrTimedOut: + setError(QAbstractSocket::NetworkError, ConnectionTimeOutErrorString); + break; + case KErrBadName: + setError(QAbstractSocket::NetworkError, InvalidAddressErrorString); + break; + default: + socketError = QAbstractSocket::NetworkError; + socketErrorString = QSystemError(symbianError, QSystemError::NativeError).toString(); + break; + } + hasSetSocketError = true; +} + +void QSymbianSocketEngine::startNotifications() +{ + Q_D(QSymbianSocketEngine); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::startNotifications" << d->readNotificationsEnabled << d->writeNotificationsEnabled << d->exceptNotificationsEnabled; +#endif + if (!d->asyncSelect && (d->readNotificationsEnabled || d->writeNotificationsEnabled || d->exceptNotificationsEnabled)) { + if (d->threadData->eventDispatcher) { + d->asyncSelect = q_check_ptr(new QAsyncSelect( + static_cast<QEventDispatcherSymbian*> (d->threadData->eventDispatcher), d->nativeSocket, + this)); + } else { + // call again when event dispatcher has been created + QMetaObject::invokeMethod(this, "startNotifications", Qt::QueuedConnection); + } + } + if (d->asyncSelect) + d->asyncSelect->IssueRequest(); +} + +bool QSymbianSocketEngine::isReadNotificationEnabled() const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::isReadNotificationEnabled(), false); + return d->readNotificationsEnabled; +} + +void QSymbianSocketEngine::setReadNotificationEnabled(bool enable) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setReadNotificationEnabled(), Q_VOID); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::setReadNotificationEnabled" << enable << "socket" << d->socketDescriptor; +#endif + d->readNotificationsEnabled = enable; + startNotifications(); +} + +bool QSymbianSocketEngine::isWriteNotificationEnabled() const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::isWriteNotificationEnabled(), false); + return d->writeNotificationsEnabled; +} + +void QSymbianSocketEngine::setWriteNotificationEnabled(bool enable) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setWriteNotificationEnabled(), Q_VOID); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::setWriteNotificationEnabled" << enable << "socket" << d->socketDescriptor; +#endif + d->writeNotificationsEnabled = enable; + startNotifications(); +} + +bool QSymbianSocketEngine::isExceptionNotificationEnabled() const +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::isExceptionNotificationEnabled(), false); + return d->exceptNotificationsEnabled; + return false; +} + +void QSymbianSocketEngine::setExceptionNotificationEnabled(bool enable) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::setExceptionNotificationEnabled(), Q_VOID); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::setExceptionNotificationEnabled" << enable << "socket" << d->socketDescriptor; +#endif + d->exceptNotificationsEnabled = enable; + startNotifications(); +} + +bool QSymbianSocketEngine::waitForRead(int msecs, bool *timedOut) +{ + Q_D(const QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::waitForRead(), false); + Q_CHECK_NOT_STATE(QSymbianSocketEngine::waitForRead(), + QAbstractSocket::UnconnectedState, false); + + if (timedOut) + *timedOut = false; + + int ret = d->nativeSelect(msecs, true); + if (ret == 0) { + if (timedOut) + *timedOut = true; + d->setError(QAbstractSocket::SocketTimeoutError, + d->TimeOutErrorString); + d->hasSetSocketError = false; // A timeout error is temporary in waitFor functions + return false; + } else if (state() == QAbstractSocket::ConnectingState) { + connectToHost(d->peerAddress, d->peerPort); + } + + return ret > 0; +} + +bool QSymbianSocketEngine::waitForWrite(int msecs, bool *timedOut) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::waitForWrite(), false); + Q_CHECK_NOT_STATE(QSymbianSocketEngine::waitForWrite(), + QAbstractSocket::UnconnectedState, false); + + if (timedOut) + *timedOut = false; + + int ret = d->nativeSelect(msecs, false); + + if (ret == 0) { + if (timedOut) + *timedOut = true; + d->setError(QAbstractSocket::SocketTimeoutError, + d->TimeOutErrorString); + d->hasSetSocketError = false; // A timeout error is temporary in waitFor functions + return false; + } else if (state() == QAbstractSocket::ConnectingState) { + connectToHost(d->peerAddress, d->peerPort); + } + + return ret > 0; +} + +bool QSymbianSocketEngine::waitForReadOrWrite(bool *readyToRead, bool *readyToWrite, + bool checkRead, bool checkWrite, + int msecs, bool *timedOut) +{ + Q_D(QSymbianSocketEngine); + Q_CHECK_VALID_SOCKETLAYER(QSymbianSocketEngine::waitForWrite(), false); + Q_CHECK_NOT_STATE(QSymbianSocketEngine::waitForReadOrWrite(), + QAbstractSocket::UnconnectedState, false); + + int ret = d->nativeSelect(msecs, checkRead, checkWrite, readyToRead, readyToWrite); + + if (ret == 0) { + if (timedOut) + *timedOut = true; + d->setError(QAbstractSocket::SocketTimeoutError, + d->TimeOutErrorString); + d->hasSetSocketError = false; // A timeout error is temporary in waitFor functions + return false; + } else if (state() == QAbstractSocket::ConnectingState) { + connectToHost(d->peerAddress, d->peerPort); + } + + return ret > 0; +} + +qint64 QSymbianSocketEngine::bytesToWrite() const +{ + // This is what the QNativeSocketEngine does + return 0; +} + +bool QSymbianSocketEngine::event(QEvent* ev) +{ + Q_D(QSymbianSocketEngine); + if (ev->type() == QEvent::ThreadChange) { +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEngine::event - ThreadChange" << d->readNotificationsEnabled << d->writeNotificationsEnabled << d->exceptNotificationsEnabled; +#endif + if (d->asyncSelect) { + delete d->asyncSelect; + d->asyncSelect = 0; + // recreate select in new thread (because it is queued, the method is called in the new thread context) + QMetaObject::invokeMethod(this, "startNotifications", Qt::QueuedConnection); + } + d->selectTimer.Close(); + return true; + } + return QAbstractSocketEngine::event(ev); +} + +QAsyncSelect::QAsyncSelect(QEventDispatcherSymbian *dispatcher, RSocket& sock, QSymbianSocketEngine *parent) + : QActiveObject(CActive::EPriorityStandard, dispatcher), + m_inSocketEvent(false), + m_deleteLater(false), + m_socket(sock), + m_selectFlags(0), + engine(parent) +{ + CActiveScheduler::Add(this); +} + +QAsyncSelect::~QAsyncSelect() +{ + Cancel(); +} + +void QAsyncSelect::DoCancel() +{ + m_socket.CancelIoctl(); +} + +void QAsyncSelect::RunL() +{ + QT_TRYCATCH_LEAVING(run()); +} + +//RunError is called by the active scheduler if RunL leaves. +//Typically this will happen if a std::bad_alloc propagates down from the application +TInt QAsyncSelect::RunError(TInt aError) +{ + if (engine) { + QT_TRY { + engine->d_func()->setError(aError); + if (engine->isExceptionNotificationEnabled()) + engine->exceptionNotification(); + if (engine->isReadNotificationEnabled()) + engine->readNotification(); + } + QT_CATCH(...) {} + } +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QAsyncSelect::RunError" << aError; +#endif + return KErrNone; +} + +void QAsyncSelect::run() +{ + //when event loop disabled socket events, defer until later + if (maybeDeferSocketEvent()) + return; + m_inSocketEvent = true; + m_selectBuf() &= m_selectFlags; //the select ioctl reports everything, so mask to only what we requested + //KSockSelectReadContinuation is for reading datagrams in a mode that doesn't discard when the + //datagram is larger than the read buffer - Qt doesn't need to use this. + if (engine && engine->isReadNotificationEnabled() + && ((m_selectBuf() & KSockSelectRead) || iStatus != KErrNone)) { + engine->readNotification(); + } + if (engine && engine->isWriteNotificationEnabled() + && ((m_selectBuf() & KSockSelectWrite) || iStatus != KErrNone)) { + if (engine->state() == QAbstractSocket::ConnectingState) + engine->connectionNotification(); + else + engine->writeNotification(); + } + if (engine && engine->isExceptionNotificationEnabled() + && ((m_selectBuf() & KSockSelectExcept) || iStatus != KErrNone)) { + engine->exceptionNotification(); + } + m_inSocketEvent = false; + if (m_deleteLater) { + delete this; + return; + } + // select again (unless disabled by one of the callbacks) + IssueRequest(); +} + +void QAsyncSelect::deleteLater() +{ + if (m_inSocketEvent) { + engine = 0; + m_deleteLater = true; + } else { + delete this; + } +} + +void QAsyncSelect::IssueRequest() +{ + if (m_inSocketEvent) + return; //prevent thrashing during a callback - socket engine enables/disables multiple notifiers + TUint selectFlags = 0; + if (engine->isReadNotificationEnabled()) + selectFlags |= KSockSelectRead; + if (engine->isWriteNotificationEnabled()) + selectFlags |= KSockSelectWrite; + if (engine->isExceptionNotificationEnabled()) + selectFlags |= KSockSelectExcept; + if (selectFlags != m_selectFlags) { +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QAsyncSelect::IssueRequest() - select flags" << m_selectFlags << "->" << selectFlags; +#endif + Cancel(); + m_selectFlags = selectFlags; + } + if (m_selectFlags && !IsActive()) { + //always request errors (write notification does not complete on connect errors) + m_selectBuf() = m_selectFlags | KSockSelectExcept; + m_socket.Ioctl(KIOctlSelect, iStatus, &m_selectBuf, KSOLSocket); + SetActive(); + } +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QAsyncSelect::IssueRequest() - IsActive" << IsActive(); +#endif +} + +QT_END_NAMESPACE diff --git a/src/network/socket/qsymbiansocketengine_p.h b/src/network/socket/qsymbiansocketengine_p.h new file mode 100644 index 0000000..85ab54a --- /dev/null +++ b/src/network/socket/qsymbiansocketengine_p.h @@ -0,0 +1,256 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtNetwork module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSYMBIANSOCKETENGINE_P_H +#define QSYMBIANSOCKETENGINE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the QLibrary class. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// +#include "QtNetwork/qhostaddress.h" +#include "private/qabstractsocketengine_p.h" +#include "qplatformdefs.h" + +#include <private/qeventdispatcher_symbian_p.h> +#include <unistd.h> +#include <es_sock.h> +#include <in_sock.h> + +QT_BEGIN_NAMESPACE + + +class QSymbianSocketEnginePrivate; +class QNetworkInterface; + +class Q_AUTOTEST_EXPORT QSymbianSocketEngine : public QAbstractSocketEngine +{ + Q_OBJECT + friend class QAsyncSelect; +public: + QSymbianSocketEngine(QObject *parent = 0); + ~QSymbianSocketEngine(); + + bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol); + bool initialize(int socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState); + + int socketDescriptor() const; + + bool isValid() const; + + bool connectToHost(const QHostAddress &address, quint16 port); + bool connectToHostByName(const QString &name, quint16 port); + bool bind(const QHostAddress &address, quint16 port); + bool listen(); + int accept(); + void close(); + + bool joinMulticastGroup(const QHostAddress &groupAddress, + const QNetworkInterface &iface); + bool leaveMulticastGroup(const QHostAddress &groupAddress, + const QNetworkInterface &iface); + QNetworkInterface multicastInterface() const; + bool setMulticastInterface(const QNetworkInterface &iface); + + qint64 bytesAvailable() const; + + qint64 read(char *data, qint64 maxlen); + qint64 write(const char *data, qint64 len); + + qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0, + quint16 *port = 0); + qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &addr, + quint16 port); + bool hasPendingDatagrams() const; + qint64 pendingDatagramSize() const; + + qint64 bytesToWrite() const; + + qint64 receiveBufferSize() const; + void setReceiveBufferSize(qint64 bufferSize); + + qint64 sendBufferSize() const; + void setSendBufferSize(qint64 bufferSize); + + int option(SocketOption option) const; + bool setOption(SocketOption option, int value); + + bool waitForRead(int msecs = 30000, bool *timedOut = 0); + bool waitForWrite(int msecs = 30000, bool *timedOut = 0); + bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite, + bool checkRead, bool checkWrite, + int msecs = 30000, bool *timedOut = 0); + + bool isReadNotificationEnabled() const; + void setReadNotificationEnabled(bool enable); + bool isWriteNotificationEnabled() const; + void setWriteNotificationEnabled(bool enable); + bool isExceptionNotificationEnabled() const; + void setExceptionNotificationEnabled(bool enable); + + bool event(QEvent* ev); + + Q_INVOKABLE void startNotifications(); + +public Q_SLOTS: + // TODO: Why do we do this? This is private Qt implementation stuff anyway, no need for it + // non-virtual override; + void connectionNotification(); + +private: + Q_DECLARE_PRIVATE(QSymbianSocketEngine) + Q_DISABLE_COPY(QSymbianSocketEngine) +}; + +class QSocketNotifier; + +class QReadNotifier; +class QWriteNotifier; +class QExceptionNotifier; +class QAsyncSelect : public QActiveObject +{ +public: + QAsyncSelect(QEventDispatcherSymbian *dispatcher, RSocket& sock, QSymbianSocketEngine *parent); + ~QAsyncSelect(); + + void deleteLater(); + void IssueRequest(); + + void refresh(); + +protected: + void DoCancel(); + void RunL(); + void run(); + TInt RunError(TInt aError); + +private: + bool m_inSocketEvent; + bool m_deleteLater; + RSocket &m_socket; + + TUint m_selectFlags; + TPckgBuf<TUint> m_selectBuf; //in & out IPC buffer + QSymbianSocketEngine *engine; +}; + +class QSymbianSocketEnginePrivate : public QAbstractSocketEnginePrivate +{ + Q_DECLARE_PUBLIC(QSymbianSocketEngine) +public: + QSymbianSocketEnginePrivate(); + ~QSymbianSocketEnginePrivate(); + + int socketDescriptor; + mutable RSocket nativeSocket; + // From QtCore: + RSocketServ& socketServer; + mutable RTimer selectTimer; + + bool readNotificationsEnabled; + bool writeNotificationsEnabled; + bool exceptNotificationsEnabled; + QAsyncSelect* asyncSelect; + + // FIXME this is duplicated from qnativesocketengine_p.h + enum ErrorString { + NonBlockingInitFailedErrorString, + BroadcastingInitFailedErrorString, + NoIpV6ErrorString, + RemoteHostClosedErrorString, + TimeOutErrorString, + ResourceErrorString, + OperationUnsupportedErrorString, + ProtocolUnsupportedErrorString, + InvalidSocketErrorString, + HostUnreachableErrorString, + NetworkUnreachableErrorString, + AccessErrorString, + ConnectionTimeOutErrorString, + ConnectionRefusedErrorString, + AddressInuseErrorString, + AddressNotAvailableErrorString, + AddressProtectedErrorString, + DatagramTooLargeErrorString, + SendDatagramErrorString, + ReceiveDatagramErrorString, + WriteErrorString, + ReadErrorString, + PortInuseErrorString, + NotSocketErrorString, + InvalidProxyTypeString, + //symbian specific + InvalidAddressErrorString, + SessionNotOpenErrorString, + + UnknownSocketErrorString = -1 + }; + void setError(QAbstractSocket::SocketError error, ErrorString errorString) const; + + void getPortAndAddress(const TInetAddr& a, quint16 *port, QHostAddress *addr); + void setPortAndAddress(TInetAddr& nativeAddr, quint16 port, const QHostAddress &addr); + void setError(TInt symbianError); + + int nativeSelect(int timeout, bool selectForRead) const; + int nativeSelect(int timeout, bool checkRead, bool checkWrite, + bool *selectForRead, bool *selectForWrite) const; + + bool createNewSocket(QAbstractSocket::SocketType socketType, + QAbstractSocket::NetworkLayerProtocol socketProtocol); + + bool checkProxy(const QHostAddress &address); + bool fetchConnectionParameters(); + + bool multicastGroupMembershipHelper(const QHostAddress &groupAddress, + const QNetworkInterface &iface, + TUint operation); + static bool translateSocketOption(QAbstractSocketEngine::SocketOption opt, TUint &n, TUint &level); +}; + +QT_END_NAMESPACE + +#endif // QSYMBIANSOCKETENGINE_P_H diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp index 98c05dd..5a60764 100644 --- a/src/network/socket/qtcpserver.cpp +++ b/src/network/socket/qtcpserver.cpp @@ -105,7 +105,7 @@ #include "qhostaddress.h" #include "qlist.h" #include "qpointer.h" -#include "qnativesocketengine_p.h" +#include "qabstractsocketengine_p.h" #include "qtcpserver.h" #include "qtcpsocket.h" #include "qnetworkproxy.h" @@ -292,6 +292,10 @@ bool QTcpServer::listen(const QHostAddress &address, quint16 port) d->serverSocketErrorString = tr("Operation on socket is not supported"); return false; } +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket engine (if it has been set) + d->socketEngine->setProperty("_q_networksession", property("_q_networksession")); +#endif if (!d->socketEngine->initialize(QAbstractSocket::TcpSocket, proto)) { d->serverSocketError = d->socketEngine->error(); d->serverSocketErrorString = d->socketEngine->errorString(); @@ -412,6 +416,10 @@ bool QTcpServer::setSocketDescriptor(int socketDescriptor) if (d->socketEngine) delete d->socketEngine; d->socketEngine = QAbstractSocketEngine::createSocketEngine(socketDescriptor, this); +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the socket engine (if it has been set) + d->socketEngine->setProperty("_q_networksession", property("_q_networksession")); +#endif if (!d->socketEngine->initialize(socketDescriptor, QAbstractSocket::ListeningState)) { d->serverSocketError = d->socketEngine->error(); d->serverSocketErrorString = d->socketEngine->errorString(); diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 97a5466..f8bcd1b 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -202,7 +202,7 @@ bool QUdpSocketPrivate::doEnsureInitialized(const QHostAddress &bindAddress, qui #endif // now check if the socket engine is initialized and to the right type - if (!socketEngine || !socketEngine->isValid() || socketEngine->protocol() != proto) { + if (!socketEngine || !socketEngine->isValid()) { resolveProxy(remoteAddress.toString(), bindPort); if (!initSocketLayer(address->protocol())) return false; @@ -508,16 +508,6 @@ qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddre return -1; qint64 sent = d->socketEngine->writeDatagram(data, size, address, port); -#ifdef Q_OS_SYMBIAN - if( QSysInfo::s60Version() <= QSysInfo::SV_S60_5_0 ) { - // This is evil hack, but for some reason native RSocket::SendTo returns 0, - // for large datagrams (such as 600 bytes). Based on comments from Open C team - // this should happen only in platforms <= S60 5.0. - // As an workaround, we just set sent = size - if( sent == 0 ) - sent = size; - } -#endif d->cachedSocketDescriptor = d->socketEngine->socketDescriptor(); if (sent >= 0) { diff --git a/src/network/socket/socket.pri b/src/network/socket/socket.pri index 3ccc8e0..ac90012 100644 --- a/src/network/socket/socket.pri +++ b/src/network/socket/socket.pri @@ -1,7 +1,6 @@ # Qt network socket HEADERS += socket/qabstractsocketengine_p.h \ - socket/qnativesocketengine_p.h \ socket/qhttpsocketengine_p.h \ socket/qsocks5socketengine_p.h \ socket/qabstractsocket.h \ @@ -15,7 +14,6 @@ HEADERS += socket/qabstractsocketengine_p.h \ socket/qlocalsocket_p.h SOURCES += socket/qabstractsocketengine.cpp \ - socket/qnativesocketengine.cpp \ socket/qhttpsocketengine.cpp \ socket/qsocks5socketengine.cpp \ socket/qabstractsocket.cpp \ @@ -25,9 +23,26 @@ SOURCES += socket/qabstractsocketengine.cpp \ socket/qlocalsocket.cpp \ socket/qlocalserver.cpp -unix:SOURCES += socket/qnativesocketengine_unix.cpp \ +# On Symbian we use QSymbianSocketEngine +symbian:SOURCES += socket/qsymbiansocketengine.cpp +symbian:HEADERS += socket/qsymbiansocketengine_p.h +# On others we use QNativeSocketEngine +!symbian:SOURCES += socket/qnativesocketengine.cpp +!symbian:HEADERS += socket/qnativesocketengine_p.h + +unix:!symbian: { + SOURCES += socket/qnativesocketengine_unix.cpp \ socket/qlocalsocket_unix.cpp \ socket/qlocalserver_unix.cpp +} + +symbian: { + SOURCES += socket/qlocalsocket_tcp.cpp \ + socket/qlocalserver_tcp.cpp + + DEFINES += QT_LOCALSOCKET_TCP +} + unix:HEADERS += \ socket/qnet_unix_p.h diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index bceb875..0dbf4b5 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2043,6 +2043,10 @@ void QSslSocketPrivate::createPlainSocket(QIODevice::OpenMode openMode) q->setPeerName(QString()); plainSocket = new QTcpSocket(q); +#ifndef QT_NO_BEARERMANAGEMENT + //copy network session down to the plain socket (if it has been set) + plainSocket->setProperty("_q_networksession", q->property("_q_networksession")); +#endif q->connect(plainSocket, SIGNAL(connected()), q, SLOT(_q_connectedSlot()), Qt::DirectConnection); diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 7b92f95..4662c56 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -73,6 +73,7 @@ QT_BEGIN_NAMESPACE typedef OSStatus (*PtrSecTrustSettingsCopyCertificates)(int, CFArrayRef*); typedef OSStatus (*PtrSecTrustCopyAnchorCertificates)(CFArrayRef*); #elif defined(Q_OS_WIN) +#include <windows.h> #include <wincrypt.h> #ifndef HCRYPTPROV_LEGACY #define HCRYPTPROV_LEGACY HCRYPTPROV diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index 741f8c5..a9bd414 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -45,8 +45,7 @@ #include <es_enum.h> #include <es_sock.h> #include <in_sock.h> -#include <stdapis/sys/socket.h> -#include <stdapis/net/if.h> +#include <private/qcore_symbian_p.h> #ifdef SNAP_FUNCTIONALITY_AVAILABLE #include <cmmanager.h> @@ -61,65 +60,60 @@ QT_BEGIN_NAMESPACE QNetworkSessionPrivateImpl::QNetworkSessionPrivateImpl(SymbianEngine *engine) -: CActive(CActive::EPriorityUserInput), engine(engine), - iDynamicUnSetdefaultif(0), ipConnectionNotifier(0), +: engine(engine), iSocketServ(qt_symbianGetSocketServer()), + ipConnectionNotifier(0), ipConnectionStarter(0), iHandleStateNotificationsFromManager(false), iFirstSync(true), iStoppedByUser(false), iClosedByUser(false), iError(QNetworkSession::UnknownSessionError), iALREnabled(0), iConnectInBackground(false), isOpening(false) { - CActiveScheduler::Add(this); #ifdef SNAP_FUNCTIONALITY_AVAILABLE iMobility = NULL; #endif - // Try to load "Open C" dll dynamically and - // try to attach to unsetdefaultif function dynamically. - // This is to avoid build breaks with old OpenC versions. - if (iOpenCLibrary.Load(_L("libc")) == KErrNone) { - iDynamicUnSetdefaultif = (TOpenCUnSetdefaultifFunction)iOpenCLibrary.Lookup(597); - } -#ifdef QT_BEARERMGMT_SYMBIAN_DEBUG - qDebug() << "QNS this : " << QString::number((uint)this) << " - "; - if (iDynamicUnSetdefaultif) - qDebug() << "dynamic unsetdefaultif() is present in PIPS library. "; - else - qDebug() << "dynamic unsetdefaultif() not present in PIPS library. "; -#endif TRAP_IGNORE(iConnectionMonitor.ConnectL()); } -QNetworkSessionPrivateImpl::~QNetworkSessionPrivateImpl() +void QNetworkSessionPrivateImpl::closeHandles() { - isOpen = false; - isOpening = false; - + QMutexLocker lock(&mutex); // Cancel Connection Progress Notifications first. - // Note: ConnectionNotifier must be destroyed before Canceling RConnection::Start() + // Note: ConnectionNotifier must be destroyed before RConnection::Close() // => deleting ipConnectionNotifier results RConnection::CancelProgressNotification() delete ipConnectionNotifier; ipConnectionNotifier = NULL; #ifdef SNAP_FUNCTIONALITY_AVAILABLE - if (iMobility) { - delete iMobility; - iMobility = NULL; - } + // mobility monitor must be deleted before RConnection is closed + delete iMobility; + iMobility = NULL; #endif - // Cancel possible RConnection::Start() - Cancel(); - iSocketServ.Close(); + // Cancel possible RConnection::Start() - may call RConnection::Close if Start was in progress + delete ipConnectionStarter; + ipConnectionStarter = 0; + //close any open connection (note Close twice is safe in case Cancel did it above) + iConnection.Close(); - // Close global 'Open C' RConnection - // Clears also possible unsetdefaultif() flags. - setdefaultif(0); + QSymbianSocketManager::instance().setDefaultConnection(0); iConnectionMonitor.Close(); - iOpenCLibrary.Close(); #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) - << " - destroyed (and setdefaultif(0))"; + << " - handles closed"; +#endif + +} + +QNetworkSessionPrivateImpl::~QNetworkSessionPrivateImpl() +{ + isOpen = false; + isOpening = false; + + closeHandles(); +#ifdef QT_BEARERMGMT_SYMBIAN_DEBUG + qDebug() << "QNS this : " << QString::number((uint)this) + << " - destroyed"; #endif } @@ -166,7 +160,7 @@ void QNetworkSessionPrivateImpl::configurationAdded(QNetworkConfigurationPrivate #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " << "configurationAdded IAP: " - << toSymbianConfig(privateConfiguration(config))->numericIdentifier(); + << toSymbianConfig(config)->numericIdentifier(); #endif syncStateWithInterface(); @@ -324,6 +318,7 @@ QNetworkSession::SessionError QNetworkSessionPrivateImpl::error() const void QNetworkSessionPrivateImpl::open() { + QMutexLocker lock(&mutex); #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " << "open() called, session state is: " << state << " and isOpen is: " @@ -363,20 +358,10 @@ void QNetworkSessionPrivateImpl::open() iStoppedByUser = false; iClosedByUser = false; - TInt error = iSocketServ.Connect(); - if (error != KErrNone) { - // Could not open RSocketServ - newState(QNetworkSession::Invalid); - iError = QNetworkSession::UnknownSessionError; - emit QNetworkSessionPrivate::error(iError); - syncStateWithInterface(); - return; - } - - error = iConnection.Open(iSocketServ); + Q_ASSERT(!iConnection.SubSessionHandle()); + TInt error = iConnection.Open(iSocketServ); if (error != KErrNone) { // Could not open RConnection - iSocketServ.Close(); newState(QNetworkSession::Invalid); iError = QNetworkSession::UnknownSessionError; emit QNetworkSessionPrivate::error(iError); @@ -414,9 +399,9 @@ void QNetworkSessionPrivateImpl::open() pref.SetIapId(symbianConfig->numericIdentifier()); #endif - iConnection.Start(pref, iStatus); - if (!IsActive()) { - SetActive(); + if (!ipConnectionStarter) { + ipConnectionStarter = new ConnectionStarter(*this, iConnection); + ipConnectionStarter->Start(pref); } // Avoid flip flop of states if the configuration is already // active. IsOpen/opened() will indicate when ready. @@ -442,9 +427,9 @@ void QNetworkSessionPrivateImpl::open() #else TConnSnapPref snapPref(symbianConfig->numericIdentifier()); #endif - iConnection.Start(snapPref, iStatus); - if (!IsActive()) { - SetActive(); + if (!ipConnectionStarter) { + ipConnectionStarter = new ConnectionStarter(*this, iConnection); + ipConnectionStarter->Start(snapPref); } // Avoid flip flop of states if the configuration is already // active. IsOpen/opened() will indicate when ready. @@ -453,9 +438,9 @@ void QNetworkSessionPrivateImpl::open() } } else if (publicConfig.type() == QNetworkConfiguration::UserChoice) { iKnownConfigsBeforeConnectionStart = engine->accessPointConfigurationIdentifiers(); - iConnection.Start(iStatus); - if (!IsActive()) { - SetActive(); + if (!ipConnectionStarter) { + ipConnectionStarter = new ConnectionStarter(*this, iConnection); + ipConnectionStarter->Start(); } newState(QNetworkSession::Connecting); } @@ -465,9 +450,7 @@ void QNetworkSessionPrivateImpl::open() isOpening = false; iError = QNetworkSession::UnknownSessionError; emit QNetworkSessionPrivate::error(iError); - if (ipConnectionNotifier) { - ipConnectionNotifier->StopNotifications(); - } + closeHandles(); syncStateWithInterface(); } } @@ -519,31 +502,10 @@ void QNetworkSessionPrivateImpl::close(bool allowSignals) serviceConfig = QNetworkConfiguration(); -#ifdef SNAP_FUNCTIONALITY_AVAILABLE - if (iMobility) { - delete iMobility; - iMobility = NULL; - } -#endif + closeHandles(); - if (ipConnectionNotifier && !iHandleStateNotificationsFromManager) { - ipConnectionNotifier->StopNotifications(); - // Start handling IAP state change signals from QNetworkConfigurationManagerPrivate - iHandleStateNotificationsFromManager = true; - } - - Cancel(); // closes iConnection - iSocketServ.Close(); - - // Close global 'Open C' RConnection. If OpenC supports, - // close the defaultif for good to avoid difficult timing - // and bouncing issues of network going immediately back up - // because of e.g. select() thread etc. - if (iDynamicUnSetdefaultif) { - iDynamicUnSetdefaultif(); - } else { - setdefaultif(0); - } + // Start handling IAP state change signals from QNetworkConfigurationManagerPrivate + iHandleStateNotificationsFromManager = true; // If UserChoice, go down immediately. If some other configuration, // go down immediately if there is no reports expected from the platform; @@ -566,6 +528,7 @@ void QNetworkSessionPrivateImpl::close(bool allowSignals) void QNetworkSessionPrivateImpl::stop() { + QMutexLocker lock(&mutex); #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " << "stop() called, session state is: " << state << " and isOpen is : " @@ -639,13 +602,7 @@ void QNetworkSessionPrivateImpl::migrate() { #ifdef SNAP_FUNCTIONALITY_AVAILABLE if (iMobility) { - // Close global 'Open C' RConnection. If openC supports, use the 'heavy' - // version to block all subsequent requests. - if (iDynamicUnSetdefaultif) { - iDynamicUnSetdefaultif(); - } else { - setdefaultif(0); - } + QSymbianSocketManager::instance().setDefaultConnection(0); // Start migrating to new IAP iMobility->MigrateToPreferredCarrier(); } @@ -675,12 +632,7 @@ void QNetworkSessionPrivateImpl::accept() QNetworkConfiguration newActiveConfig = activeConfiguration(iNewRoamingIap); - // Use name of the new IAP to open global 'Open C' RConnection - QByteArray nameAsByteArray = newActiveConfig.name().toUtf8(); - ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); - strcpy(ifr.ifr_name, nameAsByteArray.constData()); - setdefaultif(&ifr); + QSymbianSocketManager::instance().setDefaultConnection(&iConnection); newState(QNetworkSession::Connected, iNewRoamingIap); } @@ -698,12 +650,7 @@ void QNetworkSessionPrivateImpl::reject() } else { QNetworkConfiguration newActiveConfig = activeConfiguration(iOldRoamingIap); - // Use name of the old IAP to open global 'Open C' RConnection - QByteArray nameAsByteArray = newActiveConfig.name().toUtf8(); - ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); - strcpy(ifr.ifr_name, nameAsByteArray.constData()); - setdefaultif(&ifr); + QSymbianSocketManager::instance().setDefaultConnection(&iConnection); newState(QNetworkSession::Connected, iOldRoamingIap); } @@ -756,12 +703,14 @@ void QNetworkSessionPrivateImpl::NewCarrierActive(TAccessPointInfo /*aNewAPInfo* } } -void QNetworkSessionPrivateImpl::Error(TInt /*aError*/) +void QNetworkSessionPrivateImpl::Error(TInt aError) { #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " - << "roaming Error() occurred, isOpen is: " << isOpen; + << "roaming Error() occurred" << aError << ", isOpen is: " << isOpen; #endif + if (aError == KErrCancel) + return; //avoid recursive deletion if (isOpen) { isOpen = false; isOpening = false; @@ -769,10 +718,7 @@ void QNetworkSessionPrivateImpl::Error(TInt /*aError*/) serviceConfig = QNetworkConfiguration(); iError = QNetworkSession::RoamingError; emit QNetworkSessionPrivate::error(iError); - Cancel(); - if (ipConnectionNotifier) { - ipConnectionNotifier->StopNotifications(); - } + closeHandles(); QT_TRY { syncStateWithInterface(); // In some cases IAP is still in Connected state when @@ -1064,13 +1010,14 @@ QNetworkConfiguration QNetworkSessionPrivateImpl::activeConfiguration(TUint32 ia return publicConfig; } -void QNetworkSessionPrivateImpl::RunL() +void QNetworkSessionPrivateImpl::ConnectionStartComplete(TInt statusCode) { #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " - << "RConnection::RunL with status code: " << iStatus.Int(); + << "RConnection::Start completed with status code: " << statusCode; #endif - TInt statusCode = iStatus.Int(); + delete ipConnectionStarter; + ipConnectionStarter = 0; switch (statusCode) { case KErrNone: // Connection created successfully @@ -1085,30 +1032,20 @@ void QNetworkSessionPrivateImpl::RunL() // Connectivity Test, ICT, failed). error = KErrGeneral; } else { - // Use name of the IAP to open global 'Open C' RConnection - ifreq ifr; - memset(&ifr, 0, sizeof(struct ifreq)); - QByteArray nameAsByteArray = newActiveConfig.name().toUtf8(); - strcpy(ifr.ifr_name, nameAsByteArray.constData()); - error = setdefaultif(&ifr); + QSymbianSocketManager::instance().setDefaultConnection(&iConnection); } if (error != KErrNone) { isOpen = false; isOpening = false; iError = QNetworkSession::UnknownSessionError; QT_TRYCATCH_LEAVING(emit QNetworkSessionPrivate::error(iError)); - if (ipConnectionNotifier) { - ipConnectionNotifier->StopNotifications(); - } + closeHandles(); if (!newActiveConfig.isValid()) { // No valid configuration, bail out. // Status updates from QNCM won't be received correctly // because there is no configuration to associate them with so transit here. - iConnection.Close(); newState(QNetworkSession::Closing); newState(QNetworkSession::Disconnected); - } else { - Cancel(); } QT_TRYCATCH_LEAVING(syncStateWithInterface()); return; @@ -1151,10 +1088,7 @@ void QNetworkSessionPrivateImpl::RunL() serviceConfig = QNetworkConfiguration(); iError = QNetworkSession::InvalidConfigurationError; QT_TRYCATCH_LEAVING(emit QNetworkSessionPrivate::error(iError)); - if (ipConnectionNotifier) { - ipConnectionNotifier->StopNotifications(); - } - Cancel(); + closeHandles(); QT_TRYCATCH_LEAVING(syncStateWithInterface()); break; case KErrCancel: // Connection attempt cancelled @@ -1173,20 +1107,12 @@ void QNetworkSessionPrivateImpl::RunL() iError = QNetworkSession::UnknownSessionError; } QT_TRYCATCH_LEAVING(emit QNetworkSessionPrivate::error(iError)); - if (ipConnectionNotifier) { - ipConnectionNotifier->StopNotifications(); - } - Cancel(); + closeHandles(); QT_TRYCATCH_LEAVING(syncStateWithInterface()); break; } } -void QNetworkSessionPrivateImpl::DoCancel() -{ - iConnection.Close(); -} - // Enters newState if feasible according to current state. // AccessPointId may be given as parameter. If it is zero, state-change is assumed to // concern this session's configuration. If non-zero, the configuration is looked up @@ -1211,12 +1137,7 @@ bool QNetworkSessionPrivateImpl::newState(QNetworkSession::State newState, TUint #endif #ifdef SNAP_FUNCTIONALITY_AVAILABLE - // Use name of the IAP to set default IAP - QByteArray nameAsByteArray = activeConfig.name().toUtf8(); - ifreq ifr; - strcpy(ifr.ifr_name, nameAsByteArray.constData()); - - setdefaultif(&ifr); + QSymbianSocketManager::instance().setDefaultConnection(&iConnection); #endif } @@ -1268,10 +1189,7 @@ bool QNetworkSessionPrivateImpl::newState(QNetworkSession::State newState, TUint serviceConfig = QNetworkConfiguration(); iError = QNetworkSession::SessionAbortedError; emit QNetworkSessionPrivate::error(iError); - if (ipConnectionNotifier) { - ipConnectionNotifier->StopNotifications(); - } - Cancel(); + closeHandles(); // Start handling IAP state change signals from QNetworkConfigurationManagerPrivate iHandleStateNotificationsFromManager = true; emitSessionClosed = true; // Emit SessionClosed after state change has been reported @@ -1537,6 +1455,11 @@ bool QNetworkSessionPrivateImpl::easyWlanTrueIapId(TUint32 &trueIapId) const } #endif +RConnection* QNetworkSessionPrivateImpl::nativeSession() +{ + return &iConnection; +} + ConnectionProgressNotifier::ConnectionProgressNotifier(QNetworkSessionPrivateImpl& owner, RConnection& connection) : CActive(CActive::EPriorityUserInput), iOwner(owner), iConnection(connection) { @@ -1576,6 +1499,50 @@ void ConnectionProgressNotifier::RunL() } } +ConnectionStarter::ConnectionStarter(QNetworkSessionPrivateImpl &owner, RConnection &connection) + : CActive(CActive::EPriorityUserInput), iOwner(owner), iConnection(connection) +{ + CActiveScheduler::Add(this); +} + +ConnectionStarter::~ConnectionStarter() +{ + Cancel(); +} + +void ConnectionStarter::Start() +{ + if (!IsActive()) { + iConnection.Start(iStatus); + SetActive(); + } +} + +void ConnectionStarter::Start(TConnPref &pref) +{ + if (!IsActive()) { + iConnection.Start(pref, iStatus); + SetActive(); + } +} + +void ConnectionStarter::RunL() +{ + iOwner.ConnectionStartComplete(iStatus.Int()); + //note owner deletes on callback +} + +TInt ConnectionStarter::RunError(TInt err) +{ + qWarning() << "ConnectionStarter::RunError" << err; + return KErrNone; +} + +void ConnectionStarter::DoCancel() +{ + iConnection.Close(); +} + QT_END_NAMESPACE #endif //QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.h b/src/plugins/bearer/symbian/qnetworksession_impl.h index d5656d9..2dda456 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.h +++ b/src/plugins/bearer/symbian/qnetworksession_impl.h @@ -68,11 +68,12 @@ QT_BEGIN_NAMESPACE class ConnectionProgressNotifier; +class ConnectionStarter; class SymbianEngine; typedef void (*TOpenCUnSetdefaultifFunction)(); -class QNetworkSessionPrivateImpl : public QNetworkSessionPrivate, public CActive +class QNetworkSessionPrivateImpl : public QNetworkSessionPrivate #ifdef SNAP_FUNCTIONALITY_AVAILABLE , public MMobilityProtocolResp #endif @@ -111,7 +112,8 @@ public: quint64 bytesWritten() const; quint64 bytesReceived() const; quint64 activeTime() const; - + + RConnection* nativeSession(); #ifdef SNAP_FUNCTIONALITY_AVAILABLE public: // From MMobilityProtocolResp void PreferredCarrierAvailable(TAccessPointInfo aOldAPInfo, @@ -125,7 +127,7 @@ public: // From MMobilityProtocolResp #endif protected: // From CActive - void RunL(); + void ConnectionStartComplete(TInt statusCode); void DoCancel(); private Q_SLOTS: @@ -149,6 +151,7 @@ private: bool easyWlanTrueIapId(TUint32 &trueIapId) const; #endif + void closeHandles(); private: // data SymbianEngine *engine; @@ -159,19 +162,17 @@ private: // data QDateTime startTime; - RLibrary iOpenCLibrary; - TOpenCUnSetdefaultifFunction iDynamicUnSetdefaultif; - - mutable RSocketServ iSocketServ; + mutable RSocketServ &iSocketServ; //not owned, shared from QtCore mutable RConnection iConnection; mutable RConnectionMonitor iConnectionMonitor; ConnectionProgressNotifier* ipConnectionNotifier; - + ConnectionStarter* ipConnectionStarter; + bool iHandleStateNotificationsFromManager; bool iFirstSync; bool iStoppedByUser; bool iClosedByUser; - + #ifdef SNAP_FUNCTIONALITY_AVAILABLE CActiveCommsMobilityApiExt* iMobility; #endif @@ -189,6 +190,7 @@ private: // data bool isOpening; friend class ConnectionProgressNotifier; + friend class ConnectionStarter; }; class ConnectionProgressNotifier : public CActive @@ -211,6 +213,24 @@ private: // Data }; +class ConnectionStarter : public CActive +{ +public: + ConnectionStarter(QNetworkSessionPrivateImpl &owner, RConnection &connection); + ~ConnectionStarter(); + + void Start(); + void Start(TConnPref &pref); +protected: + void RunL(); + TInt RunError(TInt err); + void DoCancel(); + +private: // Data + QNetworkSessionPrivateImpl &iOwner; + RConnection& iConnection; +}; + QT_END_NAMESPACE #endif //QNETWORKSESSION_IMPL_H diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri index 45e3976..bcf473f 100644 --- a/src/plugins/qpluginbase.pri +++ b/src/plugins/qpluginbase.pri @@ -19,4 +19,23 @@ symbian: { TARGET.CAPABILITY = All -Tcb TARGET = $${TARGET}$${QT_LIBINFIX} load(armcc_warnings) + + # Make partial upgrade SIS file for Qt plugin dll's + # Partial upgrade SIS file + vendorinfo = \ + "; Localised Vendor name" \ + "%{\"Nokia\"}" \ + " " \ + "; Unique Vendor name" \ + ":\"Nokia, Qt\"" \ + " " + isEmpty(QT_LIBINFIX): PARTIAL_UPGRADE_UID = 0x2001E61C + else: PARTIAL_UPGRADE_UID = 0xE001E61C + + pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \ + "$${LITERAL_HASH}{\"$${TARGET}\"}, ($$PARTIAL_UPGRADE_UID), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU" + partial_upgrade.pkg_prerules = pu_header vendorinfo + partial_upgrade.files = $$QMAKE_LIBDIR_QT/$${TARGET}.dll + partial_upgrade.path = c:/sys/bin + DEPLOYMENT += partial_upgrade } diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index ff82ef0..0e6021a 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -144,7 +144,7 @@ EXPORTS ??0QLocale@@QAE@ABVQString@@@Z @ 143 NONAME ; QLocale::QLocale(class QString const &) ??0QLocale@@QAE@W4Language@0@W4Country@0@@Z @ 144 NONAME ; QLocale::QLocale(enum QLocale::Language, enum QLocale::Country) ??0QLocale@@QAE@XZ @ 145 NONAME ; QLocale::QLocale(void) - ??0QMetaCallEvent@@QAE@HPBVQObject@@HHPAHPAPAXPAVQSemaphore@@@Z @ 146 NONAME ; QMetaCallEvent::QMetaCallEvent(int, class QObject const *, int, int, int *, void * *, class QSemaphore *) + ??0QMetaCallEvent@@QAE@HPBVQObject@@HHPAHPAPAXPAVQSemaphore@@@Z @ 146 NONAME ABSENT ; QMetaCallEvent::QMetaCallEvent(int, class QObject const *, int, int, int *, void * *, class QSemaphore *) ??0QMetaClassInfo@@QAE@XZ @ 147 NONAME ; QMetaClassInfo::QMetaClassInfo(void) ??0QMetaEnum@@QAE@XZ @ 148 NONAME ; QMetaEnum::QMetaEnum(void) ??0QMetaMethod@@QAE@XZ @ 149 NONAME ; QMetaMethod::QMetaMethod(void) @@ -1375,7 +1375,7 @@ EXPORTS ?count@QStringRef@@QBEHXZ @ 1374 NONAME ; int QStringRef::count(void) const ?countriesForLanguage@QLocale@@SA?AV?$QList@W4Country@QLocale@@@@W4Language@1@@Z @ 1375 NONAME ; class QList<enum QLocale::Country> QLocale::countriesForLanguage(enum QLocale::Language) ?country@QLocale@@QBE?AW4Country@1@XZ @ 1376 NONAME ; enum QLocale::Country QLocale::country(void) const - ?countryId@QLocalePrivate@@QBEIXZ @ 1377 NONAME ; unsigned int QLocalePrivate::countryId(void) const + ?countryId@QLocalePrivate@@QBEIXZ @ 1377 NONAME ABSENT ; unsigned int QLocalePrivate::countryId(void) const ?countryToString@QLocale@@SA?AVQString@@W4Country@1@@Z @ 1378 NONAME ; class QString QLocale::countryToString(enum QLocale::Country) ?create@QAbstractFileEngine@@SAPAV1@ABVQString@@@Z @ 1379 NONAME ; class QAbstractFileEngine * QAbstractFileEngine::create(class QString const &) ?create@QNonContiguousByteDeviceFactory@@SAPAVQNonContiguousByteDevice@@PAVQByteArray@@@Z @ 1380 NONAME ; class QNonContiguousByteDevice * QNonContiguousByteDeviceFactory::create(class QByteArray *) @@ -2331,7 +2331,7 @@ EXPORTS ?killTimer@QObject@@QAEXH@Z @ 2330 NONAME ; void QObject::killTimer(int) ?killTimer@QTimer@@AAEXH@Z @ 2331 NONAME ; void QTimer::killTimer(int) ?language@QLocale@@QBE?AW4Language@1@XZ @ 2332 NONAME ; enum QLocale::Language QLocale::language(void) const - ?languageId@QLocalePrivate@@QBEIXZ @ 2333 NONAME ; unsigned int QLocalePrivate::languageId(void) const + ?languageId@QLocalePrivate@@QBEIXZ @ 2333 NONAME ABSENT ; unsigned int QLocalePrivate::languageId(void) const ?languageToString@QLocale@@SA?AVQString@@W4Language@1@@Z @ 2334 NONAME ; class QString QLocale::languageToString(enum QLocale::Language) ?lastIndexIn@QRegExp@@QBEHABVQString@@HW4CaretMode@1@@Z @ 2335 NONAME ; int QRegExp::lastIndexIn(class QString const &, int, enum QRegExp::CaretMode) const ?lastIndexOf@QByteArray@@QBEHABV1@H@Z @ 2336 NONAME ; int QByteArray::lastIndexOf(class QByteArray const &, int) const @@ -2677,7 +2677,7 @@ EXPORTS ?permissions@QFileInfo@@QBE?AV?$QFlags@W4Permission@QFile@@@@XZ @ 2676 NONAME ; class QFlags<enum QFile::Permission> QFileInfo::permissions(void) const ?persistentIndexList@QAbstractItemModel@@IBE?AV?$QList@VQModelIndex@@@@XZ @ 2677 NONAME ; class QList<class QModelIndex> QAbstractItemModel::persistentIndexList(void) const ?pid@QProcess@@QBE_JXZ @ 2678 NONAME ; long long QProcess::pid(void) const - ?placeMetaCall@QMetaCallEvent@@UAEHPAVQObject@@@Z @ 2679 NONAME ; int QMetaCallEvent::placeMetaCall(class QObject *) + ?placeMetaCall@QMetaCallEvent@@UAEHPAVQObject@@@Z @ 2679 NONAME ABSENT ; int QMetaCallEvent::placeMetaCall(class QObject *) ?plus@QLocalePrivate@@QBE?AVQChar@@XZ @ 2680 NONAME ; class QChar QLocalePrivate::plus(void) const ?pmText@QLocale@@QBE?AVQString@@XZ @ 2681 NONAME ; class QString QLocale::pmText(void) const ?pointAt@QLineF@@QBE?AVQPointF@@M@Z @ 2682 NONAME ; class QPointF QLineF::pointAt(float) const @@ -3572,7 +3572,7 @@ EXPORTS ?skipWhiteSpace@QTextStream@@QAEXXZ @ 3571 NONAME ; void QTextStream::skipWhiteSpace(void) ?sleep@QThread@@KAXK@Z @ 3572 NONAME ; void QThread::sleep(unsigned long) ?socket@QSocketNotifier@@QBEHXZ @ 3573 NONAME ; int QSocketNotifier::socket(void) const - ?socketFired@QEventDispatcherSymbian@@QAEXPAVQSocketActiveObject@@@Z @ 3574 NONAME ; void QEventDispatcherSymbian::socketFired(class QSocketActiveObject *) + ?socketFired@QEventDispatcherSymbian@@QAEXPAVQSocketActiveObject@@@Z @ 3574 NONAME ABSENT ; void QEventDispatcherSymbian::socketFired(class QSocketActiveObject *) ?sort@QAbstractItemModel@@UAEXHW4SortOrder@Qt@@@Z @ 3575 NONAME ; void QAbstractItemModel::sort(int, enum Qt::SortOrder) ?sorting@QDir@@QBE?AV?$QFlags@W4SortFlag@QDir@@@@XZ @ 3576 NONAME ; class QFlags<enum QDir::SortFlag> QDir::sorting(void) const ?sourceState@QAbstractTransition@@QBEPAVQState@@XZ @ 3577 NONAME ; class QState * QAbstractTransition::sourceState(void) const @@ -4486,205 +4486,362 @@ EXPORTS ?objectNameChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4485 NONAME ; void (*QAbstractDeclarativeData::objectNameChanged)(class QAbstractDeclarativeData *, class QObject *) ?queueDeferredActiveObjectsCompletion@QEventDispatcherSymbian@@QAEXXZ @ 4486 NONAME ; void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion(void) ?reactivateDeferredActiveObjects@QEventDispatcherSymbian@@UAEXXZ @ 4487 NONAME ; void QEventDispatcherSymbian::reactivateDeferredActiveObjects(void) - ?symbianCommandLine@QCoreApplicationPrivate@@SAPAVCApaCommandLine@@XZ @ 4488 NONAME ; class CApaCommandLine * QCoreApplicationPrivate::symbianCommandLine(void) - ?revision@QMetaProperty@@QBEHXZ @ 4489 NONAME ; int QMetaProperty::revision(void) const - ?revision@QMetaMethod@@QBEHXZ @ 4490 NONAME ; int QMetaMethod::revision(void) const - adler32_combine @ 4491 NONAME - adler32_combine64 @ 4492 NONAME - compressBound @ 4493 NONAME - crc32_combine @ 4494 NONAME - crc32_combine64 @ 4495 NONAME - deflateBound @ 4496 NONAME - deflatePrime @ 4497 NONAME - deflateSetHeader @ 4498 NONAME - deflateTune @ 4499 NONAME - gzbuffer @ 4500 NONAME - gzclearerr @ 4501 NONAME - gzclose_r @ 4502 NONAME - gzclose_w @ 4503 NONAME - gzdirect @ 4504 NONAME - gzoffset @ 4505 NONAME - gzoffset64 @ 4506 NONAME - gzopen64 @ 4507 NONAME - gzseek64 @ 4508 NONAME - gztell64 @ 4509 NONAME - gzungetc @ 4510 NONAME - inflateBack @ 4511 NONAME - inflateBackEnd @ 4512 NONAME - inflateBackInit_ @ 4513 NONAME - inflateCopy @ 4514 NONAME - inflateGetHeader @ 4515 NONAME - inflateMark @ 4516 NONAME - inflatePrime @ 4517 NONAME - inflateReset2 @ 4518 NONAME - inflateUndermine @ 4519 NONAME - zlibCompileFlags @ 4520 NONAME - ??_EQDateTime@@QAE@I@Z @ 4521 NONAME ABSENT ; QDateTime::~QDateTime(unsigned int) - ??4QDate@@QAEAAV0@ABV0@@Z @ 4522 NONAME ABSENT ; class QDate & QDate::operator=(class QDate const &) - ??4QSizeF@@QAEAAV0@ABV0@@Z @ 4523 NONAME ABSENT ; class QSizeF & QSizeF::operator=(class QSizeF const &) - ??0QSize@@QAE@ABV0@@Z @ 4524 NONAME ABSENT ; QSize::QSize(class QSize const &) - ?contains@QString@@QBE?AVQBool@@ABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4525 NONAME ; class QBool QString::contains(class QStringRef const &, enum Qt::CaseSensitivity) const - ?swap@QRegExp@@QAEXAAV1@@Z @ 4526 NONAME ; void QRegExp::swap(class QRegExp &) - ?indexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4527 NONAME ; int QStringRef::indexOf(class QString const &, int, enum Qt::CaseSensitivity) const - ?indexOf@QStringRef@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z @ 4528 NONAME ; int QStringRef::indexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const - ?count@QString@@QBEHABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4529 NONAME ; int QString::count(class QStringRef const &, enum Qt::CaseSensitivity) const - ?swap@QString@@QAEXAAV1@@Z @ 4530 NONAME ; void QString::swap(class QString &) - ?trUtf8@QAnimationDriver@@SA?AVQString@@PBD0H@Z @ 4531 NONAME ; class QString QAnimationDriver::trUtf8(char const *, char const *, int) - ?startsWith@QStringRef@@QBE_NVQChar@@W4CaseSensitivity@Qt@@@Z @ 4532 NONAME ; bool QStringRef::startsWith(class QChar, enum Qt::CaseSensitivity) const - ?setNativeKey@QSharedMemory@@QAEXABVQString@@@Z @ 4533 NONAME ; void QSharedMemory::setNativeKey(class QString const &) - ??0QAnimationDriver@@IAE@AAVQAnimationDriverPrivate@@PAVQObject@@@Z @ 4534 NONAME ; QAnimationDriver::QAnimationDriver(class QAnimationDriverPrivate &, class QObject *) - ?timerEvent@QUnifiedTimer@@MAEXPAVQTimerEvent@@@Z @ 4535 NONAME ; void QUnifiedTimer::timerEvent(class QTimerEvent *) - ?currentUnicodeVersion@QChar@@SA?AW4UnicodeVersion@1@XZ @ 4536 NONAME ; enum QChar::UnicodeVersion QChar::currentUnicodeVersion(void) - ?registerAnimation@QUnifiedTimer@@SAXPAVQAbstractAnimation@@_N@Z @ 4537 NONAME ; void QUnifiedTimer::registerAnimation(class QAbstractAnimation *, bool) - ?startsWith@QStringRef@@QBE_NABV1@W4CaseSensitivity@Qt@@@Z @ 4538 NONAME ; bool QStringRef::startsWith(class QStringRef const &, enum Qt::CaseSensitivity) const - ?contains@QStringRef@@QBE?AVQBool@@ABV1@W4CaseSensitivity@Qt@@@Z @ 4539 NONAME ; class QBool QStringRef::contains(class QStringRef const &, enum Qt::CaseSensitivity) const - ??0QEvent@@QAE@ABV0@@Z @ 4540 NONAME ABSENT ; QEvent::QEvent(class QEvent const &) - ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@HV?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4541 NONAME ; bool QFSFileEngine::open(class QFlags<enum QIODevice::OpenModeFlag>, int, class QFlags<enum QFile::FileHandleFlag>) - ?startsWith@QStringRef@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4542 NONAME ; bool QStringRef::startsWith(class QLatin1String, enum Qt::CaseSensitivity) const - ?cast@QMetaObject@@QBEPBVQObject@@PBV2@@Z @ 4543 NONAME ; class QObject const * QMetaObject::cast(class QObject const *) const - ?ensureTimerUpdate@QUnifiedTimer@@SAXXZ @ 4544 NONAME ; void QUnifiedTimer::ensureTimerUpdate(void) - ?contains@QStringRef@@QBE?AVQBool@@VQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4545 NONAME ; class QBool QStringRef::contains(class QLatin1String, enum Qt::CaseSensitivity) const - ??0QTextCodecFactoryInterface@@QAE@XZ @ 4546 NONAME ABSENT ; QTextCodecFactoryInterface::QTextCodecFactoryInterface(void) - ?d_func@QAnimationDriver@@ABEPBVQAnimationDriverPrivate@@XZ @ 4547 NONAME ; class QAnimationDriverPrivate const * QAnimationDriver::d_func(void) const - ?swap@QVariant@@QAEXAAV1@@Z @ 4548 NONAME ; void QVariant::swap(class QVariant &) - ??0QPointF@@QAE@ABV0@@Z @ 4549 NONAME ABSENT ; QPointF::QPointF(class QPointF const &) - ?lastIndexOf@QStringRef@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z @ 4550 NONAME ; int QStringRef::lastIndexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const - ??_EQUrl@@QAE@I@Z @ 4551 NONAME ABSENT ; QUrl::~QUrl(unsigned int) - ?stopped@QAnimationDriver@@MAEXXZ @ 4552 NONAME ; void QAnimationDriver::stopped(void) - ?indexOf@QStringRef@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z @ 4553 NONAME ; int QStringRef::indexOf(class QLatin1String, int, enum Qt::CaseSensitivity) const - ?senderSignalIndex@QObject@@IBEHXZ @ 4554 NONAME ; int QObject::senderSignalIndex(void) const - ?nsecsElapsed@QElapsedTimer@@QBE_JXZ @ 4555 NONAME ; long long QElapsedTimer::nsecsElapsed(void) const - ??0QGenericArgument@@QAE@ABV0@@Z @ 4556 NONAME ABSENT ; QGenericArgument::QGenericArgument(class QGenericArgument const &) - ?isResetDisabled@QNonContiguousByteDevice@@QAE_NXZ @ 4557 NONAME ; bool QNonContiguousByteDevice::isResetDisabled(void) - ??_EQVariant@@QAE@I@Z @ 4558 NONAME ABSENT ; QVariant::~QVariant(unsigned int) - ?toUtf8@QStringRef@@QBE?AVQByteArray@@XZ @ 4559 NONAME ; class QByteArray QStringRef::toUtf8(void) const - ?startsWith@QString@@QBE_NABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4560 NONAME ; bool QString::startsWith(class QStringRef const &, enum Qt::CaseSensitivity) const - ?unlockInternal@QMutex@@AAEXXZ @ 4561 NONAME ; void QMutex::unlockInternal(void) - ??XQPoint@@QAEAAV0@N@Z @ 4562 NONAME ; class QPoint & QPoint::operator*=(double) - ?updateAnimationsTime@QUnifiedTimer@@QAEXXZ @ 4563 NONAME ; void QUnifiedTimer::updateAnimationsTime(void) - ??0QSystemError@@QAE@HW4ErrorScope@0@@Z @ 4564 NONAME ; QSystemError::QSystemError(int, enum QSystemError::ErrorScope) - ??4QLineF@@QAEAAV0@ABV0@@Z @ 4565 NONAME ABSENT ; class QLineF & QLineF::operator=(class QLineF const &) - ?swap@QBitArray@@QAEXAAV1@@Z @ 4566 NONAME ; void QBitArray::swap(class QBitArray &) - ?nativeKey@QSharedMemory@@QBE?AVQString@@XZ @ 4567 NONAME ; class QString QSharedMemory::nativeKey(void) const - ?connect@QObject@@SA_NPBV1@ABVQMetaMethod@@01W4ConnectionType@Qt@@@Z @ 4568 NONAME ; bool QObject::connect(class QObject const *, class QMetaMethod const &, class QObject const *, class QMetaMethod const &, enum Qt::ConnectionType) - ?registerRunningAnimation@QUnifiedTimer@@AAEXPAVQAbstractAnimation@@@Z @ 4569 NONAME ; void QUnifiedTimer::registerRunningAnimation(class QAbstractAnimation *) - ??0QXmlStreamAttributes@@QAE@ABV0@@Z @ 4570 NONAME ABSENT ; QXmlStreamAttributes::QXmlStreamAttributes(class QXmlStreamAttributes const &) - ?disconnect@QObject@@SA_NPBV1@ABVQMetaMethod@@01@Z @ 4571 NONAME ; bool QObject::disconnect(class QObject const *, class QMetaMethod const &, class QObject const *, class QMetaMethod const &) - ?installAnimationDriver@QUnifiedTimer@@QAEXPAVQAnimationDriver@@@Z @ 4572 NONAME ; void QUnifiedTimer::installAnimationDriver(class QAnimationDriver *) - ?startsWith@QStringRef@@QBE_NABVQString@@W4CaseSensitivity@Qt@@@Z @ 4573 NONAME ; bool QStringRef::startsWith(class QString const &, enum Qt::CaseSensitivity) const - ?contains@QStringRef@@QBE?AVQBool@@VQChar@@W4CaseSensitivity@Qt@@@Z @ 4574 NONAME ; class QBool QStringRef::contains(class QChar, enum Qt::CaseSensitivity) const - ?unregisterAnimation@QUnifiedTimer@@SAXPAVQAbstractAnimation@@@Z @ 4575 NONAME ; void QUnifiedTimer::unregisterAnimation(class QAbstractAnimation *) - ?open@QFile@@QAE_NHV?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4576 NONAME ; bool QFile::open(int, class QFlags<enum QIODevice::OpenModeFlag>, class QFlags<enum QFile::FileHandleFlag>) - ?qt_metacast@QAnimationDriver@@UAEPAXPBD@Z @ 4577 NONAME ; void * QAnimationDriver::qt_metacast(char const *) - ?count@QStringRef@@QBEHABVQString@@W4CaseSensitivity@Qt@@@Z @ 4578 NONAME ; int QStringRef::count(class QString const &, enum Qt::CaseSensitivity) const - ??0QMetaEnum@@QAE@ABV0@@Z @ 4579 NONAME ABSENT ; QMetaEnum::QMetaEnum(class QMetaEnum const &) - ??4QUuid@@QAEAAU0@ABU0@@Z @ 4580 NONAME ABSENT ; struct QUuid & QUuid::operator=(struct QUuid const &) - ?endsWith@QStringRef@@QBE_NVQChar@@W4CaseSensitivity@Qt@@@Z @ 4581 NONAME ; bool QStringRef::endsWith(class QChar, enum Qt::CaseSensitivity) const - ??0QUnifiedTimer@@AAE@XZ @ 4582 NONAME ; QUnifiedTimer::QUnifiedTimer(void) - ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@PAU__sFILE@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4583 NONAME ; bool QFSFileEngine::open(class QFlags<enum QIODevice::OpenModeFlag>, struct __sFILE *, class QFlags<enum QFile::FileHandleFlag>) - ??0CQtActiveScheduler@@QAE@XZ @ 4584 NONAME ABSENT ; CQtActiveScheduler::CQtActiveScheduler(void) - ??0QCoreApplicationPrivate@@QAE@AAHPAPADI@Z @ 4585 NONAME ; QCoreApplicationPrivate::QCoreApplicationPrivate(int &, char * *, unsigned int) - ??0QCoreApplication@@QAE@AAHPAPADH@Z @ 4586 NONAME ; QCoreApplication::QCoreApplication(int &, char * *, int) - ??0QAnimationDriver@@QAE@PAVQObject@@@Z @ 4587 NONAME ; QAnimationDriver::QAnimationDriver(class QObject *) - ?lastIndexOf@QStringRef@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z @ 4588 NONAME ; int QStringRef::lastIndexOf(class QLatin1String, int, enum Qt::CaseSensitivity) const - ??0QAnimationDriverPrivate@@QAE@XZ @ 4589 NONAME ; QAnimationDriverPrivate::QAnimationDriverPrivate(void) - ??XQPoint@@QAEAAV0@H@Z @ 4590 NONAME ; class QPoint & QPoint::operator*=(int) - ?endsWith@QString@@QBE_NABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4591 NONAME ; bool QString::endsWith(class QStringRef const &, enum Qt::CaseSensitivity) const - ??0QSizeF@@QAE@ABV0@@Z @ 4592 NONAME ABSENT ; QSizeF::QSizeF(class QSizeF const &) - ?trUtf8@QAnimationDriver@@SA?AVQString@@PBD0@Z @ 4593 NONAME ; class QString QAnimationDriver::trUtf8(char const *, char const *) - ?install@QAnimationDriver@@QAEXXZ @ 4594 NONAME ; void QAnimationDriver::install(void) - ?qt_metacall@QAnimationDriver@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4595 NONAME ; int QAnimationDriver::qt_metacall(enum QMetaObject::Call, int, void * *) - ??4QMetaEnum@@QAEAAV0@ABV0@@Z @ 4596 NONAME ABSENT ; class QMetaEnum & QMetaEnum::operator=(class QMetaEnum const &) - ?endsWith@QStringRef@@QBE_NABVQString@@W4CaseSensitivity@Qt@@@Z @ 4597 NONAME ; bool QStringRef::endsWith(class QString const &, enum Qt::CaseSensitivity) const - ??4QRect@@QAEAAV0@ABV0@@Z @ 4598 NONAME ABSENT ; class QRect & QRect::operator=(class QRect const &) - ?lockInline@QMutex@@QAEXXZ @ 4599 NONAME ; void QMutex::lockInline(void) - ??_EQMutexPool@@QAE@I@Z @ 4600 NONAME ABSENT ; QMutexPool::~QMutexPool(unsigned int) - ??0QMetaClassInfo@@QAE@ABV0@@Z @ 4601 NONAME ABSENT ; QMetaClassInfo::QMetaClassInfo(class QMetaClassInfo const &) - ??0QDate@@QAE@ABV0@@Z @ 4602 NONAME ABSENT ; QDate::QDate(class QDate const &) - ?hasError@QXmlStreamWriter@@QBE_NXZ @ 4603 NONAME ; bool QXmlStreamWriter::hasError(void) const - ??_EQTextDecoder@@QAE@I@Z @ 4604 NONAME ABSENT ; QTextDecoder::~QTextDecoder(unsigned int) - ?endsWith@QStringRef@@QBE_NABV1@W4CaseSensitivity@Qt@@@Z @ 4605 NONAME ; bool QStringRef::endsWith(class QStringRef const &, enum Qt::CaseSensitivity) const - ??_EQUnifiedTimer@@UAE@I@Z @ 4606 NONAME ; QUnifiedTimer::~QUnifiedTimer(unsigned int) - ??_EQMutex@@QAE@I@Z @ 4607 NONAME ABSENT ; QMutex::~QMutex(unsigned int) - ??0QTimerEvent@@QAE@ABV0@@Z @ 4608 NONAME ABSENT ; QTimerEvent::QTimerEvent(class QTimerEvent const &) - ?setTimingInterval@QUnifiedTimer@@QAEXH@Z @ 4609 NONAME ; void QUnifiedTimer::setTimingInterval(int) - ?closestPauseAnimationTimeToFinish@QUnifiedTimer@@AAEHXZ @ 4610 NONAME ; int QUnifiedTimer::closestPauseAnimationTimeToFinish(void) - ??0QXmlStreamAttributes@@QAE@XZ @ 4611 NONAME ; QXmlStreamAttributes::QXmlStreamAttributes(void) - ??_EConverterState@QTextCodec@@QAE@I@Z @ 4612 NONAME ABSENT ; QTextCodec::ConverterState::~ConverterState(unsigned int) - ??4QTime@@QAEAAV0@ABV0@@Z @ 4613 NONAME ABSENT ; class QTime & QTime::operator=(class QTime const &) - ??0QMetaMethod@@QAE@ABV0@@Z @ 4614 NONAME ABSENT ; QMetaMethod::QMetaMethod(class QMetaMethod const &) - ?lastIndexOf@QString@@QBEHABVQStringRef@@HW4CaseSensitivity@Qt@@@Z @ 4615 NONAME ; int QString::lastIndexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const - ??_EQTextEncoder@@QAE@I@Z @ 4616 NONAME ABSENT ; QTextEncoder::~QTextEncoder(unsigned int) - ??1QAnimationDriverPrivate@@UAE@XZ @ 4617 NONAME ; QAnimationDriverPrivate::~QAnimationDriverPrivate(void) - ?swap@QUrl@@QAEXAAV1@@Z @ 4618 NONAME ; void QUrl::swap(class QUrl &) - ??_EQAnimationDriverPrivate@@UAE@I@Z @ 4619 NONAME ; QAnimationDriverPrivate::~QAnimationDriverPrivate(unsigned int) - ??_EQFileInfo@@QAE@I@Z @ 4620 NONAME ABSENT ; QFileInfo::~QFileInfo(unsigned int) - ??_EQAnimationDriver@@UAE@I@Z @ 4621 NONAME ; QAnimationDriver::~QAnimationDriver(unsigned int) - ?instance@QUnifiedTimer@@SAPAV1@_N@Z @ 4622 NONAME ; class QUnifiedTimer * QUnifiedTimer::instance(bool) - ?setSlowdownFactor@QUnifiedTimer@@QAEXM@Z @ 4623 NONAME ; void QUnifiedTimer::setSlowdownFactor(float) - ?isRunning@QAnimationDriver@@QBE_NXZ @ 4624 NONAME ; bool QAnimationDriver::isRunning(void) const - ??4QRectF@@QAEAAV0@ABV0@@Z @ 4625 NONAME ABSENT ; class QRectF & QRectF::operator=(class QRectF const &) - ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@ABVRFile@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4626 NONAME ; bool QFSFileEngine::open(class QFlags<enum QIODevice::OpenModeFlag>, class RFile const &, class QFlags<enum QFile::FileHandleFlag>) - ??4QXmlStreamStringRef@@QAEAAV0@ABV0@@Z @ 4627 NONAME ABSENT ; class QXmlStreamStringRef & QXmlStreamStringRef::operator=(class QXmlStreamStringRef const &) - ?open@QFile@@QAE_NABVRFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4628 NONAME ; bool QFile::open(class RFile const &, class QFlags<enum QIODevice::OpenModeFlag>, class QFlags<enum QFile::FileHandleFlag>) - ??4QBasicAtomicInt@@QAEAAV0@ABV0@@Z @ 4629 NONAME ABSENT ; class QBasicAtomicInt & QBasicAtomicInt::operator=(class QBasicAtomicInt const &) - ?count@QStringRef@@QBEHABV1@W4CaseSensitivity@Qt@@@Z @ 4630 NONAME ; int QStringRef::count(class QStringRef const &, enum Qt::CaseSensitivity) const - ?contains@QStringRef@@QBE?AVQBool@@ABVQString@@W4CaseSensitivity@Qt@@@Z @ 4631 NONAME ; class QBool QStringRef::contains(class QString const &, enum Qt::CaseSensitivity) const - ?tryLockInline@QMutex@@QAE_NXZ @ 4632 NONAME ; bool QMutex::tryLockInline(void) - ?lastIndexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4633 NONAME ; int QStringRef::lastIndexOf(class QString const &, int, enum Qt::CaseSensitivity) const - ?lockInternal@QMutex@@AAEXXZ @ 4634 NONAME ; void QMutex::lockInternal(void) - ?scope@QSystemError@@QAE?AW4ErrorScope@1@XZ @ 4635 NONAME ; enum QSystemError::ErrorScope QSystemError::scope(void) - ??_EQEasingCurve@@QAE@I@Z @ 4636 NONAME ABSENT ; QEasingCurve::~QEasingCurve(unsigned int) - ?toString@QSystemError@@QAE?AVQString@@XZ @ 4637 NONAME ; class QString QSystemError::toString(void) - ?toLocal8Bit@QStringRef@@QBE?AVQByteArray@@XZ @ 4638 NONAME ; class QByteArray QStringRef::toLocal8Bit(void) const - ?indexOf@QStringRef@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z @ 4639 NONAME ; int QStringRef::indexOf(class QChar, int, enum Qt::CaseSensitivity) const - ?toUcs4@QStringRef@@QBE?AV?$QVector@I@@XZ @ 4640 NONAME ; class QVector<unsigned int> QStringRef::toUcs4(void) const - ?staticMetaObject@QAnimationDriver@@2UQMetaObject@@B @ 4641 NONAME ; struct QMetaObject const QAnimationDriver::staticMetaObject - ?unregisterRunningAnimation@QUnifiedTimer@@AAEXPAVQAbstractAnimation@@@Z @ 4642 NONAME ; void QUnifiedTimer::unregisterRunningAnimation(class QAbstractAnimation *) - ?isLocalFile@QUrl@@QBE_NXZ @ 4643 NONAME ; bool QUrl::isLocalFile(void) const - ?swap@QByteArray@@QAEXAAV1@@Z @ 4644 NONAME ; void QByteArray::swap(class QByteArray &) - ?tr@QAnimationDriver@@SA?AVQString@@PBD0H@Z @ 4645 NONAME ; class QString QAnimationDriver::tr(char const *, char const *, int) - ?toLatin1@QStringRef@@QBE?AVQByteArray@@XZ @ 4646 NONAME ; class QByteArray QStringRef::toLatin1(void) const - ??1QAnimationDriver@@UAE@XZ @ 4647 NONAME ; QAnimationDriver::~QAnimationDriver(void) - ??_EQReadWriteLock@@QAE@I@Z @ 4648 NONAME ABSENT ; QReadWriteLock::~QReadWriteLock(unsigned int) - ??0QFactoryInterface@@QAE@XZ @ 4649 NONAME ABSENT ; QFactoryInterface::QFactoryInterface(void) - ??4QLine@@QAEAAV0@ABV0@@Z @ 4650 NONAME ABSENT ; class QLine & QLine::operator=(class QLine const &) - ?tr@QAnimationDriver@@SA?AVQString@@PBD0@Z @ 4651 NONAME ; class QString QAnimationDriver::tr(char const *, char const *) - ?waitForDone@QThreadPool@@QAE_NH@Z @ 4652 NONAME ; bool QThreadPool::waitForDone(int) - ??0QMetaProperty@@QAE@ABV0@@Z @ 4653 NONAME ABSENT ; QMetaProperty::QMetaProperty(class QMetaProperty const &) - ??0QSystemError@@QAE@XZ @ 4654 NONAME ; QSystemError::QSystemError(void) - ?endsWith@QStringRef@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4655 NONAME ; bool QStringRef::endsWith(class QLatin1String, enum Qt::CaseSensitivity) const - ??_EQBitArray@@QAE@I@Z @ 4656 NONAME ABSENT ; QBitArray::~QBitArray(unsigned int) - ??0QTime@@QAE@ABV0@@Z @ 4657 NONAME ABSENT ; QTime::QTime(class QTime const &) - ?stop@QAnimationDriver@@AAEXXZ @ 4658 NONAME ; void QAnimationDriver::stop(void) - ??4QPoint@@QAEAAV0@ABV0@@Z @ 4659 NONAME ABSENT ; class QPoint & QPoint::operator=(class QPoint const &) - ??4QSize@@QAEAAV0@ABV0@@Z @ 4660 NONAME ABSENT ; class QSize & QSize::operator=(class QSize const &) - ?getStaticMetaObject@QAnimationDriver@@SAABUQMetaObject@@XZ @ 4661 NONAME ; struct QMetaObject const & QAnimationDriver::getStaticMetaObject(void) - ?metaObject@QAnimationDriver@@UBEPBUQMetaObject@@XZ @ 4662 NONAME ; struct QMetaObject const * QAnimationDriver::metaObject(void) const - ??0QPoint@@QAE@ABV0@@Z @ 4663 NONAME ABSENT ; QPoint::QPoint(class QPoint const &) - ?d_func@QAnimationDriver@@AAEPAVQAnimationDriverPrivate@@XZ @ 4664 NONAME ; class QAnimationDriverPrivate * QAnimationDriver::d_func(void) - ??0QFileInfo@@QAE@PAVQFileInfoPrivate@@@Z @ 4665 NONAME ; QFileInfo::QFileInfo(class QFileInfoPrivate *) - ?app_compile_version@QCoreApplicationPrivate@@2HA @ 4666 NONAME ; int QCoreApplicationPrivate::app_compile_version - ?create@QNonContiguousByteDeviceFactory@@SAPAVQNonContiguousByteDevice@@V?$QSharedPointer@VQRingBuffer@@@@@Z @ 4667 NONAME ; class QNonContiguousByteDevice * QNonContiguousByteDeviceFactory::create(class QSharedPointer<class QRingBuffer>) - ??4QPointF@@QAEAAV0@ABV0@@Z @ 4668 NONAME ABSENT ; class QPointF & QPointF::operator=(class QPointF const &) - ?restartAnimationTimer@QUnifiedTimer@@QAEXXZ @ 4669 NONAME ; void QUnifiedTimer::restartAnimationTimer(void) - ??_EQRegExp@@QAE@I@Z @ 4670 NONAME ABSENT ; QRegExp::~QRegExp(unsigned int) - ?count@QStringRef@@QBEHVQChar@@W4CaseSensitivity@Qt@@@Z @ 4671 NONAME ; int QStringRef::count(class QChar, enum Qt::CaseSensitivity) const - ?open@QFile@@QAE_NPAU__sFILE@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4672 NONAME ; bool QFile::open(struct __sFILE *, class QFlags<enum QIODevice::OpenModeFlag>, class QFlags<enum QFile::FileHandleFlag>) - ?toAscii@QStringRef@@QBE?AVQByteArray@@XZ @ 4673 NONAME ; class QByteArray QStringRef::toAscii(void) const - ?setConsistentTiming@QUnifiedTimer@@QAEX_N@Z @ 4674 NONAME ; void QUnifiedTimer::setConsistentTiming(bool) - ?started@QAnimationDriver@@MAEXXZ @ 4675 NONAME ; void QAnimationDriver::started(void) - ??4QLocalePrivate@@QAEAAU0@ABU0@@Z @ 4676 NONAME ABSENT ; struct QLocalePrivate & QLocalePrivate::operator=(struct QLocalePrivate const &) - ??1QUnifiedTimer@@UAE@XZ @ 4677 NONAME ; QUnifiedTimer::~QUnifiedTimer(void) - ?setSlowModeEnabled@QUnifiedTimer@@QAEX_N@Z @ 4678 NONAME ; void QUnifiedTimer::setSlowModeEnabled(bool) - ?updateAnimationTimer@QUnifiedTimer@@SAXXZ @ 4679 NONAME ; void QUnifiedTimer::updateAnimationTimer(void) - ?error@QSystemError@@QAEHXZ @ 4680 NONAME ; int QSystemError::error(void) - ?indexOf@QString@@QBEHABVQStringRef@@HW4CaseSensitivity@Qt@@@Z @ 4681 NONAME ; int QString::indexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const - ?lastIndexOf@QStringRef@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z @ 4682 NONAME ; int QStringRef::lastIndexOf(class QChar, int, enum Qt::CaseSensitivity) const - ?advance@QAnimationDriver@@QAEXXZ @ 4683 NONAME ; void QAnimationDriver::advance(void) - ?start@QAnimationDriver@@AAEXXZ @ 4684 NONAME ; void QAnimationDriver::start(void) - ?unlockInline@QMutex@@QAEXXZ @ 4685 NONAME ; void QMutex::unlockInline(void) - ??4QSystemError@@QAEAAV0@ABV0@@Z @ 4686 NONAME ABSENT ; class QSystemError & QSystemError::operator=(class QSystemError const &) - ?insert@QProcessEnvironment@@QAEXABV1@@Z @ 4687 NONAME ; void QProcessEnvironment::insert(class QProcessEnvironment const &) - ?keys@QProcessEnvironment@@QBE?AVQStringList@@XZ @ 4688 NONAME ; class QStringList QProcessEnvironment::keys(void) const + ?contains@QString@@QBE?AVQBool@@ABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4488 NONAME ; class QBool QString::contains(class QStringRef const &, enum Qt::CaseSensitivity) const + ?swap@QRegExp@@QAEXAAV1@@Z @ 4489 NONAME ; void QRegExp::swap(class QRegExp &) + ?indexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4490 NONAME ; int QStringRef::indexOf(class QString const &, int, enum Qt::CaseSensitivity) const + ?indexOf@QStringRef@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z @ 4491 NONAME ; int QStringRef::indexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const + ?count@QString@@QBEHABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4492 NONAME ; int QString::count(class QStringRef const &, enum Qt::CaseSensitivity) const + ?swap@QString@@QAEXAAV1@@Z @ 4493 NONAME ; void QString::swap(class QString &) + ?trUtf8@QAnimationDriver@@SA?AVQString@@PBD0H@Z @ 4494 NONAME ; class QString QAnimationDriver::trUtf8(char const *, char const *, int) + ?startsWith@QStringRef@@QBE_NVQChar@@W4CaseSensitivity@Qt@@@Z @ 4495 NONAME ; bool QStringRef::startsWith(class QChar, enum Qt::CaseSensitivity) const + ?setNativeKey@QSharedMemory@@QAEXABVQString@@@Z @ 4496 NONAME ; void QSharedMemory::setNativeKey(class QString const &) + ??0QAnimationDriver@@IAE@AAVQAnimationDriverPrivate@@PAVQObject@@@Z @ 4497 NONAME ; QAnimationDriver::QAnimationDriver(class QAnimationDriverPrivate &, class QObject *) + ?timerEvent@QUnifiedTimer@@MAEXPAVQTimerEvent@@@Z @ 4498 NONAME ; void QUnifiedTimer::timerEvent(class QTimerEvent *) + ?registerAnimation@QUnifiedTimer@@SAXPAVQAbstractAnimation@@_N@Z @ 4499 NONAME ; void QUnifiedTimer::registerAnimation(class QAbstractAnimation *, bool) + ?startsWith@QStringRef@@QBE_NABV1@W4CaseSensitivity@Qt@@@Z @ 4500 NONAME ; bool QStringRef::startsWith(class QStringRef const &, enum Qt::CaseSensitivity) const + ?contains@QStringRef@@QBE?AVQBool@@ABV1@W4CaseSensitivity@Qt@@@Z @ 4501 NONAME ; class QBool QStringRef::contains(class QStringRef const &, enum Qt::CaseSensitivity) const + ?startsWith@QStringRef@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4502 NONAME ; bool QStringRef::startsWith(class QLatin1String, enum Qt::CaseSensitivity) const + ?cast@QMetaObject@@QBEPBVQObject@@PBV2@@Z @ 4503 NONAME ; class QObject const * QMetaObject::cast(class QObject const *) const + ?ensureTimerUpdate@QUnifiedTimer@@SAXXZ @ 4504 NONAME ; void QUnifiedTimer::ensureTimerUpdate(void) + ?contains@QStringRef@@QBE?AVQBool@@VQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4505 NONAME ; class QBool QStringRef::contains(class QLatin1String, enum Qt::CaseSensitivity) const + ?d_func@QAnimationDriver@@ABEPBVQAnimationDriverPrivate@@XZ @ 4506 NONAME ; class QAnimationDriverPrivate const * QAnimationDriver::d_func(void) const + ?swap@QVariant@@QAEXAAV1@@Z @ 4507 NONAME ; void QVariant::swap(class QVariant &) + ?lastIndexOf@QStringRef@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z @ 4508 NONAME ; int QStringRef::lastIndexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const + ?indexOf@QStringRef@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z @ 4509 NONAME ; int QStringRef::indexOf(class QLatin1String, int, enum Qt::CaseSensitivity) const + ?senderSignalIndex@QObject@@IBEHXZ @ 4510 NONAME ; int QObject::senderSignalIndex(void) const + ?toUtf8@QStringRef@@QBE?AVQByteArray@@XZ @ 4511 NONAME ; class QByteArray QStringRef::toUtf8(void) const + ?startsWith@QString@@QBE_NABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4512 NONAME ; bool QString::startsWith(class QStringRef const &, enum Qt::CaseSensitivity) const + ?unlockInternal@QMutex@@AAEXXZ @ 4513 NONAME ; void QMutex::unlockInternal(void) + ?updateAnimationsTime@QUnifiedTimer@@QAEXXZ @ 4514 NONAME ; void QUnifiedTimer::updateAnimationsTime(void) + ?swap@QBitArray@@QAEXAAV1@@Z @ 4515 NONAME ; void QBitArray::swap(class QBitArray &) + ?nativeKey@QSharedMemory@@QBE?AVQString@@XZ @ 4516 NONAME ; class QString QSharedMemory::nativeKey(void) const + ?connect@QObject@@SA_NPBV1@ABVQMetaMethod@@01W4ConnectionType@Qt@@@Z @ 4517 NONAME ; bool QObject::connect(class QObject const *, class QMetaMethod const &, class QObject const *, class QMetaMethod const &, enum Qt::ConnectionType) + ?registerRunningAnimation@QUnifiedTimer@@AAEXPAVQAbstractAnimation@@@Z @ 4518 NONAME ; void QUnifiedTimer::registerRunningAnimation(class QAbstractAnimation *) + ?disconnect@QObject@@SA_NPBV1@ABVQMetaMethod@@01@Z @ 4519 NONAME ; bool QObject::disconnect(class QObject const *, class QMetaMethod const &, class QObject const *, class QMetaMethod const &) + ?installAnimationDriver@QUnifiedTimer@@QAEXPAVQAnimationDriver@@@Z @ 4520 NONAME ; void QUnifiedTimer::installAnimationDriver(class QAnimationDriver *) + ?startsWith@QStringRef@@QBE_NABVQString@@W4CaseSensitivity@Qt@@@Z @ 4521 NONAME ; bool QStringRef::startsWith(class QString const &, enum Qt::CaseSensitivity) const + ?contains@QStringRef@@QBE?AVQBool@@VQChar@@W4CaseSensitivity@Qt@@@Z @ 4522 NONAME ; class QBool QStringRef::contains(class QChar, enum Qt::CaseSensitivity) const + ?unregisterAnimation@QUnifiedTimer@@SAXPAVQAbstractAnimation@@@Z @ 4523 NONAME ; void QUnifiedTimer::unregisterAnimation(class QAbstractAnimation *) + ?qt_metacast@QAnimationDriver@@UAEPAXPBD@Z @ 4524 NONAME ; void * QAnimationDriver::qt_metacast(char const *) + ?count@QStringRef@@QBEHABVQString@@W4CaseSensitivity@Qt@@@Z @ 4525 NONAME ; int QStringRef::count(class QString const &, enum Qt::CaseSensitivity) const + ?endsWith@QStringRef@@QBE_NVQChar@@W4CaseSensitivity@Qt@@@Z @ 4526 NONAME ; bool QStringRef::endsWith(class QChar, enum Qt::CaseSensitivity) const + ??0QUnifiedTimer@@AAE@XZ @ 4527 NONAME ; QUnifiedTimer::QUnifiedTimer(void) + ??0QCoreApplicationPrivate@@QAE@AAHPAPADI@Z @ 4528 NONAME ; QCoreApplicationPrivate::QCoreApplicationPrivate(int &, char * *, unsigned int) + ??0QCoreApplication@@QAE@AAHPAPADH@Z @ 4529 NONAME ; QCoreApplication::QCoreApplication(int &, char * *, int) + ??0QAnimationDriver@@QAE@PAVQObject@@@Z @ 4530 NONAME ; QAnimationDriver::QAnimationDriver(class QObject *) + ?lastIndexOf@QStringRef@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z @ 4531 NONAME ; int QStringRef::lastIndexOf(class QLatin1String, int, enum Qt::CaseSensitivity) const + ??0QAnimationDriverPrivate@@QAE@XZ @ 4532 NONAME ; QAnimationDriverPrivate::QAnimationDriverPrivate(void) + ?endsWith@QString@@QBE_NABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4533 NONAME ; bool QString::endsWith(class QStringRef const &, enum Qt::CaseSensitivity) const + ?trUtf8@QAnimationDriver@@SA?AVQString@@PBD0@Z @ 4534 NONAME ; class QString QAnimationDriver::trUtf8(char const *, char const *) + ?install@QAnimationDriver@@QAEXXZ @ 4535 NONAME ; void QAnimationDriver::install(void) + ?qt_metacall@QAnimationDriver@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4536 NONAME ; int QAnimationDriver::qt_metacall(enum QMetaObject::Call, int, void * *) + ?endsWith@QStringRef@@QBE_NABVQString@@W4CaseSensitivity@Qt@@@Z @ 4537 NONAME ; bool QStringRef::endsWith(class QString const &, enum Qt::CaseSensitivity) const + ?lockInline@QMutex@@QAEXXZ @ 4538 NONAME ; void QMutex::lockInline(void) + ?endsWith@QStringRef@@QBE_NABV1@W4CaseSensitivity@Qt@@@Z @ 4539 NONAME ; bool QStringRef::endsWith(class QStringRef const &, enum Qt::CaseSensitivity) const + ??_EQUnifiedTimer@@UAE@I@Z @ 4540 NONAME ; QUnifiedTimer::~QUnifiedTimer(unsigned int) + ?setTimingInterval@QUnifiedTimer@@QAEXH@Z @ 4541 NONAME ; void QUnifiedTimer::setTimingInterval(int) + ?closestPauseAnimationTimeToFinish@QUnifiedTimer@@AAEHXZ @ 4542 NONAME ; int QUnifiedTimer::closestPauseAnimationTimeToFinish(void) + ??0QXmlStreamAttributes@@QAE@XZ @ 4543 NONAME ; QXmlStreamAttributes::QXmlStreamAttributes(void) + ?lastIndexOf@QString@@QBEHABVQStringRef@@HW4CaseSensitivity@Qt@@@Z @ 4544 NONAME ; int QString::lastIndexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const + ??1QAnimationDriverPrivate@@UAE@XZ @ 4545 NONAME ; QAnimationDriverPrivate::~QAnimationDriverPrivate(void) + ?swap@QUrl@@QAEXAAV1@@Z @ 4546 NONAME ; void QUrl::swap(class QUrl &) + ??_EQAnimationDriverPrivate@@UAE@I@Z @ 4547 NONAME ; QAnimationDriverPrivate::~QAnimationDriverPrivate(unsigned int) + ??_EQAnimationDriver@@UAE@I@Z @ 4548 NONAME ; QAnimationDriver::~QAnimationDriver(unsigned int) + ?instance@QUnifiedTimer@@SAPAV1@_N@Z @ 4549 NONAME ; class QUnifiedTimer * QUnifiedTimer::instance(bool) + ?setSlowdownFactor@QUnifiedTimer@@QAEXM@Z @ 4550 NONAME ; void QUnifiedTimer::setSlowdownFactor(float) + ?isRunning@QAnimationDriver@@QBE_NXZ @ 4551 NONAME ; bool QAnimationDriver::isRunning(void) const + ?count@QStringRef@@QBEHABV1@W4CaseSensitivity@Qt@@@Z @ 4552 NONAME ; int QStringRef::count(class QStringRef const &, enum Qt::CaseSensitivity) const + ?contains@QStringRef@@QBE?AVQBool@@ABVQString@@W4CaseSensitivity@Qt@@@Z @ 4553 NONAME ; class QBool QStringRef::contains(class QString const &, enum Qt::CaseSensitivity) const + ?tryLockInline@QMutex@@QAE_NXZ @ 4554 NONAME ; bool QMutex::tryLockInline(void) + ?lastIndexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4555 NONAME ; int QStringRef::lastIndexOf(class QString const &, int, enum Qt::CaseSensitivity) const + ?lockInternal@QMutex@@AAEXXZ @ 4556 NONAME ; void QMutex::lockInternal(void) + ?toLocal8Bit@QStringRef@@QBE?AVQByteArray@@XZ @ 4557 NONAME ; class QByteArray QStringRef::toLocal8Bit(void) const + ?indexOf@QStringRef@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z @ 4558 NONAME ; int QStringRef::indexOf(class QChar, int, enum Qt::CaseSensitivity) const + ?toUcs4@QStringRef@@QBE?AV?$QVector@I@@XZ @ 4559 NONAME ; class QVector<unsigned int> QStringRef::toUcs4(void) const + ?staticMetaObject@QAnimationDriver@@2UQMetaObject@@B @ 4560 NONAME ; struct QMetaObject const QAnimationDriver::staticMetaObject + ?unregisterRunningAnimation@QUnifiedTimer@@AAEXPAVQAbstractAnimation@@@Z @ 4561 NONAME ; void QUnifiedTimer::unregisterRunningAnimation(class QAbstractAnimation *) + ?isLocalFile@QUrl@@QBE_NXZ @ 4562 NONAME ; bool QUrl::isLocalFile(void) const + ?swap@QByteArray@@QAEXAAV1@@Z @ 4563 NONAME ; void QByteArray::swap(class QByteArray &) + ?tr@QAnimationDriver@@SA?AVQString@@PBD0H@Z @ 4564 NONAME ; class QString QAnimationDriver::tr(char const *, char const *, int) + ?toLatin1@QStringRef@@QBE?AVQByteArray@@XZ @ 4565 NONAME ; class QByteArray QStringRef::toLatin1(void) const + ??1QAnimationDriver@@UAE@XZ @ 4566 NONAME ; QAnimationDriver::~QAnimationDriver(void) + ?tr@QAnimationDriver@@SA?AVQString@@PBD0@Z @ 4567 NONAME ; class QString QAnimationDriver::tr(char const *, char const *) + ?waitForDone@QThreadPool@@QAE_NH@Z @ 4568 NONAME ; bool QThreadPool::waitForDone(int) + ?endsWith@QStringRef@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4569 NONAME ; bool QStringRef::endsWith(class QLatin1String, enum Qt::CaseSensitivity) const + ?stop@QAnimationDriver@@AAEXXZ @ 4570 NONAME ; void QAnimationDriver::stop(void) + ?getStaticMetaObject@QAnimationDriver@@SAABUQMetaObject@@XZ @ 4571 NONAME ; struct QMetaObject const & QAnimationDriver::getStaticMetaObject(void) + ?metaObject@QAnimationDriver@@UBEPBUQMetaObject@@XZ @ 4572 NONAME ; struct QMetaObject const * QAnimationDriver::metaObject(void) const + ?d_func@QAnimationDriver@@AAEPAVQAnimationDriverPrivate@@XZ @ 4573 NONAME ; class QAnimationDriverPrivate * QAnimationDriver::d_func(void) + ?app_compile_version@QCoreApplicationPrivate@@2HA @ 4574 NONAME ; int QCoreApplicationPrivate::app_compile_version + ?restartAnimationTimer@QUnifiedTimer@@QAEXXZ @ 4575 NONAME ; void QUnifiedTimer::restartAnimationTimer(void) + ?count@QStringRef@@QBEHVQChar@@W4CaseSensitivity@Qt@@@Z @ 4576 NONAME ; int QStringRef::count(class QChar, enum Qt::CaseSensitivity) const + ?toAscii@QStringRef@@QBE?AVQByteArray@@XZ @ 4577 NONAME ; class QByteArray QStringRef::toAscii(void) const + ?setConsistentTiming@QUnifiedTimer@@QAEX_N@Z @ 4578 NONAME ; void QUnifiedTimer::setConsistentTiming(bool) + ??1QUnifiedTimer@@UAE@XZ @ 4579 NONAME ; QUnifiedTimer::~QUnifiedTimer(void) + ?setSlowModeEnabled@QUnifiedTimer@@QAEX_N@Z @ 4580 NONAME ; void QUnifiedTimer::setSlowModeEnabled(bool) + ?updateAnimationTimer@QUnifiedTimer@@SAXXZ @ 4581 NONAME ; void QUnifiedTimer::updateAnimationTimer(void) + ?indexOf@QString@@QBEHABVQStringRef@@HW4CaseSensitivity@Qt@@@Z @ 4582 NONAME ; int QString::indexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const + ?lastIndexOf@QStringRef@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z @ 4583 NONAME ; int QStringRef::lastIndexOf(class QChar, int, enum Qt::CaseSensitivity) const + ?advance@QAnimationDriver@@QAEXXZ @ 4584 NONAME ; void QAnimationDriver::advance(void) + ?start@QAnimationDriver@@AAEXXZ @ 4585 NONAME ; void QAnimationDriver::start(void) + ?unlockInline@QMutex@@QAEXXZ @ 4586 NONAME ; void QMutex::unlockInline(void) + ??0QSystemError@@QAE@HW4ErrorScope@0@@Z @ 4587 NONAME ; QSystemError::QSystemError(int, enum QSystemError::ErrorScope) + ??0QSystemError@@QAE@XZ @ 4588 NONAME ; QSystemError::QSystemError(void) + ?error@QSystemError@@QAEHXZ @ 4589 NONAME ; int QSystemError::error(void) + ?scope@QSystemError@@QAE?AW4ErrorScope@1@XZ @ 4590 NONAME ; enum QSystemError::ErrorScope QSystemError::scope(void) + ?toString@QSystemError@@QAE?AVQString@@XZ @ 4591 NONAME ; class QString QSystemError::toString(void) + ??0QFileInfo@@QAE@PAVQFileInfoPrivate@@@Z @ 4592 NONAME ; QFileInfo::QFileInfo(class QFileInfoPrivate *) + ?currentUnicodeVersion@QChar@@SA?AW4UnicodeVersion@1@XZ @ 4593 NONAME ; enum QChar::UnicodeVersion QChar::currentUnicodeVersion(void) + ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@ABVRFile@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4594 NONAME ; bool QFSFileEngine::open(class QFlags<enum QIODevice::OpenModeFlag>, class RFile const &, class QFlags<enum QFile::FileHandleFlag>) + ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@HV?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4595 NONAME ; bool QFSFileEngine::open(class QFlags<enum QIODevice::OpenModeFlag>, int, class QFlags<enum QFile::FileHandleFlag>) + ?open@QFSFileEngine@@QAE_NV?$QFlags@W4OpenModeFlag@QIODevice@@@@PAU__sFILE@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4596 NONAME ; bool QFSFileEngine::open(class QFlags<enum QIODevice::OpenModeFlag>, struct __sFILE *, class QFlags<enum QFile::FileHandleFlag>) + ?open@QFile@@QAE_NABVRFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4597 NONAME ; bool QFile::open(class RFile const &, class QFlags<enum QIODevice::OpenModeFlag>, class QFlags<enum QFile::FileHandleFlag>) + ?open@QFile@@QAE_NHV?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4598 NONAME ; bool QFile::open(int, class QFlags<enum QIODevice::OpenModeFlag>, class QFlags<enum QFile::FileHandleFlag>) + ?open@QFile@@QAE_NPAU__sFILE@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@V?$QFlags@W4FileHandleFlag@QFile@@@@@Z @ 4599 NONAME ; bool QFile::open(struct __sFILE *, class QFlags<enum QIODevice::OpenModeFlag>, class QFlags<enum QFile::FileHandleFlag>) + ?symbianCommandLine@QCoreApplicationPrivate@@SAPAVCApaCommandLine@@XZ @ 4600 NONAME ; class CApaCommandLine * QCoreApplicationPrivate::symbianCommandLine(void) + ?nsecsElapsed@QElapsedTimer@@QBE_JXZ @ 4601 NONAME ; long long QElapsedTimer::nsecsElapsed(void) const + ??XQPoint@@QAEAAV0@N@Z @ 4602 NONAME ; class QPoint & QPoint::operator*=(double) + ??XQPoint@@QAEAAV0@H@Z @ 4603 NONAME ; class QPoint & QPoint::operator*=(int) + ?hasError@QXmlStreamWriter@@QBE_NXZ @ 4604 NONAME ; bool QXmlStreamWriter::hasError(void) const + ?revision@QMetaProperty@@QBEHXZ @ 4605 NONAME ; int QMetaProperty::revision(void) const + ?revision@QMetaMethod@@QBEHXZ @ 4606 NONAME ; int QMetaMethod::revision(void) const + gzungetc @ 4607 NONAME + ?addSocket@QSymbianSocketManager@@QAEHABVRSocket@@@Z @ 4608 NONAME ; int QSymbianSocketManager::addSocket(class RSocket const &) + ??0QActiveObject@@QAE@HPAVQEventDispatcherSymbian@@@Z @ 4609 NONAME ; QActiveObject::QActiveObject(int, class QEventDispatcherSymbian *) + ?setDefaultConnection@QSymbianSocketManager@@QAEXPAVRConnection@@@Z @ 4610 NONAME ; void QSymbianSocketManager::setDefaultConnection(class RConnection *) + ?reactivateAndComplete@QActiveObject@@QAEXXZ @ 4611 NONAME ; void QActiveObject::reactivateAndComplete(void) + ?defaultConnection@QSymbianSocketManager@@QBEPAVRConnection@@XZ @ 4612 NONAME ; class RConnection * QSymbianSocketManager::defaultConnection(void) const + ?qt_symbianGetSocketServer@@YAAAVRSocketServ@@XZ @ 4613 NONAME ; class RSocketServ & qt_symbianGetSocketServer(void) + ?maybeQueueForLater@QActiveObject@@QAE_NXZ @ 4614 NONAME ; bool QActiveObject::maybeQueueForLater(void) + ??_EQActiveObject@@UAE@I@Z @ 4615 NONAME ; QActiveObject::~QActiveObject(unsigned int) + ?lookupSocket@QSymbianSocketManager@@QBE_NHAAVRSocket@@@Z @ 4616 NONAME ; bool QSymbianSocketManager::lookupSocket(int, class RSocket &) const + ?wait@QActiveObject@@SA_NPAVCActive@@H@Z @ 4617 NONAME ; bool QActiveObject::wait(class CActive *, int) + ?instance@QSymbianSocketManager@@SAAAV1@XZ @ 4618 NONAME ; class QSymbianSocketManager & QSymbianSocketManager::instance(void) + ??0QSymbianSocketManager@@QAE@XZ @ 4619 NONAME ; QSymbianSocketManager::QSymbianSocketManager(void) + ?create@QNonContiguousByteDeviceFactory@@SAPAVQNonContiguousByteDevice@@V?$QSharedPointer@VQRingBuffer@@@@@Z @ 4620 NONAME ; class QNonContiguousByteDevice * QNonContiguousByteDeviceFactory::create(class QSharedPointer<class QRingBuffer>) + ??1QSymbianSocketManager@@QAE@XZ @ 4621 NONAME ; QSymbianSocketManager::~QSymbianSocketManager(void) + ?isResetDisabled@QNonContiguousByteDevice@@QAE_NXZ @ 4622 NONAME ; bool QNonContiguousByteDevice::isResetDisabled(void) + ??1QActiveObject@@UAE@XZ @ 4623 NONAME ; QActiveObject::~QActiveObject(void) + ?wait@QActiveObject@@SA_NV?$QList@PAVCActive@@@@H@Z @ 4624 NONAME ; bool QActiveObject::wait(class QList<class CActive *>, int) + ?maybeDeferSocketEvent@QActiveObject@@QAE_NXZ @ 4625 NONAME ; bool QActiveObject::maybeDeferSocketEvent(void) + ?lookupSocket@QSymbianSocketManager@@QBEHABVRSocket@@@Z @ 4626 NONAME ; int QSymbianSocketManager::lookupSocket(class RSocket const &) const + ?areSocketEventsBlocked@QEventDispatcherSymbian@@QBE_NXZ @ 4627 NONAME ; bool QEventDispatcherSymbian::areSocketEventsBlocked(void) const + ?addDeferredSocketActiveObject@QEventDispatcherSymbian@@QAEXPAVQActiveObject@@@Z @ 4628 NONAME ; void QEventDispatcherSymbian::addDeferredSocketActiveObject(class QActiveObject *) + ?getSocketServer@QSymbianSocketManager@@QAEAAVRSocketServ@@XZ @ 4629 NONAME ; class RSocketServ & QSymbianSocketManager::getSocketServer(void) + ?removeSocket@QSymbianSocketManager@@QAE_NABVRSocket@@@Z @ 4630 NONAME ; bool QSymbianSocketManager::removeSocket(class RSocket const &) + ?started@QAnimationDriver@@MAEXXZ @ 4631 NONAME ; void QAnimationDriver::started(void) + ?stopped@QAnimationDriver@@MAEXXZ @ 4632 NONAME ; void QAnimationDriver::stopped(void) + ?toCurrencyString@QLocale@@QBE?AVQString@@NABV2@@Z @ 4633 NONAME ; class QString QLocale::toCurrencyString(double, class QString const &) const + ?quoteString@QLocale@@QBE?AVQString@@ABVQStringRef@@W4QuotationStyle@1@@Z @ 4634 NONAME ; class QString QLocale::quoteString(class QStringRef const &, enum QLocale::QuotationStyle) const + ?toCurrencyString@QLocale@@QBE?AVQString@@FABV2@@Z @ 4635 NONAME ; class QString QLocale::toCurrencyString(short, class QString const &) const + ?countryCode@QLocalePrivate@@QBE?AVQString@@XZ @ 4636 NONAME ; class QString QLocalePrivate::countryCode(void) const + ?toCurrencyString@QLocale@@QBE?AVQString@@IABV2@@Z @ 4637 NONAME ; class QString QLocale::toCurrencyString(unsigned int, class QString const &) const + ?longLongToString@QLocalePrivate@@SA?AVQString@@VQChar@@000_JHHHI@Z @ 4638 NONAME ; class QString QLocalePrivate::longLongToString(class QChar, class QChar, class QChar, class QChar, long long, int, int, int, unsigned int) + ?codeToScript@QLocalePrivate@@SA?AW4Script@QLocale@@ABVQString@@@Z @ 4639 NONAME ; enum QLocale::Script QLocalePrivate::codeToScript(class QString const &) + ?bcp47Name@QLocale@@QBE?AVQString@@XZ @ 4640 NONAME ; class QString QLocale::bcp47Name(void) const + ?quoteString@QLocale@@QBE?AVQString@@ABV2@W4QuotationStyle@1@@Z @ 4641 NONAME ; class QString QLocale::quoteString(class QString const &, enum QLocale::QuotationStyle) const + ?unsLongLongToString@QLocalePrivate@@SA?AVQString@@VQChar@@00_KHHHI@Z @ 4642 NONAME ; class QString QLocalePrivate::unsLongLongToString(class QChar, class QChar, class QChar, unsigned long long, int, int, int, unsigned int) + ?toCurrencyString@QLocale@@QBE?AVQString@@_KABV2@@Z @ 4643 NONAME ; class QString QLocale::toCurrencyString(unsigned long long, class QString const &) const + ?firstDayOfWeek@QLocale@@QBE?AW4DayOfWeek@Qt@@XZ @ 4644 NONAME ; enum Qt::DayOfWeek QLocale::firstDayOfWeek(void) const + ?createSeparatedList@QLocale@@QBE?AVQString@@ABVQStringList@@@Z @ 4645 NONAME ; class QString QLocale::createSeparatedList(class QStringList const &) const + ?codeToCountry@QLocalePrivate@@SA?AW4Country@QLocale@@ABVQString@@@Z @ 4646 NONAME ; enum QLocale::Country QLocalePrivate::codeToCountry(class QString const &) + ?scriptCode@QLocalePrivate@@QBE?AVQString@@XZ @ 4647 NONAME ; class QString QLocalePrivate::scriptCode(void) const + ?scriptToString@QLocale@@SA?AVQString@@W4Script@1@@Z @ 4648 NONAME ; class QString QLocale::scriptToString(enum QLocale::Script) + ?script@QLocale@@QBE?AW4Script@1@XZ @ 4649 NONAME ; enum QLocale::Script QLocale::script(void) const + ?codeToLanguage@QLocalePrivate@@SA?AW4Language@QLocale@@ABVQString@@@Z @ 4650 NONAME ; enum QLocale::Language QLocalePrivate::codeToLanguage(class QString const &) + ?weekdays@QLocale@@QBE?AV?$QList@W4DayOfWeek@Qt@@@@XZ @ 4651 NONAME ; class QList<enum Qt::DayOfWeek> QLocale::weekdays(void) const + ?getLangAndCountry@QLocalePrivate@@SAXABVQString@@AAW4Language@QLocale@@AAW4Script@4@AAW4Country@4@@Z @ 4652 NONAME ; void QLocalePrivate::getLangAndCountry(class QString const &, enum QLocale::Language &, enum QLocale::Script &, enum QLocale::Country &) + ?bcp47Name@QLocalePrivate@@QBE?AVQString@@XZ @ 4653 NONAME ; class QString QLocalePrivate::bcp47Name(void) const + ?toCurrencyString@QLocale@@QBE?AVQString@@HABV2@@Z @ 4654 NONAME ; class QString QLocale::toCurrencyString(int, class QString const &) const + ?matchingLocales@QLocale@@SA?AVQStringList@@W4Language@1@W4Script@1@W4Country@1@@Z @ 4655 NONAME ABSENT ; class QStringList QLocale::matchingLocales(enum QLocale::Language, enum QLocale::Script, enum QLocale::Country) + ?languageCode@QLocalePrivate@@QBE?AVQString@@XZ @ 4656 NONAME ; class QString QLocalePrivate::languageCode(void) const + ?toCurrencyString@QLocale@@QBE?AVQString@@GABV2@@Z @ 4657 NONAME ; class QString QLocale::toCurrencyString(unsigned short, class QString const &) const + ?doubleToString@QLocalePrivate@@SA?AVQString@@VQChar@@00000NHW4DoubleForm@1@HI@Z @ 4658 NONAME ; class QString QLocalePrivate::doubleToString(class QChar, class QChar, class QChar, class QChar, class QChar, class QChar, double, int, enum QLocalePrivate::DoubleForm, int, unsigned int) + ?currencySymbol@QLocale@@QBE?AVQString@@W4CurrencySymbolFormat@1@@Z @ 4659 NONAME ; class QString QLocale::currencySymbol(enum QLocale::CurrencySymbolFormat) const + ?uiLanguages@QLocale@@QBE?AVQStringList@@XZ @ 4660 NONAME ; class QStringList QLocale::uiLanguages(void) const + ?findLocale@QLocalePrivate@@SAPBU1@W4Language@QLocale@@W4Script@3@W4Country@3@@Z @ 4661 NONAME ; struct QLocalePrivate const * QLocalePrivate::findLocale(enum QLocale::Language, enum QLocale::Script, enum QLocale::Country) + ?load@QTranslator@@QAE_NABVQLocale@@ABVQString@@111@Z @ 4662 NONAME ; bool QTranslator::load(class QLocale const &, class QString const &, class QString const &, class QString const &, class QString const &) + ??0QLocale@@QAE@W4Language@0@W4Script@0@W4Country@0@@Z @ 4663 NONAME ; QLocale::QLocale(enum QLocale::Language, enum QLocale::Script, enum QLocale::Country) + ?languageId@QLocalePrivate@@QBEGXZ @ 4664 NONAME ; unsigned short QLocalePrivate::languageId(void) const + ?countryId@QLocalePrivate@@QBEGXZ @ 4665 NONAME ; unsigned short QLocalePrivate::countryId(void) const + ?toCurrencyString@QLocale@@QBE?AVQString@@_JABV2@@Z @ 4666 NONAME ; class QString QLocale::toCurrencyString(long long, class QString const &) const + ?toCurrencyString@QLocale@@QBE?AVQString@@MABV2@@Z @ 4667 NONAME ; class QString QLocale::toCurrencyString(float, class QString const &) const + adler32_combine @ 4668 NONAME + adler32_combine64 @ 4669 NONAME + compressBound @ 4670 NONAME + crc32_combine @ 4671 NONAME + crc32_combine64 @ 4672 NONAME + deflateBound @ 4673 NONAME + deflatePrime @ 4674 NONAME + deflateSetHeader @ 4675 NONAME + deflateTune @ 4676 NONAME + gzbuffer @ 4677 NONAME + gzclearerr @ 4678 NONAME + gzclose_r @ 4679 NONAME + gzclose_w @ 4680 NONAME + gzdirect @ 4681 NONAME + gzoffset @ 4682 NONAME + gzoffset64 @ 4683 NONAME + gzopen64 @ 4684 NONAME + gzseek64 @ 4685 NONAME + gztell64 @ 4686 NONAME + inflateBack @ 4687 NONAME + inflateBackEnd @ 4688 NONAME + inflateBackInit_ @ 4689 NONAME + inflateCopy @ 4690 NONAME + inflateGetHeader @ 4691 NONAME + inflateMark @ 4692 NONAME + inflatePrime @ 4693 NONAME + inflateReset2 @ 4694 NONAME + inflateUndermine @ 4695 NONAME + zlibCompileFlags @ 4696 NONAME + ??_EQDateTime@@QAE@I@Z @ 4697 NONAME ABSENT ; QDateTime::~QDateTime(unsigned int) + ??4QDate@@QAEAAV0@ABV0@@Z @ 4698 NONAME ABSENT ; class QDate & QDate::operator=(class QDate const &) + ??4QSizeF@@QAEAAV0@ABV0@@Z @ 4699 NONAME ABSENT ; class QSizeF & QSizeF::operator=(class QSizeF const &) + ??0QSize@@QAE@ABV0@@Z @ 4700 NONAME ABSENT ; QSize::QSize(class QSize const &) + ??0QEvent@@QAE@ABV0@@Z @ 4701 NONAME ABSENT ; QEvent::QEvent(class QEvent const &) + ??0QTextCodecFactoryInterface@@QAE@XZ @ 4702 NONAME ABSENT ; QTextCodecFactoryInterface::QTextCodecFactoryInterface(void) + ??0QPointF@@QAE@ABV0@@Z @ 4703 NONAME ABSENT ; QPointF::QPointF(class QPointF const &) + ??_EQUrl@@QAE@I@Z @ 4704 NONAME ABSENT ; QUrl::~QUrl(unsigned int) + ??0QGenericArgument@@QAE@ABV0@@Z @ 4705 NONAME ABSENT ; QGenericArgument::QGenericArgument(class QGenericArgument const &) + ??_EQVariant@@QAE@I@Z @ 4706 NONAME ABSENT ; QVariant::~QVariant(unsigned int) + ??4QLineF@@QAEAAV0@ABV0@@Z @ 4707 NONAME ABSENT ; class QLineF & QLineF::operator=(class QLineF const &) + ??0QXmlStreamAttributes@@QAE@ABV0@@Z @ 4708 NONAME ABSENT ; QXmlStreamAttributes::QXmlStreamAttributes(class QXmlStreamAttributes const &) + ??0QMetaEnum@@QAE@ABV0@@Z @ 4709 NONAME ABSENT ; QMetaEnum::QMetaEnum(class QMetaEnum const &) + ??4QUuid@@QAEAAU0@ABU0@@Z @ 4710 NONAME ABSENT ; struct QUuid & QUuid::operator=(struct QUuid const &) + ??0CQtActiveScheduler@@QAE@XZ @ 4711 NONAME ABSENT ; CQtActiveScheduler::CQtActiveScheduler(void) + ??0QSizeF@@QAE@ABV0@@Z @ 4712 NONAME ABSENT ; QSizeF::QSizeF(class QSizeF const &) + ??4QMetaEnum@@QAEAAV0@ABV0@@Z @ 4713 NONAME ABSENT ; class QMetaEnum & QMetaEnum::operator=(class QMetaEnum const &) + ??4QRect@@QAEAAV0@ABV0@@Z @ 4714 NONAME ABSENT ; class QRect & QRect::operator=(class QRect const &) + ??_EQMutexPool@@QAE@I@Z @ 4715 NONAME ABSENT ; QMutexPool::~QMutexPool(unsigned int) + ??0QMetaClassInfo@@QAE@ABV0@@Z @ 4716 NONAME ABSENT ; QMetaClassInfo::QMetaClassInfo(class QMetaClassInfo const &) + ??0QDate@@QAE@ABV0@@Z @ 4717 NONAME ABSENT ; QDate::QDate(class QDate const &) + ??_EQTextDecoder@@QAE@I@Z @ 4718 NONAME ABSENT ; QTextDecoder::~QTextDecoder(unsigned int) + ??_EQMutex@@QAE@I@Z @ 4719 NONAME ABSENT ; QMutex::~QMutex(unsigned int) + ??0QTimerEvent@@QAE@ABV0@@Z @ 4720 NONAME ABSENT ; QTimerEvent::QTimerEvent(class QTimerEvent const &) + ??_EConverterState@QTextCodec@@QAE@I@Z @ 4721 NONAME ABSENT ; QTextCodec::ConverterState::~ConverterState(unsigned int) + ??4QTime@@QAEAAV0@ABV0@@Z @ 4722 NONAME ABSENT ; class QTime & QTime::operator=(class QTime const &) + ??0QMetaMethod@@QAE@ABV0@@Z @ 4723 NONAME ABSENT ; QMetaMethod::QMetaMethod(class QMetaMethod const &) + ??_EQTextEncoder@@QAE@I@Z @ 4724 NONAME ABSENT ; QTextEncoder::~QTextEncoder(unsigned int) + ??_EQFileInfo@@QAE@I@Z @ 4725 NONAME ABSENT ; QFileInfo::~QFileInfo(unsigned int) + ??4QRectF@@QAEAAV0@ABV0@@Z @ 4726 NONAME ABSENT ; class QRectF & QRectF::operator=(class QRectF const &) + ??4QXmlStreamStringRef@@QAEAAV0@ABV0@@Z @ 4727 NONAME ABSENT ; class QXmlStreamStringRef & QXmlStreamStringRef::operator=(class QXmlStreamStringRef const &) + ??4QBasicAtomicInt@@QAEAAV0@ABV0@@Z @ 4728 NONAME ABSENT ; class QBasicAtomicInt & QBasicAtomicInt::operator=(class QBasicAtomicInt const &) + ??_EQEasingCurve@@QAE@I@Z @ 4729 NONAME ABSENT ; QEasingCurve::~QEasingCurve(unsigned int) + ??_EQReadWriteLock@@QAE@I@Z @ 4730 NONAME ABSENT ; QReadWriteLock::~QReadWriteLock(unsigned int) + ??0QFactoryInterface@@QAE@XZ @ 4731 NONAME ABSENT ; QFactoryInterface::QFactoryInterface(void) + ??4QLine@@QAEAAV0@ABV0@@Z @ 4732 NONAME ABSENT ; class QLine & QLine::operator=(class QLine const &) + ??0QMetaProperty@@QAE@ABV0@@Z @ 4733 NONAME ABSENT ; QMetaProperty::QMetaProperty(class QMetaProperty const &) + ??_EQBitArray@@QAE@I@Z @ 4734 NONAME ABSENT ; QBitArray::~QBitArray(unsigned int) + ??0QTime@@QAE@ABV0@@Z @ 4735 NONAME ABSENT ; QTime::QTime(class QTime const &) + ??4QPoint@@QAEAAV0@ABV0@@Z @ 4736 NONAME ABSENT ; class QPoint & QPoint::operator=(class QPoint const &) + ??4QSize@@QAEAAV0@ABV0@@Z @ 4737 NONAME ABSENT ; class QSize & QSize::operator=(class QSize const &) + ??0QPoint@@QAE@ABV0@@Z @ 4738 NONAME ABSENT ; QPoint::QPoint(class QPoint const &) + ??4QPointF@@QAEAAV0@ABV0@@Z @ 4739 NONAME ABSENT ; class QPointF & QPointF::operator=(class QPointF const &) + ??_EQRegExp@@QAE@I@Z @ 4740 NONAME ABSENT ; QRegExp::~QRegExp(unsigned int) + ??4QLocalePrivate@@QAEAAU0@ABU0@@Z @ 4741 NONAME ABSENT ; struct QLocalePrivate & QLocalePrivate::operator=(struct QLocalePrivate const &) + ??4QSystemError@@QAEAAV0@ABV0@@Z @ 4742 NONAME ABSENT ; class QSystemError & QSystemError::operator=(class QSystemError const &) + ?staticMetaObjectExtraData@QPropertyAnimation@@0UQMetaObjectExtraData@@B @ 4743 NONAME ; struct QMetaObjectExtraData const QPropertyAnimation::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractTableModel@@0UQMetaObjectExtraData@@B @ 4744 NONAME ; struct QMetaObjectExtraData const QAbstractTableModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSequentialAnimationGroup@@0UQMetaObjectExtraData@@B @ 4745 NONAME ; struct QMetaObjectExtraData const QSequentialAnimationGroup::staticMetaObjectExtraData + ?createMutex@QMutexPool@@AAEPAVQMutex@@H@Z @ 4746 NONAME ; class QMutex * QMutexPool::createMutex(int) + ?qt_static_metacall@QAbstractAnimation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4747 NONAME ; void QAbstractAnimation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?placeMetaCall@QMetaCallEvent@@UAEXPAVQObject@@@Z @ 4748 NONAME ; void QMetaCallEvent::placeMetaCall(class QObject *) + ?staticMetaObjectExtraData@QAbstractEventDispatcher@@0UQMetaObjectExtraData@@B @ 4749 NONAME ; struct QMetaObjectExtraData const QAbstractEventDispatcher::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractListModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4750 NONAME ; void QAbstractListModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractEventDispatcher@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4751 NONAME ; void QAbstractEventDispatcher::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractState@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4752 NONAME ; void QAbstractState::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QThreadPool@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4753 NONAME ; void QThreadPool::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFile@@0UQMetaObjectExtraData@@B @ 4754 NONAME ; struct QMetaObjectExtraData const QFile::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QBuffer@@0UQMetaObjectExtraData@@B @ 4755 NONAME ; struct QMetaObjectExtraData const QBuffer::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSocketNotifier@@0UQMetaObjectExtraData@@B @ 4756 NONAME ; struct QMetaObjectExtraData const QSocketNotifier::staticMetaObjectExtraData + ?qt_static_metacall@QIODevice@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4757 NONAME ; void QIODevice::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QEventLoop@@0UQMetaObjectExtraData@@B @ 4758 NONAME ; struct QMetaObjectExtraData const QEventLoop::staticMetaObjectExtraData + ?qt_static_metacall@QTranslator@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4759 NONAME ; void QTranslator::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSocketNotifier@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4760 NONAME ; void QSocketNotifier::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QState@@0UQMetaObjectExtraData@@B @ 4761 NONAME ; struct QMetaObjectExtraData const QState::staticMetaObjectExtraData + ?qt_static_metacall@QNonContiguousByteDevice@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4762 NONAME ; void QNonContiguousByteDevice::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QHistoryState@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4763 NONAME ; void QHistoryState::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAnimationDriver@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4764 NONAME ; void QAnimationDriver::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFileSystemWatcher@@0UQMetaObjectExtraData@@B @ 4765 NONAME ; struct QMetaObjectExtraData const QFileSystemWatcher::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTimeLine@@0UQMetaObjectExtraData@@B @ 4766 NONAME ; struct QMetaObjectExtraData const QTimeLine::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QThreadPool@@0UQMetaObjectExtraData@@B @ 4767 NONAME ; struct QMetaObjectExtraData const QThreadPool::staticMetaObjectExtraData + ?qt_static_metacall@QTimer@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4768 NONAME ; void QTimer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QState@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4769 NONAME ; void QState::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractTransition@@0UQMetaObjectExtraData@@B @ 4770 NONAME ; struct QMetaObjectExtraData const QAbstractTransition::staticMetaObjectExtraData + ?qt_static_metacall@QThread@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4771 NONAME ; void QThread::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QIODevice@@0UQMetaObjectExtraData@@B @ 4772 NONAME ; struct QMetaObjectExtraData const QIODevice::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSettings@@0UQMetaObjectExtraData@@B @ 4773 NONAME ; struct QMetaObjectExtraData const QSettings::staticMetaObjectExtraData + ?qt_static_metacall@QAnimationGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4774 NONAME ; void QAnimationGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTemporaryFile@@0UQMetaObjectExtraData@@B @ 4775 NONAME ; struct QMetaObjectExtraData const QTemporaryFile::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QObjectCleanupHandler@@0UQMetaObjectExtraData@@B @ 4776 NONAME ; struct QMetaObjectExtraData const QObjectCleanupHandler::staticMetaObjectExtraData + ?qt_static_metacall@QFactoryLoader@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4777 NONAME ; void QFactoryLoader::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTextCodecPlugin@@0UQMetaObjectExtraData@@B @ 4778 NONAME ; struct QMetaObjectExtraData const QTextCodecPlugin::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractState@@0UQMetaObjectExtraData@@B @ 4779 NONAME ; struct QMetaObjectExtraData const QAbstractState::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QNonContiguousByteDevice@@0UQMetaObjectExtraData@@B @ 4780 NONAME ; struct QMetaObjectExtraData const QNonContiguousByteDevice::staticMetaObjectExtraData + ?qt_static_metacall@QFileSystemWatcher@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4781 NONAME ; void QFileSystemWatcher::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?insert@QProcessEnvironment@@QAEXABV1@@Z @ 4782 NONAME ; void QProcessEnvironment::insert(class QProcessEnvironment const &) + ?qt_static_metacall@QSignalTransition@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4783 NONAME ; void QSignalTransition::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTimer@@0UQMetaObjectExtraData@@B @ 4784 NONAME ; struct QMetaObjectExtraData const QTimer::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTranslator@@0UQMetaObjectExtraData@@B @ 4785 NONAME ; struct QMetaObjectExtraData const QTranslator::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractItemModel@@0UQMetaObjectExtraData@@B @ 4786 NONAME ; struct QMetaObjectExtraData const QAbstractItemModel::staticMetaObjectExtraData + ?convertToAscii@QAbstractConcatenable@@KAXVQChar@@AAPAD@Z @ 4787 NONAME ; void QAbstractConcatenable::convertToAscii(class QChar, char * &) + ?staticMetaObjectExtraData@QAbstractAnimation@@0UQMetaObjectExtraData@@B @ 4788 NONAME ; struct QMetaObjectExtraData const QAbstractAnimation::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractItemModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4789 NONAME ; void QAbstractItemModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QStateMachine@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4790 NONAME ; void QStateMachine::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?nativeCountryName@QLocale@@QBE?AVQString@@XZ @ 4791 NONAME ; class QString QLocale::nativeCountryName(void) const + ?staticMetaObjectExtraData@QLibrary@@0UQMetaObjectExtraData@@B @ 4792 NONAME ; struct QMetaObjectExtraData const QLibrary::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPluginLoader@@0UQMetaObjectExtraData@@B @ 4793 NONAME ; struct QMetaObjectExtraData const QPluginLoader::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSharedMemory@@0UQMetaObjectExtraData@@B @ 4794 NONAME ; struct QMetaObjectExtraData const QSharedMemory::staticMetaObjectExtraData + ??0QMetaCallEvent@@QAE@GGP6AXPAVQObject@@W4Call@QMetaObject@@HPAPAX@ZPBV1@HHPAH2PAVQSemaphore@@@Z @ 4795 NONAME ; QMetaCallEvent::QMetaCallEvent(unsigned short, unsigned short, void (*)(class QObject *, enum QMetaObject::Call, int, void * *), class QObject const *, int, int, int *, void * *, class QSemaphore *) + ?qt_static_metacall@QFinalState@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4796 NONAME ; void QFinalState::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?matchingLocales@QLocale@@SA?AV?$QList@VQLocale@@@@W4Language@1@W4Script@1@W4Country@1@@Z @ 4797 NONAME ; class QList<class QLocale> QLocale::matchingLocales(enum QLocale::Language, enum QLocale::Script, enum QLocale::Country) + ?staticMetaObjectExtraData@QAbstractListModel@@0UQMetaObjectExtraData@@B @ 4798 NONAME ; struct QMetaObjectExtraData const QAbstractListModel::staticMetaObjectExtraData + ?qt_static_metacall@QMimeData@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4799 NONAME ; void QMimeData::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTextCodecPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4800 NONAME ; void QTextCodecPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?convertToAscii@QAbstractConcatenable@@KAXPBVQChar@@HAAPAD@Z @ 4801 NONAME ; void QAbstractConcatenable::convertToAscii(class QChar const *, int, char * &) + ?qt_static_metacall@QBuffer@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4802 NONAME ; void QBuffer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTemporaryFile@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4803 NONAME ; void QTemporaryFile::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QCoreApplication@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4804 NONAME ; void QCoreApplication::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAnimationDriver@@0UQMetaObjectExtraData@@B @ 4805 NONAME ; struct QMetaObjectExtraData const QAnimationDriver::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QObject@@0UQMetaObjectExtraData@@B @ 4806 NONAME ; struct QMetaObjectExtraData const QObject::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QThread@@0UQMetaObjectExtraData@@B @ 4807 NONAME ; struct QMetaObjectExtraData const QThread::staticMetaObjectExtraData + ?nativeLanguageName@QLocale@@QBE?AVQString@@XZ @ 4808 NONAME ; class QString QLocale::nativeLanguageName(void) const + ?staticMetaObjectExtraData@QFinalState@@0UQMetaObjectExtraData@@B @ 4809 NONAME ; struct QMetaObjectExtraData const QFinalState::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QMimeData@@0UQMetaObjectExtraData@@B @ 4810 NONAME ; struct QMetaObjectExtraData const QMimeData::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAnimationGroup@@0UQMetaObjectExtraData@@B @ 4811 NONAME ; struct QMetaObjectExtraData const QAnimationGroup::staticMetaObjectExtraData + ?qt_static_metacall@QFile@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4812 NONAME ; void QFile::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QLibrary@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4813 NONAME ; void QLibrary::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QVariantAnimation@@0UQMetaObjectExtraData@@B @ 4814 NONAME ; struct QMetaObjectExtraData const QVariantAnimation::staticMetaObjectExtraData + ?qt_static_metacall@QPluginLoader@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4815 NONAME ; void QPluginLoader::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFactoryLoader@@0UQMetaObjectExtraData@@B @ 4816 NONAME ; struct QMetaObjectExtraData const QFactoryLoader::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPauseAnimation@@0UQMetaObjectExtraData@@B @ 4817 NONAME ; struct QMetaObjectExtraData const QPauseAnimation::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QEventDispatcherSymbian@@0UQMetaObjectExtraData@@B @ 4818 NONAME ; struct QMetaObjectExtraData const QEventDispatcherSymbian::staticMetaObjectExtraData + ?qt_static_metacall@QObjectCleanupHandler@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4819 NONAME ; void QObjectCleanupHandler::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSignalMapper@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4820 NONAME ; void QSignalMapper::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QEventTransition@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4821 NONAME ; void QEventTransition::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?convertToLatin1@QAbstractConcatenable@@KAXVQChar@@AAPAD@Z @ 4822 NONAME ; void QAbstractConcatenable::convertToLatin1(class QChar, char * &) + ?qt_static_metacall@QObject@@CAXPAV1@W4Call@QMetaObject@@HPAPAX@Z @ 4823 NONAME ; void QObject::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QVariantAnimation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4824 NONAME ; void QVariantAnimation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QPauseAnimation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4825 NONAME ; void QPauseAnimation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSettings@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4826 NONAME ; void QSettings::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QHistoryState@@0UQMetaObjectExtraData@@B @ 4827 NONAME ; struct QMetaObjectExtraData const QHistoryState::staticMetaObjectExtraData + ?qt_static_metacall@QSharedMemory@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4828 NONAME ; void QSharedMemory::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractTransition@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4829 NONAME ; void QAbstractTransition::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QProcess@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4830 NONAME ; void QProcess::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSequentialAnimationGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4831 NONAME ; void QSequentialAnimationGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSignalMapper@@0UQMetaObjectExtraData@@B @ 4832 NONAME ; struct QMetaObjectExtraData const QSignalMapper::staticMetaObjectExtraData + ?qt_static_metacall@QPropertyAnimation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4833 NONAME ; void QPropertyAnimation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QProcess@@0UQMetaObjectExtraData@@B @ 4834 NONAME ; struct QMetaObjectExtraData const QProcess::staticMetaObjectExtraData + ?qt_static_metacall@QParallelAnimationGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4835 NONAME ; void QParallelAnimationGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QEventDispatcherSymbian@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4836 NONAME ; void QEventDispatcherSymbian::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QCoreApplication@@0UQMetaObjectExtraData@@B @ 4837 NONAME ; struct QMetaObjectExtraData const QCoreApplication::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QParallelAnimationGroup@@0UQMetaObjectExtraData@@B @ 4838 NONAME ; struct QMetaObjectExtraData const QParallelAnimationGroup::staticMetaObjectExtraData + ?qt_static_metacall@QTimeLine@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4839 NONAME ; void QTimeLine::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QStateMachine@@0UQMetaObjectExtraData@@B @ 4840 NONAME ; struct QMetaObjectExtraData const QStateMachine::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSignalTransition@@0UQMetaObjectExtraData@@B @ 4841 NONAME ; struct QMetaObjectExtraData const QSignalTransition::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractTableModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4842 NONAME ; void QAbstractTableModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QEventTransition@@0UQMetaObjectExtraData@@B @ 4843 NONAME ; struct QMetaObjectExtraData const QEventTransition::staticMetaObjectExtraData + ?qt_static_metacall@QEventLoop@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 4844 NONAME ; void QEventLoop::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?keys@QProcessEnvironment@@QBE?AVQStringList@@XZ @ 4845 NONAME ; class QStringList QProcessEnvironment::keys(void) const diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 5490f0d..17fa4db 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -1893,4 +1893,34 @@ EXPORTS ?setLayoutMirror@QDeclarativeItemPrivate@@QAEX_N@Z @ 1892 NONAME ; void QDeclarativeItemPrivate::setLayoutMirror(bool) ?setImplicitLayoutMirror@QDeclarativeItemPrivate@@QAEX_N0@Z @ 1893 NONAME ; void QDeclarativeItemPrivate::setImplicitLayoutMirror(bool, bool) ?isMirrored@QDeclarativeItemPrivate@@QBE_NXZ @ 1894 NONAME ; bool QDeclarativeItemPrivate::isMirrored(void) const + ?qt_static_metacall@QDeclarativeExtensionPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1895 NONAME ; void QDeclarativeExtensionPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeEngine@@0UQMetaObjectExtraData@@B @ 1896 NONAME ; struct QMetaObjectExtraData const QDeclarativeEngine::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativeComponent@@0UQMetaObjectExtraData@@B @ 1897 NONAME ; struct QMetaObjectExtraData const QDeclarativeComponent::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativeState@@0UQMetaObjectExtraData@@B @ 1898 NONAME ; struct QMetaObjectExtraData const QDeclarativeState::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPacketProtocol@@0UQMetaObjectExtraData@@B @ 1899 NONAME ; struct QMetaObjectExtraData const QPacketProtocol::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativeExtensionPlugin@@0UQMetaObjectExtraData@@B @ 1900 NONAME ; struct QMetaObjectExtraData const QDeclarativeExtensionPlugin::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativeContext@@0UQMetaObjectExtraData@@B @ 1901 NONAME ; struct QMetaObjectExtraData const QDeclarativeContext::staticMetaObjectExtraData + ?qt_static_metacall@QPacketProtocol@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1902 NONAME ; void QPacketProtocol::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeDebugServer@@0UQMetaObjectExtraData@@B @ 1903 NONAME ; struct QMetaObjectExtraData const QDeclarativeDebugServer::staticMetaObjectExtraData + ?qt_static_metacall@QDeclarativeStateOperation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1904 NONAME ; void QDeclarativeStateOperation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeComponent@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1905 NONAME ; void QDeclarativeComponent::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeTransition@@0UQMetaObjectExtraData@@B @ 1906 NONAME ; struct QMetaObjectExtraData const QDeclarativeTransition::staticMetaObjectExtraData + ?qt_static_metacall@QDeclarativePropertyMap@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1907 NONAME ; void QDeclarativePropertyMap::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeDebugService@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1908 NONAME ; void QDeclarativeDebugService::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeContext@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1909 NONAME ; void QDeclarativeContext::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeItem@@0UQMetaObjectExtraData@@B @ 1910 NONAME ; struct QMetaObjectExtraData const QDeclarativeItem::staticMetaObjectExtraData + ?qt_static_metacall@QDeclarativeState@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1911 NONAME ; void QDeclarativeState::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeDebugService@@0UQMetaObjectExtraData@@B @ 1912 NONAME ; struct QMetaObjectExtraData const QDeclarativeDebugService::staticMetaObjectExtraData + ?qt_static_metacall@QDeclarativeItem@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1913 NONAME ; void QDeclarativeItem::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeStateOperation@@0UQMetaObjectExtraData@@B @ 1914 NONAME ; struct QMetaObjectExtraData const QDeclarativeStateOperation::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativePropertyMap@@0UQMetaObjectExtraData@@B @ 1915 NONAME ; struct QMetaObjectExtraData const QDeclarativePropertyMap::staticMetaObjectExtraData + ?qt_static_metacall@QDeclarativeDebugServer@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1916 NONAME ; void QDeclarativeDebugServer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeExpression@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1917 NONAME ; void QDeclarativeExpression::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1918 NONAME ; void QDeclarativeView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeTransition@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1919 NONAME ; void QDeclarativeTransition::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDeclarativeStateGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1920 NONAME ; void QDeclarativeStateGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDeclarativeExpression@@0UQMetaObjectExtraData@@B @ 1921 NONAME ; struct QMetaObjectExtraData const QDeclarativeExpression::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativeStateGroup@@0UQMetaObjectExtraData@@B @ 1922 NONAME ; struct QMetaObjectExtraData const QDeclarativeStateGroup::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDeclarativeView@@0UQMetaObjectExtraData@@B @ 1923 NONAME ; struct QMetaObjectExtraData const QDeclarativeView::staticMetaObjectExtraData + ?qt_static_metacall@QDeclarativeEngine@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1924 NONAME ; void QDeclarativeEngine::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index e584adb..813bbf8 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -13592,10 +13592,365 @@ EXPORTS ?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13591 NONAME ; class QList<class QScroller *> QScroller::activeScrollers(void) ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13592 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &) ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13593 NONAME ABSENT ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &) - ?hasFeature@QWindowSurface@@QBE_NW4WindowSurfaceFeature@1@@Z @ 13594 NONAME ABSENT ; bool QWindowSurface::hasFeature(enum QWindowSurface::WindowSurfaceFeature) const - ?leadingSpaceWidth@QTextEngine@@QAE?AUQFixed@@ABUQScriptLine@@@Z @ 13595 NONAME ABSENT ; struct QFixed QTextEngine::leadingSpaceWidth(struct QScriptLine const &) - ?features@QRasterWindowSurface@@UBE?AV?$QFlags@W4WindowSurfaceFeature@QWindowSurface@@@@XZ @ 13596 NONAME ABSENT ; class QFlags<enum QWindowSurface::WindowSurfaceFeature> QRasterWindowSurface::features(void) const - ?features@QWindowSurface@@UBE?AV?$QFlags@W4WindowSurfaceFeature@QWindowSurface@@@@XZ @ 13597 NONAME ABSENT ; class QFlags<enum QWindowSurface::WindowSurfaceFeature> QWindowSurface::features(void) const - ?hasStaticContentsSupport@QRasterWindowSurface@@UBE_NXZ @ 13598 NONAME ABSENT ; bool QRasterWindowSurface::hasStaticContentsSupport(void) const - ?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IUQFixed@@ABVQTransform@@W4GlyphFormat@1@@Z @ 13599 NONAME ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, struct QFixed, class QTransform const &, enum QFontEngine::GlyphFormat) + ?staticMetaObjectExtraData@QStylePlugin@@0UQMetaObjectExtraData@@B @ 13594 NONAME ; struct QMetaObjectExtraData const QStylePlugin::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QToolBar@@0UQMetaObjectExtraData@@B @ 13595 NONAME ; struct QMetaObjectExtraData const QToolBar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTableView@@0UQMetaObjectExtraData@@B @ 13596 NONAME ; struct QMetaObjectExtraData const QTableView::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QValidator@@0UQMetaObjectExtraData@@B @ 13597 NONAME ; struct QMetaObjectExtraData const QValidator::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPaintBufferSignalProxy@@0UQMetaObjectExtraData@@B @ 13598 NONAME ; struct QMetaObjectExtraData const QPaintBufferSignalProxy::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSplashScreen@@0UQMetaObjectExtraData@@B @ 13599 NONAME ; struct QMetaObjectExtraData const QSplashScreen::staticMetaObjectExtraData + ?qt_static_metacall@QDockWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13600 NONAME ; void QDockWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QVBoxLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13601 NONAME ; void QVBoxLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QCommonStyle@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13602 NONAME ; void QCommonStyle::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QMenuBar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13603 NONAME ; void QMenuBar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsObject@@0UQMetaObjectExtraData@@B @ 13604 NONAME ; struct QMetaObjectExtraData const QGraphicsObject::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSplitter@@0UQMetaObjectExtraData@@B @ 13605 NONAME ; struct QMetaObjectExtraData const QSplitter::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QUndoStack@@0UQMetaObjectExtraData@@B @ 13606 NONAME ; struct QMetaObjectExtraData const QUndoStack::staticMetaObjectExtraData + ?qt_static_metacall@QPaintBufferResource@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13607 NONAME ; void QPaintBufferResource::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSound@@0UQMetaObjectExtraData@@B @ 13608 NONAME ; struct QMetaObjectExtraData const QSound::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSwipeGesture@@0UQMetaObjectExtraData@@B @ 13609 NONAME ; struct QMetaObjectExtraData const QSwipeGesture::staticMetaObjectExtraData + ?qt_static_metacall@QSizeGrip@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13610 NONAME ; void QSizeGrip::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSlider@@0UQMetaObjectExtraData@@B @ 13611 NONAME ; struct QMetaObjectExtraData const QSlider::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractItemView@@0UQMetaObjectExtraData@@B @ 13612 NONAME ; struct QMetaObjectExtraData const QAbstractItemView::staticMetaObjectExtraData + ?setCompressionPolicy@QZipWriter@@QAEXW4CompressionPolicy@1@@Z @ 13613 NONAME ; void QZipWriter::setCompressionPolicy(enum QZipWriter::CompressionPolicy) + ?staticMetaObjectExtraData@QPlainTextEdit@@0UQMetaObjectExtraData@@B @ 13614 NONAME ; struct QMetaObjectExtraData const QPlainTextEdit::staticMetaObjectExtraData + ?addFile@QZipWriter@@QAEXABVQString@@PAVQIODevice@@@Z @ 13615 NONAME ; void QZipWriter::addFile(class QString const &, class QIODevice *) + ?staticMetaObjectExtraData@QDateEdit@@0UQMetaObjectExtraData@@B @ 13616 NONAME ; struct QMetaObjectExtraData const QDateEdit::staticMetaObjectExtraData + ?qt_static_metacall@QGuiPlatformPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13617 NONAME ; void QGuiPlatformPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFlickGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13618 NONAME ; void QFlickGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QStyledItemDelegate@@0UQMetaObjectExtraData@@B @ 13619 NONAME ; struct QMetaObjectExtraData const QStyledItemDelegate::staticMetaObjectExtraData + ?qt_static_metacall@QWizard@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13620 NONAME ; void QWizard::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTextControl@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13621 NONAME ; void QTextControl::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsRotation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13622 NONAME ; void QGraphicsRotation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractProxyModel@@0UQMetaObjectExtraData@@B @ 13623 NONAME ; struct QMetaObjectExtraData const QAbstractProxyModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDialog@@0UQMetaObjectExtraData@@B @ 13624 NONAME ; struct QMetaObjectExtraData const QDialog::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPixmapDropShadowFilter@@0UQMetaObjectExtraData@@B @ 13625 NONAME ; struct QMetaObjectExtraData const QPixmapDropShadowFilter::staticMetaObjectExtraData + ?qt_static_metacall@QPanGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13626 NONAME ; void QPanGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QWidgetResizeHandler@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13627 NONAME ; void QWidgetResizeHandler::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsSystemPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13628 NONAME ; void QGraphicsSystemPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QProxyModel@@0UQMetaObjectExtraData@@B @ 13629 NONAME ; struct QMetaObjectExtraData const QProxyModel::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13630 NONAME ; void QGraphicsWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSizeGrip@@0UQMetaObjectExtraData@@B @ 13631 NONAME ; struct QMetaObjectExtraData const QSizeGrip::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QImageIOPlugin@@0UQMetaObjectExtraData@@B @ 13632 NONAME ; struct QMetaObjectExtraData const QImageIOPlugin::staticMetaObjectExtraData + ?qt_static_metacall@QSortFilterProxyModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13633 NONAME ; void QSortFilterProxyModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDrag@@0UQMetaObjectExtraData@@B @ 13634 NONAME ; struct QMetaObjectExtraData const QDrag::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAction@@0UQMetaObjectExtraData@@B @ 13635 NONAME ; struct QMetaObjectExtraData const QAction::staticMetaObjectExtraData + ?qt_static_metacall@QUndoView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13636 NONAME ; void QUndoView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?creationPermissions@QZipWriter@@QBE?AV?$QFlags@W4Permission@QFile@@@@XZ @ 13637 NONAME ; class QFlags<enum QFile::Permission> QZipWriter::creationPermissions(void) const + ?staticMetaObjectExtraData@QTabBar@@0UQMetaObjectExtraData@@B @ 13638 NONAME ; struct QMetaObjectExtraData const QTabBar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QColumnView@@0UQMetaObjectExtraData@@B @ 13639 NONAME ; struct QMetaObjectExtraData const QColumnView::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QProxyStyle@@0UQMetaObjectExtraData@@B @ 13640 NONAME ; struct QMetaObjectExtraData const QProxyStyle::staticMetaObjectExtraData + ?qt_static_metacall@QActionGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13641 NONAME ; void QActionGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QLineEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13642 NONAME ; void QLineEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ??0QZipWriter@@QAE@ABVQString@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 13643 NONAME ; QZipWriter::QZipWriter(class QString const &, class QFlags<enum QIODevice::OpenModeFlag>) + ?staticMetaObjectExtraData@QSortFilterProxyModel@@0UQMetaObjectExtraData@@B @ 13644 NONAME ; struct QMetaObjectExtraData const QSortFilterProxyModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QIconEnginePlugin@@0UQMetaObjectExtraData@@B @ 13645 NONAME ; struct QMetaObjectExtraData const QIconEnginePlugin::staticMetaObjectExtraData + ?qt_static_metacall@QPixmapConvolutionFilter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13646 NONAME ; void QPixmapConvolutionFilter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QApplication@@0UQMetaObjectExtraData@@B @ 13647 NONAME ; struct QMetaObjectExtraData const QApplication::staticMetaObjectExtraData + ?qt_static_metacall@QCalendarWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13648 NONAME ; void QCalendarWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QInputContextPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13649 NONAME ; void QInputContextPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGuiPlatformPlugin@@0UQMetaObjectExtraData@@B @ 13650 NONAME ; struct QMetaObjectExtraData const QGuiPlatformPlugin::staticMetaObjectExtraData + ?qt_static_metacall@QTextObject@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13651 NONAME ; void QTextObject::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QStandardItemModel@@0UQMetaObjectExtraData@@B @ 13652 NONAME ; struct QMetaObjectExtraData const QStandardItemModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QProgressDialog@@0UQMetaObjectExtraData@@B @ 13653 NONAME ; struct QMetaObjectExtraData const QProgressDialog::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractItemView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13654 NONAME ; void QAbstractItemView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QColumnView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13655 NONAME ; void QColumnView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QPixmapBlurFilter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13656 NONAME ; void QPixmapBlurFilter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsTransform@@0UQMetaObjectExtraData@@B @ 13657 NONAME ; struct QMetaObjectExtraData const QGraphicsTransform::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QFontDialog@@0UQMetaObjectExtraData@@B @ 13658 NONAME ; struct QMetaObjectExtraData const QFontDialog::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsBlurEffect@@0UQMetaObjectExtraData@@B @ 13659 NONAME ; struct QMetaObjectExtraData const QGraphicsBlurEffect::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsProxyWidget@@0UQMetaObjectExtraData@@B @ 13660 NONAME ; struct QMetaObjectExtraData const QGraphicsProxyWidget::staticMetaObjectExtraData + ?qt_static_metacall@QPictureFormatPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13661 NONAME ; void QPictureFormatPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFileDialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13662 NONAME ; void QFileDialog::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFlickGesture@@0UQMetaObjectExtraData@@B @ 13663 NONAME ; struct QMetaObjectExtraData const QFlickGesture::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QWizard@@0UQMetaObjectExtraData@@B @ 13664 NONAME ; struct QMetaObjectExtraData const QWizard::staticMetaObjectExtraData + ?qt_static_metacall@QS60Style@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13665 NONAME ; void QS60Style::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTapGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13666 NONAME ; void QTapGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QItemDelegate@@0UQMetaObjectExtraData@@B @ 13667 NONAME ; struct QMetaObjectExtraData const QItemDelegate::staticMetaObjectExtraData + ?qt_static_metacall@QProxyModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13668 NONAME ; void QProxyModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QScrollBar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13669 NONAME ; void QScrollBar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QComboBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13670 NONAME ; void QComboBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QToolButton@@0UQMetaObjectExtraData@@B @ 13671 NONAME ; struct QMetaObjectExtraData const QToolButton::staticMetaObjectExtraData + ?qt_static_metacall@QItemSelectionModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13672 NONAME ; void QItemSelectionModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ??0QZipWriter@@QAE@PAVQIODevice@@@Z @ 13673 NONAME ; QZipWriter::QZipWriter(class QIODevice *) + ?staticMetaObjectExtraData@QButtonGroup@@0UQMetaObjectExtraData@@B @ 13674 NONAME ; struct QMetaObjectExtraData const QButtonGroup::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QErrorMessage@@0UQMetaObjectExtraData@@B @ 13675 NONAME ; struct QMetaObjectExtraData const QErrorMessage::staticMetaObjectExtraData + ?qt_static_metacall@QTableView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13676 NONAME ; void QTableView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTextEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13677 NONAME ; void QTextEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13678 NONAME ; void QDialog::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QMessageBox@@0UQMetaObjectExtraData@@B @ 13679 NONAME ; struct QMetaObjectExtraData const QMessageBox::staticMetaObjectExtraData + ?qt_static_metacall@QWorkspace@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13680 NONAME ; void QWorkspace::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTextEdit@@0UQMetaObjectExtraData@@B @ 13681 NONAME ; struct QMetaObjectExtraData const QTextEdit::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDoubleValidator@@0UQMetaObjectExtraData@@B @ 13682 NONAME ; struct QMetaObjectExtraData const QDoubleValidator::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsWidget@@0UQMetaObjectExtraData@@B @ 13683 NONAME ; struct QMetaObjectExtraData const QGraphicsWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSplitterHandle@@0UQMetaObjectExtraData@@B @ 13684 NONAME ; struct QMetaObjectExtraData const QSplitterHandle::staticMetaObjectExtraData + ?qt_static_metacall@QPinchGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13685 NONAME ; void QPinchGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IUQFixed@@ABVQTransform@@W4GlyphFormat@1@@Z @ 13686 NONAME ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, struct QFixed, class QTransform const &, enum QFontEngine::GlyphFormat) + ?qt_static_metacall@QGridLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13687 NONAME ; void QGridLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSplitter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13688 NONAME ; void QSplitter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QStackedLayout@@0UQMetaObjectExtraData@@B @ 13689 NONAME ; struct QMetaObjectExtraData const QStackedLayout::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTapAndHoldGesture@@0UQMetaObjectExtraData@@B @ 13690 NONAME ; struct QMetaObjectExtraData const QTapAndHoldGesture::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QLCDNumber@@0UQMetaObjectExtraData@@B @ 13691 NONAME ; struct QMetaObjectExtraData const QLCDNumber::staticMetaObjectExtraData + ?qt_static_metacall@QDoubleSpinBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13692 NONAME ; void QDoubleSpinBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QValidator@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13693 NONAME ; void QValidator::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?addDirectory@QZipWriter@@QAEXABVQString@@@Z @ 13694 NONAME ; void QZipWriter::addDirectory(class QString const &) + ?staticMetaObjectExtraData@QEventDispatcherS60@@0UQMetaObjectExtraData@@B @ 13695 NONAME ; struct QMetaObjectExtraData const QEventDispatcherS60::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QLineControl@@0UQMetaObjectExtraData@@B @ 13696 NONAME ; struct QMetaObjectExtraData const QLineControl::staticMetaObjectExtraData + ?qt_static_metacall@QStylePlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13697 NONAME ; void QStylePlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QScrollArea@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13698 NONAME ; void QScrollArea::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QProgressDialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13699 NONAME ; void QProgressDialog::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QWidget@@0UQMetaObjectExtraData@@B @ 13700 NONAME ; struct QMetaObjectExtraData const QWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QRubberBand@@0UQMetaObjectExtraData@@B @ 13701 NONAME ; struct QMetaObjectExtraData const QRubberBand::staticMetaObjectExtraData + ?qt_static_metacall@QLineControl@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13702 NONAME ; void QLineControl::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDockWidgetLayout@@0UQMetaObjectExtraData@@B @ 13703 NONAME ; struct QMetaObjectExtraData const QDockWidgetLayout::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTextControl@@0UQMetaObjectExtraData@@B @ 13704 NONAME ; struct QMetaObjectExtraData const QTextControl::staticMetaObjectExtraData + ?qt_static_metacall@QTreeView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13705 NONAME ; void QTreeView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsScene@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13706 NONAME ; void QGraphicsScene::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QApplication@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13707 NONAME ; void QApplication::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QCommandLinkButton@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13708 NONAME ; void QCommandLinkButton::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTextBlockGroup@@0UQMetaObjectExtraData@@B @ 13709 NONAME ; struct QMetaObjectExtraData const QTextBlockGroup::staticMetaObjectExtraData + ?qt_static_metacall@QIntValidator@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13710 NONAME ; void QIntValidator::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QInputContextPlugin@@0UQMetaObjectExtraData@@B @ 13711 NONAME ; struct QMetaObjectExtraData const QInputContextPlugin::staticMetaObjectExtraData + ?qt_static_metacall@QFontComboBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13712 NONAME ; void QFontComboBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTextDocument@@0UQMetaObjectExtraData@@B @ 13713 NONAME ; struct QMetaObjectExtraData const QTextDocument::staticMetaObjectExtraData + ?qt_static_metacall@QTextList@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13714 NONAME ; void QTextList::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QStyle@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13715 NONAME ; void QStyle::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsObject@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13716 NONAME ; void QGraphicsObject::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSpinBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13717 NONAME ; void QSpinBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsScale@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13718 NONAME ; void QGraphicsScale::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QPlainTextDocumentLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13719 NONAME ; void QPlainTextDocumentLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QShortcut@@0UQMetaObjectExtraData@@B @ 13720 NONAME ; struct QMetaObjectExtraData const QShortcut::staticMetaObjectExtraData + ?qt_static_metacall@QDial@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13721 NONAME ; void QDial::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsItemAnimation@@0UQMetaObjectExtraData@@B @ 13722 NONAME ; struct QMetaObjectExtraData const QGraphicsItemAnimation::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsProxyWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13723 NONAME ; void QGraphicsProxyWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QMenuBar@@0UQMetaObjectExtraData@@B @ 13724 NONAME ; struct QMetaObjectExtraData const QMenuBar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsColorizeEffect@@0UQMetaObjectExtraData@@B @ 13725 NONAME ; struct QMetaObjectExtraData const QGraphicsColorizeEffect::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QScrollArea@@0UQMetaObjectExtraData@@B @ 13726 NONAME ; struct QMetaObjectExtraData const QScrollArea::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPaintBufferResource@@0UQMetaObjectExtraData@@B @ 13727 NONAME ; struct QMetaObjectExtraData const QPaintBufferResource::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTextFrame@@0UQMetaObjectExtraData@@B @ 13728 NONAME ; struct QMetaObjectExtraData const QTextFrame::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QItemSelectionModel@@0UQMetaObjectExtraData@@B @ 13729 NONAME ; struct QMetaObjectExtraData const QItemSelectionModel::staticMetaObjectExtraData + ?qt_static_metacall@QIconEnginePluginV2@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13730 NONAME ; void QIconEnginePluginV2::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsBlurEffect@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13731 NONAME ; void QGraphicsBlurEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSpinBox@@0UQMetaObjectExtraData@@B @ 13732 NONAME ; struct QMetaObjectExtraData const QSpinBox::staticMetaObjectExtraData + ?qt_static_metacall@QMenu@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13733 NONAME ; void QMenu::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QListWidget@@0UQMetaObjectExtraData@@B @ 13734 NONAME ; struct QMetaObjectExtraData const QListWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTimeEdit@@0UQMetaObjectExtraData@@B @ 13735 NONAME ; struct QMetaObjectExtraData const QTimeEdit::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QMenu@@0UQMetaObjectExtraData@@B @ 13736 NONAME ; struct QMetaObjectExtraData const QMenu::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QFrame@@0UQMetaObjectExtraData@@B @ 13737 NONAME ; struct QMetaObjectExtraData const QFrame::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDirModel@@0UQMetaObjectExtraData@@B @ 13738 NONAME ; struct QMetaObjectExtraData const QDirModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractSpinBox@@0UQMetaObjectExtraData@@B @ 13739 NONAME ; struct QMetaObjectExtraData const QAbstractSpinBox::staticMetaObjectExtraData + ?qt_static_metacall@QProxyStyle@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13740 NONAME ; void QProxyStyle::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QDateTimeEdit@@0UQMetaObjectExtraData@@B @ 13741 NONAME ; struct QMetaObjectExtraData const QDateTimeEdit::staticMetaObjectExtraData + ?qt_static_metacall@QStyledItemDelegate@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13742 NONAME ; void QStyledItemDelegate::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QListView@@0UQMetaObjectExtraData@@B @ 13743 NONAME ; struct QMetaObjectExtraData const QListView::staticMetaObjectExtraData + ?qt_static_metacall@QFrame@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13744 NONAME ; void QFrame::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QHeaderView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13745 NONAME ; void QHeaderView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?exists@QZipWriter@@QBE_NXZ @ 13746 NONAME ; bool QZipWriter::exists(void) const + ?qt_static_metacall@QSyntaxHighlighter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13747 NONAME ; void QSyntaxHighlighter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QScroller@@0UQMetaObjectExtraData@@B @ 13748 NONAME ; struct QMetaObjectExtraData const QScroller::staticMetaObjectExtraData + ?qt_static_metacall@QTextFrame@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13749 NONAME ; void QTextFrame::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDirModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13750 NONAME ; void QDirModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QScrollBar@@0UQMetaObjectExtraData@@B @ 13751 NONAME ; struct QMetaObjectExtraData const QScrollBar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QMovie@@0UQMetaObjectExtraData@@B @ 13752 NONAME ; struct QMetaObjectExtraData const QMovie::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsDropShadowEffect@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13753 NONAME ; void QGraphicsDropShadowEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSound@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13754 NONAME ; void QSound::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTextBrowser@@0UQMetaObjectExtraData@@B @ 13755 NONAME ; struct QMetaObjectExtraData const QTextBrowser::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QHeaderView@@0UQMetaObjectExtraData@@B @ 13756 NONAME ; struct QMetaObjectExtraData const QHeaderView::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPixmapBlurFilter@@0UQMetaObjectExtraData@@B @ 13757 NONAME ; struct QMetaObjectExtraData const QPixmapBlurFilter::staticMetaObjectExtraData + ?qt_static_metacall@QUndoStack@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13758 NONAME ; void QUndoStack::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsAnchor@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13759 NONAME ; void QGraphicsAnchor::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QPanGesture@@0UQMetaObjectExtraData@@B @ 13760 NONAME ; struct QMetaObjectExtraData const QPanGesture::staticMetaObjectExtraData + ?qt_static_metacall@QDataWidgetMapper@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13761 NONAME ; void QDataWidgetMapper::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTextBlockGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13762 NONAME ; void QTextBlockGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QStringListModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13763 NONAME ; void QStringListModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsTextItem@@0UQMetaObjectExtraData@@B @ 13764 NONAME ; struct QMetaObjectExtraData const QGraphicsTextItem::staticMetaObjectExtraData + ?qt_static_metacall@QTimeEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13765 NONAME ; void QTimeEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QToolBar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13766 NONAME ; void QToolBar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QCheckBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13767 NONAME ; void QCheckBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFontComboBox@@0UQMetaObjectExtraData@@B @ 13768 NONAME ; struct QMetaObjectExtraData const QFontComboBox::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDesktopWidget@@0UQMetaObjectExtraData@@B @ 13769 NONAME ; struct QMetaObjectExtraData const QDesktopWidget::staticMetaObjectExtraData + ?qt_static_metacall@QSwipeGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13770 NONAME ; void QSwipeGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFormLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13771 NONAME ; void QFormLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractButton@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13772 NONAME ; void QAbstractButton::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QClipboard@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13773 NONAME ; void QClipboard::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QWidgetResizeHandler@@0UQMetaObjectExtraData@@B @ 13774 NONAME ; struct QMetaObjectExtraData const QWidgetResizeHandler::staticMetaObjectExtraData + ?qt_static_metacall@QIconEnginePlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13775 NONAME ; void QIconEnginePlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTreeWidget@@0UQMetaObjectExtraData@@B @ 13776 NONAME ; struct QMetaObjectExtraData const QTreeWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QFileSystemModel@@0UQMetaObjectExtraData@@B @ 13777 NONAME ; struct QMetaObjectExtraData const QFileSystemModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsDropShadowEffect@@0UQMetaObjectExtraData@@B @ 13778 NONAME ; struct QMetaObjectExtraData const QGraphicsDropShadowEffect::staticMetaObjectExtraData + ?qt_static_metacall@QPushButton@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13779 NONAME ; void QPushButton::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QClipboard@@0UQMetaObjectExtraData@@B @ 13780 NONAME ; struct QMetaObjectExtraData const QClipboard::staticMetaObjectExtraData + ?qt_static_metacall@QHBoxLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13781 NONAME ; void QHBoxLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QKeyEventTransition@@0UQMetaObjectExtraData@@B @ 13782 NONAME ; struct QMetaObjectExtraData const QKeyEventTransition::staticMetaObjectExtraData + ?qt_static_metacall@QWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13783 NONAME ; void QWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QListView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13784 NONAME ; void QListView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?status@QZipWriter@@QBE?AW4Status@1@XZ @ 13785 NONAME ; enum QZipWriter::Status QZipWriter::status(void) const + ?qt_static_metacall@QProgressBar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13786 NONAME ; void QProgressBar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QMouseEventTransition@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13787 NONAME ; void QMouseEventTransition::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTextBrowser@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13788 NONAME ; void QTextBrowser::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QMessageBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13789 NONAME ; void QMessageBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QPaintBufferSignalProxy@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13790 NONAME ; void QPaintBufferSignalProxy::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QWizardPage@@0UQMetaObjectExtraData@@B @ 13791 NONAME ; struct QMetaObjectExtraData const QWizardPage::staticMetaObjectExtraData + ?qt_static_metacall@QMdiSubWindow@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13792 NONAME ; void QMdiSubWindow::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFocusFrame@@0UQMetaObjectExtraData@@B @ 13793 NONAME ; struct QMetaObjectExtraData const QFocusFrame::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDockWidget@@0UQMetaObjectExtraData@@B @ 13794 NONAME ; struct QMetaObjectExtraData const QDockWidget::staticMetaObjectExtraData + ?qt_static_metacall@QShortcut@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13795 NONAME ; void QShortcut::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTextDocument@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13796 NONAME ; void QTextDocument::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFileSystemModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13797 NONAME ; void QFileSystemModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QCompleter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13798 NONAME ; void QCompleter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QIntValidator@@0UQMetaObjectExtraData@@B @ 13799 NONAME ; struct QMetaObjectExtraData const QIntValidator::staticMetaObjectExtraData + ?qt_static_metacall@QDrag@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13800 NONAME ; void QDrag::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QRegExpValidator@@0UQMetaObjectExtraData@@B @ 13801 NONAME ; struct QMetaObjectExtraData const QRegExpValidator::staticMetaObjectExtraData + ?qt_static_metacall@QTabWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13802 NONAME ; void QTabWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QButtonGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13803 NONAME ; void QButtonGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAction@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13804 NONAME ; void QAction::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QPixmapConvolutionFilter@@0UQMetaObjectExtraData@@B @ 13805 NONAME ; struct QMetaObjectExtraData const QPixmapConvolutionFilter::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QIconEnginePluginV2@@0UQMetaObjectExtraData@@B @ 13806 NONAME ; struct QMetaObjectExtraData const QIconEnginePluginV2::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QLabel@@0UQMetaObjectExtraData@@B @ 13807 NONAME ; struct QMetaObjectExtraData const QLabel::staticMetaObjectExtraData + ?qt_static_metacall@QInputDialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13808 NONAME ; void QInputDialog::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QMdiArea@@0UQMetaObjectExtraData@@B @ 13809 NONAME ; struct QMetaObjectExtraData const QMdiArea::staticMetaObjectExtraData + ?qt_static_metacall@QRadioButton@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13810 NONAME ; void QRadioButton::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QS60Style@@0UQMetaObjectExtraData@@B @ 13811 NONAME ; struct QMetaObjectExtraData const QS60Style::staticMetaObjectExtraData + ?qt_static_metacall@QToolBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13812 NONAME ; void QToolBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDateEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13813 NONAME ; void QDateEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractScrollArea@@0UQMetaObjectExtraData@@B @ 13814 NONAME ; struct QMetaObjectExtraData const QAbstractScrollArea::staticMetaObjectExtraData + ?qt_static_metacall@QGroupBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13815 NONAME ; void QGroupBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?isWritable@QZipWriter@@QBE_NXZ @ 13816 NONAME ; bool QZipWriter::isWritable(void) const + ?qt_static_metacall@QToolButton@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13817 NONAME ; void QToolButton::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsRotation@@0UQMetaObjectExtraData@@B @ 13818 NONAME ; struct QMetaObjectExtraData const QGraphicsRotation::staticMetaObjectExtraData + ?qt_static_metacall@QDateTimeEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13819 NONAME ; void QDateTimeEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QPlainTextDocumentLayout@@0UQMetaObjectExtraData@@B @ 13820 NONAME ; struct QMetaObjectExtraData const QPlainTextDocumentLayout::staticMetaObjectExtraData + ?addFile@QZipWriter@@QAEXABVQString@@ABVQByteArray@@@Z @ 13821 NONAME ; void QZipWriter::addFile(class QString const &, class QByteArray const &) + ?staticMetaObjectExtraData@QComboBox@@0UQMetaObjectExtraData@@B @ 13822 NONAME ; struct QMetaObjectExtraData const QComboBox::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsColorizeEffect@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13823 NONAME ; void QGraphicsColorizeEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QPixmapDropShadowFilter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13824 NONAME ; void QPixmapDropShadowFilter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractTextDocumentLayout@@0UQMetaObjectExtraData@@B @ 13825 NONAME ; struct QMetaObjectExtraData const QAbstractTextDocumentLayout::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QCheckBox@@0UQMetaObjectExtraData@@B @ 13826 NONAME ; struct QMetaObjectExtraData const QCheckBox::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QCalendarWidget@@0UQMetaObjectExtraData@@B @ 13827 NONAME ; struct QMetaObjectExtraData const QCalendarWidget::staticMetaObjectExtraData + ?qt_static_metacall@QWidgetAction@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13828 NONAME ; void QWidgetAction::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?device@QZipWriter@@QBEPAVQIODevice@@XZ @ 13829 NONAME ; class QIODevice * QZipWriter::device(void) const + ?staticMetaObjectExtraData@QBoxLayout@@0UQMetaObjectExtraData@@B @ 13830 NONAME ; struct QMetaObjectExtraData const QBoxLayout::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QRadioButton@@0UQMetaObjectExtraData@@B @ 13831 NONAME ; struct QMetaObjectExtraData const QRadioButton::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGridLayout@@0UQMetaObjectExtraData@@B @ 13832 NONAME ; struct QMetaObjectExtraData const QGridLayout::staticMetaObjectExtraData + ?qt_static_metacall@QDoubleValidator@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13833 NONAME ; void QDoubleValidator::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QKeyEventTransition@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13834 NONAME ; void QKeyEventTransition::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QMainWindow@@0UQMetaObjectExtraData@@B @ 13835 NONAME ; struct QMetaObjectExtraData const QMainWindow::staticMetaObjectExtraData + ?qt_static_metacall@QTextTable@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13836 NONAME ; void QTextTable::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsView@@0UQMetaObjectExtraData@@B @ 13837 NONAME ; struct QMetaObjectExtraData const QGraphicsView::staticMetaObjectExtraData + ?qt_static_metacall@QErrorMessage@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13838 NONAME ; void QErrorMessage::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QToolBox@@0UQMetaObjectExtraData@@B @ 13839 NONAME ; struct QMetaObjectExtraData const QToolBox::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTreeView@@0UQMetaObjectExtraData@@B @ 13840 NONAME ; struct QMetaObjectExtraData const QTreeView::staticMetaObjectExtraData + ?qt_static_metacall@QSlider@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13841 NONAME ; void QSlider::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QStringListModel@@0UQMetaObjectExtraData@@B @ 13842 NONAME ; struct QMetaObjectExtraData const QStringListModel::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QProgressBar@@0UQMetaObjectExtraData@@B @ 13843 NONAME ; struct QMetaObjectExtraData const QProgressBar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTextList@@0UQMetaObjectExtraData@@B @ 13844 NONAME ; struct QMetaObjectExtraData const QTextList::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsTransform@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13845 NONAME ; void QGraphicsTransform::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFormLayout@@0UQMetaObjectExtraData@@B @ 13846 NONAME ; struct QMetaObjectExtraData const QFormLayout::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGesture@@0UQMetaObjectExtraData@@B @ 13847 NONAME ; struct QMetaObjectExtraData const QGesture::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsAnchor@@0UQMetaObjectExtraData@@B @ 13848 NONAME ; struct QMetaObjectExtraData const QGraphicsAnchor::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTextObject@@0UQMetaObjectExtraData@@B @ 13849 NONAME ; struct QMetaObjectExtraData const QTextObject::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13850 NONAME ; void QGraphicsView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsOpacityEffect@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13851 NONAME ; void QGraphicsOpacityEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractSlider@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13852 NONAME ; void QAbstractSlider::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QTreeWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13853 NONAME ; void QTreeWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractItemDelegate@@0UQMetaObjectExtraData@@B @ 13854 NONAME ; struct QMetaObjectExtraData const QAbstractItemDelegate::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QStatusBar@@0UQMetaObjectExtraData@@B @ 13855 NONAME ; struct QMetaObjectExtraData const QStatusBar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QActionGroup@@0UQMetaObjectExtraData@@B @ 13856 NONAME ; struct QMetaObjectExtraData const QActionGroup::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDataWidgetMapper@@0UQMetaObjectExtraData@@B @ 13857 NONAME ; struct QMetaObjectExtraData const QDataWidgetMapper::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDial@@0UQMetaObjectExtraData@@B @ 13858 NONAME ; struct QMetaObjectExtraData const QDial::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QMdiSubWindow@@0UQMetaObjectExtraData@@B @ 13859 NONAME ; struct QMetaObjectExtraData const QMdiSubWindow::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsEffect@@0UQMetaObjectExtraData@@B @ 13860 NONAME ; struct QMetaObjectExtraData const QGraphicsEffect::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPictureFormatPlugin@@0UQMetaObjectExtraData@@B @ 13861 NONAME ; struct QMetaObjectExtraData const QPictureFormatPlugin::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsScale@@0UQMetaObjectExtraData@@B @ 13862 NONAME ; struct QMetaObjectExtraData const QGraphicsScale::staticMetaObjectExtraData + ?qt_static_metacall@QStandardItemModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13863 NONAME ; void QStandardItemModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDockWidgetLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13864 NONAME ; void QDockWidgetLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QPinchGesture@@0UQMetaObjectExtraData@@B @ 13865 NONAME ; struct QMetaObjectExtraData const QPinchGesture::staticMetaObjectExtraData + ?qt_static_metacall@QLabel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13866 NONAME ; void QLabel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTableWidget@@0UQMetaObjectExtraData@@B @ 13867 NONAME ; struct QMetaObjectExtraData const QTableWidget::staticMetaObjectExtraData + ?close@QZipWriter@@QAEXXZ @ 13868 NONAME ; void QZipWriter::close(void) + ?qt_static_metacall@QStatusBar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13869 NONAME ; void QStatusBar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QCommandLinkButton@@0UQMetaObjectExtraData@@B @ 13870 NONAME ; struct QMetaObjectExtraData const QCommandLinkButton::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPushButton@@0UQMetaObjectExtraData@@B @ 13871 NONAME ; struct QMetaObjectExtraData const QPushButton::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QWidgetAction@@0UQMetaObjectExtraData@@B @ 13872 NONAME ; struct QMetaObjectExtraData const QWidgetAction::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QDoubleSpinBox@@0UQMetaObjectExtraData@@B @ 13873 NONAME ; struct QMetaObjectExtraData const QDoubleSpinBox::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTextTable@@0UQMetaObjectExtraData@@B @ 13874 NONAME ; struct QMetaObjectExtraData const QTextTable::staticMetaObjectExtraData + ?qt_static_metacall@QSplashScreen@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13875 NONAME ; void QSplashScreen::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QStackedLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13876 NONAME ; void QStackedLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QCompleter@@0UQMetaObjectExtraData@@B @ 13877 NONAME ; struct QMetaObjectExtraData const QCompleter::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractScrollArea@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13878 NONAME ; void QAbstractScrollArea::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDesktopWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13879 NONAME ; void QDesktopWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractSpinBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13880 NONAME ; void QAbstractSpinBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsEffectSource@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13881 NONAME ; void QGraphicsEffectSource::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?addSymLink@QZipWriter@@QAEXABVQString@@0@Z @ 13882 NONAME ; void QZipWriter::addSymLink(class QString const &, class QString const &) + ?staticMetaObjectExtraData@QGraphicsEffectSource@@0UQMetaObjectExtraData@@B @ 13883 NONAME ; struct QMetaObjectExtraData const QGraphicsEffectSource::staticMetaObjectExtraData + ?qt_static_metacall@QScroller@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13884 NONAME ; void QScroller::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QStyle@@0UQMetaObjectExtraData@@B @ 13885 NONAME ; struct QMetaObjectExtraData const QStyle::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTabWidget@@0UQMetaObjectExtraData@@B @ 13886 NONAME ; struct QMetaObjectExtraData const QTabWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QPixmapFilter@@0UQMetaObjectExtraData@@B @ 13887 NONAME ; struct QMetaObjectExtraData const QPixmapFilter::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsOpacityEffect@@0UQMetaObjectExtraData@@B @ 13888 NONAME ; struct QMetaObjectExtraData const QGraphicsOpacityEffect::staticMetaObjectExtraData + ?qt_static_metacall@QBoxLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13889 NONAME ; void QBoxLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractTextDocumentLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13890 NONAME ; void QAbstractTextDocumentLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsSystemPlugin@@0UQMetaObjectExtraData@@B @ 13891 NONAME ; struct QMetaObjectExtraData const QGraphicsSystemPlugin::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QMouseEventTransition@@0UQMetaObjectExtraData@@B @ 13892 NONAME ; struct QMetaObjectExtraData const QMouseEventTransition::staticMetaObjectExtraData + ?qt_static_metacall@QTabBar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13893 NONAME ; void QTabBar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?compressionPolicy@QZipWriter@@QBE?AW4CompressionPolicy@1@XZ @ 13894 NONAME ; enum QZipWriter::CompressionPolicy QZipWriter::compressionPolicy(void) const + ?qt_static_metacall@QWindowsStyle@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13895 NONAME ; void QWindowsStyle::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QUndoGroup@@0UQMetaObjectExtraData@@B @ 13896 NONAME ; struct QMetaObjectExtraData const QUndoGroup::staticMetaObjectExtraData + ?qt_static_metacall@QStackedWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13897 NONAME ; void QStackedWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QColorDialog@@0UQMetaObjectExtraData@@B @ 13898 NONAME ; struct QMetaObjectExtraData const QColorDialog::staticMetaObjectExtraData + ?qt_static_metacall@QMdiArea@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13899 NONAME ; void QMdiArea::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QGraphicsScene@@0UQMetaObjectExtraData@@B @ 13900 NONAME ; struct QMetaObjectExtraData const QGraphicsScene::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGroupBox@@0UQMetaObjectExtraData@@B @ 13901 NONAME ; struct QMetaObjectExtraData const QGroupBox::staticMetaObjectExtraData + ?qt_static_metacall@QInternalMimeData@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13902 NONAME ; void QInternalMimeData::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractSlider@@0UQMetaObjectExtraData@@B @ 13903 NONAME ; struct QMetaObjectExtraData const QAbstractSlider::staticMetaObjectExtraData + ?qt_static_metacall@QTapAndHoldGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13904 NONAME ; void QTapAndHoldGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFocusFrame@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13905 NONAME ; void QFocusFrame::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QHBoxLayout@@0UQMetaObjectExtraData@@B @ 13906 NONAME ; struct QMetaObjectExtraData const QHBoxLayout::staticMetaObjectExtraData + ?qt_static_metacall@QSessionManager@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13907 NONAME ; void QSessionManager::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSyntaxHighlighter@@0UQMetaObjectExtraData@@B @ 13908 NONAME ; struct QMetaObjectExtraData const QSyntaxHighlighter::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QLineEdit@@0UQMetaObjectExtraData@@B @ 13909 NONAME ; struct QMetaObjectExtraData const QLineEdit::staticMetaObjectExtraData + ?qt_static_metacall@QWizardPage@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13910 NONAME ; void QWizardPage::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QColorDialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13911 NONAME ; void QColorDialog::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QInputDialog@@0UQMetaObjectExtraData@@B @ 13912 NONAME ; struct QMetaObjectExtraData const QInputDialog::staticMetaObjectExtraData + ?qt_static_metacall@QPixmapColorizeFilter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13913 NONAME ; void QPixmapColorizeFilter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QListWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13914 NONAME ; void QListWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractProxyModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13915 NONAME ; void QAbstractProxyModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QVBoxLayout@@0UQMetaObjectExtraData@@B @ 13916 NONAME ; struct QMetaObjectExtraData const QVBoxLayout::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractItemDelegate@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13917 NONAME ; void QAbstractItemDelegate::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QCommonStyle@@0UQMetaObjectExtraData@@B @ 13918 NONAME ; struct QMetaObjectExtraData const QCommonStyle::staticMetaObjectExtraData + ?qt_static_metacall@QPixmapFilter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13919 NONAME ; void QPixmapFilter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QLayout@@0UQMetaObjectExtraData@@B @ 13920 NONAME ; struct QMetaObjectExtraData const QLayout::staticMetaObjectExtraData + ?qt_static_metacall@QLayout@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13921 NONAME ; void QLayout::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QWindowsStyle@@0UQMetaObjectExtraData@@B @ 13922 NONAME ; struct QMetaObjectExtraData const QWindowsStyle::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QStackedWidget@@0UQMetaObjectExtraData@@B @ 13923 NONAME ; struct QMetaObjectExtraData const QStackedWidget::staticMetaObjectExtraData + ?qt_static_metacall@QGesture@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13924 NONAME ; void QGesture::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QMovie@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13925 NONAME ; void QMovie::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QPixmapColorizeFilter@@0UQMetaObjectExtraData@@B @ 13926 NONAME ; struct QMetaObjectExtraData const QPixmapColorizeFilter::staticMetaObjectExtraData + ?qt_static_metacall@QTableWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13927 NONAME ; void QTableWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QRubberBand@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13928 NONAME ; void QRubberBand::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QPlainTextEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13929 NONAME ; void QPlainTextEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractButton@@0UQMetaObjectExtraData@@B @ 13930 NONAME ; struct QMetaObjectExtraData const QAbstractButton::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QInternalMimeData@@0UQMetaObjectExtraData@@B @ 13931 NONAME ; struct QMetaObjectExtraData const QInternalMimeData::staticMetaObjectExtraData + ??1QZipWriter@@QAE@XZ @ 13932 NONAME ; QZipWriter::~QZipWriter(void) + ?staticMetaObjectExtraData@QDialogButtonBox@@0UQMetaObjectExtraData@@B @ 13933 NONAME ; struct QMetaObjectExtraData const QDialogButtonBox::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QUndoView@@0UQMetaObjectExtraData@@B @ 13934 NONAME ; struct QMetaObjectExtraData const QUndoView::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsTextItem@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13935 NONAME ; void QGraphicsTextItem::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?setCreationPermissions@QZipWriter@@QAEXV?$QFlags@W4Permission@QFile@@@@@Z @ 13936 NONAME ; void QZipWriter::setCreationPermissions(class QFlags<enum QFile::Permission>) + ?staticMetaObjectExtraData@QInputContext@@0UQMetaObjectExtraData@@B @ 13937 NONAME ; struct QMetaObjectExtraData const QInputContext::staticMetaObjectExtraData + ?qt_static_metacall@QInputContext@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13938 NONAME ; void QInputContext::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QEventDispatcherS60@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13939 NONAME ; void QEventDispatcherS60::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QFileDialog@@0UQMetaObjectExtraData@@B @ 13940 NONAME ; struct QMetaObjectExtraData const QFileDialog::staticMetaObjectExtraData + ?qt_static_metacall@QUndoGroup@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13941 NONAME ; void QUndoGroup::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QDialogButtonBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13942 NONAME ; void QDialogButtonBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QImageIOPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13943 NONAME ; void QImageIOPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QLCDNumber@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13944 NONAME ; void QLCDNumber::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFontDialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13945 NONAME ; void QFontDialog::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QMainWindow@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13946 NONAME ; void QMainWindow::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QRegExpValidator@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13947 NONAME ; void QRegExpValidator::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSplitterHandle@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13948 NONAME ; void QSplitterHandle::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QGraphicsEffect@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13949 NONAME ; void QGraphicsEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTapGesture@@0UQMetaObjectExtraData@@B @ 13950 NONAME ; struct QMetaObjectExtraData const QTapGesture::staticMetaObjectExtraData + ?qt_static_metacall@QItemDelegate@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13951 NONAME ; void QItemDelegate::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QWorkspace@@0UQMetaObjectExtraData@@B @ 13952 NONAME ; struct QMetaObjectExtraData const QWorkspace::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSessionManager@@0UQMetaObjectExtraData@@B @ 13953 NONAME ; struct QMetaObjectExtraData const QSessionManager::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsItemAnimation@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13954 NONAME ; void QGraphicsItemAnimation::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) diff --git a/src/s60installs/bwins/QtMultimediau.def b/src/s60installs/bwins/QtMultimediau.def index b8cf6b9..b4ca8b5 100644 --- a/src/s60installs/bwins/QtMultimediau.def +++ b/src/s60installs/bwins/QtMultimediau.def @@ -274,4 +274,18 @@ EXPORTS ?sampleRate@QAudioFormat@@QBEHXZ @ 273 NONAME ; int QAudioFormat::sampleRate(void) const ?supportedSampleRates@QAudioDeviceInfo@@QBE?AV?$QList@H@@XZ @ 274 NONAME ; class QList<int> QAudioDeviceInfo::supportedSampleRates(void) const ?setChannelCount@QAudioFormat@@QAEXH@Z @ 275 NONAME ; void QAudioFormat::setChannelCount(int) + ?staticMetaObjectExtraData@QAudioOutput@@0UQMetaObjectExtraData@@B @ 276 NONAME ; struct QMetaObjectExtraData const QAudioOutput::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractAudioInput@@0UQMetaObjectExtraData@@B @ 277 NONAME ; struct QMetaObjectExtraData const QAbstractAudioInput::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractAudioOutput@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 278 NONAME ; void QAbstractAudioOutput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAudioInput@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 279 NONAME ; void QAudioInput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAudioOutput@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 280 NONAME ; void QAudioOutput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractAudioDeviceInfo@@0UQMetaObjectExtraData@@B @ 281 NONAME ; struct QMetaObjectExtraData const QAbstractAudioDeviceInfo::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAudioInput@@0UQMetaObjectExtraData@@B @ 282 NONAME ; struct QMetaObjectExtraData const QAudioInput::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractVideoSurface@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 283 NONAME ; void QAbstractVideoSurface::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAudioEnginePlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 284 NONAME ; void QAudioEnginePlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractVideoSurface@@0UQMetaObjectExtraData@@B @ 285 NONAME ; struct QMetaObjectExtraData const QAbstractVideoSurface::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractAudioDeviceInfo@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 286 NONAME ; void QAbstractAudioDeviceInfo::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractAudioOutput@@0UQMetaObjectExtraData@@B @ 287 NONAME ; struct QMetaObjectExtraData const QAbstractAudioOutput::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractAudioInput@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 288 NONAME ; void QAbstractAudioInput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAudioEnginePlugin@@0UQMetaObjectExtraData@@B @ 289 NONAME ; struct QMetaObjectExtraData const QAudioEnginePlugin::staticMetaObjectExtraData diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def index 633c8ef..49538ef 100644 --- a/src/s60installs/bwins/QtNetworku.def +++ b/src/s60installs/bwins/QtNetworku.def @@ -1159,6 +1159,82 @@ EXPORTS ?engines@QNetworkConfigurationManagerPrivate@@QBE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1158 NONAME ; class QList<class QBearerEngine *> QNetworkConfigurationManagerPrivate::engines(void) const ?isOnline@QNetworkConfigurationManagerPrivate@@QBE_NXZ @ 1159 NONAME ; bool QNetworkConfigurationManagerPrivate::isOnline(void) const ?startPolling@QNetworkConfigurationManagerPrivate@@AAEXXZ @ 1160 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) - ?setPeerVerifyName@QSslSocket@@QAEXABVQString@@@Z @ 1161 NONAME ; void QSslSocket::setPeerVerifyName(class QString const &) - ?peerVerifyName@QSslSocket@@QBE?AVQString@@XZ @ 1162 NONAME ; class QString QSslSocket::peerVerifyName(void) const + ?peerVerifyName@QSslSocket@@QBE?AVQString@@XZ @ 1161 NONAME ; class QString QSslSocket::peerVerifyName(void) const + ?setPeerVerifyName@QSslSocket@@QAEXABVQString@@@Z @ 1162 NONAME ; void QSslSocket::setPeerVerifyName(class QString const &) + ?nativeSession@QNetworkSessionPrivate@@SAPAVRConnection@@AAVQNetworkSession@@@Z @ 1163 NONAME ; class RConnection * QNetworkSessionPrivate::nativeSession(class QNetworkSession &) + ?nativeOpenSocket@QNetworkSessionPrivate@@SAHAAVQNetworkSession@@AAVRSocket@@III@Z @ 1164 NONAME ; int QNetworkSessionPrivate::nativeOpenSocket(class QNetworkSession &, class RSocket &, unsigned int, unsigned int, unsigned int) + ?nativeOpenHostResolver@QNetworkSessionPrivate@@SAHAAVQNetworkSession@@AAVRHostResolver@@II@Z @ 1165 NONAME ; int QNetworkSessionPrivate::nativeOpenHostResolver(class QNetworkSession &, class RHostResolver &, unsigned int, unsigned int) + ??_EQHttpMultiPart@@UAE@I@Z @ 1166 NONAME ; QHttpMultiPart::~QHttpMultiPart(unsigned int) + ??1QHttpPart@@QAE@XZ @ 1167 NONAME ; QHttpPart::~QHttpPart(void) + ?trUtf8@QHttpMultiPart@@SA?AVQString@@PBD0@Z @ 1168 NONAME ; class QString QHttpMultiPart::trUtf8(char const *, char const *) + ??0QHttpPart@@QAE@ABV0@@Z @ 1169 NONAME ; QHttpPart::QHttpPart(class QHttpPart const &) + ?setBody@QHttpPart@@QAEXABVQByteArray@@@Z @ 1170 NONAME ; void QHttpPart::setBody(class QByteArray const &) + ?trUtf8@QHttpMultiPart@@SA?AVQString@@PBD0H@Z @ 1171 NONAME ; class QString QHttpMultiPart::trUtf8(char const *, char const *, int) + ?staticMetaObject@QHttpMultiPart@@2UQMetaObject@@B @ 1172 NONAME ; struct QMetaObject const QHttpMultiPart::staticMetaObject + ??4QHttpPart@@QAEAAV0@ABV0@@Z @ 1173 NONAME ; class QHttpPart & QHttpPart::operator=(class QHttpPart const &) + ?append@QHttpMultiPart@@QAEXABVQHttpPart@@@Z @ 1174 NONAME ; void QHttpMultiPart::append(class QHttpPart const &) + ?setContentType@QHttpMultiPart@@QAEXW4ContentType@1@@Z @ 1175 NONAME ; void QHttpMultiPart::setContentType(enum QHttpMultiPart::ContentType) + ?d_func@QHttpMultiPart@@AAEPAVQHttpMultiPartPrivate@@XZ @ 1176 NONAME ; class QHttpMultiPartPrivate * QHttpMultiPart::d_func(void) + ??9QHttpPart@@QBE_NABV0@@Z @ 1177 NONAME ; bool QHttpPart::operator!=(class QHttpPart const &) const + ??0QHttpMultiPart@@QAE@W4ContentType@0@PAVQObject@@@Z @ 1178 NONAME ; QHttpMultiPart::QHttpMultiPart(enum QHttpMultiPart::ContentType, class QObject *) + ??0QHttpPart@@QAE@XZ @ 1179 NONAME ; QHttpPart::QHttpPart(void) + ?post@QNetworkAccessManager@@QAEPAVQNetworkReply@@ABVQNetworkRequest@@PAVQHttpMultiPart@@@Z @ 1180 NONAME ; class QNetworkReply * QNetworkAccessManager::post(class QNetworkRequest const &, class QHttpMultiPart *) + ??0QHttpMultiPart@@QAE@PAVQObject@@@Z @ 1181 NONAME ; QHttpMultiPart::QHttpMultiPart(class QObject *) + ??8QHttpPart@@QBE_NABV0@@Z @ 1182 NONAME ; bool QHttpPart::operator==(class QHttpPart const &) const + ?setBodyDevice@QHttpPart@@QAEXPAVQIODevice@@@Z @ 1183 NONAME ; void QHttpPart::setBodyDevice(class QIODevice *) + ?getStaticMetaObject@QHttpMultiPart@@SAABUQMetaObject@@XZ @ 1184 NONAME ; struct QMetaObject const & QHttpMultiPart::getStaticMetaObject(void) + ?qt_metacast@QHttpMultiPart@@UAEPAXPBD@Z @ 1185 NONAME ; void * QHttpMultiPart::qt_metacast(char const *) + ?put@QNetworkAccessManager@@QAEPAVQNetworkReply@@ABVQNetworkRequest@@PAVQHttpMultiPart@@@Z @ 1186 NONAME ; class QNetworkReply * QNetworkAccessManager::put(class QNetworkRequest const &, class QHttpMultiPart *) + ?tr@QHttpMultiPart@@SA?AVQString@@PBD0@Z @ 1187 NONAME ; class QString QHttpMultiPart::tr(char const *, char const *) + ?qt_metacall@QHttpMultiPart@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1188 NONAME ; int QHttpMultiPart::qt_metacall(enum QMetaObject::Call, int, void * *) + ?boundary@QHttpMultiPart@@QBE?AVQByteArray@@XZ @ 1189 NONAME ; class QByteArray QHttpMultiPart::boundary(void) const + ?setRawHeader@QHttpPart@@QAEXABVQByteArray@@0@Z @ 1190 NONAME ; void QHttpPart::setRawHeader(class QByteArray const &, class QByteArray const &) + ?metaObject@QHttpMultiPart@@UBEPBUQMetaObject@@XZ @ 1191 NONAME ; struct QMetaObject const * QHttpMultiPart::metaObject(void) const + ?setHeader@QHttpPart@@QAEXW4KnownHeaders@QNetworkRequest@@ABVQVariant@@@Z @ 1192 NONAME ; void QHttpPart::setHeader(enum QNetworkRequest::KnownHeaders, class QVariant const &) + ??1QHttpMultiPart@@UAE@XZ @ 1193 NONAME ; QHttpMultiPart::~QHttpMultiPart(void) + ?d_func@QHttpMultiPart@@ABEPBVQHttpMultiPartPrivate@@XZ @ 1194 NONAME ; class QHttpMultiPartPrivate const * QHttpMultiPart::d_func(void) const + ?tr@QHttpMultiPart@@SA?AVQString@@PBD0H@Z @ 1195 NONAME ; class QString QHttpMultiPart::tr(char const *, char const *, int) + ?setBoundary@QHttpMultiPart@@QAEXABVQByteArray@@@Z @ 1196 NONAME ; void QHttpMultiPart::setBoundary(class QByteArray const &) + ?qt_static_metacall@QNetworkSessionPrivate@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1197 NONAME ; void QNetworkSessionPrivate::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QUdpSocket@@0UQMetaObjectExtraData@@B @ 1198 NONAME ; struct QMetaObjectExtraData const QUdpSocket::staticMetaObjectExtraData + ?qt_static_metacall@QLocalSocket@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1199 NONAME ; void QLocalSocket::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QFtp@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1200 NONAME ; void QFtp::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTcpServer@@0UQMetaObjectExtraData@@B @ 1201 NONAME ; struct QMetaObjectExtraData const QTcpServer::staticMetaObjectExtraData + ?qt_static_metacall@QSslSocket@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1202 NONAME ; void QSslSocket::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QNetworkSession@@0UQMetaObjectExtraData@@B @ 1203 NONAME ; struct QMetaObjectExtraData const QNetworkSession::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QNetworkAccessManager@@0UQMetaObjectExtraData@@B @ 1204 NONAME ; struct QMetaObjectExtraData const QNetworkAccessManager::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractSocket@@0UQMetaObjectExtraData@@B @ 1205 NONAME ; struct QMetaObjectExtraData const QAbstractSocket::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QTcpSocket@@0UQMetaObjectExtraData@@B @ 1206 NONAME ; struct QMetaObjectExtraData const QTcpSocket::staticMetaObjectExtraData + ?qt_static_metacall@QTcpServer@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1207 NONAME ; void QTcpServer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QNetworkSessionPrivate@@0UQMetaObjectExtraData@@B @ 1208 NONAME ; struct QMetaObjectExtraData const QNetworkSessionPrivate::staticMetaObjectExtraData + ?qt_static_metacall@QNetworkConfigurationManagerPrivate@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1209 NONAME ; void QNetworkConfigurationManagerPrivate::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QHttp@@0UQMetaObjectExtraData@@B @ 1210 NONAME ; struct QMetaObjectExtraData const QHttp::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSslSocket@@0UQMetaObjectExtraData@@B @ 1211 NONAME ; struct QMetaObjectExtraData const QSslSocket::staticMetaObjectExtraData + ?qt_static_metacall@QNetworkReply@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1212 NONAME ; void QNetworkReply::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QLocalServer@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1213 NONAME ; void QLocalServer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QNetworkConfigurationManager@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1214 NONAME ; void QNetworkConfigurationManager::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractNetworkCache@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1215 NONAME ; void QAbstractNetworkCache::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QNetworkCookieJar@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1216 NONAME ; void QNetworkCookieJar::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractNetworkCache@@0UQMetaObjectExtraData@@B @ 1217 NONAME ; struct QMetaObjectExtraData const QAbstractNetworkCache::staticMetaObjectExtraData + ?qt_static_metacall@QHttpMultiPart@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1218 NONAME ; void QHttpMultiPart::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QBearerEngine@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1219 NONAME ; void QBearerEngine::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QLocalSocket@@0UQMetaObjectExtraData@@B @ 1220 NONAME ; struct QMetaObjectExtraData const QLocalSocket::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QHttpMultiPart@@0UQMetaObjectExtraData@@B @ 1221 NONAME ; struct QMetaObjectExtraData const QHttpMultiPart::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QNetworkConfigurationManagerPrivate@@0UQMetaObjectExtraData@@B @ 1222 NONAME ; struct QMetaObjectExtraData const QNetworkConfigurationManagerPrivate::staticMetaObjectExtraData + ?qt_static_metacall@QHttp@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1223 NONAME ; void QHttp::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QLocalServer@@0UQMetaObjectExtraData@@B @ 1224 NONAME ; struct QMetaObjectExtraData const QLocalServer::staticMetaObjectExtraData + ?qt_static_metacall@QUdpSocket@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1225 NONAME ; void QUdpSocket::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QBearerEngine@@0UQMetaObjectExtraData@@B @ 1226 NONAME ; struct QMetaObjectExtraData const QBearerEngine::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QBearerEnginePlugin@@0UQMetaObjectExtraData@@B @ 1227 NONAME ; struct QMetaObjectExtraData const QBearerEnginePlugin::staticMetaObjectExtraData + ?qt_static_metacall@QNetworkAccessManager@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1228 NONAME ; void QNetworkAccessManager::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QNetworkCookieJar@@0UQMetaObjectExtraData@@B @ 1229 NONAME ; struct QMetaObjectExtraData const QNetworkCookieJar::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QNetworkReply@@0UQMetaObjectExtraData@@B @ 1230 NONAME ; struct QMetaObjectExtraData const QNetworkReply::staticMetaObjectExtraData + ?qt_static_metacall@QNetworkSession@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1231 NONAME ; void QNetworkSession::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QAbstractSocket@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1232 NONAME ; void QAbstractSocket::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QNetworkDiskCache@@0UQMetaObjectExtraData@@B @ 1233 NONAME ; struct QMetaObjectExtraData const QNetworkDiskCache::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QFtp@@0UQMetaObjectExtraData@@B @ 1234 NONAME ; struct QMetaObjectExtraData const QFtp::staticMetaObjectExtraData + ?qt_static_metacall@QNetworkDiskCache@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1235 NONAME ; void QNetworkDiskCache::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QBearerEnginePlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1236 NONAME ; void QBearerEnginePlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QNetworkConfigurationManager@@0UQMetaObjectExtraData@@B @ 1237 NONAME ; struct QMetaObjectExtraData const QNetworkConfigurationManager::staticMetaObjectExtraData + ?qt_static_metacall@QTcpSocket@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 1238 NONAME ; void QTcpSocket::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 27aed05..f1db022 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -818,7 +818,7 @@ EXPORTS ?glGenFramebuffers@QGLFunctions@@QAEXHPAI@Z @ 817 NONAME ; void QGLFunctions::glGenFramebuffers(int, unsigned int *) ?glVertexAttrib3fv@QGLFunctions@@QAEXIPBM@Z @ 818 NONAME ; void QGLFunctions::glVertexAttrib3fv(unsigned int, float const *) ?glGetVertexAttribPointerv@QGLFunctions@@QAEXIIPAPAX@Z @ 819 NONAME ; void QGLFunctions::glGetVertexAttribPointerv(unsigned int, unsigned int, void * *) - ?snippetNameStr@QGLEngineSharedShaders@@SA?AVQByteArray@@W4SnippetName@1@@Z @ 820 NONAME ABSENT ; class QByteArray QGLEngineSharedShaders::snippetNameStr(enum QGLEngineSharedShaders::SnippetName) + ?snippetNameStr@QGLEngineSharedShaders@@SA?AVQByteArray@@W4SnippetName@1@@Z @ 820 NONAME ; class QByteArray QGLEngineSharedShaders::snippetNameStr(enum QGLEngineSharedShaders::SnippetName) ?glUniformMatrix4fv@QGLFunctions@@QAEXHHEPBM@Z @ 821 NONAME ; void QGLFunctions::glUniformMatrix4fv(int, int, unsigned char, float const *) ?setContext@QGLTextureGlyphCache@@QAEXPBVQGLContext@@@Z @ 822 NONAME ; void QGLTextureGlyphCache::setContext(class QGLContext const *) ?glDeleteBuffers@QGLFunctions@@QAEXHPBI@Z @ 823 NONAME ; void QGLFunctions::glDeleteBuffers(int, unsigned int const *) diff --git a/src/s60installs/bwins/QtScriptu.def b/src/s60installs/bwins/QtScriptu.def index 02a0819..709db1b 100644 --- a/src/s60installs/bwins/QtScriptu.def +++ b/src/s60installs/bwins/QtScriptu.def @@ -405,4 +405,8 @@ EXPORTS ?compare@QScriptDeclarativeClass@@UAE_NPAUObject@1@0@Z @ 404 NONAME ; bool QScriptDeclarativeClass::compare(struct QScriptDeclarativeClass::Object *, struct QScriptDeclarativeClass::Object *) ?toString@PersistentIdentifier@QScriptDeclarativeClass@@QBE?AVQString@@XZ @ 405 NONAME ; class QString QScriptDeclarativeClass::PersistentIdentifier::toString(void) const ?startsWithUpper@QScriptDeclarativeClass@@QAE_NABQAX@Z @ 406 NONAME ; bool QScriptDeclarativeClass::startsWithUpper(void * const const &) + ?qt_static_metacall@QScriptEngine@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 407 NONAME ; void QScriptEngine::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QScriptEngine@@0UQMetaObjectExtraData@@B @ 408 NONAME ; struct QMetaObjectExtraData const QScriptEngine::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QScriptExtensionPlugin@@0UQMetaObjectExtraData@@B @ 409 NONAME ; struct QMetaObjectExtraData const QScriptExtensionPlugin::staticMetaObjectExtraData + ?qt_static_metacall@QScriptExtensionPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 410 NONAME ; void QScriptExtensionPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) diff --git a/src/s60installs/bwins/QtSqlu.def b/src/s60installs/bwins/QtSqlu.def index 75fa3d0..586850a 100644 --- a/src/s60installs/bwins/QtSqlu.def +++ b/src/s60installs/bwins/QtSqlu.def @@ -458,4 +458,16 @@ EXPORTS ?staticMetaObject@QSqlDriver@@2UQMetaObject@@B @ 457 NONAME ; struct QMetaObject const QSqlDriver::staticMetaObject ?staticMetaObject@QSqlQueryModel@@2UQMetaObject@@B @ 458 NONAME ; struct QMetaObject const QSqlQueryModel::staticMetaObject ?staticMetaObject@QSQLiteDriver@@2UQMetaObject@@B @ 459 NONAME ; struct QMetaObject const QSQLiteDriver::staticMetaObject + ?qt_static_metacall@QSqlQueryModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 460 NONAME ; void QSqlQueryModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSQLiteDriver@@0UQMetaObjectExtraData@@B @ 461 NONAME ; struct QMetaObjectExtraData const QSQLiteDriver::staticMetaObjectExtraData + ?qt_static_metacall@QSqlTableModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 462 NONAME ; void QSqlTableModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSqlTableModel@@0UQMetaObjectExtraData@@B @ 463 NONAME ; struct QMetaObjectExtraData const QSqlTableModel::staticMetaObjectExtraData + ?qt_static_metacall@QSqlDriver@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 464 NONAME ; void QSqlDriver::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSqlDriverPlugin@@0UQMetaObjectExtraData@@B @ 465 NONAME ; struct QMetaObjectExtraData const QSqlDriverPlugin::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSqlDriver@@0UQMetaObjectExtraData@@B @ 466 NONAME ; struct QMetaObjectExtraData const QSqlDriver::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QSqlQueryModel@@0UQMetaObjectExtraData@@B @ 467 NONAME ; struct QMetaObjectExtraData const QSqlQueryModel::staticMetaObjectExtraData + ?qt_static_metacall@QSQLiteDriver@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 468 NONAME ; void QSQLiteDriver::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSqlRelationalTableModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 469 NONAME ; void QSqlRelationalTableModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSqlRelationalTableModel@@0UQMetaObjectExtraData@@B @ 470 NONAME ; struct QMetaObjectExtraData const QSqlRelationalTableModel::staticMetaObjectExtraData + ?qt_static_metacall@QSqlDriverPlugin@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 471 NONAME ; void QSqlDriverPlugin::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) diff --git a/src/s60installs/bwins/QtSvgu.def b/src/s60installs/bwins/QtSvgu.def index 96dbb7a..b0503f6 100644 --- a/src/s60installs/bwins/QtSvgu.def +++ b/src/s60installs/bwins/QtSvgu.def @@ -146,4 +146,10 @@ EXPORTS ?staticMetaObject@QSvgWidget@@2UQMetaObject@@B @ 145 NONAME ; struct QMetaObject const QSvgWidget::staticMetaObject ?staticMetaObject@QGraphicsSvgItem@@2UQMetaObject@@B @ 146 NONAME ; struct QMetaObject const QGraphicsSvgItem::staticMetaObject ?staticMetaObject@QSvgRenderer@@2UQMetaObject@@B @ 147 NONAME ; struct QMetaObject const QSvgRenderer::staticMetaObject + ?qt_static_metacall@QSvgWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 148 NONAME ; void QSvgWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@QSvgRenderer@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 149 NONAME ; void QSvgRenderer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSvgWidget@@0UQMetaObjectExtraData@@B @ 150 NONAME ; struct QMetaObjectExtraData const QSvgWidget::staticMetaObjectExtraData + ?qt_static_metacall@QGraphicsSvgItem@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 151 NONAME ; void QGraphicsSvgItem::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QSvgRenderer@@0UQMetaObjectExtraData@@B @ 152 NONAME ; struct QMetaObjectExtraData const QSvgRenderer::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QGraphicsSvgItem@@0UQMetaObjectExtraData@@B @ 153 NONAME ; struct QMetaObjectExtraData const QGraphicsSvgItem::staticMetaObjectExtraData diff --git a/src/s60installs/bwins/QtTestu.def b/src/s60installs/bwins/QtTestu.def index 60a7a4c..6b7cb9a 100644 --- a/src/s60installs/bwins/QtTestu.def +++ b/src/s60installs/bwins/QtTestu.def @@ -77,93 +77,95 @@ EXPORTS ?staticMetaObject@QTestEventLoop@@2UQMetaObject@@B @ 76 NONAME ; struct QMetaObject const QTestEventLoop::staticMetaObject ?setBenchmarkResult@QTest@@YAXMW4QBenchmarkMetric@1@@Z @ 77 NONAME ; void QTest::setBenchmarkResult(float, enum QTest::QBenchmarkMetric) ?endBenchmarkMeasurement@QTest@@YA_KXZ @ 78 NONAME ; unsigned long long QTest::endBenchmarkMeasurement(void) - ?addBenchmarkResult@QTestLog@@SAXABVQBenchmarkResult@@@Z @ 79 NONAME ; void QTestLog::addBenchmarkResult(class QBenchmarkResult const &) - ?currentTestLocation@QTestResult@@SA?AW4TestLocation@1@XZ @ 80 NONAME ; enum QTestResult::TestLocation QTestResult::currentTestLocation(void) - ?setCurrentTestLocation@QTestResult@@SAXW4TestLocation@1@@Z @ 81 NONAME ; void QTestResult::setCurrentTestLocation(enum QTestResult::TestLocation) - ?testFailed@QTestResult@@SA_NXZ @ 82 NONAME ; bool QTestResult::testFailed(void) - ?setVerboseLevel@QTestLog@@SAXH@Z @ 83 NONAME ; void QTestLog::setVerboseLevel(int) - ?setCurrentTestObject@QTestResult@@SAXPBD@Z @ 84 NONAME ; void QTestResult::setCurrentTestObject(char const *) - ?isEmpty@QTestTable@@QBE_NXZ @ 85 NONAME ; bool QTestTable::isEmpty(void) const - ?reset@QTestResult@@SAXXZ @ 86 NONAME ; void QTestResult::reset(void) - ?info@QTestLog@@SAXPBD0H@Z @ 87 NONAME ; void QTestLog::info(char const *, char const *, int) - ?adjustMedianIterationCount@QBenchmarkGlobalData@@QAEHXZ @ 88 NONAME ; int QBenchmarkGlobalData::adjustMedianIterationCount(void) - ?addColumn@QTestTable@@QAEXHPBD@Z @ 89 NONAME ; void QTestTable::addColumn(int, char const *) - ?setMode@QBenchmarkGlobalData@@QAEXW4Mode@1@@Z @ 90 NONAME ; void QBenchmarkGlobalData::setMode(enum QBenchmarkGlobalData::Mode) - ?addFailure@QTestResult@@SAXPBD0H@Z @ 91 NONAME ; void QTestResult::addFailure(char const *, char const *, int) - ?indexOf@QTestTable@@QBEHPBD@Z @ 92 NONAME ; int QTestTable::indexOf(char const *) const - ?warn@QTestLog@@SAXPBD@Z @ 93 NONAME ; void QTestLog::warn(char const *) - ?currentTestData@QTestResult@@SAPAVQTestData@@XZ @ 94 NONAME ; class QTestData * QTestResult::currentTestData(void) - ?startLogging@QTestLog@@SAXI@Z @ 95 NONAME ; void QTestLog::startLogging(unsigned int) - ?endDataRun@QBenchmarkTestMethodData@@QAEXXZ @ 96 NONAME ; void QBenchmarkTestMethodData::endDataRun(void) - ?globalTestTable@QTestTable@@SAPAV1@XZ @ 97 NONAME ; class QTestTable * QTestTable::globalTestTable(void) - ?elementCount@QTestTable@@QBEHXZ @ 98 NONAME ; int QTestTable::elementCount(void) const - ??0QTestLog@@AAE@XZ @ 99 NONAME ; QTestLog::QTestLog(void) - ?allDataPassed@QTestResult@@SA_NXZ @ 100 NONAME ; bool QTestResult::allDataPassed(void) - ??0QBenchmarkTestMethodData@@QAE@XZ @ 101 NONAME ; QBenchmarkTestMethodData::QBenchmarkTestMethodData(void) - ?qtest_qParseArgs@QTest@@YAXHQAPAD_N@Z @ 102 NONAME ; void QTest::qtest_qParseArgs(int, char * * const, bool) - ?unhandledIgnoreMessages@QTestLog@@SAHXZ @ 103 NONAME ; int QTestLog::unhandledIgnoreMessages(void) - ?setCurrentTestFunction@QTestResult@@SAXPBD@Z @ 104 NONAME ; void QTestResult::setCurrentTestFunction(char const *) - ?enterTestFunction@QTestLog@@SAXPBD@Z @ 105 NONAME ; void QTestLog::enterTestFunction(char const *) - ?testFunctions@QTest@@3VQStringList@@A @ 106 NONAME ; class QStringList QTest::testFunctions - ?addSkip@QTestResult@@SAXPBDW4SkipMode@QTest@@0H@Z @ 107 NONAME ; void QTestResult::addSkip(char const *, enum QTest::SkipMode, char const *, int) - ?currentGlobalDataTag@QTestResult@@SAPBDXZ @ 108 NONAME ; char const * QTestResult::currentGlobalDataTag(void) - ?stopLogging@QTestLog@@SAXXZ @ 109 NONAME ; void QTestLog::stopLogging(void) - ??1QTestLog@@AAE@XZ @ 110 NONAME ; QTestLog::~QTestLog(void) - ?skipCount@QTestResult@@SAHXZ @ 111 NONAME ; int QTestResult::skipCount(void) - ?setCurrentGlobalTestData@QTestResult@@SAXPAVQTestData@@@Z @ 112 NONAME ; void QTestResult::setCurrentGlobalTestData(class QTestData *) - ?elementTypeId@QTestTable@@QBEHH@Z @ 113 NONAME ; int QTestTable::elementTypeId(int) const - ?dataTag@QTestTable@@QBEPBDH@Z @ 114 NONAME ; char const * QTestTable::dataTag(int) const - ?dataCount@QTestTable@@QBEHXZ @ 115 NONAME ; int QTestTable::dataCount(void) const - ?printUnhandledIgnoreMessages@QTestLog@@SAXXZ @ 116 NONAME ; void QTestLog::printUnhandledIgnoreMessages(void) - ??1QBenchmarkTestMethodData@@QAE@XZ @ 117 NONAME ; QBenchmarkTestMethodData::~QBenchmarkTestMethodData(void) - ??1QTestTable@@QAE@XZ @ 118 NONAME ; QTestTable::~QTestTable(void) - ?current@QBenchmarkGlobalData@@2PAV1@A @ 119 NONAME ; class QBenchmarkGlobalData * QBenchmarkGlobalData::current - ?setFlushMode@QTestLog@@SAXW4FlushMode@1@@Z @ 120 NONAME ; void QTestLog::setFlushMode(enum QTestLog::FlushMode) - ?ignoreMessage@QTestResult@@SAXW4QtMsgType@@PBD@Z @ 121 NONAME ; void QTestResult::ignoreMessage(enum QtMsgType, char const *) - ?failCount@QTestResult@@SAHXZ @ 122 NONAME ; int QTestResult::failCount(void) - ?mode@QBenchmarkGlobalData@@QBE?AW4Mode@1@XZ @ 123 NONAME ; enum QBenchmarkGlobalData::Mode QBenchmarkGlobalData::mode(void) const - ?addSkip@QTestLog@@SAXPBDW4SkipMode@QTest@@0H@Z @ 124 NONAME ; void QTestLog::addSkip(char const *, enum QTest::SkipMode, char const *, int) - ?outputFileName@QTestLog@@SAPBDXZ @ 125 NONAME ; char const * QTestLog::outputFileName(void) - ?expectFail@QTestResult@@SA_NPBD0W4TestFailMode@QTest@@0H@Z @ 126 NONAME ; bool QTestResult::expectFail(char const *, char const *, enum QTest::TestFailMode, char const *, int) - ?passCount@QTestResult@@SAHXZ @ 127 NONAME ; int QTestResult::passCount(void) - ?logMode@QTestLog@@SA?AW4LogMode@1@XZ @ 128 NONAME ; enum QTestLog::LogMode QTestLog::logMode(void) - ?skipCurrentTest@QTestResult@@SA_NXZ @ 129 NONAME ; bool QTestResult::skipCurrentTest(void) - ?addXPass@QTestLog@@SAXPBD0H@Z @ 130 NONAME ; void QTestLog::addXPass(char const *, char const *, int) - ?testTags@QTest@@3VQStringList@@A @ 131 NONAME ; class QStringList QTest::testTags - ?isBenchmark@QBenchmarkTestMethodData@@QBE_NXZ @ 132 NONAME ; bool QBenchmarkTestMethodData::isBenchmark(void) const - ?adjustIterationCount@QBenchmarkTestMethodData@@QAEHH@Z @ 133 NONAME ; int QBenchmarkTestMethodData::adjustIterationCount(int) - ??1QBenchmarkGlobalData@@QAE@XZ @ 134 NONAME ; QBenchmarkGlobalData::~QBenchmarkGlobalData(void) - ?printAvailableFunctions@QTest@@3_NA @ 135 NONAME ; bool QTest::printAvailableFunctions - ?testData@QTestTable@@QBEPAVQTestData@@H@Z @ 136 NONAME ; class QTestData * QTestTable::testData(int) const - ?setCurrentTestData@QTestResult@@SAXPAVQTestData@@@Z @ 137 NONAME ; void QTestResult::setCurrentTestData(class QTestData *) - ?compare@QTestResult@@SA_N_NPBD1H@Z @ 138 NONAME ; bool QTestResult::compare(bool, char const *, char const *, int) - ?currentTestFailed@QTestResult@@SA_NXZ @ 139 NONAME ; bool QTestResult::currentTestFailed(void) - ?compare@QTestResult@@SA_N_NPBDPAD2111H@Z @ 140 NONAME ; bool QTestResult::compare(bool, char const *, char *, char *, char const *, char const *, char const *, int) - ?addXFail@QTestLog@@SAXPBD0H@Z @ 141 NONAME ; void QTestLog::addXFail(char const *, char const *, int) - ??0QBenchmarkGlobalData@@QAE@XZ @ 142 NONAME ; QBenchmarkGlobalData::QBenchmarkGlobalData(void) - ?beginDataRun@QBenchmarkTestMethodData@@QAEXXZ @ 143 NONAME ; void QBenchmarkTestMethodData::beginDataRun(void) - ?resultsAccepted@QBenchmarkTestMethodData@@QBE_NXZ @ 144 NONAME ; bool QBenchmarkTestMethodData::resultsAccepted(void) const - ?addIgnoreMessage@QTestLog@@SAXW4QtMsgType@@PBD@Z @ 145 NONAME ; void QTestLog::addIgnoreMessage(enum QtMsgType, char const *) - ?startLogging@QTestLog@@SAXXZ @ 146 NONAME ; void QTestLog::startLogging(void) - ?currentDataTag@QTestResult@@SAPBDXZ @ 147 NONAME ; char const * QTestResult::currentDataTag(void) - ?redirectOutput@QTestLog@@SAXPBD@Z @ 148 NONAME ; void QTestLog::redirectOutput(char const *) - ?currentTestObjectName@QTestResult@@SAPBDXZ @ 149 NONAME ; char const * QTestResult::currentTestObjectName(void) - ?newData@QTestTable@@QAEPAVQTestData@@PBD@Z @ 150 NONAME ; class QTestData * QTestTable::newData(char const *) - ?addPass@QTestLog@@SAXPBD@Z @ 151 NONAME ; void QTestLog::addPass(char const *) - ?verboseLevel@QTestLog@@SAHXZ @ 152 NONAME ; int QTestLog::verboseLevel(void) - ?createMeasurer@QBenchmarkGlobalData@@QAEPAVQBenchmarkMeasurerBase@@XZ @ 153 NONAME ; class QBenchmarkMeasurerBase * QBenchmarkGlobalData::createMeasurer(void) - ?currentGlobalTestData@QTestResult@@SAPAVQTestData@@XZ @ 154 NONAME ; class QTestData * QTestResult::currentGlobalTestData(void) - ?setSkipCurrentTest@QTestResult@@SAX_N@Z @ 155 NONAME ; void QTestResult::setSkipCurrentTest(bool) - ?setResult@QBenchmarkTestMethodData@@QAEXMW4QBenchmarkMetric@QTest@@_N@Z @ 156 NONAME ; void QBenchmarkTestMethodData::setResult(float, enum QTest::QBenchmarkMetric, bool) - ?verify@QTestResult@@SA_N_NPBD11H@Z @ 157 NONAME ; bool QTestResult::verify(bool, char const *, char const *, char const *, int) - ?leaveTestFunction@QTestLog@@SAXXZ @ 158 NONAME ; void QTestLog::leaveTestFunction(void) - ?finishedCurrentTestFunction@QTestResult@@SAXXZ @ 159 NONAME ; void QTestResult::finishedCurrentTestFunction(void) - ?currentTestTable@QTestTable@@SAPAV1@XZ @ 160 NONAME ; class QTestTable * QTestTable::currentTestTable(void) - ?currentTestFunction@QTestResult@@SAPBDXZ @ 161 NONAME ; char const * QTestResult::currentTestFunction(void) - ?setLogMode@QTestLog@@SAXW4LogMode@1@@Z @ 162 NONAME ; void QTestLog::setLogMode(enum QTestLog::LogMode) - ?clearGlobalTestTable@QTestTable@@SAXXZ @ 163 NONAME ; void QTestTable::clearGlobalTestTable(void) - ?addFail@QTestLog@@SAXPBD0H@Z @ 164 NONAME ; void QTestLog::addFail(char const *, char const *, int) - ??0QTestTable@@QAE@XZ @ 165 NONAME ; QTestTable::QTestTable(void) - ?setMaxWarnings@QTestLog@@SAXH@Z @ 166 NONAME ; void QTestLog::setMaxWarnings(int) - ?current@QBenchmarkTestMethodData@@2PAV1@A @ 167 NONAME ; class QBenchmarkTestMethodData * QBenchmarkTestMethodData::current + ?addXFail@QTestLog@@SAXPBD0H@Z @ 79 NONAME ; void QTestLog::addXFail(char const *, char const *, int) + ?leaveTestFunction@QTestLog@@SAXXZ @ 80 NONAME ; void QTestLog::leaveTestFunction(void) + ?setCurrentTestFunction@QTestResult@@SAXPBD@Z @ 81 NONAME ; void QTestResult::setCurrentTestFunction(char const *) + ?currentTestObjectName@QTestResult@@SAPBDXZ @ 82 NONAME ; char const * QTestResult::currentTestObjectName(void) + ?allDataPassed@QTestResult@@SA_NXZ @ 83 NONAME ; bool QTestResult::allDataPassed(void) + ?redirectOutput@QTestLog@@SAXPBD@Z @ 84 NONAME ; void QTestLog::redirectOutput(char const *) + ?testData@QTestTable@@QBEPAVQTestData@@H@Z @ 85 NONAME ; class QTestData * QTestTable::testData(int) const + ?isEmpty@QTestTable@@QBE_NXZ @ 86 NONAME ; bool QTestTable::isEmpty(void) const + ?logMode@QTestLog@@SA?AW4LogMode@1@XZ @ 87 NONAME ; enum QTestLog::LogMode QTestLog::logMode(void) + ?dataCount@QTestTable@@QBEHXZ @ 88 NONAME ; int QTestTable::dataCount(void) const + ?addFailure@QTestResult@@SAXPBD0H@Z @ 89 NONAME ; void QTestResult::addFailure(char const *, char const *, int) + ?setCurrentTestData@QTestResult@@SAXPAVQTestData@@@Z @ 90 NONAME ; void QTestResult::setCurrentTestData(class QTestData *) + ?setMode@QBenchmarkGlobalData@@QAEXW4Mode@1@@Z @ 91 NONAME ; void QBenchmarkGlobalData::setMode(enum QBenchmarkGlobalData::Mode) + ??1QTestTable@@QAE@XZ @ 92 NONAME ; QTestTable::~QTestTable(void) + ?setLogMode@QTestLog@@SAXW4LogMode@1@@Z @ 93 NONAME ; void QTestLog::setLogMode(enum QTestLog::LogMode) + ?addBenchmarkResult@QTestLog@@SAXABVQBenchmarkResult@@@Z @ 94 NONAME ; void QTestLog::addBenchmarkResult(class QBenchmarkResult const &) + ?setVerboseLevel@QTestLog@@SAXH@Z @ 95 NONAME ; void QTestLog::setVerboseLevel(int) + ??0QBenchmarkGlobalData@@QAE@XZ @ 96 NONAME ; QBenchmarkGlobalData::QBenchmarkGlobalData(void) + ?stopLogging@QTestLog@@SAXXZ @ 97 NONAME ; void QTestLog::stopLogging(void) + ?setCurrentGlobalTestData@QTestResult@@SAXPAVQTestData@@@Z @ 98 NONAME ; void QTestResult::setCurrentGlobalTestData(class QTestData *) + ?currentTestLocation@QTestResult@@SA?AW4TestLocation@1@XZ @ 99 NONAME ; enum QTestResult::TestLocation QTestResult::currentTestLocation(void) + ?currentTestFunction@QTestResult@@SAPBDXZ @ 100 NONAME ; char const * QTestResult::currentTestFunction(void) + ?dataTag@QTestTable@@QBEPBDH@Z @ 101 NONAME ; char const * QTestTable::dataTag(int) const + ?expectFail@QTestResult@@SA_NPBD0W4TestFailMode@QTest@@0H@Z @ 102 NONAME ; bool QTestResult::expectFail(char const *, char const *, enum QTest::TestFailMode, char const *, int) + ?currentDataTag@QTestResult@@SAPBDXZ @ 103 NONAME ; char const * QTestResult::currentDataTag(void) + ??0QTestTable@@QAE@XZ @ 104 NONAME ; QTestTable::QTestTable(void) + ?setFlushMode@QTestLog@@SAXW4FlushMode@1@@Z @ 105 NONAME ; void QTestLog::setFlushMode(enum QTestLog::FlushMode) + ?setCurrentTestObject@QTestResult@@SAXPBD@Z @ 106 NONAME ; void QTestResult::setCurrentTestObject(char const *) + ?beginDataRun@QBenchmarkTestMethodData@@QAEXXZ @ 107 NONAME ; void QBenchmarkTestMethodData::beginDataRun(void) + ?qtest_qParseArgs@QTest@@YAXHQAPAD_N@Z @ 108 NONAME ; void QTest::qtest_qParseArgs(int, char * * const, bool) + ?enterTestFunction@QTestLog@@SAXPBD@Z @ 109 NONAME ; void QTestLog::enterTestFunction(char const *) + ?clearGlobalTestTable@QTestTable@@SAXXZ @ 110 NONAME ; void QTestTable::clearGlobalTestTable(void) + ?addPass@QTestLog@@SAXPBD@Z @ 111 NONAME ; void QTestLog::addPass(char const *) + ?printUnhandledIgnoreMessages@QTestLog@@SAXXZ @ 112 NONAME ; void QTestLog::printUnhandledIgnoreMessages(void) + ?addColumn@QTestTable@@QAEXHPBD@Z @ 113 NONAME ; void QTestTable::addColumn(int, char const *) + ?setSkipCurrentTest@QTestResult@@SAX_N@Z @ 114 NONAME ; void QTestResult::setSkipCurrentTest(bool) + ?currentTestFailed@QTestResult@@SA_NXZ @ 115 NONAME ; bool QTestResult::currentTestFailed(void) + ?createMeasurer@QBenchmarkGlobalData@@QAEPAVQBenchmarkMeasurerBase@@XZ @ 116 NONAME ; class QBenchmarkMeasurerBase * QBenchmarkGlobalData::createMeasurer(void) + ?startLogging@QTestLog@@SAXXZ @ 117 NONAME ; void QTestLog::startLogging(void) + ?printAvailableFunctions@QTest@@3_NA @ 118 NONAME ; bool QTest::printAvailableFunctions + ?testFailed@QTestResult@@SA_NXZ @ 119 NONAME ; bool QTestResult::testFailed(void) + ?current@QBenchmarkTestMethodData@@2PAV1@A @ 120 NONAME ; class QBenchmarkTestMethodData * QBenchmarkTestMethodData::current + ?currentGlobalDataTag@QTestResult@@SAPBDXZ @ 121 NONAME ; char const * QTestResult::currentGlobalDataTag(void) + ?adjustIterationCount@QBenchmarkTestMethodData@@QAEHH@Z @ 122 NONAME ; int QBenchmarkTestMethodData::adjustIterationCount(int) + ?current@QBenchmarkGlobalData@@2PAV1@A @ 123 NONAME ; class QBenchmarkGlobalData * QBenchmarkGlobalData::current + ?warn@QTestLog@@SAXPBD@Z @ 124 NONAME ; void QTestLog::warn(char const *) + ?testFunctions@QTest@@3VQStringList@@A @ 125 NONAME ; class QStringList QTest::testFunctions + ?elementTypeId@QTestTable@@QBEHH@Z @ 126 NONAME ; int QTestTable::elementTypeId(int) const + ?ignoreMessage@QTestResult@@SAXW4QtMsgType@@PBD@Z @ 127 NONAME ; void QTestResult::ignoreMessage(enum QtMsgType, char const *) + ?globalTestTable@QTestTable@@SAPAV1@XZ @ 128 NONAME ; class QTestTable * QTestTable::globalTestTable(void) + ??0QBenchmarkTestMethodData@@QAE@XZ @ 129 NONAME ; QBenchmarkTestMethodData::QBenchmarkTestMethodData(void) + ?currentTestTable@QTestTable@@SAPAV1@XZ @ 130 NONAME ; class QTestTable * QTestTable::currentTestTable(void) + ?addFail@QTestLog@@SAXPBD0H@Z @ 131 NONAME ; void QTestLog::addFail(char const *, char const *, int) + ?endDataRun@QBenchmarkTestMethodData@@QAEXXZ @ 132 NONAME ; void QBenchmarkTestMethodData::endDataRun(void) + ?resultsAccepted@QBenchmarkTestMethodData@@QBE_NXZ @ 133 NONAME ; bool QBenchmarkTestMethodData::resultsAccepted(void) const + ?verify@QTestResult@@SA_N_NPBD11H@Z @ 134 NONAME ; bool QTestResult::verify(bool, char const *, char const *, char const *, int) + ??1QBenchmarkTestMethodData@@QAE@XZ @ 135 NONAME ; QBenchmarkTestMethodData::~QBenchmarkTestMethodData(void) + ?addIgnoreMessage@QTestLog@@SAXW4QtMsgType@@PBD@Z @ 136 NONAME ; void QTestLog::addIgnoreMessage(enum QtMsgType, char const *) + ?newData@QTestTable@@QAEPAVQTestData@@PBD@Z @ 137 NONAME ; class QTestData * QTestTable::newData(char const *) + ?reset@QTestResult@@SAXXZ @ 138 NONAME ; void QTestResult::reset(void) + ?currentTestData@QTestResult@@SAPAVQTestData@@XZ @ 139 NONAME ; class QTestData * QTestResult::currentTestData(void) + ?skipCurrentTest@QTestResult@@SA_NXZ @ 140 NONAME ; bool QTestResult::skipCurrentTest(void) + ?outputFileName@QTestLog@@SAPBDXZ @ 141 NONAME ; char const * QTestLog::outputFileName(void) + ?adjustMedianIterationCount@QBenchmarkGlobalData@@QAEHXZ @ 142 NONAME ; int QBenchmarkGlobalData::adjustMedianIterationCount(void) + ??0QTestLog@@AAE@XZ @ 143 NONAME ; QTestLog::QTestLog(void) + ?compare@QTestResult@@SA_N_NPBDPAD2111H@Z @ 144 NONAME ; bool QTestResult::compare(bool, char const *, char *, char *, char const *, char const *, char const *, int) + ?elementCount@QTestTable@@QBEHXZ @ 145 NONAME ; int QTestTable::elementCount(void) const + ?setResult@QBenchmarkTestMethodData@@QAEXMW4QBenchmarkMetric@QTest@@_N@Z @ 146 NONAME ; void QBenchmarkTestMethodData::setResult(float, enum QTest::QBenchmarkMetric, bool) + ?finishedCurrentTestFunction@QTestResult@@SAXXZ @ 147 NONAME ; void QTestResult::finishedCurrentTestFunction(void) + ?setCurrentTestLocation@QTestResult@@SAXW4TestLocation@1@@Z @ 148 NONAME ; void QTestResult::setCurrentTestLocation(enum QTestResult::TestLocation) + ?currentGlobalTestData@QTestResult@@SAPAVQTestData@@XZ @ 149 NONAME ; class QTestData * QTestResult::currentGlobalTestData(void) + ?mode@QBenchmarkGlobalData@@QBE?AW4Mode@1@XZ @ 150 NONAME ; enum QBenchmarkGlobalData::Mode QBenchmarkGlobalData::mode(void) const + ?setMaxWarnings@QTestLog@@SAXH@Z @ 151 NONAME ; void QTestLog::setMaxWarnings(int) + ?failCount@QTestResult@@SAHXZ @ 152 NONAME ; int QTestResult::failCount(void) + ?verboseLevel@QTestLog@@SAHXZ @ 153 NONAME ; int QTestLog::verboseLevel(void) + ?passCount@QTestResult@@SAHXZ @ 154 NONAME ; int QTestResult::passCount(void) + ?indexOf@QTestTable@@QBEHPBD@Z @ 155 NONAME ; int QTestTable::indexOf(char const *) const + ?compare@QTestResult@@SA_N_NPBD1H@Z @ 156 NONAME ; bool QTestResult::compare(bool, char const *, char const *, int) + ?startLogging@QTestLog@@SAXI@Z @ 157 NONAME ; void QTestLog::startLogging(unsigned int) + ?addSkip@QTestLog@@SAXPBDW4SkipMode@QTest@@0H@Z @ 158 NONAME ; void QTestLog::addSkip(char const *, enum QTest::SkipMode, char const *, int) + ?testTags@QTest@@3VQStringList@@A @ 159 NONAME ; class QStringList QTest::testTags + ??1QTestLog@@AAE@XZ @ 160 NONAME ; QTestLog::~QTestLog(void) + ?unhandledIgnoreMessages@QTestLog@@SAHXZ @ 161 NONAME ; int QTestLog::unhandledIgnoreMessages(void) + ?info@QTestLog@@SAXPBD0H@Z @ 162 NONAME ; void QTestLog::info(char const *, char const *, int) + ??1QBenchmarkGlobalData@@QAE@XZ @ 163 NONAME ; QBenchmarkGlobalData::~QBenchmarkGlobalData(void) + ?isBenchmark@QBenchmarkTestMethodData@@QBE_NXZ @ 164 NONAME ; bool QBenchmarkTestMethodData::isBenchmark(void) const + ?addSkip@QTestResult@@SAXPBDW4SkipMode@QTest@@0H@Z @ 165 NONAME ; void QTestResult::addSkip(char const *, enum QTest::SkipMode, char const *, int) + ?skipCount@QTestResult@@SAHXZ @ 166 NONAME ; int QTestResult::skipCount(void) + ?addXPass@QTestLog@@SAXPBD0H@Z @ 167 NONAME ; void QTestLog::addXPass(char const *, char const *, int) + ?qt_static_metacall@QTestEventLoop@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 168 NONAME ; void QTestEventLoop::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QTestEventLoop@@0UQMetaObjectExtraData@@B @ 169 NONAME ; struct QMetaObjectExtraData const QTestEventLoop::staticMetaObjectExtraData diff --git a/src/s60installs/bwins/QtXmlPatternsu.def b/src/s60installs/bwins/QtXmlPatternsu.def index 57a75d4..268201d 100644 --- a/src/s60installs/bwins/QtXmlPatternsu.def +++ b/src/s60installs/bwins/QtXmlPatternsu.def @@ -277,4 +277,8 @@ EXPORTS ?writeEscapedAttribute@QXmlSerializer@@AAEXABVQString@@@Z @ 276 NONAME ; void QXmlSerializer::writeEscapedAttribute(class QString const &) ?staticMetaObject@QAbstractMessageHandler@@2UQMetaObject@@B @ 277 NONAME ; struct QMetaObject const QAbstractMessageHandler::staticMetaObject ?staticMetaObject@QAbstractUriResolver@@2UQMetaObject@@B @ 278 NONAME ; struct QMetaObject const QAbstractUriResolver::staticMetaObject + ?qt_static_metacall@QAbstractUriResolver@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 279 NONAME ; void QAbstractUriResolver::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@QAbstractUriResolver@@0UQMetaObjectExtraData@@B @ 280 NONAME ; struct QMetaObjectExtraData const QAbstractUriResolver::staticMetaObjectExtraData + ?staticMetaObjectExtraData@QAbstractMessageHandler@@0UQMetaObjectExtraData@@B @ 281 NONAME ; struct QMetaObjectExtraData const QAbstractMessageHandler::staticMetaObjectExtraData + ?qt_static_metacall@QAbstractMessageHandler@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 282 NONAME ; void QAbstractMessageHandler::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) diff --git a/src/s60installs/bwins/phononu.def b/src/s60installs/bwins/phononu.def index fe80e12..826f52d 100644 --- a/src/s60installs/bwins/phononu.def +++ b/src/s60installs/bwins/phononu.def @@ -570,4 +570,32 @@ EXPORTS ?setOutputDevice@PulseSupport@Phonon@@QAE_NVQString@@H@Z @ 569 NONAME ; bool Phonon::PulseSupport::setOutputDevice(class QString, int) ?qt_metacast@AudioDataOutput@Phonon@@UAEPAXPBD@Z @ 570 NONAME ; void * Phonon::AudioDataOutput::qt_metacast(char const *) ?clearStreamCache@PulseSupport@Phonon@@QAEXVQString@@@Z @ 571 NONAME ; void Phonon::PulseSupport::clearStreamCache(class QString) + ?qt_static_metacall@MediaObject@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 572 NONAME ; void Phonon::MediaObject::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@AbstractMediaStream@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 573 NONAME ; void Phonon::AbstractMediaStream::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@MediaController@Phonon@@0UQMetaObjectExtraData@@B @ 574 NONAME ; struct QMetaObjectExtraData const Phonon::MediaController::staticMetaObjectExtraData + ?staticMetaObjectExtraData@AudioDataOutput@Phonon@@0UQMetaObjectExtraData@@B @ 575 NONAME ; struct QMetaObjectExtraData const Phonon::AudioDataOutput::staticMetaObjectExtraData + ?qt_static_metacall@VolumeFaderEffect@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 576 NONAME ; void Phonon::VolumeFaderEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@AbstractMediaStream@Phonon@@0UQMetaObjectExtraData@@B @ 577 NONAME ; struct QMetaObjectExtraData const Phonon::AbstractMediaStream::staticMetaObjectExtraData + ?qt_static_metacall@AbstractAudioOutput@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 578 NONAME ; void Phonon::AbstractAudioOutput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@AudioDataOutput@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 579 NONAME ; void Phonon::AudioDataOutput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@PulseSupport@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 580 NONAME ; void Phonon::PulseSupport::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@SeekSlider@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 581 NONAME ; void Phonon::SeekSlider::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@AudioOutput@Phonon@@0UQMetaObjectExtraData@@B @ 582 NONAME ; struct QMetaObjectExtraData const Phonon::AudioOutput::staticMetaObjectExtraData + ?qt_static_metacall@MediaController@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 583 NONAME ; void Phonon::MediaController::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@VolumeSlider@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 584 NONAME ; void Phonon::VolumeSlider::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@VideoPlayer@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 585 NONAME ; void Phonon::VideoPlayer::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@Effect@Phonon@@0UQMetaObjectExtraData@@B @ 586 NONAME ; struct QMetaObjectExtraData const Phonon::Effect::staticMetaObjectExtraData + ?qt_static_metacall@VideoWidget@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 587 NONAME ; void Phonon::VideoWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@VideoPlayer@Phonon@@0UQMetaObjectExtraData@@B @ 588 NONAME ; struct QMetaObjectExtraData const Phonon::VideoPlayer::staticMetaObjectExtraData + ?qt_static_metacall@EffectWidget@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 589 NONAME ; void Phonon::EffectWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@VolumeSlider@Phonon@@0UQMetaObjectExtraData@@B @ 590 NONAME ; struct QMetaObjectExtraData const Phonon::VolumeSlider::staticMetaObjectExtraData + ?staticMetaObjectExtraData@AbstractAudioOutput@Phonon@@0UQMetaObjectExtraData@@B @ 591 NONAME ; struct QMetaObjectExtraData const Phonon::AbstractAudioOutput::staticMetaObjectExtraData + ?staticMetaObjectExtraData@PulseSupport@Phonon@@0UQMetaObjectExtraData@@B @ 592 NONAME ; struct QMetaObjectExtraData const Phonon::PulseSupport::staticMetaObjectExtraData + ?staticMetaObjectExtraData@VideoWidget@Phonon@@0UQMetaObjectExtraData@@B @ 593 NONAME ; struct QMetaObjectExtraData const Phonon::VideoWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@VolumeFaderEffect@Phonon@@0UQMetaObjectExtraData@@B @ 594 NONAME ; struct QMetaObjectExtraData const Phonon::VolumeFaderEffect::staticMetaObjectExtraData + ?staticMetaObjectExtraData@EffectWidget@Phonon@@0UQMetaObjectExtraData@@B @ 595 NONAME ; struct QMetaObjectExtraData const Phonon::EffectWidget::staticMetaObjectExtraData + ?staticMetaObjectExtraData@SeekSlider@Phonon@@0UQMetaObjectExtraData@@B @ 596 NONAME ; struct QMetaObjectExtraData const Phonon::SeekSlider::staticMetaObjectExtraData + ?qt_static_metacall@Effect@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 597 NONAME ; void Phonon::Effect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?qt_static_metacall@AudioOutput@Phonon@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 598 NONAME ; void Phonon::AudioOutput::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?staticMetaObjectExtraData@MediaObject@Phonon@@0UQMetaObjectExtraData@@B @ 599 NONAME ; struct QMetaObjectExtraData const Phonon::MediaObject::staticMetaObjectExtraData diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index 314c5cc..81b5267 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -612,8 +612,8 @@ EXPORTS _ZN14QLocalePrivate19updateSystemPrivateEv @ 611 NONAME _ZN14QLocalePrivate22bytearrayToUnsLongLongEPKciPb @ 612 NONAME _ZN14QMetaCallEvent13placeMetaCallEP7QObject @ 613 NONAME - _ZN14QMetaCallEventC1EiPK7QObjectiiPiPPvP10QSemaphore @ 614 NONAME - _ZN14QMetaCallEventC2EiPK7QObjectiiPiPPvP10QSemaphore @ 615 NONAME + _ZN14QMetaCallEventC1EiPK7QObjectiiPiPPvP10QSemaphore @ 614 NONAME ABSENT + _ZN14QMetaCallEventC2EiPK7QObjectiiPiPPvP10QSemaphore @ 615 NONAME ABSENT _ZN14QMetaCallEventD0Ev @ 616 NONAME _ZN14QMetaCallEventD1Ev @ 617 NONAME _ZN14QMetaCallEventD2Ev @ 618 NONAME @@ -1282,7 +1282,7 @@ EXPORTS _ZN23QEventDispatcherSymbian10startingUpEv @ 1281 NONAME _ZN23QEventDispatcherSymbian10timerFiredEi @ 1282 NONAME _ZN23QEventDispatcherSymbian11closingDownEv @ 1283 NONAME - _ZN23QEventDispatcherSymbian11socketFiredEP19QSocketActiveObject @ 1284 NONAME + _ZN23QEventDispatcherSymbian11socketFiredEP19QSocketActiveObject @ 1284 NONAME ABSENT _ZN23QEventDispatcherSymbian13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE @ 1285 NONAME _ZN23QEventDispatcherSymbian13registerTimerEiiP7QObject @ 1286 NONAME _ZN23QEventDispatcherSymbian15unregisterTimerEi @ 1287 NONAME @@ -3839,6 +3839,157 @@ EXPORTS inflateReset2 @ 3838 NONAME inflateUndermine @ 3839 NONAME zlibCompileFlags @ 3840 NONAME - _ZN19QProcessEnvironment6insertERKS_ @ 3841 NONAME - _ZNK19QProcessEnvironment4keysEv @ 3842 NONAME + _Z25qt_symbianGetSocketServerv @ 3841 NONAME + _ZN10QEventLoop18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3842 NONAME + _ZN10QEventLoop25staticMetaObjectExtraDataE @ 3843 NONAME DATA 8 + _ZN10QMutexPool11createMutexEi @ 3844 NONAME + _ZN11QFinalState18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3845 NONAME + _ZN11QFinalState25staticMetaObjectExtraDataE @ 3846 NONAME DATA 8 + _ZN11QThreadPool18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3847 NONAME + _ZN11QThreadPool25staticMetaObjectExtraDataE @ 3848 NONAME DATA 8 + _ZN11QTranslator18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3849 NONAME + _ZN11QTranslator25staticMetaObjectExtraDataE @ 3850 NONAME DATA 8 + _ZN11QTranslator4loadERK7QLocaleRK7QStringS5_S5_S5_ @ 3851 NONAME + _ZN13QActiveObject18maybeQueueForLaterEv @ 3852 NONAME + _ZN13QActiveObject21maybeDeferSocketEventEv @ 3853 NONAME + _ZN13QActiveObject21reactivateAndCompleteEv @ 3854 NONAME + _ZN13QActiveObject4waitE5QListIP7CActiveEi @ 3855 NONAME + _ZN13QActiveObject4waitEP7CActivei @ 3856 NONAME + _ZN13QActiveObjectC2EiP23QEventDispatcherSymbian @ 3857 NONAME + _ZN13QActiveObjectD0Ev @ 3858 NONAME + _ZN13QActiveObjectD1Ev @ 3859 NONAME + _ZN13QActiveObjectD2Ev @ 3860 NONAME + _ZN13QHistoryState18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3861 NONAME + _ZN13QHistoryState25staticMetaObjectExtraDataE @ 3862 NONAME DATA 8 + _ZN13QPluginLoader18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3863 NONAME + _ZN13QPluginLoader25staticMetaObjectExtraDataE @ 3864 NONAME DATA 8 + _ZN13QSharedMemory18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3865 NONAME + _ZN13QSharedMemory25staticMetaObjectExtraDataE @ 3866 NONAME DATA 8 + _ZN13QSignalMapper18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3867 NONAME + _ZN13QSignalMapper25staticMetaObjectExtraDataE @ 3868 NONAME DATA 8 + _ZN13QStateMachine18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3869 NONAME + _ZN13QStateMachine25staticMetaObjectExtraDataE @ 3870 NONAME DATA 8 + _ZN14QAbstractState18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3871 NONAME + _ZN14QAbstractState25staticMetaObjectExtraDataE @ 3872 NONAME DATA 8 + _ZN14QFactoryLoader18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3873 NONAME + _ZN14QFactoryLoader25staticMetaObjectExtraDataE @ 3874 NONAME DATA 8 + _ZN14QLocalePrivate10findLocaleEN7QLocale8LanguageENS0_6ScriptENS0_7CountryE @ 3875 NONAME + _ZN14QLocalePrivate12codeToScriptERK7QString @ 3876 NONAME + _ZN14QLocalePrivate13codeToCountryERK7QString @ 3877 NONAME + _ZN14QLocalePrivate14codeToLanguageERK7QString @ 3878 NONAME + _ZN14QLocalePrivate14doubleToStringE5QCharS0_S0_S0_S0_S0_diNS_10DoubleFormEij @ 3879 NONAME + _ZN14QLocalePrivate16longLongToStringE5QCharS0_S0_S0_xiiij @ 3880 NONAME + _ZN14QLocalePrivate17getLangAndCountryERK7QStringRN7QLocale8LanguageERNS3_6ScriptERNS3_7CountryE @ 3881 NONAME + _ZN14QLocalePrivate19unsLongLongToStringE5QCharS0_S0_yiiij @ 3882 NONAME + _ZN14QMetaCallEventC1EttPFvP7QObjectN11QMetaObject4CallEiPPvEPKS0_iiPiS5_P10QSemaphore @ 3883 NONAME + _ZN14QMetaCallEventC2EttPFvP7QObjectN11QMetaObject4CallEiPPvEPKS0_iiPiS5_P10QSemaphore @ 3884 NONAME + _ZN14QTemporaryFile18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3885 NONAME + _ZN14QTemporaryFile25staticMetaObjectExtraDataE @ 3886 NONAME DATA 8 + _ZN15QAnimationGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3887 NONAME + _ZN15QAnimationGroup25staticMetaObjectExtraDataE @ 3888 NONAME DATA 8 + _ZN15QPauseAnimation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3889 NONAME + _ZN15QPauseAnimation25staticMetaObjectExtraDataE @ 3890 NONAME DATA 8 + _ZN15QSocketNotifier18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3891 NONAME + _ZN15QSocketNotifier25staticMetaObjectExtraDataE @ 3892 NONAME DATA 8 + _ZN16QAnimationDriver18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3893 NONAME + _ZN16QAnimationDriver25staticMetaObjectExtraDataE @ 3894 NONAME DATA 8 + _ZN16QCoreApplication18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3895 NONAME + _ZN16QCoreApplication25staticMetaObjectExtraDataE @ 3896 NONAME DATA 8 + _ZN16QEventTransition18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3897 NONAME + _ZN16QEventTransition25staticMetaObjectExtraDataE @ 3898 NONAME DATA 8 + _ZN16QTextCodecPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3899 NONAME + _ZN16QTextCodecPlugin25staticMetaObjectExtraDataE @ 3900 NONAME DATA 8 + _ZN17QSignalTransition18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3901 NONAME + _ZN17QSignalTransition25staticMetaObjectExtraDataE @ 3902 NONAME DATA 8 + _ZN17QVariantAnimation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3903 NONAME + _ZN17QVariantAnimation25staticMetaObjectExtraDataE @ 3904 NONAME DATA 8 + _ZN18QAbstractAnimation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3905 NONAME + _ZN18QAbstractAnimation25staticMetaObjectExtraDataE @ 3906 NONAME DATA 8 + _ZN18QAbstractItemModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3907 NONAME + _ZN18QAbstractItemModel25staticMetaObjectExtraDataE @ 3908 NONAME DATA 8 + _ZN18QAbstractListModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3909 NONAME + _ZN18QAbstractListModel25staticMetaObjectExtraDataE @ 3910 NONAME DATA 8 + _ZN18QFileSystemWatcher18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3911 NONAME + _ZN18QFileSystemWatcher25staticMetaObjectExtraDataE @ 3912 NONAME DATA 8 + _ZN18QPropertyAnimation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3913 NONAME + _ZN18QPropertyAnimation25staticMetaObjectExtraDataE @ 3914 NONAME DATA 8 + _ZN19QAbstractTableModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3915 NONAME + _ZN19QAbstractTableModel25staticMetaObjectExtraDataE @ 3916 NONAME DATA 8 + _ZN19QAbstractTransition18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3917 NONAME + _ZN19QAbstractTransition25staticMetaObjectExtraDataE @ 3918 NONAME DATA 8 + _ZN19QProcessEnvironment6insertERKS_ @ 3919 NONAME + _ZN21QAbstractConcatenable14convertToAsciiEPK5QChariRPc @ 3920 NONAME + _ZN21QObjectCleanupHandler18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3921 NONAME + _ZN21QObjectCleanupHandler25staticMetaObjectExtraDataE @ 3922 NONAME DATA 8 + _ZN21QSymbianSocketManager12removeSocketERK7RSocket @ 3923 NONAME + _ZN21QSymbianSocketManager15getSocketServerEv @ 3924 NONAME + _ZN21QSymbianSocketManager20setDefaultConnectionEP11RConnection @ 3925 NONAME + _ZN21QSymbianSocketManager8instanceEv @ 3926 NONAME + _ZN21QSymbianSocketManager9addSocketERK7RSocket @ 3927 NONAME + _ZN21QSymbianSocketManagerC1Ev @ 3928 NONAME + _ZN21QSymbianSocketManagerC2Ev @ 3929 NONAME + _ZN21QSymbianSocketManagerD1Ev @ 3930 NONAME + _ZN21QSymbianSocketManagerD2Ev @ 3931 NONAME + _ZN23QEventDispatcherSymbian18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3932 NONAME + _ZN23QEventDispatcherSymbian25staticMetaObjectExtraDataE @ 3933 NONAME DATA 8 + _ZN23QParallelAnimationGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3934 NONAME + _ZN23QParallelAnimationGroup25staticMetaObjectExtraDataE @ 3935 NONAME DATA 8 + _ZN24QAbstractEventDispatcher18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3936 NONAME + _ZN24QAbstractEventDispatcher25staticMetaObjectExtraDataE @ 3937 NONAME DATA 8 + _ZN24QNonContiguousByteDevice18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3938 NONAME + _ZN24QNonContiguousByteDevice25staticMetaObjectExtraDataE @ 3939 NONAME DATA 8 + _ZN25QSequentialAnimationGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3940 NONAME + _ZN25QSequentialAnimationGroup25staticMetaObjectExtraDataE @ 3941 NONAME DATA 8 + _ZN5QFile18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3942 NONAME + _ZN5QFile25staticMetaObjectExtraDataE @ 3943 NONAME DATA 8 + _ZN6QState18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3944 NONAME + _ZN6QState25staticMetaObjectExtraDataE @ 3945 NONAME DATA 8 + _ZN6QTimer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3946 NONAME + _ZN6QTimer25staticMetaObjectExtraDataE @ 3947 NONAME DATA 8 + _ZN7QBuffer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3948 NONAME + _ZN7QBuffer25staticMetaObjectExtraDataE @ 3949 NONAME DATA 8 + _ZN7QLocale14scriptToStringENS_6ScriptE @ 3950 NONAME + _ZN7QLocale15matchingLocalesENS_8LanguageENS_6ScriptENS_7CountryE @ 3951 NONAME + _ZN7QLocaleC1ENS_8LanguageENS_6ScriptENS_7CountryE @ 3952 NONAME + _ZN7QLocaleC2ENS_8LanguageENS_6ScriptENS_7CountryE @ 3953 NONAME + _ZN7QObject18qt_static_metacallEPS_N11QMetaObject4CallEiPPv @ 3954 NONAME + _ZN7QObject25staticMetaObjectExtraDataE @ 3955 NONAME DATA 8 + _ZN7QThread18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3956 NONAME + _ZN7QThread25staticMetaObjectExtraDataE @ 3957 NONAME DATA 8 + _ZN8QLibrary18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3958 NONAME + _ZN8QLibrary25staticMetaObjectExtraDataE @ 3959 NONAME DATA 8 + _ZN8QProcess18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3960 NONAME + _ZN8QProcess25staticMetaObjectExtraDataE @ 3961 NONAME DATA 8 + _ZN9QIODevice18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3962 NONAME + _ZN9QIODevice25staticMetaObjectExtraDataE @ 3963 NONAME DATA 8 + _ZN9QMimeData18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3964 NONAME + _ZN9QMimeData25staticMetaObjectExtraDataE @ 3965 NONAME DATA 8 + _ZN9QSettings18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3966 NONAME + _ZN9QSettings25staticMetaObjectExtraDataE @ 3967 NONAME DATA 8 + _ZN9QTimeLine18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3968 NONAME + _ZN9QTimeLine25staticMetaObjectExtraDataE @ 3969 NONAME DATA 8 + _ZNK14QLocalePrivate10scriptCodeEv @ 3970 NONAME + _ZNK14QLocalePrivate11countryCodeEv @ 3971 NONAME + _ZNK14QLocalePrivate12languageCodeEv @ 3972 NONAME + _ZNK14QLocalePrivate9bcp47NameEv @ 3973 NONAME + _ZNK19QProcessEnvironment4keysEv @ 3974 NONAME + _ZNK21QSymbianSocketManager12lookupSocketERK7RSocket @ 3975 NONAME + _ZNK21QSymbianSocketManager12lookupSocketEiR7RSocket @ 3976 NONAME + _ZNK21QSymbianSocketManager17defaultConnectionEv @ 3977 NONAME + _ZNK7QLocale11quoteStringERK10QStringRefNS_14QuotationStyleE @ 3978 NONAME + _ZNK7QLocale11quoteStringERK7QStringNS_14QuotationStyleE @ 3979 NONAME + _ZNK7QLocale11uiLanguagesEv @ 3980 NONAME + _ZNK7QLocale14currencySymbolENS_20CurrencySymbolFormatE @ 3981 NONAME + _ZNK7QLocale14firstDayOfWeekEv @ 3982 NONAME + _ZNK7QLocale16toCurrencyStringEdRK7QString @ 3983 NONAME + _ZNK7QLocale16toCurrencyStringExRK7QString @ 3984 NONAME + _ZNK7QLocale16toCurrencyStringEyRK7QString @ 3985 NONAME + _ZNK7QLocale17nativeCountryNameEv @ 3986 NONAME + _ZNK7QLocale18nativeLanguageNameEv @ 3987 NONAME + _ZNK7QLocale19createSeparatedListERK11QStringList @ 3988 NONAME + _ZNK7QLocale6scriptEv @ 3989 NONAME + _ZNK7QLocale8weekdaysEv @ 3990 NONAME + _ZNK7QLocale9bcp47NameEv @ 3991 NONAME + _ZTI13QActiveObject @ 3992 NONAME + _ZTV13QActiveObject @ 3993 NONAME diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 2849068..d715b70 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -1933,4 +1933,34 @@ EXPORTS _ZN23QDeclarativeItemPrivate15setLayoutMirrorEb @ 1932 NONAME _ZN23QDeclarativeItemPrivate19resolveLayoutMirrorEv @ 1933 NONAME _ZN23QDeclarativeItemPrivate23setImplicitLayoutMirrorEbb @ 1934 NONAME + _ZN15QPacketProtocol18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1935 NONAME + _ZN15QPacketProtocol25staticMetaObjectExtraDataE @ 1936 NONAME DATA 8 + _ZN16QDeclarativeItem18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1937 NONAME + _ZN16QDeclarativeItem25staticMetaObjectExtraDataE @ 1938 NONAME DATA 8 + _ZN16QDeclarativeView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1939 NONAME + _ZN16QDeclarativeView25staticMetaObjectExtraDataE @ 1940 NONAME DATA 8 + _ZN17QDeclarativeState18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1941 NONAME + _ZN17QDeclarativeState25staticMetaObjectExtraDataE @ 1942 NONAME DATA 8 + _ZN18QDeclarativeEngine18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1943 NONAME + _ZN18QDeclarativeEngine25staticMetaObjectExtraDataE @ 1944 NONAME DATA 8 + _ZN19QDeclarativeContext18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1945 NONAME + _ZN19QDeclarativeContext25staticMetaObjectExtraDataE @ 1946 NONAME DATA 8 + _ZN21QDeclarativeComponent18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1947 NONAME + _ZN21QDeclarativeComponent25staticMetaObjectExtraDataE @ 1948 NONAME DATA 8 + _ZN22QDeclarativeExpression18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1949 NONAME + _ZN22QDeclarativeExpression25staticMetaObjectExtraDataE @ 1950 NONAME DATA 8 + _ZN22QDeclarativeStateGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1951 NONAME + _ZN22QDeclarativeStateGroup25staticMetaObjectExtraDataE @ 1952 NONAME DATA 8 + _ZN22QDeclarativeTransition18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1953 NONAME + _ZN22QDeclarativeTransition25staticMetaObjectExtraDataE @ 1954 NONAME DATA 8 + _ZN23QDeclarativeDebugServer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1955 NONAME + _ZN23QDeclarativeDebugServer25staticMetaObjectExtraDataE @ 1956 NONAME DATA 8 + _ZN23QDeclarativePropertyMap18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1957 NONAME + _ZN23QDeclarativePropertyMap25staticMetaObjectExtraDataE @ 1958 NONAME DATA 8 + _ZN24QDeclarativeDebugService18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1959 NONAME + _ZN24QDeclarativeDebugService25staticMetaObjectExtraDataE @ 1960 NONAME DATA 8 + _ZN26QDeclarativeStateOperation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1961 NONAME + _ZN26QDeclarativeStateOperation25staticMetaObjectExtraDataE @ 1962 NONAME DATA 8 + _ZN27QDeclarativeExtensionPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1963 NONAME + _ZN27QDeclarativeExtensionPlugin25staticMetaObjectExtraDataE @ 1964 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index cfbca55..6646401 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12436,4 +12436,367 @@ EXPORTS _ZN11QTextEngine17leadingSpaceWidthERK11QScriptLine @ 12435 NONAME _ZNK14QWindowSurface8featuresEv @ 12436 NONAME _ZNK20QRasterWindowSurface8featuresEv @ 12437 NONAME + _ZN10QBoxLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12438 NONAME + _ZN10QBoxLayout25staticMetaObjectExtraDataE @ 12439 NONAME DATA 8 + _ZN10QClipboard18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12440 NONAME + _ZN10QClipboard25staticMetaObjectExtraDataE @ 12441 NONAME DATA 8 + _ZN10QCompleter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12442 NONAME + _ZN10QCompleter25staticMetaObjectExtraDataE @ 12443 NONAME DATA 8 + _ZN10QLCDNumber18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12444 NONAME + _ZN10QLCDNumber25staticMetaObjectExtraDataE @ 12445 NONAME DATA 8 + _ZN10QScrollBar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12446 NONAME + _ZN10QScrollBar25staticMetaObjectExtraDataE @ 12447 NONAME DATA 8 + _ZN10QStatusBar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12448 NONAME + _ZN10QStatusBar25staticMetaObjectExtraDataE @ 12449 NONAME DATA 8 + _ZN10QTabWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12450 NONAME + _ZN10QTabWidget25staticMetaObjectExtraDataE @ 12451 NONAME DATA 8 + _ZN10QTableView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12452 NONAME + _ZN10QTableView25staticMetaObjectExtraDataE @ 12453 NONAME DATA 8 + _ZN10QTextFrame18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12454 NONAME + _ZN10QTextFrame25staticMetaObjectExtraDataE @ 12455 NONAME DATA 8 + _ZN10QTextTable18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12456 NONAME + _ZN10QTextTable25staticMetaObjectExtraDataE @ 12457 NONAME DATA 8 + _ZN10QUndoGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12458 NONAME + _ZN10QUndoGroup25staticMetaObjectExtraDataE @ 12459 NONAME DATA 8 + _ZN10QUndoStack18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12460 NONAME + _ZN10QUndoStack25staticMetaObjectExtraDataE @ 12461 NONAME DATA 8 + _ZN10QValidator18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12462 NONAME + _ZN10QValidator25staticMetaObjectExtraDataE @ 12463 NONAME DATA 8 + _ZN10QWorkspace18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12464 NONAME + _ZN10QWorkspace25staticMetaObjectExtraDataE @ 12465 NONAME DATA 8 + _ZN10QZipWriter10addSymLinkERK7QStringS2_ @ 12466 NONAME + _ZN10QZipWriter12addDirectoryERK7QString @ 12467 NONAME + _ZN10QZipWriter20setCompressionPolicyENS_17CompressionPolicyE @ 12468 NONAME + _ZN10QZipWriter22setCreationPermissionsE6QFlagsIN5QFile10PermissionEE @ 12469 NONAME + _ZN10QZipWriter5closeEv @ 12470 NONAME + _ZN10QZipWriter7addFileERK7QStringP9QIODevice @ 12471 NONAME + _ZN10QZipWriter7addFileERK7QStringRK10QByteArray @ 12472 NONAME + _ZN10QZipWriterC1EP9QIODevice @ 12473 NONAME + _ZN10QZipWriterC1ERK7QString6QFlagsIN9QIODevice12OpenModeFlagEE @ 12474 NONAME + _ZN10QZipWriterC2EP9QIODevice @ 12475 NONAME + _ZN10QZipWriterC2ERK7QString6QFlagsIN9QIODevice12OpenModeFlagEE @ 12476 NONAME + _ZN10QZipWriterD1Ev @ 12477 NONAME + _ZN10QZipWriterD2Ev @ 12478 NONAME + _ZN11QColumnView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12479 NONAME + _ZN11QColumnView25staticMetaObjectExtraDataE @ 12480 NONAME DATA 8 + _ZN11QDockWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12481 NONAME + _ZN11QDockWidget25staticMetaObjectExtraDataE @ 12482 NONAME DATA 8 + _ZN11QFileDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12483 NONAME + _ZN11QFileDialog25staticMetaObjectExtraDataE @ 12484 NONAME DATA 8 + _ZN11QFocusFrame18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12485 NONAME + _ZN11QFocusFrame25staticMetaObjectExtraDataE @ 12486 NONAME DATA 8 + _ZN11QFontDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12487 NONAME + _ZN11QFontDialog25staticMetaObjectExtraDataE @ 12488 NONAME DATA 8 + _ZN11QFormLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12489 NONAME + _ZN11QFormLayout25staticMetaObjectExtraDataE @ 12490 NONAME DATA 8 + _ZN11QGridLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12491 NONAME + _ZN11QGridLayout25staticMetaObjectExtraDataE @ 12492 NONAME DATA 8 + _ZN11QHBoxLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12493 NONAME + _ZN11QHBoxLayout25staticMetaObjectExtraDataE @ 12494 NONAME DATA 8 + _ZN11QHeaderView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12495 NONAME + _ZN11QHeaderView25staticMetaObjectExtraDataE @ 12496 NONAME DATA 8 + _ZN11QListWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12497 NONAME + _ZN11QListWidget25staticMetaObjectExtraDataE @ 12498 NONAME DATA 8 + _ZN11QMainWindow18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12499 NONAME + _ZN11QMainWindow25staticMetaObjectExtraDataE @ 12500 NONAME DATA 8 + _ZN11QMessageBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12501 NONAME + _ZN11QMessageBox25staticMetaObjectExtraDataE @ 12502 NONAME DATA 8 + _ZN11QPanGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12503 NONAME + _ZN11QPanGesture25staticMetaObjectExtraDataE @ 12504 NONAME DATA 8 + _ZN11QProxyModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12505 NONAME + _ZN11QProxyModel25staticMetaObjectExtraDataE @ 12506 NONAME DATA 8 + _ZN11QProxyStyle18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12507 NONAME + _ZN11QProxyStyle25staticMetaObjectExtraDataE @ 12508 NONAME DATA 8 + _ZN11QPushButton18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12509 NONAME + _ZN11QPushButton25staticMetaObjectExtraDataE @ 12510 NONAME DATA 8 + _ZN11QRubberBand18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12511 NONAME + _ZN11QRubberBand25staticMetaObjectExtraDataE @ 12512 NONAME DATA 8 + _ZN11QScrollArea18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12513 NONAME + _ZN11QScrollArea25staticMetaObjectExtraDataE @ 12514 NONAME DATA 8 + _ZN11QTapGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12515 NONAME + _ZN11QTapGesture25staticMetaObjectExtraDataE @ 12516 NONAME DATA 8 + _ZN11QTextObject18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12517 NONAME + _ZN11QTextObject25staticMetaObjectExtraDataE @ 12518 NONAME DATA 8 + _ZN11QToolButton18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12519 NONAME + _ZN11QToolButton25staticMetaObjectExtraDataE @ 12520 NONAME DATA 8 + _ZN11QTreeWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12521 NONAME + _ZN11QTreeWidget25staticMetaObjectExtraDataE @ 12522 NONAME DATA 8 + _ZN11QVBoxLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12523 NONAME + _ZN11QVBoxLayout25staticMetaObjectExtraDataE @ 12524 NONAME DATA 8 + _ZN11QWizardPage18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12525 NONAME + _ZN11QWizardPage25staticMetaObjectExtraDataE @ 12526 NONAME DATA 8 + _ZN12QActionGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12527 NONAME + _ZN12QActionGroup25staticMetaObjectExtraDataE @ 12528 NONAME DATA 8 + _ZN12QApplication18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12529 NONAME + _ZN12QApplication25staticMetaObjectExtraDataE @ 12530 NONAME DATA 8 + _ZN12QButtonGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12531 NONAME + _ZN12QButtonGroup25staticMetaObjectExtraDataE @ 12532 NONAME DATA 8 + _ZN12QColorDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12533 NONAME + _ZN12QColorDialog25staticMetaObjectExtraDataE @ 12534 NONAME DATA 8 + _ZN12QCommonStyle18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12535 NONAME + _ZN12QCommonStyle25staticMetaObjectExtraDataE @ 12536 NONAME DATA 8 + _ZN12QInputDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12537 NONAME + _ZN12QInputDialog25staticMetaObjectExtraDataE @ 12538 NONAME DATA 8 + _ZN12QLineControl18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12539 NONAME + _ZN12QLineControl25staticMetaObjectExtraDataE @ 12540 NONAME DATA 8 + _ZN12QProgressBar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12541 NONAME + _ZN12QProgressBar25staticMetaObjectExtraDataE @ 12542 NONAME DATA 8 + _ZN12QRadioButton18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12543 NONAME + _ZN12QRadioButton25staticMetaObjectExtraDataE @ 12544 NONAME DATA 8 + _ZN12QStylePlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12545 NONAME + _ZN12QStylePlugin25staticMetaObjectExtraDataE @ 12546 NONAME DATA 8 + _ZN12QTableWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12547 NONAME + _ZN12QTableWidget25staticMetaObjectExtraDataE @ 12548 NONAME DATA 8 + _ZN12QTextBrowser18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12549 NONAME + _ZN12QTextBrowser25staticMetaObjectExtraDataE @ 12550 NONAME DATA 8 + _ZN12QTextControl18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12551 NONAME + _ZN12QTextControl25staticMetaObjectExtraDataE @ 12552 NONAME DATA 8 + _ZN13QDateTimeEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12553 NONAME + _ZN13QDateTimeEdit25staticMetaObjectExtraDataE @ 12554 NONAME DATA 8 + _ZN13QErrorMessage18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12555 NONAME + _ZN13QErrorMessage25staticMetaObjectExtraDataE @ 12556 NONAME DATA 8 + _ZN13QFlickGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12557 NONAME + _ZN13QFlickGesture25staticMetaObjectExtraDataE @ 12558 NONAME DATA 8 + _ZN13QFontComboBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12559 NONAME + _ZN13QFontComboBox25staticMetaObjectExtraDataE @ 12560 NONAME DATA 8 + _ZN13QGraphicsView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12561 NONAME + _ZN13QGraphicsView25staticMetaObjectExtraDataE @ 12562 NONAME DATA 8 + _ZN13QInputContext18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12563 NONAME + _ZN13QInputContext25staticMetaObjectExtraDataE @ 12564 NONAME DATA 8 + _ZN13QIntValidator18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12565 NONAME + _ZN13QIntValidator25staticMetaObjectExtraDataE @ 12566 NONAME DATA 8 + _ZN13QItemDelegate18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12567 NONAME + _ZN13QItemDelegate25staticMetaObjectExtraDataE @ 12568 NONAME DATA 8 + _ZN13QMdiSubWindow18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12569 NONAME + _ZN13QMdiSubWindow25staticMetaObjectExtraDataE @ 12570 NONAME DATA 8 + _ZN13QPinchGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12571 NONAME + _ZN13QPinchGesture25staticMetaObjectExtraDataE @ 12572 NONAME DATA 8 + _ZN13QPixmapFilter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12573 NONAME + _ZN13QPixmapFilter25staticMetaObjectExtraDataE @ 12574 NONAME DATA 8 + _ZN13QSplashScreen18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12575 NONAME + _ZN13QSplashScreen25staticMetaObjectExtraDataE @ 12576 NONAME DATA 8 + _ZN13QSwipeGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12577 NONAME + _ZN13QSwipeGesture25staticMetaObjectExtraDataE @ 12578 NONAME DATA 8 + _ZN13QTextDocument18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12579 NONAME + _ZN13QTextDocument25staticMetaObjectExtraDataE @ 12580 NONAME DATA 8 + _ZN13QWidgetAction18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12581 NONAME + _ZN13QWidgetAction25staticMetaObjectExtraDataE @ 12582 NONAME DATA 8 + _ZN13QWindowsStyle18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12583 NONAME + _ZN13QWindowsStyle25staticMetaObjectExtraDataE @ 12584 NONAME DATA 8 + _ZN14QDesktopWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12585 NONAME + _ZN14QDesktopWidget25staticMetaObjectExtraDataE @ 12586 NONAME DATA 8 + _ZN14QDoubleSpinBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12587 NONAME + _ZN14QDoubleSpinBox25staticMetaObjectExtraDataE @ 12588 NONAME DATA 8 + _ZN14QGraphicsScale18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12589 NONAME + _ZN14QGraphicsScale25staticMetaObjectExtraDataE @ 12590 NONAME DATA 8 + _ZN14QGraphicsScene18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12591 NONAME + _ZN14QGraphicsScene25staticMetaObjectExtraDataE @ 12592 NONAME DATA 8 + _ZN14QImageIOPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12593 NONAME + _ZN14QImageIOPlugin25staticMetaObjectExtraDataE @ 12594 NONAME DATA 8 + _ZN14QPlainTextEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12595 NONAME + _ZN14QPlainTextEdit25staticMetaObjectExtraDataE @ 12596 NONAME DATA 8 + _ZN14QStackedLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12597 NONAME + _ZN14QStackedLayout25staticMetaObjectExtraDataE @ 12598 NONAME DATA 8 + _ZN14QStackedWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12599 NONAME + _ZN14QStackedWidget25staticMetaObjectExtraDataE @ 12600 NONAME DATA 8 + _ZN15QAbstractButton18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12601 NONAME + _ZN15QAbstractButton25staticMetaObjectExtraDataE @ 12602 NONAME DATA 8 + _ZN15QAbstractSlider18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12603 NONAME + _ZN15QAbstractSlider25staticMetaObjectExtraDataE @ 12604 NONAME DATA 8 + _ZN15QCalendarWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12605 NONAME + _ZN15QCalendarWidget25staticMetaObjectExtraDataE @ 12606 NONAME DATA 8 + _ZN15QGraphicsAnchor18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12607 NONAME + _ZN15QGraphicsAnchor25staticMetaObjectExtraDataE @ 12608 NONAME DATA 8 + _ZN15QGraphicsEffect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12609 NONAME + _ZN15QGraphicsEffect25staticMetaObjectExtraDataE @ 12610 NONAME DATA 8 + _ZN15QGraphicsObject18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12611 NONAME + _ZN15QGraphicsObject25staticMetaObjectExtraDataE @ 12612 NONAME DATA 8 + _ZN15QGraphicsWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12613 NONAME + _ZN15QGraphicsWidget25staticMetaObjectExtraDataE @ 12614 NONAME DATA 8 + _ZN15QProgressDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12615 NONAME + _ZN15QProgressDialog25staticMetaObjectExtraDataE @ 12616 NONAME DATA 8 + _ZN15QSessionManager18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12617 NONAME + _ZN15QSessionManager25staticMetaObjectExtraDataE @ 12618 NONAME DATA 8 + _ZN15QSplitterHandle18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12619 NONAME + _ZN15QSplitterHandle25staticMetaObjectExtraDataE @ 12620 NONAME DATA 8 + _ZN15QTextBlockGroup18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12621 NONAME + _ZN15QTextBlockGroup25staticMetaObjectExtraDataE @ 12622 NONAME DATA 8 + _ZN16QAbstractSpinBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12623 NONAME + _ZN16QAbstractSpinBox25staticMetaObjectExtraDataE @ 12624 NONAME DATA 8 + _ZN16QDialogButtonBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12625 NONAME + _ZN16QDialogButtonBox25staticMetaObjectExtraDataE @ 12626 NONAME DATA 8 + _ZN16QDoubleValidator18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12627 NONAME + _ZN16QDoubleValidator25staticMetaObjectExtraDataE @ 12628 NONAME DATA 8 + _ZN16QFileSystemModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12629 NONAME + _ZN16QFileSystemModel25staticMetaObjectExtraDataE @ 12630 NONAME DATA 8 + _ZN16QRegExpValidator18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12631 NONAME + _ZN16QRegExpValidator25staticMetaObjectExtraDataE @ 12632 NONAME DATA 8 + _ZN16QStringListModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12633 NONAME + _ZN16QStringListModel25staticMetaObjectExtraDataE @ 12634 NONAME DATA 8 + _ZN17QAbstractItemView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12635 NONAME + _ZN17QAbstractItemView25staticMetaObjectExtraDataE @ 12636 NONAME DATA 8 + _ZN17QDataWidgetMapper18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12637 NONAME + _ZN17QDataWidgetMapper25staticMetaObjectExtraDataE @ 12638 NONAME DATA 8 + _ZN17QDockWidgetLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12639 NONAME + _ZN17QDockWidgetLayout25staticMetaObjectExtraDataE @ 12640 NONAME DATA 8 + _ZN17QGraphicsRotation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12641 NONAME + _ZN17QGraphicsRotation25staticMetaObjectExtraDataE @ 12642 NONAME DATA 8 + _ZN17QGraphicsTextItem18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12643 NONAME + _ZN17QGraphicsTextItem25staticMetaObjectExtraDataE @ 12644 NONAME DATA 8 + _ZN17QIconEnginePlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12645 NONAME + _ZN17QIconEnginePlugin25staticMetaObjectExtraDataE @ 12646 NONAME DATA 8 + _ZN17QInternalMimeData18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12647 NONAME + _ZN17QInternalMimeData25staticMetaObjectExtraDataE @ 12648 NONAME DATA 8 + _ZN17QPixmapBlurFilter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12649 NONAME + _ZN17QPixmapBlurFilter25staticMetaObjectExtraDataE @ 12650 NONAME DATA 8 + _ZN18QCommandLinkButton18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12651 NONAME + _ZN18QCommandLinkButton25staticMetaObjectExtraDataE @ 12652 NONAME DATA 8 + _ZN18QGraphicsTransform18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12653 NONAME + _ZN18QGraphicsTransform25staticMetaObjectExtraDataE @ 12654 NONAME DATA 8 + _ZN18QGuiPlatformPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12655 NONAME + _ZN18QGuiPlatformPlugin25staticMetaObjectExtraDataE @ 12656 NONAME DATA 8 + _ZN18QStandardItemModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12657 NONAME + _ZN18QStandardItemModel25staticMetaObjectExtraDataE @ 12658 NONAME DATA 8 + _ZN18QSyntaxHighlighter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12659 NONAME + _ZN18QSyntaxHighlighter25staticMetaObjectExtraDataE @ 12660 NONAME DATA 8 + _ZN18QTapAndHoldGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12661 NONAME + _ZN18QTapAndHoldGesture25staticMetaObjectExtraDataE @ 12662 NONAME DATA 8 + _ZN19QAbstractProxyModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12663 NONAME + _ZN19QAbstractProxyModel25staticMetaObjectExtraDataE @ 12664 NONAME DATA 8 + _ZN19QAbstractScrollArea18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12665 NONAME + _ZN19QAbstractScrollArea25staticMetaObjectExtraDataE @ 12666 NONAME DATA 8 + _ZN19QEventDispatcherS6018qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12667 NONAME + _ZN19QEventDispatcherS6025staticMetaObjectExtraDataE @ 12668 NONAME DATA 8 + _ZN19QGraphicsBlurEffect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12669 NONAME + _ZN19QGraphicsBlurEffect25staticMetaObjectExtraDataE @ 12670 NONAME DATA 8 + _ZN19QIconEnginePluginV218qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12671 NONAME + _ZN19QIconEnginePluginV225staticMetaObjectExtraDataE @ 12672 NONAME DATA 8 + _ZN19QInputContextPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12673 NONAME + _ZN19QInputContextPlugin25staticMetaObjectExtraDataE @ 12674 NONAME DATA 8 + _ZN19QItemSelectionModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12675 NONAME + _ZN19QItemSelectionModel25staticMetaObjectExtraDataE @ 12676 NONAME DATA 8 + _ZN19QKeyEventTransition18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12677 NONAME + _ZN19QKeyEventTransition25staticMetaObjectExtraDataE @ 12678 NONAME DATA 8 + _ZN19QStyledItemDelegate18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12679 NONAME + _ZN19QStyledItemDelegate25staticMetaObjectExtraDataE @ 12680 NONAME DATA 8 + _ZN20QGraphicsProxyWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12681 NONAME + _ZN20QGraphicsProxyWidget25staticMetaObjectExtraDataE @ 12682 NONAME DATA 8 + _ZN20QPaintBufferResource18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12683 NONAME + _ZN20QPaintBufferResource25staticMetaObjectExtraDataE @ 12684 NONAME DATA 8 + _ZN20QPictureFormatPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12685 NONAME + _ZN20QPictureFormatPlugin25staticMetaObjectExtraDataE @ 12686 NONAME DATA 8 + _ZN20QWidgetResizeHandler18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12687 NONAME + _ZN20QWidgetResizeHandler25staticMetaObjectExtraDataE @ 12688 NONAME DATA 8 + _ZN21QAbstractItemDelegate18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12689 NONAME + _ZN21QAbstractItemDelegate25staticMetaObjectExtraDataE @ 12690 NONAME DATA 8 + _ZN21QGraphicsEffectSource18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12691 NONAME + _ZN21QGraphicsEffectSource25staticMetaObjectExtraDataE @ 12692 NONAME DATA 8 + _ZN21QGraphicsSystemPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12693 NONAME + _ZN21QGraphicsSystemPlugin25staticMetaObjectExtraDataE @ 12694 NONAME DATA 8 + _ZN21QMouseEventTransition18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12695 NONAME + _ZN21QMouseEventTransition25staticMetaObjectExtraDataE @ 12696 NONAME DATA 8 + _ZN21QPixmapColorizeFilter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12697 NONAME + _ZN21QPixmapColorizeFilter25staticMetaObjectExtraDataE @ 12698 NONAME DATA 8 + _ZN21QSortFilterProxyModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12699 NONAME + _ZN21QSortFilterProxyModel25staticMetaObjectExtraDataE @ 12700 NONAME DATA 8 + _ZN22QGraphicsItemAnimation18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12701 NONAME + _ZN22QGraphicsItemAnimation25staticMetaObjectExtraDataE @ 12702 NONAME DATA 8 + _ZN22QGraphicsOpacityEffect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12703 NONAME + _ZN22QGraphicsOpacityEffect25staticMetaObjectExtraDataE @ 12704 NONAME DATA 8 + _ZN23QGraphicsColorizeEffect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12705 NONAME + _ZN23QGraphicsColorizeEffect25staticMetaObjectExtraDataE @ 12706 NONAME DATA 8 + _ZN23QPaintBufferSignalProxy18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12707 NONAME + _ZN23QPaintBufferSignalProxy25staticMetaObjectExtraDataE @ 12708 NONAME DATA 8 + _ZN23QPixmapDropShadowFilter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12709 NONAME + _ZN23QPixmapDropShadowFilter25staticMetaObjectExtraDataE @ 12710 NONAME DATA 8 + _ZN24QPixmapConvolutionFilter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12711 NONAME + _ZN24QPixmapConvolutionFilter25staticMetaObjectExtraDataE @ 12712 NONAME DATA 8 + _ZN24QPlainTextDocumentLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12713 NONAME + _ZN24QPlainTextDocumentLayout25staticMetaObjectExtraDataE @ 12714 NONAME DATA 8 + _ZN25QGraphicsDropShadowEffect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12715 NONAME + _ZN25QGraphicsDropShadowEffect25staticMetaObjectExtraDataE @ 12716 NONAME DATA 8 + _ZN27QAbstractTextDocumentLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12717 NONAME + _ZN27QAbstractTextDocumentLayout25staticMetaObjectExtraDataE @ 12718 NONAME DATA 8 + _ZN5QDial18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12719 NONAME + _ZN5QDial25staticMetaObjectExtraDataE @ 12720 NONAME DATA 8 + _ZN5QDrag18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12721 NONAME + _ZN5QDrag25staticMetaObjectExtraDataE @ 12722 NONAME DATA 8 + _ZN5QMenu18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12723 NONAME + _ZN5QMenu25staticMetaObjectExtraDataE @ 12724 NONAME DATA 8 + _ZN6QFrame18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12725 NONAME + _ZN6QFrame25staticMetaObjectExtraDataE @ 12726 NONAME DATA 8 + _ZN6QLabel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12727 NONAME + _ZN6QLabel25staticMetaObjectExtraDataE @ 12728 NONAME DATA 8 + _ZN6QMovie18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12729 NONAME + _ZN6QMovie25staticMetaObjectExtraDataE @ 12730 NONAME DATA 8 + _ZN6QSound18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12731 NONAME + _ZN6QSound25staticMetaObjectExtraDataE @ 12732 NONAME DATA 8 + _ZN6QStyle18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12733 NONAME + _ZN6QStyle25staticMetaObjectExtraDataE @ 12734 NONAME DATA 8 + _ZN7QAction18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12735 NONAME + _ZN7QAction25staticMetaObjectExtraDataE @ 12736 NONAME DATA 8 + _ZN7QDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12737 NONAME + _ZN7QDialog25staticMetaObjectExtraDataE @ 12738 NONAME DATA 8 + _ZN7QLayout18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12739 NONAME + _ZN7QLayout25staticMetaObjectExtraDataE @ 12740 NONAME DATA 8 + _ZN7QSlider18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12741 NONAME + _ZN7QSlider25staticMetaObjectExtraDataE @ 12742 NONAME DATA 8 + _ZN7QTabBar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12743 NONAME + _ZN7QTabBar25staticMetaObjectExtraDataE @ 12744 NONAME DATA 8 + _ZN7QWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12745 NONAME + _ZN7QWidget25staticMetaObjectExtraDataE @ 12746 NONAME DATA 8 + _ZN7QWizard18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12747 NONAME + _ZN7QWizard25staticMetaObjectExtraDataE @ 12748 NONAME DATA 8 + _ZN8QGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12749 NONAME + _ZN8QGesture25staticMetaObjectExtraDataE @ 12750 NONAME DATA 8 + _ZN8QMdiArea18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12751 NONAME + _ZN8QMdiArea25staticMetaObjectExtraDataE @ 12752 NONAME DATA 8 + _ZN8QMenuBar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12753 NONAME + _ZN8QMenuBar25staticMetaObjectExtraDataE @ 12754 NONAME DATA 8 + _ZN8QSpinBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12755 NONAME + _ZN8QSpinBox25staticMetaObjectExtraDataE @ 12756 NONAME DATA 8 + _ZN8QToolBar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12757 NONAME + _ZN8QToolBar25staticMetaObjectExtraDataE @ 12758 NONAME DATA 8 + _ZN8QToolBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12759 NONAME + _ZN8QToolBox25staticMetaObjectExtraDataE @ 12760 NONAME DATA 8 + _ZN9QCheckBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12761 NONAME + _ZN9QCheckBox25staticMetaObjectExtraDataE @ 12762 NONAME DATA 8 + _ZN9QComboBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12763 NONAME + _ZN9QComboBox25staticMetaObjectExtraDataE @ 12764 NONAME DATA 8 + _ZN9QDateEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12765 NONAME + _ZN9QDateEdit25staticMetaObjectExtraDataE @ 12766 NONAME DATA 8 + _ZN9QDirModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12767 NONAME + _ZN9QDirModel25staticMetaObjectExtraDataE @ 12768 NONAME DATA 8 + _ZN9QGroupBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12769 NONAME + _ZN9QGroupBox25staticMetaObjectExtraDataE @ 12770 NONAME DATA 8 + _ZN9QLineEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12771 NONAME + _ZN9QLineEdit25staticMetaObjectExtraDataE @ 12772 NONAME DATA 8 + _ZN9QListView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12773 NONAME + _ZN9QListView25staticMetaObjectExtraDataE @ 12774 NONAME DATA 8 + _ZN9QS60Style18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12775 NONAME + _ZN9QS60Style25staticMetaObjectExtraDataE @ 12776 NONAME DATA 8 + _ZN9QScroller18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12777 NONAME + _ZN9QScroller25staticMetaObjectExtraDataE @ 12778 NONAME DATA 8 + _ZN9QShortcut18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12779 NONAME + _ZN9QShortcut25staticMetaObjectExtraDataE @ 12780 NONAME DATA 8 + _ZN9QSizeGrip18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12781 NONAME + _ZN9QSizeGrip25staticMetaObjectExtraDataE @ 12782 NONAME DATA 8 + _ZN9QSplitter18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12783 NONAME + _ZN9QSplitter25staticMetaObjectExtraDataE @ 12784 NONAME DATA 8 + _ZN9QTextEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12785 NONAME + _ZN9QTextEdit25staticMetaObjectExtraDataE @ 12786 NONAME DATA 8 + _ZN9QTextList18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12787 NONAME + _ZN9QTextList25staticMetaObjectExtraDataE @ 12788 NONAME DATA 8 + _ZN9QTimeEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12789 NONAME + _ZN9QTimeEdit25staticMetaObjectExtraDataE @ 12790 NONAME DATA 8 + _ZN9QTreeView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12791 NONAME + _ZN9QTreeView25staticMetaObjectExtraDataE @ 12792 NONAME DATA 8 + _ZN9QUndoView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12793 NONAME + _ZN9QUndoView25staticMetaObjectExtraDataE @ 12794 NONAME DATA 8 + _ZNK10QZipWriter10isWritableEv @ 12795 NONAME + _ZNK10QZipWriter17compressionPolicyEv @ 12796 NONAME + _ZNK10QZipWriter19creationPermissionsEv @ 12797 NONAME + _ZNK10QZipWriter6deviceEv @ 12798 NONAME + _ZNK10QZipWriter6existsEv @ 12799 NONAME + _ZNK10QZipWriter6statusEv @ 12800 NONAME diff --git a/src/s60installs/eabi/QtMultimediau.def b/src/s60installs/eabi/QtMultimediau.def index f332885..7bd26b6 100644 --- a/src/s60installs/eabi/QtMultimediau.def +++ b/src/s60installs/eabi/QtMultimediau.def @@ -301,4 +301,18 @@ EXPORTS _ZNK12QAudioFormat12channelCountEv @ 300 NONAME _ZNK16QAudioDeviceInfo20supportedSampleRatesEv @ 301 NONAME _ZNK16QAudioDeviceInfo22supportedChannelCountsEv @ 302 NONAME + _ZN11QAudioInput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 303 NONAME + _ZN11QAudioInput25staticMetaObjectExtraDataE @ 304 NONAME DATA 8 + _ZN12QAudioOutput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 305 NONAME + _ZN12QAudioOutput25staticMetaObjectExtraDataE @ 306 NONAME DATA 8 + _ZN18QAudioEnginePlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 307 NONAME + _ZN18QAudioEnginePlugin25staticMetaObjectExtraDataE @ 308 NONAME DATA 8 + _ZN19QAbstractAudioInput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 309 NONAME + _ZN19QAbstractAudioInput25staticMetaObjectExtraDataE @ 310 NONAME DATA 8 + _ZN20QAbstractAudioOutput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 311 NONAME + _ZN20QAbstractAudioOutput25staticMetaObjectExtraDataE @ 312 NONAME DATA 8 + _ZN21QAbstractVideoSurface18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 313 NONAME + _ZN21QAbstractVideoSurface25staticMetaObjectExtraDataE @ 314 NONAME DATA 8 + _ZN24QAbstractAudioDeviceInfo18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 315 NONAME + _ZN24QAbstractAudioDeviceInfo25staticMetaObjectExtraDataE @ 316 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 658b82d..b0cbb38 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1182,5 +1182,82 @@ EXPORTS _ZNK35QNetworkConfigurationManagerPrivate7enginesEv @ 1181 NONAME _ZNK35QNetworkConfigurationManagerPrivate8isOnlineEv @ 1182 NONAME _ZN10QSslSocket17setPeerVerifyNameERK7QString @ 1183 NONAME - _ZNK10QSslSocket14peerVerifyNameEv @ 1184 NONAME + _ZN22QNetworkSessionPrivate13nativeSessionER15QNetworkSession @ 1184 NONAME + _ZN22QNetworkSessionPrivate16nativeOpenSocketER15QNetworkSessionR7RSocketjjj @ 1185 NONAME + _ZN22QNetworkSessionPrivate22nativeOpenHostResolverER15QNetworkSessionR13RHostResolverjj @ 1186 NONAME + _ZNK10QSslSocket14peerVerifyNameEv @ 1187 NONAME + _ZN14QHttpMultiPart11qt_metacallEN11QMetaObject4CallEiPPv @ 1188 NONAME + _ZN14QHttpMultiPart11qt_metacastEPKc @ 1189 NONAME + _ZN14QHttpMultiPart11setBoundaryERK10QByteArray @ 1190 NONAME + _ZN14QHttpMultiPart14setContentTypeENS_11ContentTypeE @ 1191 NONAME + _ZN14QHttpMultiPart16staticMetaObjectE @ 1192 NONAME DATA 16 + _ZN14QHttpMultiPart19getStaticMetaObjectEv @ 1193 NONAME + _ZN14QHttpMultiPart6appendERK9QHttpPart @ 1194 NONAME + _ZN14QHttpMultiPartC1ENS_11ContentTypeEP7QObject @ 1195 NONAME + _ZN14QHttpMultiPartC1EP7QObject @ 1196 NONAME + _ZN14QHttpMultiPartC2ENS_11ContentTypeEP7QObject @ 1197 NONAME + _ZN14QHttpMultiPartC2EP7QObject @ 1198 NONAME + _ZN14QHttpMultiPartD0Ev @ 1199 NONAME + _ZN14QHttpMultiPartD1Ev @ 1200 NONAME + _ZN14QHttpMultiPartD2Ev @ 1201 NONAME + _ZN21QNetworkAccessManager3putERK15QNetworkRequestP14QHttpMultiPart @ 1202 NONAME + _ZN21QNetworkAccessManager4postERK15QNetworkRequestP14QHttpMultiPart @ 1203 NONAME + _ZN9QHttpPart12setRawHeaderERK10QByteArrayS2_ @ 1204 NONAME + _ZN9QHttpPart13setBodyDeviceEP9QIODevice @ 1205 NONAME + _ZN9QHttpPart7setBodyERK10QByteArray @ 1206 NONAME + _ZN9QHttpPart9setHeaderEN15QNetworkRequest12KnownHeadersERK8QVariant @ 1207 NONAME + _ZN9QHttpPartC1ERKS_ @ 1208 NONAME + _ZN9QHttpPartC1Ev @ 1209 NONAME + _ZN9QHttpPartC2ERKS_ @ 1210 NONAME + _ZN9QHttpPartC2Ev @ 1211 NONAME + _ZN9QHttpPartD1Ev @ 1212 NONAME + _ZN9QHttpPartD2Ev @ 1213 NONAME + _ZN9QHttpPartaSERKS_ @ 1214 NONAME + _ZNK14QHttpMultiPart10metaObjectEv @ 1215 NONAME + _ZNK14QHttpMultiPart8boundaryEv @ 1216 NONAME + _ZNK9QHttpParteqERKS_ @ 1217 NONAME + _ZTI14QHttpMultiPart @ 1218 NONAME + _ZTV14QHttpMultiPart @ 1219 NONAME + _ZN10QSslSocket18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1220 NONAME + _ZN10QSslSocket25staticMetaObjectExtraDataE @ 1221 NONAME DATA 8 + _ZN10QTcpServer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1222 NONAME + _ZN10QTcpServer25staticMetaObjectExtraDataE @ 1223 NONAME DATA 8 + _ZN10QTcpSocket18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1224 NONAME + _ZN10QTcpSocket25staticMetaObjectExtraDataE @ 1225 NONAME DATA 8 + _ZN10QUdpSocket18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1226 NONAME + _ZN10QUdpSocket25staticMetaObjectExtraDataE @ 1227 NONAME DATA 8 + _ZN12QLocalServer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1228 NONAME + _ZN12QLocalServer25staticMetaObjectExtraDataE @ 1229 NONAME DATA 8 + _ZN12QLocalSocket18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1230 NONAME + _ZN12QLocalSocket25staticMetaObjectExtraDataE @ 1231 NONAME DATA 8 + _ZN13QBearerEngine18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1232 NONAME + _ZN13QBearerEngine25staticMetaObjectExtraDataE @ 1233 NONAME DATA 8 + _ZN13QNetworkReply18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1234 NONAME + _ZN13QNetworkReply25staticMetaObjectExtraDataE @ 1235 NONAME DATA 8 + _ZN14QHttpMultiPart18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1236 NONAME + _ZN14QHttpMultiPart25staticMetaObjectExtraDataE @ 1237 NONAME DATA 8 + _ZN15QAbstractSocket18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1238 NONAME + _ZN15QAbstractSocket25staticMetaObjectExtraDataE @ 1239 NONAME DATA 8 + _ZN15QNetworkSession18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1240 NONAME + _ZN15QNetworkSession25staticMetaObjectExtraDataE @ 1241 NONAME DATA 8 + _ZN17QNetworkCookieJar18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1242 NONAME + _ZN17QNetworkCookieJar25staticMetaObjectExtraDataE @ 1243 NONAME DATA 8 + _ZN17QNetworkDiskCache18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1244 NONAME + _ZN17QNetworkDiskCache25staticMetaObjectExtraDataE @ 1245 NONAME DATA 8 + _ZN19QBearerEnginePlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1246 NONAME + _ZN19QBearerEnginePlugin25staticMetaObjectExtraDataE @ 1247 NONAME DATA 8 + _ZN21QAbstractNetworkCache18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1248 NONAME + _ZN21QAbstractNetworkCache25staticMetaObjectExtraDataE @ 1249 NONAME DATA 8 + _ZN21QNetworkAccessManager18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1250 NONAME + _ZN21QNetworkAccessManager25staticMetaObjectExtraDataE @ 1251 NONAME DATA 8 + _ZN22QNetworkSessionPrivate18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1252 NONAME + _ZN22QNetworkSessionPrivate25staticMetaObjectExtraDataE @ 1253 NONAME DATA 8 + _ZN28QNetworkConfigurationManager18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1254 NONAME + _ZN28QNetworkConfigurationManager25staticMetaObjectExtraDataE @ 1255 NONAME DATA 8 + _ZN35QNetworkConfigurationManagerPrivate18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1256 NONAME + _ZN35QNetworkConfigurationManagerPrivate25staticMetaObjectExtraDataE @ 1257 NONAME DATA 8 + _ZN4QFtp18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1258 NONAME + _ZN4QFtp25staticMetaObjectExtraDataE @ 1259 NONAME DATA 8 + _ZN5QHttp18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 1260 NONAME + _ZN5QHttp25staticMetaObjectExtraDataE @ 1261 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index 75763c5..44f7306 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -759,9 +759,9 @@ EXPORTS _ZNK14QGLPaintDevice9isFlippedEv @ 758 NONAME _ZNK16QGLWindowSurface8featuresEv @ 759 NONAME _ZNK26QGLFramebufferObjectFormat6mipmapEv @ 760 NONAME - _ZTI22QGLContextResourceBase @ 761 NONAME ABSENT + _ZTI22QGLContextResourceBase @ 761 NONAME _ZTI27QGLContextGroupResourceBase @ 762 NONAME - _ZTV22QGLContextResourceBase @ 763 NONAME ABSENT + _ZTV22QGLContextResourceBase @ 763 NONAME _ZTV27QGLContextGroupResourceBase @ 764 NONAME _ZThn104_N20QGLTextureGlyphCacheD0Ev @ 765 NONAME _ZThn104_N20QGLTextureGlyphCacheD1Ev @ 766 NONAME diff --git a/src/s60installs/eabi/QtScriptu.def b/src/s60installs/eabi/QtScriptu.def index f7da892..1feacb7 100644 --- a/src/s60installs/eabi/QtScriptu.def +++ b/src/s60installs/eabi/QtScriptu.def @@ -443,4 +443,8 @@ EXPORTS _ZNK23QScriptDeclarativeClass5Value13toScriptValueEP13QScriptEngine @ 442 NONAME _ZN23QScriptDeclarativeClass15startsWithUpperERKPv @ 443 NONAME _ZNK23QScriptDeclarativeClass20PersistentIdentifier8toStringEv @ 444 NONAME + _ZN13QScriptEngine18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 445 NONAME + _ZN13QScriptEngine25staticMetaObjectExtraDataE @ 446 NONAME DATA 8 + _ZN22QScriptExtensionPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 447 NONAME + _ZN22QScriptExtensionPlugin25staticMetaObjectExtraDataE @ 448 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtSqlu.def b/src/s60installs/eabi/QtSqlu.def index 1510374..21782b8 100644 --- a/src/s60installs/eabi/QtSqlu.def +++ b/src/s60installs/eabi/QtSqlu.def @@ -465,4 +465,16 @@ EXPORTS _Zls6QDebugRK12QSqlDatabase @ 464 NONAME _Zls6QDebugRK9QSqlError @ 465 NONAME _Zls6QDebugRK9QSqlField @ 466 NONAME + _ZN10QSqlDriver18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 467 NONAME + _ZN10QSqlDriver25staticMetaObjectExtraDataE @ 468 NONAME DATA 8 + _ZN13QSQLiteDriver18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 469 NONAME + _ZN13QSQLiteDriver25staticMetaObjectExtraDataE @ 470 NONAME DATA 8 + _ZN14QSqlQueryModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 471 NONAME + _ZN14QSqlQueryModel25staticMetaObjectExtraDataE @ 472 NONAME DATA 8 + _ZN14QSqlTableModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 473 NONAME + _ZN14QSqlTableModel25staticMetaObjectExtraDataE @ 474 NONAME DATA 8 + _ZN16QSqlDriverPlugin18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 475 NONAME + _ZN16QSqlDriverPlugin25staticMetaObjectExtraDataE @ 476 NONAME DATA 8 + _ZN24QSqlRelationalTableModel18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 477 NONAME + _ZN24QSqlRelationalTableModel25staticMetaObjectExtraDataE @ 478 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtSvgu.def b/src/s60installs/eabi/QtSvgu.def index ccc029d..2099699 100644 --- a/src/s60installs/eabi/QtSvgu.def +++ b/src/s60installs/eabi/QtSvgu.def @@ -144,4 +144,10 @@ EXPORTS _ZThn8_N16QGraphicsSvgItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 143 NONAME _ZThn8_NK16QGraphicsSvgItem12boundingRectEv @ 144 NONAME _ZThn8_NK16QGraphicsSvgItem4typeEv @ 145 NONAME + _ZN10QSvgWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 146 NONAME + _ZN10QSvgWidget25staticMetaObjectExtraDataE @ 147 NONAME DATA 8 + _ZN12QSvgRenderer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 148 NONAME + _ZN12QSvgRenderer25staticMetaObjectExtraDataE @ 149 NONAME DATA 8 + _ZN16QGraphicsSvgItem18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 150 NONAME + _ZN16QGraphicsSvgItem25staticMetaObjectExtraDataE @ 151 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtTestu.def b/src/s60installs/eabi/QtTestu.def index 370466b..3a4cd73 100644 --- a/src/s60installs/eabi/QtTestu.def +++ b/src/s60installs/eabi/QtTestu.def @@ -164,4 +164,6 @@ EXPORTS _ZNK10QTestTable7isEmptyEv @ 163 NONAME _ZNK10QTestTable8testDataEi @ 164 NONAME _ZNK10QTestTable9dataCountEv @ 165 NONAME + _ZN14QTestEventLoop18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 166 NONAME + _ZN14QTestEventLoop25staticMetaObjectExtraDataE @ 167 NONAME DATA 8 diff --git a/src/s60installs/eabi/QtXmlPatternsu.def b/src/s60installs/eabi/QtXmlPatternsu.def index 5168c39..133e3e0 100644 --- a/src/s60installs/eabi/QtXmlPatternsu.def +++ b/src/s60installs/eabi/QtXmlPatternsu.def @@ -250,4 +250,8 @@ EXPORTS _ZTV21QAbstractXmlNodeModel @ 249 NONAME _ZTV23QAbstractMessageHandler @ 250 NONAME _Zls6QDebugRK15QSourceLocation @ 251 NONAME + _ZN20QAbstractUriResolver18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 252 NONAME + _ZN20QAbstractUriResolver25staticMetaObjectExtraDataE @ 253 NONAME DATA 8 + _ZN23QAbstractMessageHandler18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 254 NONAME + _ZN23QAbstractMessageHandler25staticMetaObjectExtraDataE @ 255 NONAME DATA 8 diff --git a/src/s60installs/eabi/phononu.def b/src/s60installs/eabi/phononu.def index e80f225..a26e1f0 100644 --- a/src/s60installs/eabi/phononu.def +++ b/src/s60installs/eabi/phononu.def @@ -593,4 +593,32 @@ EXPORTS _ZTIN6Phonon15AudioDataOutputE @ 592 NONAME _ZTVN6Phonon12PulseSupportE @ 593 NONAME _ZTVN6Phonon15AudioDataOutputE @ 594 NONAME + _ZN6Phonon10SeekSlider18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 595 NONAME + _ZN6Phonon10SeekSlider25staticMetaObjectExtraDataE @ 596 NONAME DATA 8 + _ZN6Phonon11AudioOutput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 597 NONAME + _ZN6Phonon11AudioOutput25staticMetaObjectExtraDataE @ 598 NONAME DATA 8 + _ZN6Phonon11MediaObject18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 599 NONAME + _ZN6Phonon11MediaObject25staticMetaObjectExtraDataE @ 600 NONAME DATA 8 + _ZN6Phonon11VideoPlayer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 601 NONAME + _ZN6Phonon11VideoPlayer25staticMetaObjectExtraDataE @ 602 NONAME DATA 8 + _ZN6Phonon11VideoWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 603 NONAME + _ZN6Phonon11VideoWidget25staticMetaObjectExtraDataE @ 604 NONAME DATA 8 + _ZN6Phonon12EffectWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 605 NONAME + _ZN6Phonon12EffectWidget25staticMetaObjectExtraDataE @ 606 NONAME DATA 8 + _ZN6Phonon12PulseSupport18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 607 NONAME + _ZN6Phonon12PulseSupport25staticMetaObjectExtraDataE @ 608 NONAME DATA 8 + _ZN6Phonon12VolumeSlider18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 609 NONAME + _ZN6Phonon12VolumeSlider25staticMetaObjectExtraDataE @ 610 NONAME DATA 8 + _ZN6Phonon15AudioDataOutput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 611 NONAME + _ZN6Phonon15AudioDataOutput25staticMetaObjectExtraDataE @ 612 NONAME DATA 8 + _ZN6Phonon15MediaController18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 613 NONAME + _ZN6Phonon15MediaController25staticMetaObjectExtraDataE @ 614 NONAME DATA 8 + _ZN6Phonon17VolumeFaderEffect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 615 NONAME + _ZN6Phonon17VolumeFaderEffect25staticMetaObjectExtraDataE @ 616 NONAME DATA 8 + _ZN6Phonon19AbstractAudioOutput18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 617 NONAME + _ZN6Phonon19AbstractAudioOutput25staticMetaObjectExtraDataE @ 618 NONAME DATA 8 + _ZN6Phonon19AbstractMediaStream18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 619 NONAME + _ZN6Phonon19AbstractMediaStream25staticMetaObjectExtraDataE @ 620 NONAME DATA 8 + _ZN6Phonon6Effect18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 621 NONAME + _ZN6Phonon6Effect25staticMetaObjectExtraDataE @ 622 NONAME DATA 8 diff --git a/src/testlib/qabstracttestlogger.cpp b/src/testlib/qabstracttestlogger.cpp index e42e0c4..c2e53e6 100644 --- a/src/testlib/qabstracttestlogger.cpp +++ b/src/testlib/qabstracttestlogger.cpp @@ -104,8 +104,16 @@ void QAbstractTestLogger::startLogging() void QAbstractTestLogger::stopLogging() { QTEST_ASSERT(QTest::stream); - if (QTest::stream != stdout) + if (QTest::stream != stdout) { fclose(QTest::stream); + } else { +#ifdef Q_OS_SYMBIAN + // Convenience sleep for Symbian and TRK. Without this sleep depending on the timing the + // user would not see the complete output because it is still pending in any of the buffers + // before arriving via the USB port on the development PC + User::AfterHighRes(2*1000*1000); +#endif + } QTest::stream = 0; } diff --git a/tests/auto/gui.pro b/tests/auto/gui.pro index 186f00c..8dc7b5f 100644 --- a/tests/auto/gui.pro +++ b/tests/auto/gui.pro @@ -114,9 +114,6 @@ SUBDIRS=\ qmovie \ qvolatileimage \ qnetworkaccessmanager_and_qprogressdialog \ - qnetworkcachemetadata \ - qnetworkdiskcache \ - qnetworkreply \ qpaintengine \ qpainterpath \ qpainterpathstroker \ @@ -169,7 +166,6 @@ SUBDIRS=\ qtabbar \ qtableview \ qtablewidget \ - qtcpserver \ qtcpsocket \ qtessellator \ qtextblock \ @@ -196,7 +192,6 @@ SUBDIRS=\ qtreeview \ qtreewidget \ qtreewidgetitemiterator \ - qudpsocket \ qundogroup \ qundostack \ qvectornd \ diff --git a/tests/auto/network.pro b/tests/auto/network.pro index b427f1c..e4cecce 100644 --- a/tests/auto/network.pro +++ b/tests/auto/network.pro @@ -16,15 +16,18 @@ SUBDIRS=\ qhttpnetworkconnection \ qhttpnetworkreply \ qhttpsocketengine \ - qnativesocketengine \ + platformsocketengine \ qnetworkaccessmanager \ qnetworkaddressentry \ + qnetworkcachemetadata \ qnetworkconfiguration \ qnetworkconfigurationmanager \ qnetworkcookie \ qnetworkcookiejar \ + qnetworkdiskcache \ qnetworkinterface \ qnetworkproxy \ + qnetworkreply \ qnetworkrequest \ qnetworksession \ qobjectperformance \ @@ -37,13 +40,15 @@ SUBDIRS=\ qsslsocket \ qsslsocket_onDemandCertificates_member \ qsslsocket_onDemandCertificates_static \ + qtcpserver \ + qudpsocket \ # qnetworkproxyfactory \ # Uses a hardcoded proxy configuration !contains(QT_CONFIG, private_tests): SUBDIRS -= \ qauthenticator \ qhttpnetworkconnection \ qhttpnetworkreply \ - qnativesocketengine \ + platformsocketengine \ qsocketnotifier \ qsocks5socketengine \ diff --git a/tests/auto/networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp index 64de64a..f40ea3e 100644 --- a/tests/auto/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/networkselftest/tst_networkselftest.cpp @@ -44,6 +44,12 @@ #include <time.h> +#ifndef QT_NO_BEARERMANAGEMENT +#include <QtNetwork/qnetworkconfigmanager.h> +#include <QtNetwork/qnetworkconfiguration.h> +#include <QtNetwork/qnetworksession.h> +#endif + #ifdef Q_OS_SYMBIAN // In Symbian OS test data is located in applications private dir // Current path (C:\private\<UID>) contains only ascii chars @@ -64,6 +70,7 @@ public: QHostAddress serverIpAddress(); private slots: + void initTestCase(); void hostTest(); void dnsResolution_data(); void dnsResolution(); @@ -91,6 +98,12 @@ private slots: // ssl supported test void supportsSsl(); +private: +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager *netConfMan; + QNetworkConfiguration networkConfiguration; + QScopedPointer<QNetworkSession> networkSession; +#endif }; class Chat @@ -354,6 +367,19 @@ QHostAddress tst_NetworkSelfTest::serverIpAddress() return cachedIpAddress; } +void tst_NetworkSelfTest::initTestCase() +{ +#ifndef QT_NO_BEARERMANAGEMENT + netConfMan = new QNetworkConfigurationManager(this); + networkConfiguration = netConfMan->defaultConfiguration(); + networkSession.reset(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + QVERIFY(networkSession->waitForOpened(30000)); + } +#endif +} + void tst_NetworkSelfTest::hostTest() { // this is a localhost self-test @@ -469,7 +495,8 @@ void tst_NetworkSelfTest::fileLineEndingTest() static QList<Chat> ftpChat(const QByteArray &userSuffix = QByteArray()) { - return QList<Chat>() << Chat::expect("220") + QList<Chat> rv; + rv << Chat::expect("220") << Chat::discardUntil("\r\n") << Chat::send("USER anonymous" + userSuffix + "\r\n") << Chat::expect("331") @@ -504,10 +531,15 @@ static QList<Chat> ftpChat(const QByteArray &userSuffix = QByteArray()) // << Chat::send("SIZE nonASCII/german_\344\366\374\304\326\334\337\r\n") // << Chat::expect("213 40\r\n") - << Chat::send("QUIT\r\n") - << Chat::expect("221") - << Chat::discardUntil("\r\n") - << Chat::RemoteDisconnect; + << Chat::send("QUIT\r\n"); +#ifdef Q_OS_SYMBIAN + if (userSuffix.length() == 0) // received but unacknowledged packets are discarded by TCP RST, so this doesn't work with frox proxy +#endif + rv << Chat::expect("221") + << Chat::discardUntil("\r\n"); + + rv << Chat::RemoteDisconnect; + return rv; } void tst_NetworkSelfTest::ftpServer() diff --git a/tests/auto/platformsocketengine/.gitignore b/tests/auto/platformsocketengine/.gitignore new file mode 100644 index 0000000..afe9389 --- /dev/null +++ b/tests/auto/platformsocketengine/.gitignore @@ -0,0 +1 @@ +tst_platformsocketengine diff --git a/tests/auto/qnativesocketengine/qsocketengine.pri b/tests/auto/platformsocketengine/platformsocketengine.pri index 15f31fd..15f31fd 100644 --- a/tests/auto/qnativesocketengine/qsocketengine.pri +++ b/tests/auto/platformsocketengine/platformsocketengine.pri diff --git a/tests/auto/platformsocketengine/platformsocketengine.pro b/tests/auto/platformsocketengine/platformsocketengine.pro new file mode 100644 index 0000000..faf745c --- /dev/null +++ b/tests/auto/platformsocketengine/platformsocketengine.pro @@ -0,0 +1,16 @@ +load(qttest_p4) +SOURCES += tst_platformsocketengine.cpp + +include(../platformsocketengine/platformsocketengine.pri) + +requires(contains(QT_CONFIG,private_tests)) + +MOC_DIR=tmp + +QT = core network + +symbian { + TARGET.CAPABILITY = NetworkServices + INCLUDEPATH += $$OS_LAYER_SYSTEMINCLUDE + LIBS += -lesock +} diff --git a/tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp b/tests/auto/platformsocketengine/tst_platformsocketengine.cpp index 41eb1e25..184371d 100644 --- a/tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp +++ b/tests/auto/platformsocketengine/tst_platformsocketengine.cpp @@ -50,7 +50,6 @@ #include <qdatastream.h> -#include <private/qnativesocketengine_p.h> #include <qhostaddress.h> #include <qdatetime.h> @@ -63,6 +62,20 @@ #include <stddef.h> +#ifdef Q_OS_SYMBIAN +#include <QNetworkConfigurationManager> +#include <QNetworkConfiguration> +#include <QNetworkSession> +#include <QScopedPointer> +#define PLATFORMSOCKETENGINE QSymbianSocketEngine +#define PLATFORMSOCKETENGINESTRING "QSymbianSocketEngine" +#include <private/qsymbiansocketengine_p.h> +#include <private/qcore_symbian_p.h> +#else +#define PLATFORMSOCKETENGINE QNativeSocketEngine +#define PLATFORMSOCKETENGINESTRING "QNativeSocketEngine" +#include <private/qnativesocketengine_p.h> +#endif #include <qstringlist.h> @@ -70,13 +83,13 @@ //TESTED_FILES=network/qnativesocketengine.cpp network/qnativesocketengine_p.h network/qnativesocketengine_unix.cpp -class tst_QNativeSocketEngine : public QObject +class tst_PlatformSocketEngine : public QObject { Q_OBJECT public: - tst_QNativeSocketEngine(); - virtual ~tst_QNativeSocketEngine(); + tst_PlatformSocketEngine(); + virtual ~tst_PlatformSocketEngine(); public slots: @@ -92,35 +105,35 @@ private slots: void udpLoopbackPerformance(); void tcpLoopbackPerformance(); void readWriteBufferSize(); - void tooManySockets(); void bind(); void networkError(); void setSocketDescriptor(); void invalidSend(); void receiveUrgentData(); + void tooManySockets(); }; -tst_QNativeSocketEngine::tst_QNativeSocketEngine() +tst_PlatformSocketEngine::tst_PlatformSocketEngine() { Q_SET_DEFAULT_IAP } -tst_QNativeSocketEngine::~tst_QNativeSocketEngine() +tst_PlatformSocketEngine::~tst_PlatformSocketEngine() { } -void tst_QNativeSocketEngine::init() +void tst_PlatformSocketEngine::init() { } -void tst_QNativeSocketEngine::cleanup() +void tst_PlatformSocketEngine::cleanup() { } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::construction() +void tst_PlatformSocketEngine::construction() { - QNativeSocketEngine socketDevice; + PLATFORMSOCKETENGINE socketDevice; QVERIFY(!socketDevice.isValid()); @@ -137,17 +150,17 @@ void tst_QNativeSocketEngine::construction() QVERIFY(socketDevice.peerPort() == 0); QVERIFY(socketDevice.error() == QAbstractSocket::UnknownSocketError); - QTest::ignoreMessage(QtWarningMsg, "QNativeSocketEngine::bytesAvailable() was called in QAbstractSocket::UnconnectedState"); + QTest::ignoreMessage(QtWarningMsg, PLATFORMSOCKETENGINESTRING "::bytesAvailable() was called in QAbstractSocket::UnconnectedState"); QVERIFY(socketDevice.bytesAvailable() == 0); - QTest::ignoreMessage(QtWarningMsg, "QNativeSocketEngine::hasPendingDatagrams() was called in QAbstractSocket::UnconnectedState"); + QTest::ignoreMessage(QtWarningMsg, PLATFORMSOCKETENGINESTRING "::hasPendingDatagrams() was called in QAbstractSocket::UnconnectedState"); QVERIFY(!socketDevice.hasPendingDatagrams()); } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::simpleConnectToIMAP() +void tst_PlatformSocketEngine::simpleConnectToIMAP() { - QNativeSocketEngine socketDevice; + PLATFORMSOCKETENGINE socketDevice; // Initialize device QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol)); @@ -202,12 +215,9 @@ void tst_QNativeSocketEngine::simpleConnectToIMAP() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::udpLoopbackTest() +void tst_PlatformSocketEngine::udpLoopbackTest() { -#ifdef SYMBIAN_WINSOCK_CONNECTIVITY - QSKIP("Not working on Emulator without WinPCAP", SkipAll); -#endif - QNativeSocketEngine udpSocket; + PLATFORMSOCKETENGINE udpSocket; // Initialize device #1 QVERIFY(udpSocket.initialize(QAbstractSocket::UdpSocket)); @@ -224,7 +234,7 @@ void tst_QNativeSocketEngine::udpLoopbackTest() QVERIFY(port != 0); // Initialize device #2 - QNativeSocketEngine udpSocket2; + PLATFORMSOCKETENGINE udpSocket2; QVERIFY(udpSocket2.initialize(QAbstractSocket::UdpSocket)); // Connect device #2 to #1 @@ -253,12 +263,9 @@ void tst_QNativeSocketEngine::udpLoopbackTest() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::udpIPv6LoopbackTest() +void tst_PlatformSocketEngine::udpIPv6LoopbackTest() { -#if defined(Q_OS_SYMBIAN) - QSKIP("Symbian: IPv6 is not yet supported", SkipAll); -#endif - QNativeSocketEngine udpSocket; + PLATFORMSOCKETENGINE udpSocket; // Initialize device #1 bool init = udpSocket.initialize(QAbstractSocket::UdpSocket, QAbstractSocket::IPv6Protocol); @@ -275,7 +282,7 @@ void tst_QNativeSocketEngine::udpIPv6LoopbackTest() QVERIFY(port != 0); // Initialize device #2 - QNativeSocketEngine udpSocket2; + PLATFORMSOCKETENGINE udpSocket2; QVERIFY(udpSocket2.initialize(QAbstractSocket::UdpSocket, QAbstractSocket::IPv6Protocol)); // Connect device #2 to #1 @@ -305,12 +312,26 @@ void tst_QNativeSocketEngine::udpIPv6LoopbackTest() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::broadcastTest() +void tst_PlatformSocketEngine::broadcastTest() { +#ifdef Q_OS_SYMBIAN + //broadcast isn't supported on loopback connections, but is on WLAN +#ifndef QT_NO_BEARERMANAGEMENT + QScopedPointer<QNetworkConfigurationManager> netConfMan(new QNetworkConfigurationManager()); + QNetworkConfiguration networkConfiguration(netConfMan->defaultConfiguration()); + QScopedPointer<QNetworkSession> networkSession(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + bool ok = networkSession->waitForOpened(30000); + qDebug() << networkSession->isOpen() << networkSession->error() << networkSession->errorString(); + QVERIFY(ok); + } +#endif +#endif #ifdef Q_OS_AIX QSKIP("Broadcast does not work on darko", SkipAll); #endif - QNativeSocketEngine broadcastSocket; + PLATFORMSOCKETENGINE broadcastSocket; // Initialize a regular Udp socket QVERIFY(broadcastSocket.initialize(QAbstractSocket::UdpSocket)); @@ -324,10 +345,18 @@ void tst_QNativeSocketEngine::broadcastTest() // Broadcast an inappropriate troll message QByteArray trollMessage = "MOOT wtf is a MOOT? talk english not your sutpiD ENGLISH."; - QVERIFY(broadcastSocket.writeDatagram(trollMessage.data(), + qint64 written = broadcastSocket.writeDatagram(trollMessage.data(), trollMessage.size(), QHostAddress::Broadcast, - port) == trollMessage.size()); + port); + +#ifdef Q_OS_SYMBIAN + //On symbian, broadcasts return 0 bytes written if none of the interfaces support it. + //Notably the loopback interfaces do not. (though they do support multicast!?) + if (written == 0) + QEXPECT_FAIL("", "No active interface supports broadcast", Abort); +#endif + QCOMPARE((int)written, trollMessage.size()); // Wait until we receive it ourselves #if defined(Q_OS_FREEBSD) @@ -346,9 +375,9 @@ void tst_QNativeSocketEngine::broadcastTest() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::serverTest() +void tst_PlatformSocketEngine::serverTest() { - QNativeSocketEngine server; + PLATFORMSOCKETENGINE server; // Initialize a Tcp socket QVERIFY(server.initialize(QAbstractSocket::TcpSocket)); @@ -363,7 +392,7 @@ void tst_QNativeSocketEngine::serverTest() QVERIFY(server.state() == QAbstractSocket::ListeningState); // Initialize a Tcp socket - QNativeSocketEngine client; + PLATFORMSOCKETENGINE client; QVERIFY(client.initialize(QAbstractSocket::TcpSocket)); if (!client.connectToHost(QHostAddress("127.0.0.1"), port)) { QVERIFY(client.state() == QAbstractSocket::ConnectingState); @@ -377,7 +406,7 @@ void tst_QNativeSocketEngine::serverTest() // A socket device is initialized on the server side, passing the // socket descriptor from accept(). It's pre-connected. - QNativeSocketEngine serverSocket; + PLATFORMSOCKETENGINE serverSocket; QVERIFY(serverSocket.initialize(socketDescriptor)); QVERIFY(serverSocket.state() == QAbstractSocket::ConnectedState); @@ -400,12 +429,12 @@ void tst_QNativeSocketEngine::serverTest() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::udpLoopbackPerformance() +void tst_PlatformSocketEngine::udpLoopbackPerformance() { #ifdef SYMBIAN_WINSOCK_CONNECTIVITY QSKIP("Not working on Emulator without WinPCAP", SkipAll); #endif - QNativeSocketEngine udpSocket; + PLATFORMSOCKETENGINE udpSocket; // Initialize device #1 QVERIFY(udpSocket.initialize(QAbstractSocket::UdpSocket)); @@ -422,7 +451,7 @@ void tst_QNativeSocketEngine::udpLoopbackPerformance() QVERIFY(port != 0); // Initialize device #2 - QNativeSocketEngine udpSocket2; + PLATFORMSOCKETENGINE udpSocket2; QVERIFY(udpSocket2.initialize(QAbstractSocket::UdpSocket)); // Connect device #2 to #1 @@ -454,9 +483,9 @@ void tst_QNativeSocketEngine::udpLoopbackPerformance() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::tcpLoopbackPerformance() +void tst_PlatformSocketEngine::tcpLoopbackPerformance() { - QNativeSocketEngine server; + PLATFORMSOCKETENGINE server; // Initialize a Tcp socket QVERIFY(server.initialize(QAbstractSocket::TcpSocket)); @@ -471,7 +500,7 @@ void tst_QNativeSocketEngine::tcpLoopbackPerformance() QVERIFY(server.state() == QAbstractSocket::ListeningState); // Initialize a Tcp socket - QNativeSocketEngine client; + PLATFORMSOCKETENGINE client; QVERIFY(client.initialize(QAbstractSocket::TcpSocket)); // Connect to our server @@ -481,17 +510,21 @@ void tst_QNativeSocketEngine::tcpLoopbackPerformance() QVERIFY(client.state() == QAbstractSocket::ConnectedState); } - // The server accepts the connectio + // The server accepts the connection int socketDescriptor = server.accept(); QVERIFY(socketDescriptor > 0); // A socket device is initialized on the server side, passing the // socket descriptor from accept(). It's pre-connected. - QNativeSocketEngine serverSocket; + PLATFORMSOCKETENGINE serverSocket; QVERIFY(serverSocket.initialize(socketDescriptor)); QVERIFY(serverSocket.state() == QAbstractSocket::ConnectedState); +#if defined (Q_OS_SYMBIAN) && defined (__WINS__) + const int messageSize = 1024 * 16; +#else const int messageSize = 1024 * 256; +#endif QByteArray message1(messageSize, '@'); QByteArray answer(messageSize, '@'); @@ -517,9 +550,9 @@ void tst_QNativeSocketEngine::tcpLoopbackPerformance() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::readWriteBufferSize() +void tst_PlatformSocketEngine::readWriteBufferSize() { - QNativeSocketEngine device; + PLATFORMSOCKETENGINE device; QVERIFY(device.initialize(QAbstractSocket::TcpSocket)); @@ -539,15 +572,15 @@ void tst_QNativeSocketEngine::readWriteBufferSize() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::tooManySockets() +void tst_PlatformSocketEngine::tooManySockets() { #if defined Q_OS_WIN QSKIP("Certain windows machines suffocate and spend too much time in this test.", SkipAll); #endif - QList<QNativeSocketEngine *> sockets; - QNativeSocketEngine *socketLayer = 0; + QList<PLATFORMSOCKETENGINE *> sockets; + PLATFORMSOCKETENGINE *socketLayer = 0; for (;;) { - socketLayer = new QNativeSocketEngine; + socketLayer = new PLATFORMSOCKETENGINE; sockets.append(socketLayer); if (!socketLayer->initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol)) @@ -560,20 +593,20 @@ void tst_QNativeSocketEngine::tooManySockets() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::bind() +void tst_PlatformSocketEngine::bind() { #if !defined Q_OS_WIN && !defined Q_OS_SYMBIAN - QNativeSocketEngine binder; + PLATFORMSOCKETENGINE binder; QVERIFY(binder.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol)); QVERIFY(!binder.bind(QHostAddress::Any, 82)); QVERIFY(binder.error() == QAbstractSocket::SocketAccessError); #endif - QNativeSocketEngine binder2; + PLATFORMSOCKETENGINE binder2; QVERIFY(binder2.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol)); QVERIFY(binder2.bind(QHostAddress::Any, 31180)); - QNativeSocketEngine binder3; + PLATFORMSOCKETENGINE binder3; QVERIFY(binder3.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol)); QVERIFY(!binder3.bind(QHostAddress::Any, 31180)); @@ -586,9 +619,9 @@ void tst_QNativeSocketEngine::bind() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::networkError() +void tst_PlatformSocketEngine::networkError() { - QNativeSocketEngine client; + PLATFORMSOCKETENGINE client; QVERIFY(client.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol)); @@ -604,6 +637,12 @@ void tst_QNativeSocketEngine::networkError() #ifdef Q_OS_WIN // could use shutdown to produce different errors ::closesocket(client.socketDescriptor()); +#elif defined(Q_OS_SYMBIAN) + RSocket sock; + QVERIFY(QSymbianSocketManager::instance().lookupSocket(client.socketDescriptor(), sock)); + TRequestStatus stat; + sock.Shutdown(RSocket::EImmediate, stat); + User::WaitForRequest(stat); #else ::close(client.socketDescriptor()); #endif @@ -612,31 +651,31 @@ void tst_QNativeSocketEngine::networkError() } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::setSocketDescriptor() +void tst_PlatformSocketEngine::setSocketDescriptor() { - QNativeSocketEngine socket1; + PLATFORMSOCKETENGINE socket1; QVERIFY(socket1.initialize(QAbstractSocket::TcpSocket)); - QNativeSocketEngine socket2; + PLATFORMSOCKETENGINE socket2; QVERIFY(socket2.initialize(socket1.socketDescriptor())); } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::invalidSend() +void tst_PlatformSocketEngine::invalidSend() { - QNativeSocketEngine socket; + PLATFORMSOCKETENGINE socket; QVERIFY(socket.initialize(QAbstractSocket::TcpSocket)); - QTest::ignoreMessage(QtWarningMsg, "QNativeSocketEngine::writeDatagram() was" + QTest::ignoreMessage(QtWarningMsg, PLATFORMSOCKETENGINESTRING "::writeDatagram() was" " called by a socket other than QAbstractSocket::UdpSocket"); QCOMPARE(socket.writeDatagram("hei", 3, QHostAddress::LocalHost, 143), (qlonglong) -1); } //--------------------------------------------------------------------------- -void tst_QNativeSocketEngine::receiveUrgentData() +void tst_PlatformSocketEngine::receiveUrgentData() { - QNativeSocketEngine server; + PLATFORMSOCKETENGINE server; QVERIFY(server.initialize(QAbstractSocket::TcpSocket)); @@ -648,7 +687,7 @@ void tst_QNativeSocketEngine::receiveUrgentData() QVERIFY(server.listen()); QVERIFY(server.state() == QAbstractSocket::ListeningState); - QNativeSocketEngine client; + PLATFORMSOCKETENGINE client; QVERIFY(client.initialize(QAbstractSocket::TcpSocket)); if (!client.connectToHost(QHostAddress("127.0.0.1"), port)) { @@ -660,7 +699,7 @@ void tst_QNativeSocketEngine::receiveUrgentData() int socketDescriptor = server.accept(); QVERIFY(socketDescriptor > 0); - QNativeSocketEngine serverSocket; + PLATFORMSOCKETENGINE serverSocket; QVERIFY(serverSocket.initialize(socketDescriptor)); QVERIFY(serverSocket.state() == QAbstractSocket::ConnectedState); @@ -676,7 +715,18 @@ void tst_QNativeSocketEngine::receiveUrgentData() // The server sends an urgent message msg = 'Q'; +#if defined(Q_OS_SYMBIAN) + RSocket sock; + QVERIFY(QSymbianSocketManager::instance().lookupSocket(socketDescriptor, sock)); + TRequestStatus stat; + TSockXfrLength len; + sock.Send(TPtrC8((TUint8*)&msg,1), KSockWriteUrgent, stat, len); + User::WaitForRequest(stat); + QVERIFY(stat == KErrNone); + QCOMPARE(len(), 1); +#else QCOMPARE(int(::send(socketDescriptor, &msg, sizeof(msg), MSG_OOB)), 1); +#endif // The client receives the urgent message QVERIFY(client.waitForRead()); @@ -689,7 +739,15 @@ void tst_QNativeSocketEngine::receiveUrgentData() // The client sends an urgent message msg = 'T'; int clientDescriptor = client.socketDescriptor(); +#if defined(Q_OS_SYMBIAN) + QVERIFY(QSymbianSocketManager::instance().lookupSocket(clientDescriptor, sock)); + sock.Send(TPtrC8((TUint8*)&msg,1), KSockWriteUrgent, stat, len); + User::WaitForRequest(stat); + QVERIFY(stat == KErrNone); + QCOMPARE(len(), 1); +#else QCOMPARE(int(::send(clientDescriptor, &msg, sizeof(msg), MSG_OOB)), 1); +#endif // The server receives the urgent message QVERIFY(serverSocket.waitForRead()); @@ -701,5 +759,5 @@ void tst_QNativeSocketEngine::receiveUrgentData() } -QTEST_MAIN(tst_QNativeSocketEngine) -#include "tst_qnativesocketengine.moc" +QTEST_MAIN(tst_PlatformSocketEngine) +#include "tst_platformsocketengine.moc" diff --git a/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp index db0d0a7..76e6711 100644 --- a/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp +++ b/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp @@ -45,6 +45,12 @@ #include "../../shared/util.h" #include "../network-settings.h" +#ifndef QT_NO_BEARERMANAGEMENT +#include <QtNetwork/qnetworkconfigmanager.h> +#include <QtNetwork/qnetworkconfiguration.h> +#include <QtNetwork/qnetworksession.h> +#endif + #define TESTFILE QString("http://%1/qtest/cgi-bin/").arg(QtNetworkSettings::serverName()) class tst_QAbstractNetworkCache : public QObject @@ -56,6 +62,7 @@ public: virtual ~tst_QAbstractNetworkCache(); private slots: + void initTestCase(); void expires_data(); void expires(); void expiresSynchronous_data(); @@ -81,6 +88,12 @@ private slots: private: void check(); void checkSynchronous(); + +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager *netConfMan; + QNetworkConfiguration networkConfiguration; + QScopedPointer<QNetworkSession> networkSession; +#endif }; class NetworkDiskCache : public QNetworkDiskCache @@ -124,6 +137,19 @@ static bool AlwaysFalse = false; Q_DECLARE_METATYPE(QNetworkRequest::CacheLoadControl) +void tst_QAbstractNetworkCache::initTestCase() +{ +#ifndef QT_NO_BEARERMANAGEMENT + netConfMan = new QNetworkConfigurationManager(this); + networkConfiguration = netConfMan->defaultConfiguration(); + networkSession.reset(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + QVERIFY(networkSession->waitForOpened(30000)); + } +#endif +} + void tst_QAbstractNetworkCache::expires_data() { QTest::addColumn<QNetworkRequest::CacheLoadControl>("cacheLoadControl"); diff --git a/tests/auto/qdir/tst_qdir.cpp b/tests/auto/qdir/tst_qdir.cpp index 04f7fa9..8112814 100644 --- a/tests/auto/qdir/tst_qdir.cpp +++ b/tests/auto/qdir/tst_qdir.cpp @@ -574,6 +574,12 @@ void tst_QDir::entryList_data() << int(QDir::AllEntries | QDir::Writable) << int(QDir::Name) << filterLinks(QString(".,..,directory,linktodirectory.lnk,writable").split(',')); #endif + QTest::newRow("QDir::Files | QDir::Readable") << SRCDIR "entrylist/" << QStringList("*") + << int(QDir::Files | QDir::Readable) << int(QDir::Name) + << filterLinks(QString("file,linktofile.lnk,writable").split(',')); + QTest::newRow("QDir::Dirs | QDir::Readable") << SRCDIR "entrylist/" << QStringList("*") + << int(QDir::Dirs | QDir::Readable) << int(QDir::Name) + << filterLinks(QString(".,..,directory,linktodirectory.lnk").split(',')); QTest::newRow("Namefilters b*") << SRCDIR "entrylist/" << QStringList("d*") << int(QDir::NoFilter) << int(QDir::Name) << filterLinks(QString("directory").split(',')); diff --git a/tests/auto/qeventloop/qeventloop.pro b/tests/auto/qeventloop/qeventloop.pro index f6c24ae..e7489fa 100644 --- a/tests/auto/qeventloop/qeventloop.pro +++ b/tests/auto/qeventloop/qeventloop.pro @@ -5,3 +5,4 @@ QT += network win32:!wince*:LIBS += -luser32 +symbian:TARGET.CAPABILITY += NetworkServices
\ No newline at end of file diff --git a/tests/auto/qeventloop/tst_qeventloop.cpp b/tests/auto/qeventloop/tst_qeventloop.cpp index 6860f19..fa2a34e 100644 --- a/tests/auto/qeventloop/tst_qeventloop.cpp +++ b/tests/auto/qeventloop/tst_qeventloop.cpp @@ -602,8 +602,10 @@ public slots: QTcpSocket *serverSocket = server->nextPendingConnection(); serverSocket->write(data, size); serverSocket->flush(); + QTest::qSleep(200); //allow the TCP/IP stack time to loopback the data, so our socket is ready to read QCoreApplication::processEvents(QEventLoop::ExcludeSocketNotifiers); testResult = dataArrived; + QCoreApplication::processEvents(); //check the deferred event is processed serverSocket->close(); QThread::currentThread()->exit(0); } @@ -620,9 +622,11 @@ public: if (tester->init()) exec(); testResult = tester->testResult; + dataArrived = tester->dataArrived; delete tester; } bool testResult; + bool dataArrived; }; void tst_QEventLoop::processEventsExcludeSocket() @@ -631,6 +635,7 @@ void tst_QEventLoop::processEventsExcludeSocket() thread.start(); QVERIFY(thread.wait()); QVERIFY(!thread.testResult); + QVERIFY(thread.dataArrived); } class TimerReceiver : public QObject diff --git a/tests/auto/qftp/tst_qftp.cpp b/tests/auto/qftp/tst_qftp.cpp index 64d49d8..78157d8 100644 --- a/tests/auto/qftp/tst_qftp.cpp +++ b/tests/auto/qftp/tst_qftp.cpp @@ -50,6 +50,10 @@ #include <time.h> #include <stdlib.h> #include <QNetworkProxy> +#include <QNetworkConfiguration> +#include <qnetworkconfigmanager.h> +#include <QNetworkSession> +#include <QtNetwork/private/qnetworksession_p.h> #include "../network-settings.h" @@ -62,7 +66,9 @@ #define SRCDIR "" #endif - +#ifndef QT_NO_BEARERMANAGEMENT +Q_DECLARE_METATYPE(QNetworkConfiguration) +#endif class tst_QFtp : public QObject { @@ -148,6 +154,10 @@ private: void renameCleanup( const QString &host, const QString &user, const QString &password, const QString &fileToDelete ); QFtp *ftp; +#ifndef QT_NO_BEARERMANAGEMENT + QSharedPointer<QNetworkSession> networkSessionExplicit; + QSharedPointer<QNetworkSession> networkSessionImplicit; +#endif QList<int> ids; // helper to make sure that all expected signals are emitted int current_id; @@ -186,9 +196,9 @@ private: const int bytesTotal_init = -10; const int bytesDone_init = -10; -tst_QFtp::tst_QFtp() +tst_QFtp::tst_QFtp() : + ftp(0) { - Q_SET_DEFAULT_IAP } tst_QFtp::~tst_QFtp() @@ -199,33 +209,62 @@ void tst_QFtp::initTestCase_data() { QTest::addColumn<bool>("setProxy"); QTest::addColumn<int>("proxyType"); + QTest::addColumn<bool>("setSession"); - QTest::newRow("WithoutProxy") << false << 0; - QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); + QTest::newRow("WithoutProxy") << false << 0 << false; + QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy) << false; //### doesn't work well yet. //QTest::newRow("WithHttpProxy") << true << int(QNetworkProxy::HttpProxy); + +#ifndef QT_NO_BEARERMANAGEMENT + QTest::newRow("WithoutProxyWithSession") << false << 0 << true; + QTest::newRow("WithSocks5ProxyAndSession") << true << int(QNetworkProxy::Socks5Proxy) << true; +#endif } void tst_QFtp::initTestCase() { +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager manager; + networkSessionImplicit = QSharedPointer<QNetworkSession>(new QNetworkSession(manager.defaultConfiguration())); + networkSessionImplicit->open(); + QVERIFY(networkSessionImplicit->waitForOpened(60000)); //there may be user prompt on 1st connect +#endif } void tst_QFtp::cleanupTestCase() { +#ifndef QT_NO_BEARERMANAGEMENT + networkSessionExplicit.clear(); + networkSessionImplicit.clear(); +#endif } void tst_QFtp::init() { QFETCH_GLOBAL(bool, setProxy); + QFETCH_GLOBAL(int, proxyType); + QFETCH_GLOBAL(bool, setSession); if (setProxy) { - QFETCH_GLOBAL(int, proxyType); if (proxyType == QNetworkProxy::Socks5Proxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080)); } else if (proxyType == QNetworkProxy::HttpProxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy, QtNetworkSettings::serverName(), 3128)); } } +#ifndef QT_NO_BEARERMANAGEMENT + if (setSession) { + networkSessionExplicit = networkSessionImplicit; + if (!networkSessionExplicit->isOpen()) { + networkSessionExplicit->open(); + QVERIFY(networkSessionExplicit->waitForOpened(30000)); + } + } else { + networkSessionExplicit.clear(); + } +#endif + delete ftp; ftp = 0; ids.clear(); @@ -270,6 +309,12 @@ void tst_QFtp::cleanup() if (setProxy) { QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy); } + + delete ftp; + ftp = 0; +#ifndef QT_NO_BEARERMANAGEMENT + networkSessionExplicit.clear(); +#endif } void tst_QFtp::connectToHost_data() @@ -1538,7 +1583,6 @@ void tst_QFtp::proxy() } } - void tst_QFtp::binaryAscii() { QString file = "asciifile%1.txt"; @@ -1899,6 +1943,11 @@ void tst_QFtp::dataTransferProgress( qint64 done, qint64 total ) QFtp *tst_QFtp::newFtp() { QFtp *nFtp = new QFtp( this ); +#ifndef QT_NO_BEARERMANAGEMENT + if (networkSessionExplicit) { + nFtp->setProperty("_q_networksession", QVariant::fromValue(networkSessionExplicit)); + } +#endif connect( nFtp, SIGNAL(commandStarted(int)), SLOT(commandStarted(int)) ); connect( nFtp, SIGNAL(commandFinished(int,bool)), diff --git a/tests/auto/qhostinfo/tst_qhostinfo.cpp b/tests/auto/qhostinfo/tst_qhostinfo.cpp index 8be8dcb..af0631e 100644 --- a/tests/auto/qhostinfo/tst_qhostinfo.cpp +++ b/tests/auto/qhostinfo/tst_qhostinfo.cpp @@ -62,6 +62,12 @@ #include <private/qthread_p.h> #include <QTcpServer> +#ifndef QT_NO_BEARERMANAGEMENT +#include <QtNetwork/qnetworkconfigmanager.h> +#include <QtNetwork/qnetworkconfiguration.h> +#include <QtNetwork/qnetworksession.h> +#endif + #include <time.h> #include <qlibrary.h> #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) @@ -126,6 +132,7 @@ private slots: void raceCondition(); void threadSafety(); + void threadSafetyAsynchronousAPI(); void multipleSameLookups(); void multipleDifferentLookups_data(); @@ -133,6 +140,8 @@ private slots: void cache(); + void abortHostLookup(); + void abortHostLookupInDifferentThread(); protected slots: void resultsReady(const QHostInfo &); @@ -142,6 +151,11 @@ private: bool lookupDone; int lookupsDoneCounter; QHostInfo lookupResults; +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager *netConfMan; + QNetworkConfiguration networkConfiguration; + QScopedPointer<QNetworkSession> networkSession; +#endif }; // Testing get/set functions @@ -182,6 +196,21 @@ tst_QHostInfo::~tst_QHostInfo() void tst_QHostInfo::initTestCase() { +#ifndef QT_NO_BEARERMANAGEMENT + //start the default network + netConfMan = new QNetworkConfigurationManager(this); + networkConfiguration = netConfMan->defaultConfiguration(); + networkSession.reset(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + QVERIFY(networkSession->waitForOpened(30000)); + } +#endif + +#ifdef Q_OS_SYMBIAN + ipv6Available = true; + ipv6LookupsAvailable = true; +#else ipv6Available = false; ipv6LookupsAvailable = false; #if !defined(QT_NO_GETADDRINFO) @@ -204,6 +233,7 @@ void tst_QHostInfo::initTestCase() } } #endif +#endif QTcpServer server; if (server.listen(QHostAddress("::1"))) { @@ -237,18 +267,14 @@ void tst_QHostInfo::lookupIPv4_data() QTest::addColumn<QString>("addresses"); QTest::addColumn<int>("err"); -#ifdef Q_OS_SYMBIAN // Test server lookup QTest::newRow("lookup_01") << QtNetworkSettings::serverName() << QtNetworkSettings::serverIP().toString() << int(QHostInfo::NoError); - QTest::newRow("literal_ip4") << QtNetworkSettings::serverIP().toString() << QtNetworkSettings::serverIP().toString() << int(QHostInfo::NoError); - QTest::newRow("multiple_ip4") << "multi.dev.troll.no" << "1.2.3.4 1.2.3.5 10.3.3.31" << int(QHostInfo::NoError); -#else QTest::newRow("empty") << "" << "" << int(QHostInfo::HostNotFound); QTest::newRow("single_ip4") << "lupinella.troll.no" << lupinellaIp << int(QHostInfo::NoError); QTest::newRow("multiple_ip4") << "multi.dev.troll.no" << "1.2.3.4 1.2.3.5 10.3.3.31" << int(QHostInfo::NoError); QTest::newRow("literal_ip4") << lupinellaIp << lupinellaIp << int(QHostInfo::NoError); -#endif + QTest::newRow("notfound") << "this-name-does-not-exist-hopefully." << "" << int(QHostInfo::HostNotFound); QTest::newRow("idn-ace") << "xn--alqualond-34a.troll.no" << "10.3.3.55" << int(QHostInfo::NoError); @@ -290,8 +316,11 @@ void tst_QHostInfo::lookupIPv6_data() QTest::addColumn<QString>("addresses"); QTest::addColumn<int>("err"); - QTest::newRow("ip6") << "www.ipv6-net.org" << "62.93.217.177 2001:618:1401:0:0:0:0:4" << int(QHostInfo::NoError); - QTest::newRow("ip6") << "ipv6.google.com" << "2A00:1450:8007:0:0:0:0:63" << int(QHostInfo::NoError); + QTest::newRow("ipv6-net") << "www.ipv6-net.org" << "62.93.217.177 2001:618:1401:0:0:0:0:4" << int(QHostInfo::NoError); + QTest::newRow("ipv6-test") << "ipv6-test.dev.troll.no" << "2001:638:a00:2:0:0:0:2" << int(QHostInfo::NoError); + QTest::newRow("dns6-test") << "dns6-test-dev.troll.no" << "2001:470:1f01:115:0:0:0:10" << int(QHostInfo::NoError); + QTest::newRow("multi-dns6") << "multi-dns6-test-dev.troll.no" << "2001:470:1f01:115:0:0:0:11 2001:470:1f01:115:0:0:0:12" << int(QHostInfo::NoError); + QTest::newRow("dns46-test") << "dns46-test-dev.troll.no" << "10.3.4.90 2001:470:1f01:115:0:0:0:13" << int(QHostInfo::NoError); // avoid using real IPv6 addresses here because this will do a DNS query // real addresses are between 2000:: and 3fff:ffff:ffff:ffff:ffff:ffff:ffff @@ -311,7 +340,7 @@ void tst_QHostInfo::lookupIPv6() lookupDone = false; QHostInfo::lookupHost(hostname, this, SLOT(resultsReady(const QHostInfo&))); - QTestEventLoop::instance().enterLoop(3); + QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(lookupDone); @@ -412,6 +441,8 @@ protected: inline void run() { QHostInfo info = QHostInfo::fromName("qt.nokia.com"); + QCOMPARE(info.error(), QHostInfo::NoError); + QVERIFY(info.addresses().count() > 0); QCOMPARE(info.addresses().at(0).toString(), QString("87.238.50.178")); } }; @@ -419,7 +450,7 @@ protected: void tst_QHostInfo::threadSafety() { const int nattempts = 5; -#if defined(Q_OS_WINCE) +#if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) const int runs = 10; #else const int runs = 100; @@ -433,6 +464,56 @@ void tst_QHostInfo::threadSafety() } } +class LookupReceiver : public QObject +{ + Q_OBJECT +public slots: + void start(); + void resultsReady(const QHostInfo&); +public: + QHostInfo result; + int numrequests; +}; + +void LookupReceiver::start() +{ + for (int i=0;i<numrequests;i++) + QHostInfo::lookupHost(QString("qt.nokia.com"), this, SLOT(resultsReady(const QHostInfo&))); +} + +void LookupReceiver::resultsReady(const QHostInfo &info) +{ + result = info; + numrequests--; + if (numrequests == 0 || info.error() != QHostInfo::NoError) + QThread::currentThread()->quit(); +} + +void tst_QHostInfo::threadSafetyAsynchronousAPI() +{ + const int nattempts = 10; + const int lookupsperthread = 10; + QList<QThread*> threads; + QList<LookupReceiver*> receivers; + for (int i = 0; i < nattempts; ++i) { + QThread* thread = new QThread; + LookupReceiver* receiver = new LookupReceiver; + receiver->numrequests = lookupsperthread; + receivers.append(receiver); + receiver->moveToThread(thread); + connect(thread, SIGNAL(started()), receiver, SLOT(start())); + thread->start(); + threads.append(thread); + } + for (int k = threads.count() - 1; k >= 0; --k) + QVERIFY(threads.at(k)->wait(60000)); + foreach (LookupReceiver* receiver, receivers) { + QCOMPARE(receiver->result.error(), QHostInfo::NoError); + QCOMPARE(receiver->result.addresses().at(0).toString(), QString("87.238.50.178")); + QCOMPARE(receiver->numrequests, 0); + } +} + // this test is for the multi-threaded QHostInfo rewrite. It is about getting results at all, // not about getting correct IPs void tst_QHostInfo::multipleSameLookups() @@ -479,8 +560,9 @@ void tst_QHostInfo::multipleDifferentLookups() QElapsedTimer timer; timer.start(); - while (timer.elapsed() < 10000 && lookupsDoneCounter < repeats*COUNT) { + while (timer.elapsed() < 60000 && lookupsDoneCounter < repeats*COUNT) { QTestEventLoop::instance().enterLoop(2); + //qDebug() << "t:" << timer.elapsed(); } QCOMPARE(lookupsDoneCounter, repeats*COUNT); } @@ -521,7 +603,7 @@ void tst_QHostInfo::cache() QVERIFY(result.addresses().isEmpty()); // the slot should have been called 2 times. - QVERIFY(lookupsDoneCounter == 2); + QCOMPARE(lookupsDoneCounter, 2); } void tst_QHostInfo::resultsReady(const QHostInfo &hi) @@ -532,5 +614,52 @@ void tst_QHostInfo::resultsReady(const QHostInfo &hi) QMetaObject::invokeMethod(&QTestEventLoop::instance(), "exitLoop", Qt::QueuedConnection); } +void tst_QHostInfo::abortHostLookup() +{ + //reset counter + lookupsDoneCounter = 0; + bool valid = false; + int id = -1; + QHostInfo result = qt_qhostinfo_lookup("qt.nokia.com", this, SLOT(resultsReady(QHostInfo)), &valid, &id); + QVERIFY(!valid); + //it is assumed that the DNS request/response in the backend is slower than it takes to call abort + QHostInfo::abortHostLookup(id); + QTestEventLoop::instance().enterLoop(5); + QCOMPARE(lookupsDoneCounter, 0); +} + +class LookupAborter : public QObject +{ + Q_OBJECT +public slots: + void abort() + { + QHostInfo::abortHostLookup(id); + QThread::currentThread()->quit(); + } +public: + int id; +}; + +void tst_QHostInfo::abortHostLookupInDifferentThread() +{ + //reset counter + lookupsDoneCounter = 0; + bool valid = false; + int id = -1; + QHostInfo result = qt_qhostinfo_lookup("qt.nokia.com", this, SLOT(resultsReady(QHostInfo)), &valid, &id); + QVERIFY(!valid); + QThread thread; + LookupAborter aborter; + aborter.id = id; + aborter.moveToThread(&thread); + connect(&thread, SIGNAL(started()), &aborter, SLOT(abort())); + //it is assumed that the DNS request/response in the backend is slower than it takes to schedule the thread and call abort + thread.start(); + QVERIFY(thread.wait(5000)); + QTestEventLoop::instance().enterLoop(5); + QCOMPARE(lookupsDoneCounter, 0); +} + QTEST_MAIN(tst_QHostInfo) #include "tst_qhostinfo.moc" diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index 0b72139..ba1f8c8 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -195,8 +195,8 @@ void tst_QHttpNetworkConnection::head() QCOMPARE(reply->statusCode(), statusCode); QCOMPARE(reply->reasonPhrase(), statusString); - // only check it if it is set - if (reply->contentLength() != -1) + // only check it if it is set and expected + if (reply->contentLength() != -1 && contentLength != -1) QCOMPARE(reply->contentLength(), qint64(contentLength)); QVERIFY(reply->isFinished()); @@ -219,8 +219,8 @@ void tst_QHttpNetworkConnection::get_data() QTest::newRow("success-internal") << "http://" << QtNetworkSettings::serverName() << "/qtest/rfc3252.txt" << ushort(80) << false << 200 << "OK" << 25962 << 25962; QTest::newRow("success-external") << "http://" << "www.ietf.org" << "/rfc/rfc3252.txt" << ushort(80) << false << 200 << "OK" << 25962 << 25962; - QTest::newRow("failure-path") << "http://" << QtNetworkSettings::serverName() << "/t" << ushort(80) << false << 404 << "Not Found" << -1 << 997 + QtNetworkSettings::serverName().size(); - QTest::newRow("failure-protocol") << "" << QtNetworkSettings::serverName() << "/qtest/rfc3252.txt" << ushort(80) << false << 400 << "Bad Request" << -1 << 930 + QtNetworkSettings::serverName().size(); + QTest::newRow("failure-path") << "http://" << QtNetworkSettings::serverName() << "/t" << ushort(80) << false << 404 << "Not Found" << -1 << -1; + QTest::newRow("failure-protocol") << "" << QtNetworkSettings::serverName() << "/qtest/rfc3252.txt" << ushort(80) << false << 400 << "Bad Request" << -1 << -1; } void tst_QHttpNetworkConnection::get() @@ -255,8 +255,8 @@ void tst_QHttpNetworkConnection::get() QCOMPARE(reply->statusCode(), statusCode); QCOMPARE(reply->reasonPhrase(), statusString); - // only check it if it is set - if (reply->contentLength() != -1) + // only check it if it is set and expected + if (reply->contentLength() != -1 && contentLength != -1) QCOMPARE(reply->contentLength(), qint64(contentLength)); stopWatch.start(); @@ -270,7 +270,12 @@ void tst_QHttpNetworkConnection::get() } while (!reply->isFinished()); QVERIFY(reply->isFinished()); - QCOMPARE(ba.size(), downloadSize); + //do not require server generated error pages to be a fixed size + if (downloadSize != -1) + QCOMPARE(ba.size(), downloadSize); + //but check against content length if it was sent + if (reply->contentLength() != -1) + QCOMPARE(ba.size(), (int)reply->contentLength()); delete reply; } @@ -385,7 +390,7 @@ void tst_QHttpNetworkConnection::post_data() QTest::addColumn<int>("downloadSize"); QTest::newRow("success-internal") << "http://" << QtNetworkSettings::serverName() << "/qtest/cgi-bin/echo.cgi" << ushort(80) << false << "7 bytes" << 200 << "OK" << 7 << 7; - QTest::newRow("failure-internal") << "http://" << QtNetworkSettings::serverName() << "/t" << ushort(80) << false << "Hello World" << 404 << "Not Found" << -1 << 997 + QtNetworkSettings::serverName().size(); + QTest::newRow("failure-internal") << "http://" << QtNetworkSettings::serverName() << "/t" << ushort(80) << false << "Hello World" << 404 << "Not Found" << -1 << -1; } void tst_QHttpNetworkConnection::post() @@ -429,13 +434,16 @@ void tst_QHttpNetworkConnection::post() QCOMPARE(reply->reasonPhrase(), statusString); qint64 cLen = reply->contentLength(); - if (cLen==-1) { - // HTTP 1.1 server may respond with chunked encoding and in that - // case contentLength is not present in reply -> verify that it is the case - QByteArray transferEnc = reply->headerField("Transfer-Encoding"); - QCOMPARE(transferEnc, QByteArray("chunked")); - } else { - QCOMPARE(cLen, qint64(contentLength)); + if (contentLength != -1) { + // only check the content length if test expected it to be set + if (cLen==-1) { + // HTTP 1.1 server may respond with chunked encoding and in that + // case contentLength is not present in reply -> verify that it is the case + QByteArray transferEnc = reply->headerField("Transfer-Encoding"); + QCOMPARE(transferEnc, QByteArray("chunked")); + } else { + QCOMPARE(cLen, qint64(contentLength)); + } } stopWatch.start(); @@ -449,7 +457,12 @@ void tst_QHttpNetworkConnection::post() } while (!reply->isFinished()); QVERIFY(reply->isFinished()); - QCOMPARE(ba.size(), downloadSize); + //don't require fixed size for generated error pages + if (downloadSize != -1) + QCOMPARE(ba.size(), downloadSize); + //but do compare with content length if possible + if (cLen != -1) + QCOMPARE(ba.size(), (int)cLen); delete reply; } @@ -630,7 +643,8 @@ void tst_QHttpNetworkConnection::compression() QCOMPARE(reply->statusCode(), statusCode); QCOMPARE(reply->reasonPhrase(), statusString); bool isLengthOk = (reply->contentLength() == qint64(contentLength) - || reply->contentLength() == qint64(downloadSize)); + || reply->contentLength() == qint64(downloadSize) + || reply->contentLength() == -1); //apache2 does not send content-length for compressed pages QVERIFY(isLengthOk); diff --git a/tests/auto/qhttpsocketengine/qhttpsocketengine.pro b/tests/auto/qhttpsocketengine/qhttpsocketengine.pro index d76ebb6..6df6192 100644 --- a/tests/auto/qhttpsocketengine/qhttpsocketengine.pro +++ b/tests/auto/qhttpsocketengine/qhttpsocketengine.pro @@ -2,7 +2,7 @@ load(qttest_p4) SOURCES += tst_qhttpsocketengine.cpp -include(../qnativesocketengine/qsocketengine.pri) +include(../platformsocketengine/platformsocketengine.pri) MOC_DIR=tmp diff --git a/tests/auto/qnativesocketengine/.gitignore b/tests/auto/qnativesocketengine/.gitignore deleted file mode 100644 index 4700e5e..0000000 --- a/tests/auto/qnativesocketengine/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tst_qnativesocketengine diff --git a/tests/auto/qnativesocketengine/qnativesocketengine.pro b/tests/auto/qnativesocketengine/qnativesocketengine.pro deleted file mode 100644 index 0275d37..0000000 --- a/tests/auto/qnativesocketengine/qnativesocketengine.pro +++ /dev/null @@ -1,13 +0,0 @@ -load(qttest_p4) -SOURCES += tst_qnativesocketengine.cpp - -include(../qnativesocketengine/qsocketengine.pri) - -requires(contains(QT_CONFIG,private_tests)) - -MOC_DIR=tmp - -QT = core network - -symbian: TARGET.CAPABILITY = NetworkServices - diff --git a/tests/auto/qnetworkcachemetadata/qnetworkcachemetadata.pro b/tests/auto/qnetworkcachemetadata/qnetworkcachemetadata.pro index 77ad347..ae0941e 100644 --- a/tests/auto/qnetworkcachemetadata/qnetworkcachemetadata.pro +++ b/tests/auto/qnetworkcachemetadata/qnetworkcachemetadata.pro @@ -1,4 +1,5 @@ load(qttest_p4) +QT -= gui QT += network SOURCES += tst_qnetworkcachemetadata.cpp diff --git a/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp b/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp index adcfd93..c31eac7 100644 --- a/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp +++ b/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp @@ -52,7 +52,7 @@ */ #include <QNetworkAccessManager> -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) #include <stdio.h> #include <iapconf.h> #endif @@ -73,7 +73,7 @@ private slots: void isRoamingAvailable(); private: -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) Maemo::IAPConf *iapconf; Maemo::IAPConf *iapconf2; Maemo::IAPConf *gprsiap; @@ -85,7 +85,7 @@ private: void tst_QNetworkConfiguration::initTestCase() { -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) iapconf = new Maemo::IAPConf("007"); iapconf->setValue("ipv4_type", "AUTO"); iapconf->setValue("wlan_wepkey1", "connt"); @@ -158,7 +158,7 @@ void tst_QNetworkConfiguration::initTestCase() void tst_QNetworkConfiguration::cleanupTestCase() { -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) iapconf->clear(); delete iapconf; iapconf2->clear(); diff --git a/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp b/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp index 443fd18..7787608 100644 --- a/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp +++ b/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp @@ -45,7 +45,7 @@ #include <QtNetwork/qnetworkconfiguration.h> #include <QtNetwork/qnetworkconfigmanager.h> -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) #include <stdio.h> #include <iapconf.h> #endif @@ -67,7 +67,7 @@ private slots: void configurationFromIdentifier(); private: -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) Maemo::IAPConf *iapconf; Maemo::IAPConf *iapconf2; Maemo::IAPConf *gprsiap; @@ -79,7 +79,7 @@ private: void tst_QNetworkConfigurationManager::initTestCase() { -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) iapconf = new Maemo::IAPConf("007"); iapconf->setValue("ipv4_type", "AUTO"); iapconf->setValue("wlan_wepkey1", "connt"); @@ -153,7 +153,7 @@ void tst_QNetworkConfigurationManager::initTestCase() void tst_QNetworkConfigurationManager::cleanupTestCase() { -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) iapconf->clear(); delete iapconf; iapconf2->clear(); diff --git a/tests/auto/qnetworkdiskcache/qnetworkdiskcache.pro b/tests/auto/qnetworkdiskcache/qnetworkdiskcache.pro index 3b13087..c05171d 100644 --- a/tests/auto/qnetworkdiskcache/qnetworkdiskcache.pro +++ b/tests/auto/qnetworkdiskcache/qnetworkdiskcache.pro @@ -1,4 +1,5 @@ load(qttest_p4) +QT -= gui QT += network SOURCES += tst_qnetworkdiskcache.cpp diff --git a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index 28c6027..78b5f1b 100644 --- a/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/auto/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -311,9 +311,6 @@ void tst_QNetworkDiskCache::data_data() // public QIODevice* data(QUrl const& url) void tst_QNetworkDiskCache::data() { -#ifdef Q_OS_SYMBIAN - QSKIP("Due to mmap(...) bug in Open C [Temtrack DEF142242]", SkipAll); -#endif QFETCH(QNetworkCacheMetaData, data); SubQNetworkDiskCache cache; QUrl url(EXAMPLE_URL); @@ -384,9 +381,6 @@ void tst_QNetworkDiskCache::setCacheDirectory() // public void updateMetaData(QNetworkCacheMetaData const& metaData) void tst_QNetworkDiskCache::updateMetaData() { -#ifdef Q_OS_SYMBIAN - QSKIP("Due to mmap(...) bug in Open C [Temtrack DEF142242]", SkipAll); -#endif QUrl url(EXAMPLE_URL); SubQNetworkDiskCache cache; cache.setupWithOne(url); diff --git a/tests/auto/qnetworkinterface/tst_qnetworkinterface.cpp b/tests/auto/qnetworkinterface/tst_qnetworkinterface.cpp index 0d7c68e..c630eca 100644 --- a/tests/auto/qnetworkinterface/tst_qnetworkinterface.cpp +++ b/tests/auto/qnetworkinterface/tst_qnetworkinterface.cpp @@ -45,6 +45,8 @@ #include <qcoreapplication.h> #include <qnetworkinterface.h> #include <qtcpsocket.h> +#include <QNetworkConfigurationManager> +#include <QNetworkSession> #include "../network-settings.h" //TESTED_FILES=qnetworkinterface.cpp qnetworkinterface.h qnetworkinterface_unix.cpp qnetworkinterface_win.cpp @@ -58,23 +60,52 @@ public: virtual ~tst_QNetworkInterface(); private slots: + void initTestCase(); + void cleanupTestCase(); void dump(); void loopbackIPv4(); void loopbackIPv6(); void localAddress(); void interfaceFromXXX(); void copyInvalidInterface(); + +private: +#ifndef QT_NO_BEARER_MANAGEMENT + QNetworkConfigurationManager *netConfMan; + QNetworkConfiguration networkConfiguration; + QScopedPointer<QNetworkSession> networkSession; +#endif }; tst_QNetworkInterface::tst_QNetworkInterface() { - Q_SET_DEFAULT_IAP } tst_QNetworkInterface::~tst_QNetworkInterface() { } +void tst_QNetworkInterface::initTestCase() +{ +#ifndef QT_NO_BEARERMANAGEMENT + netConfMan = new QNetworkConfigurationManager(this); + networkConfiguration = netConfMan->defaultConfiguration(); + networkSession.reset(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + QVERIFY(networkSession->waitForOpened(30000)); + } +#endif +} + +void tst_QNetworkInterface::cleanupTestCase() +{ +#ifndef QT_NO_BEARERMANAGEMENT + if (networkSession && networkSession->isOpen()) { + networkSession->close(); + } +#endif +} void tst_QNetworkInterface::dump() { @@ -127,10 +158,6 @@ void tst_QNetworkInterface::loopbackIPv4() void tst_QNetworkInterface::loopbackIPv6() { -#ifdef Q_OS_SYMBIAN - QSKIP( "Symbian: IPv6 is not yet supported", SkipAll ); -#else - QList<QHostAddress> all = QNetworkInterface::allAddresses(); bool loopbackfound = false; @@ -144,7 +171,6 @@ void tst_QNetworkInterface::loopbackIPv6() anyIPv6 = true; QVERIFY(!anyIPv6 || loopbackfound); -#endif } void tst_QNetworkInterface::localAddress() diff --git a/tests/auto/qnetworkreply/test/test.pro b/tests/auto/qnetworkreply/test/test.pro index 7efc2fb..d1f6707 100644 --- a/tests/auto/qnetworkreply/test/test.pro +++ b/tests/auto/qnetworkreply/test/test.pro @@ -1,4 +1,5 @@ load(qttest_p4) +QT -= gui SOURCES += ../tst_qnetworkreply.cpp TARGET = ../tst_qnetworkreply @@ -15,24 +16,21 @@ win32 { QT = core network RESOURCES += ../qnetworkreply.qrc -wince*: { - addFiles.files = ../empty ../rfc3252.txt ../resource - addFiles.path = . - DEPLOYMENT += addFiles -} - -symbian:{ - addFiles.files = ../empty ../rfc3252.txt ../resource ../bigfile +symbian|wince*:{ + # For cross compiled targets, reference data files need to be deployed + addFiles.files = ../empty ../rfc3252.txt ../resource ../bigfile ../*.jpg addFiles.path = . DEPLOYMENT += addFiles certFiles.files = ../certs certFiles.path = . DEPLOYMENT += certFiles +} +symbian:{ # Symbian toolchain does not support correct include semantics INCLUDEPATH+=..\\..\\..\\..\\include\\QtNetwork\\private # bigfile test case requires more heap - TARGET.EPOCHEAPSIZE="0x100 0x1000000" + TARGET.EPOCHEAPSIZE="0x100 0x10000000" TARGET.CAPABILITY="ALL -TCB" } diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index d8b6dc4..146d2f3 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -47,6 +47,7 @@ #include <QtCore/QEventLoop> #include <QtCore/QFile> #include <QtCore/QSharedPointer> +#include <QtCore/QScopedPointer> #include <QtCore/QTemporaryFile> #include <QtNetwork/QTcpServer> #include <QtNetwork/QTcpSocket> @@ -66,6 +67,11 @@ #include <QtNetwork/qsslerror.h> #include <QtNetwork/qsslconfiguration.h> #endif +#ifndef QT_NO_BEARERMANAGEMENT +#include <QtNetwork/qnetworkconfigmanager.h> +#include <QtNetwork/qnetworkconfiguration.h> +#include <QtNetwork/qnetworksession.h> +#endif #include <time.h> @@ -138,6 +144,11 @@ class tst_QNetworkReply: public QObject QSslConfiguration storedSslConfiguration; QList<QSslError> storedExpectedSslErrors; #endif +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager *netConfMan; + QNetworkConfiguration networkConfiguration; + QScopedPointer<QNetworkSession> networkSession; +#endif public: tst_QNetworkReply(); @@ -431,16 +442,23 @@ public: QTcpSocket *client; // always the last one that was received QByteArray dataToTransmit; QByteArray receivedData; + QSemaphore ready; bool doClose; bool doSsl; bool multiple; int totalConnections; - MiniHttpServer(const QByteArray &data, bool ssl = false) + MiniHttpServer(const QByteArray &data, bool ssl = false, QThread *thread = 0) : client(0), dataToTransmit(data), doClose(true), doSsl(ssl), multiple(false), totalConnections(0) { listen(); + if (thread) { + connect(thread, SIGNAL(started()), this, SLOT(threadStartedSlot())); + moveToThread(thread); + thread->start(); + ready.acquire(); + } } protected: @@ -517,6 +535,11 @@ public slots: disconnect(client, 0, this, 0); } } + + void threadStartedSlot() + { + ready.release(); + } }; class MyCookieJar: public QNetworkCookieJar @@ -1244,6 +1267,18 @@ void tst_QNetworkReply::initTestCase() #endif QDir::setSearchPaths("srcdir", QStringList() << SRCDIR); +#ifndef QT_NO_OPENSSL + QSslSocket::defaultCaCertificates(); //preload certificates +#endif +#ifndef QT_NO_BEARERMANAGEMENT + netConfMan = new QNetworkConfigurationManager(this); + networkConfiguration = netConfMan->defaultConfiguration(); + networkSession.reset(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + QVERIFY(networkSession->waitForOpened(30000)); + } +#endif } void tst_QNetworkReply::cleanupTestCase() @@ -1251,6 +1286,9 @@ void tst_QNetworkReply::cleanupTestCase() #if !defined Q_OS_WIN QFile::remove(wronlyFileName); #endif + if (networkSession && networkSession->isOpen()) { + networkSession->close(); + } } void tst_QNetworkReply::init() @@ -1610,7 +1648,7 @@ void tst_QNetworkReply::getErrors() QNetworkRequest request(url); #if defined(Q_OS_WIN) || defined (Q_OS_SYMBIAN) - if (qstrcmp(QTest::currentDataTag(), "empty-scheme-host") == 0) + if (qstrcmp(QTest::currentDataTag(), "empty-scheme-host") == 0 && QFileInfo(url).isAbsolute()) QTest::ignoreMessage(QtWarningMsg, "QNetworkAccessFileBackendFactory: URL has no schema set, use file:// for files"); #endif @@ -1629,7 +1667,8 @@ void tst_QNetworkReply::getErrors() QFETCH(int, error); #if defined(Q_OS_WIN) || defined (Q_OS_SYMBIAN) - QEXPECT_FAIL("empty-scheme-host", "this is expected to fail on Windows and Symbian, QTBUG-17731", Abort); + if (QFileInfo(url).isAbsolute()) + QEXPECT_FAIL("empty-scheme-host", "this is expected to fail on Windows and Symbian, QTBUG-17731", Abort); #endif QEXPECT_FAIL("ftp-is-dir", "QFtp cannot provide enough detail", Abort); // the line below is not necessary @@ -1835,6 +1874,7 @@ void tst_QNetworkReply::postToHttp() QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi"); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); QNetworkReplyPtr reply; QFETCH(QByteArray, data); @@ -1861,6 +1901,7 @@ void tst_QNetworkReply::postToHttpSynchronous() QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi"); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); request.setAttribute( QNetworkRequest::SynchronousRequestAttribute, @@ -3620,8 +3661,7 @@ void tst_QNetworkReply::ioPutToFileFromLocalSocket() QString socketname = "networkreplytest"; QLocalServer server; if (!server.listen(socketname)) { - if (QFile::exists(server.fullServerName())) - QFile::remove(server.fullServerName()); + QLocalServer::removeServer(socketname); QVERIFY(server.listen(socketname)); } QLocalSocket active; @@ -3666,7 +3706,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess() { #if defined(Q_OS_WINCE) || defined (Q_OS_SYMBIAN) QSKIP("Currently no stdin/out supported for Windows CE / Symbian OS", SkipAll); -#endif +#else #ifdef Q_OS_WIN if (qstrcmp(QTest::currentDataTag(), "small") == 0) @@ -3704,6 +3744,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess() QByteArray contents = file.readAll(); QCOMPARE(contents, data); #endif +#endif } void tst_QNetworkReply::ioPutToFtpFromFile_data() @@ -3817,6 +3858,8 @@ void tst_QNetworkReply::ioPostToHttpFromFile() QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi"); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); + QNetworkReplyPtr reply = manager.post(request, &sourceFile); connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); @@ -3893,8 +3936,10 @@ void tst_QNetworkReply::ioPostToHttpFromSocket() socketpair.endPoints[0]->write(data); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); + manager.setProxy(proxy); - QNetworkReplyPtr reply = manager.post(QNetworkRequest(url), socketpair.endPoints[1]); + QNetworkReplyPtr reply = manager.post(request, socketpair.endPoints[1]); socketpair.endPoints[0]->close(); connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); @@ -3967,6 +4012,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous() QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi"); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); request.setAttribute( QNetworkRequest::SynchronousRequestAttribute, true); @@ -3996,7 +4042,8 @@ void tst_QNetworkReply::ioPostToHttpFromMiddleOfFileToEnd() QUrl url = "http://" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi"; QNetworkRequest request(url); - QNetworkReplyPtr reply = manager.post(QNetworkRequest(url), &sourceFile); + request.setRawHeader("Content-Type", "application/octet-stream"); + QNetworkReplyPtr reply = manager.post(request, &sourceFile); connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), @@ -4022,6 +4069,7 @@ void tst_QNetworkReply::ioPostToHttpFromMiddleOfFileFiveBytes() QUrl url = "http://" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi"; QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); // only send 5 bytes request.setHeader(QNetworkRequest::ContentLengthHeader, 5); QVERIFY(request.header(QNetworkRequest::ContentLengthHeader).isValid()); @@ -4082,6 +4130,7 @@ void tst_QNetworkReply::ioPostToHttpNoBufferFlag() QUrl url = "http://" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi"; QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); // disallow buffering request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, true); request.setHeader(QNetworkRequest::ContentLengthHeader, data.size()); @@ -4144,6 +4193,7 @@ void tst_QNetworkReply::ioPostToHttpsUploadProgress() // create the request QUrl url = QUrl(QString("https://127.0.0.1:%1/").arg(server.serverPort())); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); QNetworkReplyPtr reply = manager.post(request, &sourceFile); QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64))); connect(&server, SIGNAL(newEncryptedConnection()), &QTestEventLoop::instance(), SLOT(exitLoop())); @@ -4212,6 +4262,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp_data() void tst_QNetworkReply::ioGetFromBuiltinHttp() { + QSKIP("Limiting is broken right now, check QTBUG-15065", SkipAll); QFETCH(bool, https); QFETCH(int, bufferSize); @@ -4250,7 +4301,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp() connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTime loopTime; loopTime.start(); - QTestEventLoop::instance().enterLoop(11); + QTestEventLoop::instance().enterLoop(30); const int elapsedTime = loopTime.elapsed(); server.wait(); reader.wrapUp(); @@ -4282,10 +4333,9 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp() const int minRate = rate * 1024 * (100-allowedDeviation) / 100; const int maxRate = rate * 1024 * (100+allowedDeviation) / 100; qDebug() << minRate << "<="<< server.transferRate << "<=" << maxRate << "?"; - QVERIFY(server.transferRate >= minRate); QEXPECT_FAIL("http+limited", "Limiting is broken right now, check QTBUG-15065", Continue); QEXPECT_FAIL("https+limited", "Limiting is broken right now, check QTBUG-15065", Continue); - QVERIFY(server.transferRate <= maxRate); + QVERIFY(server.transferRate >= minRate && server.transferRate <= maxRate); } } @@ -4360,6 +4410,7 @@ void tst_QNetworkReply::ioPostToHttpEmptyUploadProgress() // create the request QUrl url = QUrl(QString("http://127.0.0.1:%1/").arg(server.serverPort())); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); QNetworkReplyPtr reply = manager.post(request, &buffer); QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64))); connect(&server, SIGNAL(newConnection()), &QTestEventLoop::instance(), SLOT(exitLoop())); @@ -4706,6 +4757,7 @@ void tst_QNetworkReply::receiveCookiesFromHttp() QByteArray data = cookieString.toLatin1() + '\n'; QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/set-cookie.cgi"); QNetworkRequest request(url); + request.setRawHeader("Content-Type", "application/octet-stream"); QNetworkReplyPtr reply; RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); @@ -4733,7 +4785,7 @@ void tst_QNetworkReply::receiveCookiesFromHttpSynchronous() QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/set-cookie.cgi"); QNetworkRequest request(url); - + request.setRawHeader("Content-Type", "application/octet-stream"); request.setAttribute( QNetworkRequest::SynchronousRequestAttribute, true); @@ -4949,6 +5001,26 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous_data() httpProxyCommands_data(); } +struct QThreadCleanup +{ + static inline void cleanup(QThread *thread) + { + thread->quit(); + if (thread->wait(3000)) + delete thread; + else + qWarning("thread hung, leaking memory so test can finish"); + } +}; + +struct QDeleteLaterCleanup +{ + static inline void cleanup(QObject *o) + { + o->deleteLater(); + } +}; + void tst_QNetworkReply::httpProxyCommandsSynchronous() { QFETCH(QUrl, url); @@ -4958,11 +5030,9 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous() // when using synchronous commands, we need a different event loop for // the server thread, because the client is never returning to the // event loop - MiniHttpServer proxyServer(responseToSend); - QThread serverThread; - proxyServer.moveToThread(&serverThread); - serverThread.start(); - QNetworkProxy proxy(QNetworkProxy::HttpProxy, "127.0.0.1", proxyServer.serverPort()); + QScopedPointer<QThread, QThreadCleanup> serverThread(new QThread); + QScopedPointer<MiniHttpServer, QDeleteLaterCleanup> proxyServer(new MiniHttpServer(responseToSend, false, serverThread.data())); + QNetworkProxy proxy(QNetworkProxy::HttpProxy, "127.0.0.1", proxyServer->serverPort()); manager.setProxy(proxy); QNetworkRequest request(url); @@ -4975,8 +5045,6 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous() QNetworkReplyPtr reply = manager.get(request); QVERIFY(reply->isFinished()); // synchronous manager.setProxy(QNetworkProxy()); - serverThread.quit(); - serverThread.wait(3000); //qDebug() << reply->error() << reply->errorString(); @@ -4984,7 +5052,7 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous() // especially since it won't succeed in the HTTPS case // so just check that the command was correct - QString receivedHeader = proxyServer.receivedData.left(expectedCommand.length()); + QString receivedHeader = proxyServer->receivedData.left(expectedCommand.length()); QCOMPARE(receivedHeader, expectedCommand); } @@ -5508,7 +5576,7 @@ void tst_QNetworkReply::getFromHttpIntoBuffer() // FIXME we really need to consolidate all those server implementations class GetFromHttpIntoBuffer2Server : QObject { - Q_OBJECT; + Q_OBJECT qint64 dataSize; qint64 dataSent; QTcpServer server; @@ -5630,6 +5698,7 @@ public: void finishedSlot() { // We should have already received all readyRead + QVERIFY(!bytesAvailableList.isEmpty()); QVERIFY(bytesAvailableList.last() == uploadSize); } }; @@ -5775,7 +5844,7 @@ void tst_QNetworkReply::getFromUnreachableIp() QNetworkReplyPtr reply = manager.get(request); connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - QTestEventLoop::instance().enterLoop(5); + QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(reply->error() != QNetworkReply::NoError); @@ -5961,7 +6030,7 @@ void tst_QNetworkReply::synchronousRequest_data() << QString("text/plain"); QTest::newRow("simple-file") - << QUrl(QString::fromLatin1("file:///" SRCDIR "/rfc3252.txt")) + << QUrl::fromLocalFile(SRCDIR "/rfc3252.txt") << QString("file:" SRCDIR "/rfc3252.txt") << true << QString(); diff --git a/tests/auto/qnetworksession/test/tst_qnetworksession.cpp b/tests/auto/qnetworksession/test/tst_qnetworksession.cpp index 3315836..13cedda 100644 --- a/tests/auto/qnetworksession/test/tst_qnetworksession.cpp +++ b/tests/auto/qnetworksession/test/tst_qnetworksession.cpp @@ -48,7 +48,7 @@ #include <QtNetwork/qnetworkconfigmanager.h> #include <QtNetwork/qnetworksession.h> -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) #include <stdio.h> #include <iapconf.h> #endif @@ -105,7 +105,7 @@ private: int inProcessSessionManagementCount; -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) Maemo::IAPConf *iapconf; Maemo::IAPConf *iapconf2; Maemo::IAPConf *gprsiap; @@ -140,7 +140,7 @@ void tst_QNetworkSession::initTestCase() testsToRun["userChoiceSession"] = true; testsToRun["sessionOpenCloseStop"] = true; -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) iapconf = new Maemo::IAPConf("007"); iapconf->setValue("ipv4_type", "AUTO"); iapconf->setValue("wlan_wepkey1", "connt"); @@ -226,7 +226,7 @@ void tst_QNetworkSession::cleanupTestCase() "inProcessSessionManagement()"); } -#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) +#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN) iapconf->clear(); delete iapconf; iapconf2->clear(); diff --git a/tests/auto/qsocketnotifier/tst_qsocketnotifier.cpp b/tests/auto/qsocketnotifier/tst_qsocketnotifier.cpp index 0b7e7ef..5594dc3 100644 --- a/tests/auto/qsocketnotifier/tst_qsocketnotifier.cpp +++ b/tests/auto/qsocketnotifier/tst_qsocketnotifier.cpp @@ -46,7 +46,13 @@ #include <QtCore/QSocketNotifier> #include <QtNetwork/QTcpServer> #include <QtNetwork/QTcpSocket> +#ifdef Q_OS_SYMBIAN +#include <private/qsymbiansocketengine_p.h> +#define NATIVESOCKETENGINE QSymbianSocketEngine +#else #include <private/qnativesocketengine_p.h> +#define NATIVESOCKETENGINE QNativeSocketEngine +#endif class tst_QSocketNotifier : public QObject { @@ -71,10 +77,10 @@ class UnexpectedDisconnectTester : public QObject { Q_OBJECT public: - QNativeSocketEngine *readEnd1, *readEnd2; + NATIVESOCKETENGINE *readEnd1, *readEnd2; int sequence; - UnexpectedDisconnectTester(QNativeSocketEngine *s1, QNativeSocketEngine *s2) + UnexpectedDisconnectTester(NATIVESOCKETENGINE *s1, NATIVESOCKETENGINE *s2) : readEnd1(s1), readEnd2(s2), sequence(0) { QSocketNotifier *notifier1 = @@ -124,7 +130,7 @@ void tst_QSocketNotifier::unexpectedDisconnection() QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost, 0)); - QNativeSocketEngine readEnd1; + NATIVESOCKETENGINE readEnd1; readEnd1.initialize(QAbstractSocket::TcpSocket); bool b = readEnd1.connectToHost(server.serverAddress(), server.serverPort()); QVERIFY(readEnd1.waitForWrite()); @@ -135,7 +141,7 @@ void tst_QSocketNotifier::unexpectedDisconnection() QTcpSocket *writeEnd1 = server.nextPendingConnection(); QVERIFY(writeEnd1 != 0); - QNativeSocketEngine readEnd2; + NATIVESOCKETENGINE readEnd2; readEnd2.initialize(QAbstractSocket::TcpSocket); b = readEnd2.connectToHost(server.serverAddress(), server.serverPort()); QVERIFY(readEnd2.waitForWrite()); diff --git a/tests/auto/qsocks5socketengine/qsocks5socketengine.pro b/tests/auto/qsocks5socketengine/qsocks5socketengine.pro index 171d428..c82c62d 100644 --- a/tests/auto/qsocks5socketengine/qsocks5socketengine.pro +++ b/tests/auto/qsocks5socketengine/qsocks5socketengine.pro @@ -2,7 +2,7 @@ load(qttest_p4) SOURCES += tst_qsocks5socketengine.cpp -include(../qnativesocketengine/qsocketengine.pri) +include(../platformsocketengine/platformsocketengine.pri) MOC_DIR=tmp diff --git a/tests/auto/qsslsocket/qsslsocket.pro b/tests/auto/qsslsocket/qsslsocket.pro index aeeae8f..77517e0 100644 --- a/tests/auto/qsslsocket/qsslsocket.pro +++ b/tests/auto/qsslsocket/qsslsocket.pro @@ -23,8 +23,8 @@ wince* { DEPLOYMENT += certFiles } else:symbian { DEFINES += QSSLSOCKET_CERTUNTRUSTED_WORKAROUND - TARGET.EPOCHEAPSIZE="0x100 0x1000000" - TARGET.CAPABILITY=NetworkServices + TARGET.EPOCHEAPSIZE="0x100 0x3000000" + TARGET.CAPABILITY=NetworkServices ReadUserData certFiles.files = certs ssl.tar.gz certFiles.path = . diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 5b30a39..b508d47 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -537,6 +537,8 @@ void tst_QSslSocket::sslErrors() QSslSocketPtr socket = newSocket(); socket->connectToHostEncrypted(host, port); + if (!socket->waitForConnected()) + QEXPECT_FAIL("imap.trolltech.com", "server not open to internet", Continue); socket->waitForEncrypted(5000); SslErrorList output; @@ -545,7 +547,7 @@ void tst_QSslSocket::sslErrors() } #ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND - if (output.last() == QSslError::CertificateUntrusted) + if (output.count() && output.last() == QSslError::CertificateUntrusted) output.takeLast(); #endif QCOMPARE(output, expected); @@ -654,7 +656,7 @@ void tst_QSslSocket::sessionCipher() connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot())); QVERIFY(socket->sessionCipher().isNull()); socket->connectToHost(QtNetworkSettings::serverName(), 443 /* https */); - QVERIFY(socket->waitForConnected(5000)); + QVERIFY(socket->waitForConnected(10000)); QVERIFY(socket->sessionCipher().isNull()); socket->startClientEncryption(); QVERIFY(socket->waitForEncrypted(5000)); @@ -688,7 +690,7 @@ void tst_QSslSocket::localCertificate() socket->setPrivateKey(QLatin1String(SRCDIR "certs/fluke.key")); socket->connectToHostEncrypted(QtNetworkSettings::serverName(), 443); - QVERIFY(socket->waitForEncrypted(5000)); + QVERIFY(socket->waitForEncrypted(10000)); } void tst_QSslSocket::mode() @@ -1563,8 +1565,8 @@ protected: // delayed start of encryption QTest::qSleep(100); QSslSocket *socket = server.socket; - Q_ASSERT(socket); - Q_ASSERT(socket->isValid()); + QVERIFY(socket); + QVERIFY(socket->isValid()); socket->ignoreSslErrors(); socket->startServerEncryption(); if (!socket->waitForEncrypted(2000)) @@ -1754,7 +1756,7 @@ void tst_QSslSocket::disconnectFromHostWhenConnecting() QCOMPARE(state, socket->state()); QVERIFY(socket->state() == QAbstractSocket::HostLookupState || socket->state() == QAbstractSocket::ConnectingState); - QVERIFY(socket->waitForDisconnected(5000)); + QVERIFY(socket->waitForDisconnected(10000)); QCOMPARE(socket->state(), QAbstractSocket::UnconnectedState); // we did not call close, so the socket must be still open QVERIFY(socket->isOpen()); diff --git a/tests/auto/qsslsocket_onDemandCertificates_member/qsslsocket_onDemandCertificates_member.pro b/tests/auto/qsslsocket_onDemandCertificates_member/qsslsocket_onDemandCertificates_member.pro index ea62865..53020eb 100644 --- a/tests/auto/qsslsocket_onDemandCertificates_member/qsslsocket_onDemandCertificates_member.pro +++ b/tests/auto/qsslsocket_onDemandCertificates_member/qsslsocket_onDemandCertificates_member.pro @@ -17,17 +17,9 @@ win32 { wince* { DEFINES += SRCDIR=\\\"./\\\" - - certFiles.files = certs ssl.tar.gz - certFiles.path = . - DEPLOYMENT += certFiles } else:symbian { TARGET.EPOCHEAPSIZE="0x100 0x1000000" - TARGET.CAPABILITY=NetworkServices - - certFiles.files = certs ssl.tar.gz - certFiles.path = . - DEPLOYMENT += certFiles + TARGET.CAPABILITY=NetworkServices ReadUserData INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs } else { DEFINES += SRCDIR=\\\"$$PWD/\\\" diff --git a/tests/auto/qsslsocket_onDemandCertificates_static/qsslsocket_onDemandCertificates_static.pro b/tests/auto/qsslsocket_onDemandCertificates_static/qsslsocket_onDemandCertificates_static.pro index 13990cb..3452a92 100644 --- a/tests/auto/qsslsocket_onDemandCertificates_static/qsslsocket_onDemandCertificates_static.pro +++ b/tests/auto/qsslsocket_onDemandCertificates_static/qsslsocket_onDemandCertificates_static.pro @@ -17,17 +17,9 @@ win32 { wince* { DEFINES += SRCDIR=\\\"./\\\" - - certFiles.files = certs ssl.tar.gz - certFiles.path = . - DEPLOYMENT += certFiles } else:symbian { TARGET.EPOCHEAPSIZE="0x100 0x1000000" - TARGET.CAPABILITY=NetworkServices - - certFiles.files = certs ssl.tar.gz - certFiles.path = . - DEPLOYMENT += certFiles + TARGET.CAPABILITY=NetworkServices ReadUserData INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs } else { DEFINES += SRCDIR=\\\"$$PWD/\\\" diff --git a/tests/auto/qtcpserver/crashingServer/crashingServer.pro b/tests/auto/qtcpserver/crashingServer/crashingServer.pro index 0bea655..700e952 100644 --- a/tests/auto/qtcpserver/crashingServer/crashingServer.pro +++ b/tests/auto/qtcpserver/crashingServer/crashingServer.pro @@ -6,3 +6,4 @@ DESTDIR = ./ # This means the auto test works on some machines for MinGW. No dialog stalls # the application. win32-g++*:CONFIG += console +symbian: TARGET.CAPABILITY += NetworkServices ReadUserData diff --git a/tests/auto/qtcpserver/qtcpserver.pro b/tests/auto/qtcpserver/qtcpserver.pro index a3744a2..e123cfe 100644 --- a/tests/auto/qtcpserver/qtcpserver.pro +++ b/tests/auto/qtcpserver/qtcpserver.pro @@ -1,6 +1,4 @@ TEMPLATE = subdirs SUBDIRS = test crashingServer -symbian: TARGET.CAPABILITY = NetworkServices - diff --git a/tests/auto/qtcpserver/test/test.pro b/tests/auto/qtcpserver/test/test.pro index e91ba20..65e1d82 100644 --- a/tests/auto/qtcpserver/test/test.pro +++ b/tests/auto/qtcpserver/test/test.pro @@ -13,9 +13,10 @@ wince*: { } symbian { - crashApp.files = $$QT_BUILD_TREE/examples/widgets/wiggly/$${BUILD_DIR}/crashingServer.exe - crashApp.path = . - DEPLOYMENT += crashApp + crashApp.files = $$QT_BUILD_TREE/examples/widgets/wiggly/$${BUILD_DIR}/crashingServer.exe + crashApp.path = . + DEPLOYMENT += crashApp + TARGET.CAPABILITY += NetworkServices ReadUserData } TARGET = ../tst_qtcpserver diff --git a/tests/auto/qtcpserver/tst_qtcpserver.cpp b/tests/auto/qtcpserver/tst_qtcpserver.cpp index 3d377a4..9cddc00 100644 --- a/tests/auto/qtcpserver/tst_qtcpserver.cpp +++ b/tests/auto/qtcpserver/tst_qtcpserver.cpp @@ -70,6 +70,9 @@ Q_DECLARE_METATYPE(QNetworkProxy) Q_DECLARE_METATYPE(QList<QNetworkProxy>) +#include <QNetworkSession> +#include <QNetworkConfiguration> +#include <QNetworkConfigurationManager> #include "../network-settings.h" //TESTED_CLASS= @@ -86,6 +89,7 @@ public: public slots: void initTestCase_data(); + void initTestCase(); void init(); void cleanup(); private slots: @@ -93,6 +97,7 @@ private slots: void constructing(); void clientServerLoop(); void ipv6Server(); + void ipv6ServerMapped(); void crashTests(); void maxPendingConnections(); void listenError(); @@ -107,6 +112,11 @@ private slots: void proxyFactory(); void qtbug14268_peek(); + +private: +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkSession *networkSession; +#endif }; // Testing get/set functions @@ -141,6 +151,16 @@ void tst_QTcpServer::initTestCase_data() QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); } +void tst_QTcpServer::initTestCase() +{ +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager man; + networkSession = new QNetworkSession(man.defaultConfiguration(), this); + networkSession->open(); + QVERIFY(networkSession->waitForOpened()); +#endif +} + void tst_QTcpServer::init() { QFETCH_GLOBAL(bool, setProxy); @@ -190,7 +210,7 @@ void tst_QTcpServer::clientServerLoop() QTcpSocket client; QHostAddress serverAddress = QHostAddress::LocalHost; - if (!(server.serverAddress() == QHostAddress::Any)) + if (!(server.serverAddress() == QHostAddress::Any) && !(server.serverAddress() == QHostAddress::AnyIPv6)) serverAddress = server.serverAddress(); client.connectToHost(serverAddress, server.serverPort()); @@ -222,9 +242,6 @@ void tst_QTcpServer::clientServerLoop() //---------------------------------------------------------------------------------- void tst_QTcpServer::ipv6Server() { -#if defined(Q_OS_SYMBIAN) - QSKIP("Symbian: IPv6 is not yet supported", SkipAll); -#endif //### need to enter the event loop for the server to get the connection ?? ( windows) QTcpServer server; if (!server.listen(QHostAddress::LocalHostIPv6, 8944)) { @@ -244,6 +261,42 @@ void tst_QTcpServer::ipv6Server() QTcpSocket *serverSocket = 0; QVERIFY((serverSocket = server.nextPendingConnection())); + serverSocket->close(); + delete serverSocket; +} + +//---------------------------------------------------------------------------------- +void tst_QTcpServer::ipv6ServerMapped() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + QTcpServer server; + QVERIFY(server.listen(QHostAddress::LocalHost)); + + // let's try the normal case + QTcpSocket client1; + client1.connectToHost("127.0.0.1", server.serverPort()); + QVERIFY(server.waitForNewConnection(5000)); + delete server.nextPendingConnection(); + + // let's try the mapped one in the nice format + QTcpSocket client2; + client2.connectToHost("::ffff:127.0.0.1", server.serverPort()); + QVERIFY(server.waitForNewConnection(5000)); + delete server.nextPendingConnection(); + + // let's try the mapped in hex format + QTcpSocket client3; + client3.connectToHost("::ffff:7F00:0001", server.serverPort()); + QVERIFY(server.waitForNewConnection(5000)); + delete server.nextPendingConnection(); + + // However connecting to the v6 localhost should not work + QTcpSocket client4; + client4.connectToHost("::1", server.serverPort()); + QVERIFY(!server.waitForNewConnection(5000)); } //---------------------------------------------------------------------------------- @@ -379,7 +432,8 @@ void tst_QTcpServer::setSocketDescriptor() QTcpServer server; QVERIFY(!server.setSocketDescriptor(42)); QCOMPARE(server.serverError(), QAbstractSocket::UnsupportedSocketOperationError); - +#ifndef Q_OS_SYMBIAN + //adopting Open C sockets is not supported, neither is adopting externally created RSocket #ifdef Q_OS_WIN // ensure winsock is started WSADATA wsaData; @@ -402,6 +456,7 @@ void tst_QTcpServer::setSocketDescriptor() #ifdef Q_OS_WIN WSACleanup(); #endif +#endif } //---------------------------------------------------------------------------------- @@ -493,6 +548,9 @@ void tst_QTcpServer::addressReusable() void tst_QTcpServer::setNewSocketDescriptorBlocking() { +#ifdef Q_OS_SYMBIAN + QSKIP("open C ioctls on Qt sockets not supported", SkipAll); +#else QFETCH_GLOBAL(bool, setProxy); if (setProxy) { QFETCH_GLOBAL(int, proxyType); @@ -507,6 +565,7 @@ void tst_QTcpServer::setNewSocketDescriptorBlocking() socket.connectToHost(QHostAddress::LocalHost, server.serverPort()); QVERIFY(server.waitForNewConnection(5000)); QVERIFY(server.ok); +#endif } void tst_QTcpServer::invalidProxy_data() diff --git a/tests/auto/qtcpsocket/qtcpsocket.pro b/tests/auto/qtcpsocket/qtcpsocket.pro index 8b1f664..5dfff5b 100644 --- a/tests/auto/qtcpsocket/qtcpsocket.pro +++ b/tests/auto/qtcpsocket/qtcpsocket.pro @@ -6,4 +6,3 @@ wince*|symbian|vxworks* : SUBDIRS = test requires(contains(QT_CONFIG,private_tests)) -symbian: TARGET.CAPABILITY = NetworkServices diff --git a/tests/auto/qtcpsocket/stressTest/stressTest.pro b/tests/auto/qtcpsocket/stressTest/stressTest.pro index 9a653c6..adf0217 100644 --- a/tests/auto/qtcpsocket/stressTest/stressTest.pro +++ b/tests/auto/qtcpsocket/stressTest/stressTest.pro @@ -9,4 +9,5 @@ DESTDIR = ./ MOC_DIR = .moc/ TMP_DIR = .tmp/ +symbian: TARGET.CAPABILITY = NetworkServices diff --git a/tests/auto/qtcpsocket/test/test.pro b/tests/auto/qtcpsocket/test/test.pro index c4369df..f4207d6 100644 --- a/tests/auto/qtcpsocket/test/test.pro +++ b/tests/auto/qtcpsocket/test/test.pro @@ -11,7 +11,10 @@ wince*: { QT += network vxworks:QT -= gui -symbian: TARGET.EPOCHEAPSIZE="0x100 0x1000000" +symbian: { + TARGET.EPOCHEAPSIZE="0x100 0x3000000" + TARGET.CAPABILITY = NetworkServices +} TARGET = tst_qtcpsocket diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp index 21092c4..623e02b 100644 --- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp @@ -106,6 +106,7 @@ Q_DECLARE_METATYPE(QList<QNetworkProxy>) //TESTED_FILES= QT_FORWARD_DECLARE_CLASS(QTcpSocket) +QT_FORWARD_DECLARE_CLASS(SocketPair) class tst_QTcpSocket : public QObject { @@ -138,6 +139,7 @@ public slots: void init(); void cleanup(); private slots: + void socketsConstructedBeforeEventLoop(); void constructing(); void setInvalidSocketDescriptor(); void setSocketDescriptor(); @@ -221,6 +223,8 @@ protected slots: void abortiveClose_abortSlot(); void remoteCloseErrorSlot(); void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth); + void earlySocketBytesSent(qint64 bytes); + void earlySocketReadyRead(); private: QByteArray expectedReplyIMAP(); @@ -243,6 +247,10 @@ private: bool gotClosedSignal; int numConnections; static int loopLevel; + + SocketPair *earlyConstructedSockets; + int earlyBytesWrittenCount; + int earlyReadyReadCount; }; enum ProxyTests { @@ -296,8 +304,16 @@ public: tst_QTcpSocket::tst_QTcpSocket() { - Q_SET_DEFAULT_IAP tmpSocket = 0; + + //This code relates to the socketsConstructedBeforeEventLoop test case + earlyConstructedSockets = new SocketPair; + QVERIFY(earlyConstructedSockets->create()); + earlyBytesWrittenCount = 0; + earlyReadyReadCount = 0; + connect(earlyConstructedSockets->endPoints[0], SIGNAL(readyRead()), this, SLOT(earlySocketReadyRead())); + connect(earlyConstructedSockets->endPoints[1], SIGNAL(bytesWritten(qint64)), this, SLOT(earlySocketBytesSent(qint64))); + earlyConstructedSockets->endPoints[1]->write("hello work"); } tst_QTcpSocket::~tst_QTcpSocket() @@ -336,7 +352,9 @@ void tst_QTcpSocket::init() QFETCH_GLOBAL(bool, setProxy); if (setProxy) { QFETCH_GLOBAL(int, proxyType); - QString fluke = QHostInfo::fromName(QtNetworkSettings::serverName()).addresses().first().toString(); + QList<QHostAddress> addresses = QHostInfo::fromName(QtNetworkSettings::serverName()).addresses(); + QVERIFY2(addresses.count() > 0, "failed to get ip address for test server"); + QString fluke = addresses.first().toString(); QNetworkProxy proxy; switch (proxyType) { @@ -397,6 +415,33 @@ void tst_QTcpSocket::proxyAuthenticationRequired(const QNetworkProxy &, QAuthent //---------------------------------------------------------------------------------- +void tst_QTcpSocket::socketsConstructedBeforeEventLoop() +{ + QFETCH_GLOBAL(bool, setProxy); + QFETCH_GLOBAL(bool, ssl); + if (setProxy || ssl) + return; + //This test checks that sockets constructed before QCoreApplication::exec() still emit signals + //see construction code in the tst_QTcpSocket constructor + enterLoop(3); + QCOMPARE(earlyBytesWrittenCount, 1); + QCOMPARE(earlyReadyReadCount, 1); + earlyConstructedSockets->endPoints[0]->close(); + earlyConstructedSockets->endPoints[1]->close(); +} + +void tst_QTcpSocket::earlySocketBytesSent(qint64 bytes) +{ + earlyBytesWrittenCount++; +} + +void tst_QTcpSocket::earlySocketReadyRead() +{ + earlyReadyReadCount++; +} + +//---------------------------------------------------------------------------------- + void tst_QTcpSocket::constructing() { QTcpSocket *socket = newSocket(); @@ -443,6 +488,9 @@ void tst_QTcpSocket::setInvalidSocketDescriptor() void tst_QTcpSocket::setSocketDescriptor() { +#ifdef Q_OS_SYMBIAN + QSKIP("adopting open c socket handles is not supported", SkipAll); +#else QFETCH_GLOBAL(bool, setProxy); if (setProxy) return; // this test doesn't make sense with proxies @@ -483,6 +531,7 @@ void tst_QTcpSocket::setSocketDescriptor() #ifdef Q_OS_WIN delete dummy; #endif +#endif } //---------------------------------------------------------------------------------- @@ -605,14 +654,14 @@ void tst_QTcpSocket::timeoutConnect() // Port 1357 is configured to drop packets on the test server socket->connectToHost(address, 1357); - QVERIFY(timer.elapsed() < 50); - QVERIFY(!socket->waitForConnected(200)); + QVERIFY(timer.elapsed() < 150); + QVERIFY(!socket->waitForConnected(1000)); //200ms is too short when using SOCKS proxy authentication QCOMPARE(socket->state(), QTcpSocket::UnconnectedState); QCOMPARE(int(socket->error()), int(QTcpSocket::SocketTimeoutError)); timer.start(); socket->connectToHost(address, 1357); - QVERIFY(timer.elapsed() < 50); + QVERIFY(timer.elapsed() < 150); QTimer::singleShot(50, &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(5); QVERIFY(!QTestEventLoop::instance().timeout()); @@ -975,6 +1024,9 @@ void tst_QTcpSocket::disconnectWhileConnecting_data() void tst_QTcpSocket::disconnectWhileConnecting() { QFETCH(QByteArray, data); + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost)); @@ -1035,7 +1087,7 @@ public: : server(0), ok(false), quit(false) { } - ~ReceiverThread() { /*delete server;*/ terminate(); wait(); } + ~ReceiverThread() { } bool listen() { @@ -1047,6 +1099,14 @@ public: return true; } + static void cleanup(void *ptr) + { + ReceiverThread* self = reinterpret_cast<ReceiverThread*>(ptr); + self->quit = true; + self->wait(30000); + delete self; + } + protected: void run() { @@ -1092,19 +1152,20 @@ void tst_QTcpSocket::disconnectWhileConnectingNoEventLoop_data() void tst_QTcpSocket::disconnectWhileConnectingNoEventLoop() { QFETCH(QByteArray, data); + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case - ReceiverThread thread; - QVERIFY(thread.listen()); - thread.start(); + QScopedPointer<ReceiverThread, ReceiverThread> thread (new ReceiverThread); + QVERIFY(thread->listen()); + thread->start(); // proceed to the connect-write-disconnect QTcpSocket *socket = newSocket(); - socket->connectToHost("127.0.0.1", thread.serverPort); + socket->connectToHost("127.0.0.1", thread->serverPort); if (!data.isEmpty()) socket->write(data); if (socket->state() == QAbstractSocket::ConnectedState) { - thread.quit = true; - thread.wait(); QSKIP("localhost connections are immediate, test case is invalid", SkipSingle); } @@ -1130,9 +1191,9 @@ void tst_QTcpSocket::disconnectWhileConnectingNoEventLoop() delete socket; // check if the other side received everything ok - QVERIFY(thread.wait(30000)); - QVERIFY(thread.ok); - QCOMPARE(thread.receivedData, data); + QVERIFY(thread->wait(30000)); + QVERIFY(thread->ok); + QCOMPARE(thread->receivedData, data); } //---------------------------------------------------------------------------------- @@ -1194,6 +1255,7 @@ void tst_QTcpSocket::downloadBigFile() connect(tmpSocket, SIGNAL(connected()), SLOT(exitLoopSlot())); connect(tmpSocket, SIGNAL(readyRead()), SLOT(downloadBigFileSlot())); + connect(tmpSocket, SIGNAL(disconnected()), SLOT(exitLoopSlot())); tmpSocket->connectToHost(QtNetworkSettings::serverName(), 80); @@ -1380,7 +1442,7 @@ void tst_QTcpSocket::flush() connect(socket, SIGNAL(connected()), SLOT(exitLoopSlot())); socket->connectToHost(QtNetworkSettings::serverName(), 143); - enterLoop(5000); + enterLoop(60); QVERIFY(socket->isOpen()); socket->write("1 LOGOUT\r\n"); @@ -1413,7 +1475,7 @@ void tst_QTcpSocket::dontCloseOnTimeout() QVERIFY(server.listen()); QHostAddress serverAddress = QHostAddress::LocalHost; - if (!(server.serverAddress() == QHostAddress::Any)) + if (!(server.serverAddress() == QHostAddress::Any) && !(server.serverAddress() == QHostAddress::AnyIPv6)) serverAddress = server.serverAddress(); QTcpSocket *socket = newSocket(); @@ -1633,6 +1695,9 @@ private slots: //---------------------------------------------------------------------------------- void tst_QTcpSocket::remoteCloseError() { + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case RemoteCloseErrorServer server; QVERIFY(server.listen(QHostAddress::LocalHost)); @@ -1943,6 +2008,9 @@ void tst_QTcpSocket::linuxKernelBugLocalSocket() //---------------------------------------------------------------------------------- void tst_QTcpSocket::abortiveClose() { + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost)); connect(&server, SIGNAL(newConnection()), this, SLOT(exitLoopSlot())); @@ -1981,6 +2049,9 @@ void tst_QTcpSocket::abortiveClose_abortSlot() //---------------------------------------------------------------------------------- void tst_QTcpSocket::localAddressEmptyOnBSD() { + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case QTcpServer server; QVERIFY(server.listen(QHostAddress::LocalHost)); @@ -2251,6 +2322,9 @@ void tst_QTcpSocket::moveToThread0() void tst_QTcpSocket::increaseReadBufferSize() { + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; //proxy not useful for localhost test case QTcpServer server; QTcpSocket *active = newSocket(); connect(active, SIGNAL(readyRead()), SLOT(exitLoopSlot())); diff --git a/tests/auto/qudpsocket/clientserver/clientserver.pro b/tests/auto/qudpsocket/clientserver/clientserver.pro index 5fe65b3..6da1486 100644 --- a/tests/auto/qudpsocket/clientserver/clientserver.pro +++ b/tests/auto/qudpsocket/clientserver/clientserver.pro @@ -5,4 +5,4 @@ CONFIG -= app_bundle TARGET = clientserver DESTDIR = ./ - +symbian: TARGET.CAPABILITY += NetworkServices diff --git a/tests/auto/qudpsocket/qudpsocket.pro b/tests/auto/qudpsocket/qudpsocket.pro index 8fd3545..4ddb717 100644 --- a/tests/auto/qudpsocket/qudpsocket.pro +++ b/tests/auto/qudpsocket/qudpsocket.pro @@ -1,6 +1,4 @@ TEMPLATE = subdirs SUBDIRS = test clientserver -symbian: TARGET.CAPABILITY = NetworkServices - diff --git a/tests/auto/qudpsocket/test/test.pro b/tests/auto/qudpsocket/test/test.pro index 7e5ffe4..b68d30c 100644 --- a/tests/auto/qudpsocket/test/test.pro +++ b/tests/auto/qudpsocket/test/test.pro @@ -22,4 +22,4 @@ wince*|symbian: { TARGET = tst_qudpsocket - +symbian: TARGET.CAPABILITY += NetworkServices diff --git a/tests/auto/qudpsocket/tst_qudpsocket.cpp b/tests/auto/qudpsocket/tst_qudpsocket.cpp index 6ba55b2..2c8049f 100644 --- a/tests/auto/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/qudpsocket/tst_qudpsocket.cpp @@ -55,9 +55,15 @@ #include <qstringlist.h> #include "../network-settings.h" +#ifndef QT_NO_BEARERMANAGEMENT +#include <QtNetwork/qnetworkconfigmanager.h> +#include <QtNetwork/qnetworkconfiguration.h> +#include <QtNetwork/qnetworksession.h> +#endif + Q_DECLARE_METATYPE(QHostAddress) Q_DECLARE_METATYPE(QNetworkInterface) - +Q_DECLARE_METATYPE(QSharedPointer<QNetworkSession>) //TESTED_CLASS= //TESTED_FILES= @@ -108,10 +114,19 @@ private slots: void setMulticastInterface(); void multicast_data(); void multicast(); + void echo_data(); + void echo(); protected slots: void empty_readyReadSlot(); void empty_connectedSlot(); + +private: +#ifndef QT_NO_BEARERMANAGEMENT + QNetworkConfigurationManager *netConfMan; + QNetworkConfiguration networkConfiguration; + QSharedPointer<QNetworkSession> networkSession; +#endif }; tst_QUdpSocket::tst_QUdpSocket() @@ -130,6 +145,16 @@ void tst_QUdpSocket::initTestCase_data() QTest::newRow("WithoutProxy") << false << 0; QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); + +#ifndef QT_NO_BEARERMANAGEMENT + netConfMan = new QNetworkConfigurationManager(this); + networkConfiguration = netConfMan->defaultConfiguration(); + networkSession = QSharedPointer<QNetworkSession>(new QNetworkSession(networkConfiguration)); + if (!networkSession->isOpen()) { + networkSession->open(); + QVERIFY(networkSession->waitForOpened(30000)); + } +#endif } void tst_QUdpSocket::init() @@ -154,6 +179,9 @@ void tst_QUdpSocket::cleanup() void tst_QUdpSocket::constructing() { QUdpSocket socket; +#ifdef FORCE_SESSION + socket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY(socket.isSequential()); QVERIFY(!socket.isOpen()); @@ -171,6 +199,9 @@ void tst_QUdpSocket::constructing() void tst_QUdpSocket::unconnectedServerAndClientTest() { QUdpSocket serverSocket; +#ifdef FORCE_SESSION + serverSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif qRegisterMetaType<QAbstractSocket::SocketState>("QAbstractSocket::SocketState"); @@ -181,11 +212,14 @@ void tst_QUdpSocket::unconnectedServerAndClientTest() const char *message[] = {"Yo mista", "Yo", "Wassap"}; QHostAddress serverAddress = QHostAddress::LocalHost; - if (!(serverSocket.localAddress() == QHostAddress::Any)) + if (!(serverSocket.localAddress() == QHostAddress::Any || serverSocket.localAddress() == QHostAddress::AnyIPv6)) serverAddress = serverSocket.localAddress(); for (int i = 0; i < 3; ++i) { QUdpSocket clientSocket; +#ifdef FORCE_SESSION + clientSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QCOMPARE(int(clientSocket.writeDatagram(message[i], strlen(message[i]), serverAddress, serverSocket.localPort())), int(strlen(message[i]))); @@ -216,8 +250,21 @@ void tst_QUdpSocket::broadcasting() #endif const char *message[] = {"Yo mista", "", "Yo", "Wassap"}; + QList<QHostAddress> broadcastAddresses; + foreach (QNetworkInterface iface, QNetworkInterface::allInterfaces()) { + if ((iface.flags() & QNetworkInterface::CanBroadcast) + && iface.flags() & QNetworkInterface::IsUp) { + for (int i=0;i<iface.addressEntries().count();i++) + broadcastAddresses.append(iface.addressEntries().at(i).broadcast()); + } + } + if (broadcastAddresses.isEmpty()) + QSKIP("No interface can broadcast", SkipAll); for (int i = 0; i < 4; ++i) { QUdpSocket serverSocket; +#ifdef FORCE_SESSION + serverSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(serverSocket.bind(QHostAddress::Any, 5000), serverSocket.errorString().toLatin1().constData()); QCOMPARE(serverSocket.state(), QUdpSocket::BoundState); @@ -225,10 +272,18 @@ void tst_QUdpSocket::broadcasting() connect(&serverSocket, SIGNAL(readyRead()), SLOT(empty_readyReadSlot())); QUdpSocket broadcastSocket; +#ifdef FORCE_SESSION + broadcastSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif + broadcastSocket.bind(); for (int j = 0; j < 100; ++j) { - broadcastSocket.writeDatagram(message[i], strlen(message[i]), - QHostAddress::Broadcast, 5000); + for (int k = 0; k < 4; k++) { + broadcastSocket.writeDatagram(message[i], strlen(message[i]), + QHostAddress::Broadcast, 5000); + foreach (QHostAddress addr, broadcastAddresses) + broadcastSocket.writeDatagram(message[i], strlen(message[i]), addr, 5000); + } QTestEventLoop::instance().enterLoop(15); if (QTestEventLoop::instance().timeout()) { #if defined(Q_OS_FREEBSD) @@ -279,15 +334,19 @@ void tst_QUdpSocket::loop() QUdpSocket peter; QUdpSocket paul; +#ifdef FORCE_SESSION + peter.setProperty("_q_networksession", QVariant::fromValue(networkSession)); + paul.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(peter.bind(), peter.errorString().toLatin1().constData()); QVERIFY2(paul.bind(), paul.errorString().toLatin1().constData()); QHostAddress peterAddress = QHostAddress::LocalHost; - if (!(peter.localAddress() == QHostAddress::Any)) + if (!(peter.localAddress() == QHostAddress::Any || peter.localAddress() == QHostAddress::AnyIPv6)) peterAddress = peter.localAddress(); QHostAddress pualAddress = QHostAddress::LocalHost; - if (!(paul.localAddress() == QHostAddress::Any)) + if (!(paul.localAddress() == QHostAddress::Any || paul.localAddress() == QHostAddress::AnyIPv6)) pualAddress = paul.localAddress(); QCOMPARE(peter.writeDatagram(peterMessage.data(), peterMessage.length(), @@ -320,8 +379,8 @@ void tst_QUdpSocket::ipv6Loop_data() void tst_QUdpSocket::ipv6Loop() { -#if defined(Q_OS_SYMBIAN) - QSKIP("Symbian IPv6 is not yet supported", SkipAll); +#if defined(QT_NO_IPV6) + QSKIP("IPv6 is not yet supported", SkipAll); #endif QFETCH(QByteArray, peterMessage); QFETCH(QByteArray, paulMessage); @@ -329,6 +388,10 @@ void tst_QUdpSocket::ipv6Loop() QUdpSocket peter; QUdpSocket paul; +#ifdef FORCE_SESSION + peter.setProperty("_q_networksession", QVariant::fromValue(networkSession)); + paul.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif quint16 peterPort = 28124; quint16 paulPort = 28123; @@ -380,9 +443,13 @@ void tst_QUdpSocket::empty_connectedSlot() void tst_QUdpSocket::readLine() { QUdpSocket socket1; + QUdpSocket socket2; +#ifdef FORCE_SESSION + socket1.setProperty("_q_networksession", QVariant::fromValue(networkSession)); + socket2.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(socket1.bind(), socket1.errorString().toLatin1().constData()); - QUdpSocket socket2; socket2.connectToHost("127.0.0.1", socket1.localPort()); QVERIFY(socket2.waitForConnected(5000)); } @@ -392,13 +459,19 @@ void tst_QUdpSocket::readLine() void tst_QUdpSocket::pendingDatagramSize() { QUdpSocket server; +#ifdef FORCE_SESSION + server.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(server.bind(), server.errorString().toLatin1().constData()); QHostAddress serverAddress = QHostAddress::LocalHost; - if (!(server.localAddress() == QHostAddress::Any)) + if (!(server.localAddress() == QHostAddress::Any || server.localAddress() == QHostAddress::AnyIPv6)) serverAddress = server.localAddress(); QUdpSocket client; +#ifdef FORCE_SESSION + client.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY(client.writeDatagram("this is", 7, serverAddress, server.localPort()) == 7); QVERIFY(client.writeDatagram(0, 0, serverAddress, server.localPort()) == 0); QVERIFY(client.writeDatagram("3 messages", 10, serverAddress, server.localPort()) == 10); @@ -440,13 +513,19 @@ void tst_QUdpSocket::pendingDatagramSize() void tst_QUdpSocket::writeDatagram() { QUdpSocket server; +#ifdef FORCE_SESSION + server.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(server.bind(), server.errorString().toLatin1().constData()); QHostAddress serverAddress = QHostAddress::LocalHost; - if (!(server.localAddress() == QHostAddress::Any)) + if (!(server.localAddress() == QHostAddress::Any || server.localAddress() == QHostAddress::AnyIPv6)) serverAddress = server.localAddress(); QUdpSocket client; +#ifdef FORCE_SESSION + client.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif qRegisterMetaType<qint64>("qint64"); qRegisterMetaType<QAbstractSocket::SocketError>("QAbstractSocket::SocketError"); @@ -473,8 +552,16 @@ void tst_QUdpSocket::writeDatagram() QCOMPARE(*static_cast<const qint64 *>(bytesspy.at(0).at(0).constData()), qint64(i * 1024)); QCOMPARE(errorspy.count(), 0); - if (!server.waitForReadyRead(5000)) + if (!server.waitForReadyRead(5000)) { +#ifdef Q_OS_SYMBIAN + //symbian receive buffer for datagrams is ~30k, but it can send datagrams up to the maximum 64k... + if (i > 28) { + i = 64; + continue; + } +#endif QSKIP(QString("UDP packet lost at size %1, unable to complete the test.").arg(i * 1024).toLatin1().data(), SkipSingle); + } QCOMPARE(server.pendingDatagramSize(), qint64(i * 1024)); QCOMPARE(server.readDatagram(0, 0), qint64(0)); } @@ -499,14 +586,21 @@ void tst_QUdpSocket::performance() #endif // Q_OS_SYMBIAN QUdpSocket server; +#ifdef FORCE_SESSION + server.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(server.bind(), server.errorString().toLatin1().constData()); QHostAddress serverAddress = QHostAddress::LocalHost; - if (!(server.localAddress() == QHostAddress::Any)) + if (!(server.localAddress() == QHostAddress::Any || server.localAddress() == QHostAddress::AnyIPv6)) serverAddress = server.localAddress(); QUdpSocket client; +#ifdef FORCE_SESSION + client.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif client.connectToHost(serverAddress, server.localPort()); + QVERIFY(client.waitForConnected(10000)); QTime stopWatch; stopWatch.start(); @@ -546,8 +640,14 @@ void tst_QUdpSocket::bindMode() } QUdpSocket socket; +#ifdef FORCE_SESSION + socket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY2(socket.bind(), socket.errorString().toLatin1().constData()); QUdpSocket socket2; +#ifdef FORCE_SESSION + socket2.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY(!socket2.bind(socket.localPort())); #if defined(Q_OS_SYMBIAN) if(RProcess().HasCapability(ECapabilityNetworkControl)) { @@ -617,16 +717,12 @@ void tst_QUdpSocket::writeDatagramToNonExistingPeer_data() QTest::addColumn<bool>("bind"); QTest::addColumn<QHostAddress>("peerAddress"); QHostAddress localhost(QHostAddress::LocalHost); -#if !defined(Q_OS_SYMBIAN) QHostAddress remote = QHostInfo::fromName(QtNetworkSettings::serverName()).addresses().first(); -#endif QTest::newRow("localhost-unbound") << false << localhost; QTest::newRow("localhost-bound") << true << localhost; -#if !defined(Q_OS_SYMBIAN) QTest::newRow("remote-unbound") << false << remote; QTest::newRow("remote-bound") << true << remote; -#endif } void tst_QUdpSocket::writeDatagramToNonExistingPeer() @@ -637,6 +733,9 @@ void tst_QUdpSocket::writeDatagramToNonExistingPeer() quint16 peerPort = 33533 + int(bind); QUdpSocket sUdp; +#ifdef FORCE_SESSION + sUdp.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QSignalSpy sReadyReadSpy(&sUdp, SIGNAL(readyRead())); if (bind) QVERIFY(sUdp.bind()); @@ -649,14 +748,10 @@ void tst_QUdpSocket::writeToNonExistingPeer_data() { QTest::addColumn<QHostAddress>("peerAddress"); QHostAddress localhost(QHostAddress::LocalHost); -#if !defined(Q_OS_SYMBIAN) QHostAddress remote = QHostInfo::fromName(QtNetworkSettings::serverName()).addresses().first(); -#endif // write (required to be connected) QTest::newRow("localhost") << localhost; -#if !defined(Q_OS_SYMBIAN) QTest::newRow("remote") << remote; -#endif } void tst_QUdpSocket::writeToNonExistingPeer() @@ -667,9 +762,13 @@ void tst_QUdpSocket::writeToNonExistingPeer() qRegisterMetaType<QAbstractSocket::SocketError>("QAbstractSocket::SocketError"); QUdpSocket sConnected; +#ifdef FORCE_SESSION + sConnected.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QSignalSpy sConnectedReadyReadSpy(&sConnected, SIGNAL(readyRead())); QSignalSpy sConnectedErrorSpy(&sConnected, SIGNAL(error(QAbstractSocket::SocketError))); sConnected.connectToHost(peerAddress, peerPort, QIODevice::ReadWrite); + QVERIFY(sConnected.waitForConnected(10000)); // the first write succeeds... QCOMPARE(sConnected.write("", 1), qint64(1)); @@ -843,12 +942,18 @@ void tst_QUdpSocket::zeroLengthDatagram() return; QUdpSocket receiver; +#ifdef FORCE_SESSION + receiver.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QVERIFY(receiver.bind()); QVERIFY(!receiver.waitForReadyRead(100)); QVERIFY(!receiver.hasPendingDatagrams()); QUdpSocket sender; +#ifdef FORCE_SESSION + sender.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif QCOMPARE(sender.writeDatagram(QByteArray(), QHostAddress::LocalHost, receiver.localPort()), qint64(0)); QVERIFY(receiver.waitForReadyRead(1000)); @@ -890,6 +995,9 @@ void tst_QUdpSocket::multicastTtlOption() } QUdpSocket udpSocket; +#ifdef FORCE_SESSION + udpSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif // bind, but ignore the result, we are only interested in initializing the socket (void) udpSocket.bind(bindAddress, 0); udpSocket.setSocketOption(QUdpSocket::MulticastTtlOption, ttl); @@ -929,6 +1037,9 @@ void tst_QUdpSocket::multicastLoopbackOption() } QUdpSocket udpSocket; +#ifdef FORCE_SESSION + udpSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif // bind, but ignore the result, we are only interested in initializing the socket (void) udpSocket.bind(bindAddress, 0); udpSocket.setSocketOption(QUdpSocket::MulticastLoopbackOption, loopback); @@ -949,6 +1060,9 @@ void tst_QUdpSocket::multicastJoinBeforeBind() QFETCH(QHostAddress, groupAddress); QUdpSocket udpSocket; +#ifdef FORCE_SESSION + udpSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif // cannot join group before binding QTest::ignoreMessage(QtWarningMsg, "QUdpSocket::joinMulticastGroup() called on a QUdpSocket when not in QUdpSocket::BoundState"); QVERIFY(!udpSocket.joinMulticastGroup(groupAddress)); @@ -970,8 +1084,16 @@ void tst_QUdpSocket::multicastLeaveAfterClose() } QUdpSocket udpSocket; +#ifdef FORCE_SESSION + udpSocket.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif +#ifdef Q_OS_SYMBIAN + QVERIFY2(udpSocket.bind(), + qPrintable(udpSocket.errorString())); +#else QVERIFY2(udpSocket.bind(groupAddress, 0), qPrintable(udpSocket.errorString())); +#endif QVERIFY2(udpSocket.joinMulticastGroup(groupAddress), qPrintable(udpSocket.errorString())); udpSocket.close(); @@ -995,6 +1117,9 @@ void tst_QUdpSocket::setMulticastInterface_data() void tst_QUdpSocket::setMulticastInterface() { +#ifdef Q_OS_SYMBIAN + QSKIP("Symbian has no IPV6_MULTICAST_IF equivalent", SkipAll); +#else QFETCH_GLOBAL(bool, setProxy); QFETCH(QNetworkInterface, iface); QFETCH(QHostAddress, address); @@ -1017,6 +1142,7 @@ void tst_QUdpSocket::setMulticastInterface() } else { QVERIFY(!iface2.isValid()); } +#endif } void tst_QUdpSocket::multicast_data() @@ -1056,8 +1182,17 @@ void tst_QUdpSocket::multicast() } QUdpSocket receiver; +#ifdef FORCE_SESSION + receiver.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif // bind first, then verify that we can join the multicast group +#ifdef Q_OS_SYMBIAN + if (!setProxy) { + QEXPECT_FAIL("same bind, group ipv4 address", "bind to group address not supported on symbian", Abort); + QEXPECT_FAIL("same bind, group ipv6 address", "bind to group address not supported on symbian", Abort); + } +#endif QVERIFY2(receiver.bind(bindAddress, 0) == bindResult, qPrintable(receiver.errorString())); if (!bindResult) @@ -1075,6 +1210,10 @@ void tst_QUdpSocket::multicast() << QByteArray("cdef"); QUdpSocket sender; +#ifdef FORCE_SESSION + sender.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif + sender.bind(); foreach (const QByteArray &datagram, datagrams) { QCOMPARE(int(sender.writeDatagram(datagram, groupAddress, receiver.localPort())), int(datagram.size())); @@ -1090,10 +1229,68 @@ void tst_QUdpSocket::multicast() receiver.readDatagram(datagram.data(), datagram.size(), 0, 0); receivedDatagrams << datagram; } +#ifdef Q_OS_SYMBIAN + QEXPECT_FAIL("valid bind, group ipv4 address", "IPv4 multicast not supported on symbian", Abort); +#endif QCOMPARE(receivedDatagrams, datagrams); QVERIFY2(receiver.leaveMulticastGroup(groupAddress), qPrintable(receiver.errorString())); } +void tst_QUdpSocket::echo_data() +{ + QTest::addColumn<bool>("connect"); + QTest::newRow("writeDatagram") << false; + QTest::newRow("write") << true; +} + +void tst_QUdpSocket::echo() +{ + QFETCH(bool, connect); + QHostInfo info = QHostInfo::fromName(QtNetworkSettings::serverName()); + QVERIFY(info.addresses().count()); + QHostAddress remote = info.addresses().first(); + + QUdpSocket sock; +#ifdef FORCE_SESSION + sock.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif + if (connect) { + sock.connectToHost(remote, 7); + QVERIFY(sock.waitForConnected(10000)); + } else { + sock.bind(); + } + QByteArray out(30, 'x'); + QByteArray in; + int successes = 0; + for (int i=0;i<10;i++) { + if (connect) { + sock.write(out); + } else { + sock.writeDatagram(out, remote, 7); + } + if (sock.waitForReadyRead(1000)) { + while (sock.hasPendingDatagrams()) { + QHostAddress from; + quint16 port; + if (connect) { + in = sock.read(sock.pendingDatagramSize()); + } else { + in.resize(sock.pendingDatagramSize()); + sock.readDatagram(in.data(), in.length(), &from, &port); + } + if (in==out) + successes++; + } + } + if (!sock.isValid()) + QFAIL(sock.errorString().toLatin1().constData()); + qDebug() << "packets in" << successes << "out" << i; + QTest::qWait(50); //choke to avoid triggering flood/DDoS protections on echo service + } + QVERIFY(successes >= 9); +} + QTEST_MAIN(tst_QUdpSocket) #include "tst_qudpsocket.moc" diff --git a/tests/manual/socketengine/main.cpp b/tests/manual/socketengine/main.cpp new file mode 100644 index 0000000..2f017a0 --- /dev/null +++ b/tests/manual/socketengine/main.cpp @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QDebug> +#include <qtest.h> +#include <QtTest/QtTest> +#include <QtNetwork/qnetworkreply.h> +#include <QtNetwork/qnetworkrequest.h> +#include <QtNetwork/qnetworkaccessmanager.h> +#include "../../auto/network-settings.h" +#include <QtNetwork> +#include <QDebug> +#include <private/qabstractsocketengine_p.h> +#include <cstdio> +#include <strings.h> +#include <QNetworkConfigurationManager> +#include <QNetworkConfiguration> +#include <QNetworkSession> +#include <QCoreApplication> + +const int bufsize = 16*1024; +char buf[bufsize]; + +int main(int argc, char**argv) +{ + QCoreApplication app(argc, argv); + +#ifdef Q_OS_SYMBIAN + QNetworkConfigurationManager configurationManager; + QNetworkConfiguration configuration = configurationManager.defaultConfiguration(); + if (!configuration.isValid()) { + qDebug() << "Got an invalid session configuration"; + exit(1); + } + + qDebug() << "Opening session..."; + QNetworkSession *session = new QNetworkSession(configuration); + + // Does not work: +// session->open(); +// session->waitForOpened(); + + // works: + QEventLoop loop; + QObject::connect(session, SIGNAL(opened()), &loop, SLOT(quit()), Qt::QueuedConnection); + QMetaObject::invokeMethod(session, "open", Qt::QueuedConnection); + loop.exec(); + + + if (session->isOpen()) { + qDebug() << "session opened"; + } else { + qDebug() << "session could not be opened -" << session->errorString(); + exit(1); + } +#endif + + // create it + QAbstractSocketEngine *socketEngine = + QAbstractSocketEngine::createSocketEngine(QAbstractSocket::TcpSocket, QNetworkProxy(QNetworkProxy::NoProxy), 0); + if (!socketEngine) { + qDebug() << "could not create engine"; + exit(1); + } + + // initialize it + bool initialized = socketEngine->initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol); + if (!initialized) { + qDebug() << "not able to initialize engine"; + exit(1); + } + + // wait for connected + int r = socketEngine->connectToHost(QHostAddress("74.125.77.99"), 80); // google + bool readyToRead = false; + bool readyToWrite = false; + socketEngine->waitForReadOrWrite(&readyToRead, &readyToWrite, true, true, 10*1000); + if (r <= 0) //timeout or error + exit(1); + if (readyToWrite) { + // write the request + QByteArray request("GET /robots.txt HTTP/1.0\r\n\r\n"); + int ret = socketEngine->write(request.constData(), request.length()); + if (ret == request.length()) { + // read the response in a loop + do { + bool waitReadResult = socketEngine->waitForRead(10*1000); + int available = socketEngine->bytesAvailable(); + if (waitReadResult == true && available == 0) { + // disconnected + exit(0); + } + bzero(buf, bufsize); + ret = socketEngine->read(buf, available); + if (ret > 0) { +#ifdef Q_OS_SYMBIAN + qDebug() << buf; //printf goes only to screen, this goes to remote debug channel +#else + printf("%s", buf); +#endif + } else { + // some failure when reading + exit(1); + } + } while (1); + } else { + qDebug() << "failed writing"; + } + } else { + qDebug() << "failed connecting"; + } + delete socketEngine; +} + diff --git a/tests/manual/socketengine/socketengine.pro b/tests/manual/socketengine/socketengine.pro new file mode 100644 index 0000000..76a40be --- /dev/null +++ b/tests/manual/socketengine/socketengine.pro @@ -0,0 +1,15 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = tst_socketengine +DEPENDPATH += . +INCLUDEPATH += . + +QT -= gui +QT += network + +CONFIG += release + +symbian: TARGET.CAPABILITY = NetworkServices + +# Input +SOURCES += main.cpp diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index ab19a04..494ea52 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -1562,10 +1562,8 @@ void Configure::applySpecSpecifics() dictionary[ "QT3SUPPORT" ] = "no"; dictionary[ "OPENGL" ] = "no"; dictionary[ "OPENSSL" ] = "yes"; - // We accidently enabled IPv6 for Qt Symbian in 4.6.x. However the underlying OpenC does not fully support IPV6. - // Therefore for 4.7.1 and following we disable it until OpenC either supports it or we have the native Qt - // symbian socket engine. - dictionary[ "IPV6" ] = "no"; + // On Symbian we now always will have IPv6 with no chance to disable it + dictionary[ "IPV6" ] = "yes"; dictionary[ "STL" ] = "yes"; dictionary[ "EXCEPTIONS" ] = "yes"; dictionary[ "RTTI" ] = "yes"; |