diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-06-04 13:52:47 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-06-04 13:52:47 +0000 |
| commit | 452d70b95168e5f36a6cdb972278d656141feb3f (patch) | |
| tree | 3740ca69a09069310ec19b6407627ce24dceb3bf /source | |
| parent | a64de45ea1daec3a791c1e07f6b3381c0f6d5a97 (diff) | |
| download | qxmpp-452d70b95168e5f36a6cdb972278d656141feb3f.tar.gz | |
move transfer manager from QXmppStream to QXmppClient
Diffstat (limited to 'source')
| -rw-r--r-- | source/QXmppClient.cpp | 4 | ||||
| -rw-r--r-- | source/QXmppClient.h | 1 | ||||
| -rw-r--r-- | source/QXmppStream.cpp | 33 | ||||
| -rw-r--r-- | source/QXmppStream.h | 7 | ||||
| -rw-r--r-- | source/QXmppTransferManager.cpp | 102 | ||||
| -rw-r--r-- | source/QXmppTransferManager.h | 8 |
6 files changed, 77 insertions, 78 deletions
diff --git a/source/QXmppClient.cpp b/source/QXmppClient.cpp index 4a99d1a3..ba907fb5 100644 --- a/source/QXmppClient.cpp +++ b/source/QXmppClient.cpp @@ -34,6 +34,7 @@ #include "QXmppRpcIq.h" #include "QXmppRemoteMethod.h" #include "QXmppUtils.h" +#include "QXmppTransferManager.h" #include "QXmppVCardManager.h" /// Creates a QXmppClient object. @@ -84,6 +85,7 @@ QXmppClient::QXmppClient(QObject *parent) // create managers m_roster = new QXmppRoster(m_stream); m_archiveManager = new QXmppArchiveManager(m_stream); + m_transferManager = new QXmppTransferManager(m_stream); m_vCardManager = new QXmppVCardManager(m_stream); } @@ -526,7 +528,7 @@ QXmppArchiveManager& QXmppClient::getArchiveManager() QXmppTransferManager& QXmppClient::getTransferManager() { - return m_stream->getTransferManager(); + return *m_transferManager; } /// Reimplement in your subclass of QXmppClient if you want to handle diff --git a/source/QXmppClient.h b/source/QXmppClient.h index b418a2c5..fe3cf997 100644 --- a/source/QXmppClient.h +++ b/source/QXmppClient.h @@ -211,6 +211,7 @@ private: QXmppArchiveManager *m_archiveManager; ///< Pointer to the archive manager QXmppReconnectionManager* m_reconnectionManager; ///< Pointer to the reconnection manager QXmppRoster *m_roster; ///< Pointer to the roster manager + QXmppTransferManager *m_transferManager;///< Pointer to the transfer manager QXmppVCardManager *m_vCardManager; ///< Pointer to the vCard manager QHash<QString,QXmppInvokable *> m_interfaces; }; diff --git a/source/QXmppStream.cpp b/source/QXmppStream.cpp index 31735fc9..36e9e87f 100644 --- a/source/QXmppStream.cpp +++ b/source/QXmppStream.cpp @@ -35,7 +35,6 @@ #include "QXmppVCard.h" #include "QXmppNonSASLAuth.h" #include "QXmppInformationRequestResult.h" -#include "QXmppTransferManager.h" // IQ types #include "QXmppArchiveIq.h" @@ -63,7 +62,6 @@ static const QByteArray streamRootElementEnd = "</stream:stream>"; QXmppStream::QXmppStream(QXmppClient* client) : QObject(client), m_client(client), m_sessionAvaliable(false), - m_transferManager(m_client), m_authStep(0) { // Make sure the random number generator is seeded @@ -96,33 +94,6 @@ QXmppStream::QXmppStream(QXmppClient* client) SLOT(socketError(QAbstractSocket::SocketError))); Q_ASSERT(check); - // XEP-0047: In-Band Bytestreams - check = QObject::connect(this, SIGNAL(iqReceived(const QXmppIq&)), - &m_transferManager, SLOT(iqReceived(const QXmppIq&))); - Q_ASSERT(check); - - check = QObject::connect(this, SIGNAL(ibbCloseIqReceived(const QXmppIbbCloseIq&)), - &m_transferManager, SLOT(ibbCloseIqReceived(const QXmppIbbCloseIq&))); - Q_ASSERT(check); - - check = QObject::connect(this, SIGNAL(ibbDataIqReceived(const QXmppIbbDataIq&)), - &m_transferManager, SLOT(ibbDataIqReceived(const QXmppIbbDataIq&))); - Q_ASSERT(check); - - check = QObject::connect(this, SIGNAL(ibbOpenIqReceived(const QXmppIbbOpenIq&)), - &m_transferManager, SLOT(ibbOpenIqReceived(const QXmppIbbOpenIq&))); - Q_ASSERT(check); - - // XEP-0065: SOCKS5 Bytestreams - check = QObject::connect(this, SIGNAL(byteStreamIqReceived(const QXmppByteStreamIq&)), - &m_transferManager, SLOT(byteStreamIqReceived(const QXmppByteStreamIq&))); - Q_ASSERT(check); - - // XEP-0095: Stream Initiation - check = QObject::connect(this, SIGNAL(streamInitiationIqReceived(const QXmppStreamInitiationIq&)), - &m_transferManager, SLOT(streamInitiationIqReceived(const QXmppStreamInitiationIq&))); - Q_ASSERT(check); - // XEP-0199: XMPP Ping m_pingTimer = new QTimer(); check = QObject::connect(m_pingTimer, SIGNAL(timeout()), this, SLOT(pingSend())); @@ -1108,7 +1079,3 @@ void QXmppStream::flushDataBuffer() m_dataBuffer.clear(); } -QXmppTransferManager& QXmppStream::getTransferManager() -{ - return m_transferManager; -} diff --git a/source/QXmppStream.h b/source/QXmppStream.h index 52e82155..a5aaab3d 100644 --- a/source/QXmppStream.h +++ b/source/QXmppStream.h @@ -30,7 +30,6 @@ #include "QXmppClient.h" #include "QXmppConfiguration.h" #include "QXmppStanza.h" -#include "QXmppTransferManager.h" class QDomElement; class QTimer; @@ -51,6 +50,10 @@ class QXmppArchiveListIq; class QXmppArchivePrefIq; class QXmppByteStreamIq; class QXmppDiscoveryIq; +class QXmppIbbCloseIq; +class QXmppIbbDataIq; +class QXmppIbbOpenIq; +class QXmppStreamInitiationIq; class QXmppVersionIq; class QXmppStream : public QObject @@ -65,7 +68,6 @@ public: void sendSubscriptionRequest(const QString& to); void disconnect(); bool isConnected() const; - QXmppTransferManager& getTransferManager(); bool sendPacket(const QXmppPacket&); QAbstractSocket::SocketError getSocketError(); @@ -142,7 +144,6 @@ private: QTimer *m_pingTimer; QTimer *m_timeoutTimer; - QXmppTransferManager m_transferManager; int m_authStep; void debug(const QString&); diff --git a/source/QXmppTransferManager.cpp b/source/QXmppTransferManager.cpp index 780923b3..bdc85b98 100644 --- a/source/QXmppTransferManager.cpp +++ b/source/QXmppTransferManager.cpp @@ -28,11 +28,11 @@ #include <QTimer> #include "QXmppByteStreamIq.h" -#include "QXmppClient.h" #include "QXmppConstants.h" #include "QXmppIbbIq.h" #include "QXmppLogger.h" #include "QXmppSocks.h" +#include "QXmppStream.h" #include "QXmppStreamInitiationIq.h" #include "QXmppTransferManager.h" #include "QXmppUtils.h" @@ -345,13 +345,41 @@ bool QXmppTransferJob::writeData(const QByteArray &data) return true; } -QXmppTransferManager::QXmppTransferManager(QXmppClient *client) - : m_client(client), +QXmppTransferManager::QXmppTransferManager(QXmppStream *stream) + : QObject(m_stream), + m_stream(stream), m_ibbBlockSize(4096), m_proxyOnly(false), m_socksServer(0), m_supportedMethods(QXmppTransferJob::AnyMethod) { + // XEP-0047: In-Band Bytestreams + bool check = QObject::connect(m_stream, SIGNAL(iqReceived(const QXmppIq&)), + this, SLOT(iqReceived(const QXmppIq&))); + Q_ASSERT(check); + + check = QObject::connect(m_stream, SIGNAL(ibbCloseIqReceived(const QXmppIbbCloseIq&)), + this, SLOT(ibbCloseIqReceived(const QXmppIbbCloseIq&))); + Q_ASSERT(check); + + check = QObject::connect(m_stream, SIGNAL(ibbDataIqReceived(const QXmppIbbDataIq&)), + this, SLOT(ibbDataIqReceived(const QXmppIbbDataIq&))); + Q_ASSERT(check); + + check = QObject::connect(m_stream, SIGNAL(ibbOpenIqReceived(const QXmppIbbOpenIq&)), + this, SLOT(ibbOpenIqReceived(const QXmppIbbOpenIq&))); + Q_ASSERT(check); + + // XEP-0065: SOCKS5 Bytestreams + check = QObject::connect(m_stream, SIGNAL(byteStreamIqReceived(const QXmppByteStreamIq&)), + this, SLOT(byteStreamIqReceived(const QXmppByteStreamIq&))); + Q_ASSERT(check); + + // XEP-0095: Stream Initiation + check = QObject::connect(m_stream, SIGNAL(streamInitiationIqReceived(const QXmppStreamInitiationIq&)), + this, SLOT(streamInitiationIqReceived(const QXmppStreamInitiationIq&))); + Q_ASSERT(check); + // start SOCKS server m_socksServer = new QXmppSocksServer(this); if (m_socksServer->listen()) @@ -415,7 +443,7 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) if (iq.streamHostUsed() == job->m_socksProxy.jid()) { const QXmppByteStreamIq::StreamHost streamHost = job->m_socksProxy; - m_client->logger()->log(QXmppLogger::InformationMessage, + m_stream->logger()->log(QXmppLogger::InformationMessage, QString("Connecting to proxy: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), @@ -423,7 +451,7 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) // connect to proxy const QString hostName = streamHash(job->m_sid, - m_client->getConfiguration().jid(), + m_stream->getConfiguration().jid(), job->m_jid); QXmppSocksClient *socksClient = new QXmppSocksClient(streamHost.host(), streamHost.port(), job); @@ -431,7 +459,7 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) // FIXME : this should probably be made asynchronous as it blocks XMPP packet handling if (!socksClient->waitForReady(socksTimeout)) { - m_client->logger()->log(QXmppLogger::WarningMessage, + m_stream->logger()->log(QXmppLogger::WarningMessage, QString("Failed to connect to proxy: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), @@ -446,12 +474,12 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) // activate stream QXmppByteStreamIq streamIq; streamIq.setType(QXmppIq::Set); - streamIq.setFrom(m_client->getConfiguration().jid()); + streamIq.setFrom(m_stream->getConfiguration().jid()); streamIq.setTo(streamHost.jid()); streamIq.setSid(job->m_sid); streamIq.setActivate(job->m_jid); job->m_requestId = streamIq.id(); - m_client->sendPacket(streamIq); + m_stream->sendPacket(streamIq); return; } @@ -488,14 +516,14 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) error.setCode(406); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } // try connecting to the offered stream hosts foreach (const QXmppByteStreamIq::StreamHost &streamHost, iq.streamHosts()) { - m_client->logger()->log(QXmppLogger::InformationMessage, + m_stream->logger()->log(QXmppLogger::InformationMessage, QString("Connecting to streamhost: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), @@ -503,7 +531,7 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) const QString hostName = streamHash(job->m_sid, job->m_jid, - m_client->getConfiguration().jid()); + m_stream->getConfiguration().jid()); // try to connect to stream host QXmppSocksClient *socksClient = new QXmppSocksClient(streamHost.host(), streamHost.port(), job); @@ -522,10 +550,10 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) ackIq.setType(QXmppIq::Result); ackIq.setSid(job->m_sid); ackIq.setStreamHostUsed(streamHost.jid()); - m_client->sendPacket(ackIq); + m_stream->sendPacket(ackIq); return; } else { - m_client->logger()->log(QXmppLogger::WarningMessage, + m_stream->logger()->log(QXmppLogger::WarningMessage, QString("Failed to connect to streamhost: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), @@ -539,7 +567,7 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) error.setCode(404); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); job->terminate(QXmppTransferJob::ProtocolError); } @@ -575,13 +603,13 @@ void QXmppTransferManager::ibbCloseIqReceived(const QXmppIbbCloseIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::ItemNotFound); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } // acknowledge the packet response.setType(QXmppIq::Result); - m_client->sendPacket(response); + m_stream->sendPacket(response); // check received data job->checkData(); @@ -603,7 +631,7 @@ void QXmppTransferManager::ibbDataIqReceived(const QXmppIbbDataIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::ItemNotFound); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } @@ -613,7 +641,7 @@ void QXmppTransferManager::ibbDataIqReceived(const QXmppIbbDataIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::UnexpectedRequest); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } @@ -623,7 +651,7 @@ void QXmppTransferManager::ibbDataIqReceived(const QXmppIbbDataIq &iq) // acknowledge the packet response.setType(QXmppIq::Result); - m_client->sendPacket(response); + m_stream->sendPacket(response); } void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) @@ -641,7 +669,7 @@ void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::ItemNotFound); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } @@ -651,7 +679,7 @@ void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Modify, QXmppStanza::Error::ResourceConstraint); response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } @@ -660,7 +688,7 @@ void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) // accept transfer response.setType(QXmppIq::Result); - m_client->sendPacket(response); + m_stream->sendPacket(response); } void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) @@ -689,7 +717,7 @@ void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) dataIq.setSequence(job->m_ibbSequence++); dataIq.setPayload(buffer); job->m_requestId = dataIq.id(); - m_client->sendPacket(dataIq); + m_stream->sendPacket(dataIq); job->m_done += buffer.size(); job->progress(job->m_done, job->fileSize()); @@ -699,7 +727,7 @@ void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) closeIq.setTo(job->m_jid); closeIq.setSid(job->m_sid); job->m_requestId = closeIq.id(); - m_client->sendPacket(closeIq); + m_stream->sendPacket(closeIq); job->terminate(QXmppTransferJob::NoError); } @@ -711,7 +739,7 @@ void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) closeIq.setTo(job->m_jid); closeIq.setSid(job->m_sid); job->m_requestId = closeIq.id(); - m_client->sendPacket(closeIq); + m_stream->sendPacket(closeIq); job->terminate(QXmppTransferJob::ProtocolError); } @@ -782,7 +810,7 @@ void QXmppTransferManager::jobError(QXmppTransferJob::Error error) closeIq.setTo(job->m_jid); closeIq.setSid(job->m_sid); job->m_requestId = closeIq.id(); - m_client->sendPacket(closeIq); + m_stream->sendPacket(closeIq); } } @@ -819,7 +847,7 @@ void QXmppTransferManager::jobStateChanged(QXmppTransferJob::State state) response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); job->terminate(QXmppTransferJob::AbortError); return; @@ -855,7 +883,7 @@ void QXmppTransferManager::jobStateChanged(QXmppTransferJob::State state) response.setProfile(QXmppStreamInitiationIq::FileTransfer); response.setSiItems(feature); - m_client->sendPacket(response); + m_stream->sendPacket(response); } /// Send file to a remote party. @@ -994,14 +1022,14 @@ QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, QIODevice * request.setSiItems(items); request.setSiId(job->m_sid); job->m_requestId = request.id(); - m_client->sendPacket(request); + m_stream->sendPacket(request); return job; } void QXmppTransferManager::socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port) { - const QString ownJid = m_client->getConfiguration().jid(); + const QString ownJid = m_stream->getConfiguration().jid(); foreach (QXmppTransferJob *job, m_jobs) { if (hostName == streamHash(job->m_sid, ownJid, job->jid()) && port == 0) @@ -1016,7 +1044,7 @@ void QXmppTransferManager::socksServerConnected(QTcpSocket *socket, const QStrin void QXmppTransferManager::socksServerSendOffer(QXmppTransferJob *job) { - const QString ownJid = m_client->getConfiguration().jid(); + const QString ownJid = m_stream->getConfiguration().jid(); QList<QXmppByteStreamIq::StreamHost> streamHosts; // discover local IPs @@ -1063,7 +1091,7 @@ void QXmppTransferManager::socksServerSendOffer(QXmppTransferJob *job) streamIq.setSid(job->m_sid); streamIq.setStreamHosts(streamHosts); job->m_requestId = streamIq.id(); - m_client->sendPacket(streamIq); + m_stream->sendPacket(streamIq); } void QXmppTransferManager::streamInitiationIqReceived(const QXmppStreamInitiationIq &iq) @@ -1116,7 +1144,7 @@ void QXmppTransferManager::streamInitiationResultReceived(const QXmppStreamIniti openIq.setSid(job->m_sid); openIq.setBlockSize(job->m_blockSize); job->m_requestId = openIq.id(); - m_client->sendPacket(openIq); + m_stream->sendPacket(openIq); } else if (job->method() == QXmppTransferJob::SocksMethod) { if (!m_socksServer->isListening()) { @@ -1134,7 +1162,7 @@ void QXmppTransferManager::streamInitiationResultReceived(const QXmppStreamIniti streamIq.setTo(job->m_socksProxy.jid()); streamIq.setSid(job->m_sid); job->m_requestId = streamIq.id(); - m_client->sendPacket(streamIq); + m_stream->sendPacket(streamIq); } else { socksServerSendOffer(job); } @@ -1160,7 +1188,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } @@ -1172,7 +1200,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); return; } @@ -1228,7 +1256,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati response.setType(QXmppIq::Error); response.setError(error); - m_client->sendPacket(response); + m_stream->sendPacket(response); delete job; return; diff --git a/source/QXmppTransferManager.h b/source/QXmppTransferManager.h index 2240df2b..bb21a2d7 100644 --- a/source/QXmppTransferManager.h +++ b/source/QXmppTransferManager.h @@ -35,7 +35,7 @@ class QTcpSocket; class QXmppByteStreamIq; -class QXmppClient; +class QXmppStream; class QXmppIbbCloseIq; class QXmppIbbDataIq; class QXmppIbbOpenIq; @@ -205,7 +205,7 @@ class QXmppTransferManager : public QObject Q_OBJECT public: - QXmppTransferManager(QXmppClient* client); + QXmppTransferManager(QXmppStream *stream); QXmppTransferJob *sendFile(const QString &jid, const QString &fileName, const QString &sid = QString()); QXmppTransferJob *sendFile(const QString &jid, QIODevice *device, const QXmppTransferFileInfo &fileInfo, const QString &sid = QString()); @@ -250,8 +250,8 @@ private: void streamInitiationSetReceived(const QXmppStreamInitiationIq&); void socksServerSendOffer(QXmppTransferJob *job); - // reference to client object (no ownership) - QXmppClient* m_client; + // reference to XMPP stream (no ownership) + QXmppStream* m_stream; int m_ibbBlockSize; QList<QXmppTransferJob*> m_jobs; QString m_proxy; |
