aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-06-04 13:52:47 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-06-04 13:52:47 +0000
commit452d70b95168e5f36a6cdb972278d656141feb3f (patch)
tree3740ca69a09069310ec19b6407627ce24dceb3bf /source
parenta64de45ea1daec3a791c1e07f6b3381c0f6d5a97 (diff)
downloadqxmpp-452d70b95168e5f36a6cdb972278d656141feb3f.tar.gz
move transfer manager from QXmppStream to QXmppClient
Diffstat (limited to 'source')
-rw-r--r--source/QXmppClient.cpp4
-rw-r--r--source/QXmppClient.h1
-rw-r--r--source/QXmppStream.cpp33
-rw-r--r--source/QXmppStream.h7
-rw-r--r--source/QXmppTransferManager.cpp102
-rw-r--r--source/QXmppTransferManager.h8
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;