diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-20 14:12:41 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-09-20 14:12:41 +0000 |
| commit | 1f0f639c474ba35db8a670f85ad0703318c40db3 (patch) | |
| tree | d42b682c11e6ccf8526b2dc682d8cf248821fb40 /src | |
| parent | 3f7103cfa0a6004cce74de81bcdf63f821ab01d4 (diff) | |
| download | qxmpp-1f0f639c474ba35db8a670f85ad0703318c40db3.tar.gz | |
make QXmppTransferManager a QXmppClientExtension
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppClient.cpp | 3 | ||||
| -rw-r--r-- | src/QXmppDiscoveryManager.cpp | 4 | ||||
| -rw-r--r-- | src/QXmppOutgoingClient.cpp | 37 | ||||
| -rw-r--r-- | src/QXmppOutgoingClient.h | 16 | ||||
| -rw-r--r-- | src/QXmppTransferManager.cpp | 183 | ||||
| -rw-r--r-- | src/QXmppTransferManager.h | 27 |
6 files changed, 118 insertions, 152 deletions
diff --git a/src/QXmppClient.cpp b/src/QXmppClient.cpp index 82d1596b..e0e2386f 100644 --- a/src/QXmppClient.cpp +++ b/src/QXmppClient.cpp @@ -210,7 +210,8 @@ QXmppClient::QXmppClient(QObject *parent) d->mucManager = new QXmppMucManager(this); addExtension(d->mucManager); - d->transferManager = new QXmppTransferManager(d->stream, this); + d->transferManager = new QXmppTransferManager(this); + addExtension(d->transferManager); d->vCardManager = new QXmppVCardManager; addExtension(d->vCardManager); diff --git a/src/QXmppDiscoveryManager.cpp b/src/QXmppDiscoveryManager.cpp index 43e85fb6..d851d953 100644 --- a/src/QXmppDiscoveryManager.cpp +++ b/src/QXmppDiscoveryManager.cpp @@ -116,12 +116,8 @@ QXmppDiscoveryIq QXmppDiscoveryManager::capabilities() QStringList features;
features
<< ns_rpc // XEP-0009: Jabber-RPC
- << ns_ibb // XEP-0047: In-Band Bytestreams
// << ns_vcard // XEP-0054: vcard-temp
- << ns_bytestreams // XEP-0065: SOCKS5 Bytestreams
<< ns_chat_states // XEP-0085: Chat State Notifications
- << ns_stream_initiation // XEP-0095: Stream Initiation
- << ns_stream_initiation_file_transfer // XEP-0096: SI File Transfer
<< ns_capabilities // XEP-0115 : Entity Capabilities
<< ns_ping; // XEP-0199: XMPP Ping
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp index 957d9288..6b829322 100644 --- a/src/QXmppOutgoingClient.cpp +++ b/src/QXmppOutgoingClient.cpp @@ -39,16 +39,12 @@ #include "QXmppUtils.h" // IQ types -#include "QXmppArchiveIq.h" #include "QXmppBindIq.h" -#include "QXmppByteStreamIq.h" #include "QXmppDiscoveryIq.h" -#include "QXmppIbbIq.h" #include "QXmppPingIq.h" #include "QXmppRpcIq.h" #include "QXmppRosterIq.h" #include "QXmppSessionIq.h" -#include "QXmppStreamInitiationIq.h" #include "QXmppVCardIq.h" #include <QBuffer> @@ -498,32 +494,6 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv) emit discoveryIqReceived(discoIq); } } - // XEP-0047 In-Band Bytestreams - else if(QXmppIbbCloseIq::isIbbCloseIq(nodeRecv)) - { - QXmppIbbCloseIq ibbCloseIq; - ibbCloseIq.parse(nodeRecv); - emit ibbCloseIqReceived(ibbCloseIq); - } - else if(QXmppIbbDataIq::isIbbDataIq(nodeRecv)) - { - QXmppIbbDataIq ibbDataIq; - ibbDataIq.parse(nodeRecv); - emit ibbDataIqReceived(ibbDataIq); - } - else if(QXmppIbbOpenIq::isIbbOpenIq(nodeRecv)) - { - QXmppIbbOpenIq ibbOpenIq; - ibbOpenIq.parse(nodeRecv); - emit ibbOpenIqReceived(ibbOpenIq); - } - // XEP-0065: SOCKS5 Bytestreams - else if(QXmppByteStreamIq::isByteStreamIq(nodeRecv)) - { - QXmppByteStreamIq byteStreamIq; - byteStreamIq.parse(nodeRecv); - emit byteStreamIqReceived(byteStreamIq); - } // XEP-0078: Non-SASL Authentication else if(id == d->nonSASLAuthId && type == "result") { @@ -564,13 +534,6 @@ void QXmppOutgoingClient::handleStanza(const QDomElement &nodeRecv) sendNonSASLAuth(plainText); } } - // XEP-0095: Stream Initiation - else if(QXmppStreamInitiationIq::isStreamInitiationIq(nodeRecv)) - { - QXmppStreamInitiationIq siIq; - siIq.parse(nodeRecv); - emit streamInitiationIqReceived(siIq); - } // XEP-0199: XMPP Ping else if(QXmppPingIq::isPingIq(nodeRecv)) { diff --git a/src/QXmppOutgoingClient.h b/src/QXmppOutgoingClient.h index 51a88300..06178665 100644 --- a/src/QXmppOutgoingClient.h +++ b/src/QXmppOutgoingClient.h @@ -44,12 +44,7 @@ class QXmppVCardIq; class QXmppMessage; class QXmppRpcResponseIq; class QXmppRpcErrorIq; -class QXmppByteStreamIq; class QXmppDiscoveryIq; -class QXmppIbbCloseIq; -class QXmppIbbDataIq; -class QXmppIbbOpenIq; -class QXmppStreamInitiationIq; class QXmppOutgoingClientPrivate; @@ -93,17 +88,6 @@ signals: // XEP-0030: Service Discovery void discoveryIqReceived(const QXmppDiscoveryIq&); - // XEP-0047 In-Band Bytestreams - void ibbCloseIqReceived(const QXmppIbbCloseIq&); - void ibbDataIqReceived(const QXmppIbbDataIq&); - void ibbOpenIqReceived(const QXmppIbbOpenIq&); - - // XEP-0065: SOCKS5 Bytestreams - void byteStreamIqReceived(const QXmppByteStreamIq&); - - // XEP-0095: Stream Initiation - void streamInitiationIqReceived(const QXmppStreamInitiationIq&); - protected: /// \cond // Overridable methods diff --git a/src/QXmppTransferManager.cpp b/src/QXmppTransferManager.cpp index d6fef54f..8fbea6dd 100644 --- a/src/QXmppTransferManager.cpp +++ b/src/QXmppTransferManager.cpp @@ -30,7 +30,6 @@ #include "QXmppByteStreamIq.h" #include "QXmppConstants.h" #include "QXmppIbbIq.h" -#include "QXmppLogger.h" #include "QXmppSocks.h" #include "QXmppOutgoingClient.h" #include "QXmppStreamInitiationIq.h" @@ -375,54 +374,26 @@ bool QXmppTransferJob::writeData(const QByteArray &data) return true; } -QXmppTransferManager::QXmppTransferManager(QXmppOutgoingClient *stream, QObject *parent) - : QObject(parent), - m_stream(stream), - m_ibbBlockSize(4096), +QXmppTransferManager::QXmppTransferManager(QXmppClient *client) + : m_ibbBlockSize(4096), m_proxyOnly(false), m_socksServer(0), m_supportedMethods(QXmppTransferJob::AnyMethod) { - // Logging - bool check = connect(this, SIGNAL(logMessage(QXmppLogger::MessageType, QString)), - m_stream, SIGNAL(logMessage(QXmppLogger::MessageType, QString))); - Q_ASSERT(check); - // XEP-0047: In-Band Bytestreams - check = QObject::connect(m_stream, SIGNAL(iqReceived(const QXmppIq&)), + bool check = QObject::connect(client, 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()) { - connect(m_socksServer, SIGNAL(newConnection(QTcpSocket*, const QString&, quint16)), - this, SLOT(socksServerConnected(QTcpSocket*, const QString&, quint16))); + check = connect(m_socksServer, SIGNAL(newConnection(QTcpSocket*, const QString&, quint16)), + this, SLOT(socksServerConnected(QTcpSocket*, const QString&, quint16))); + Q_ASSERT(check); } else { - emit logMessage(QXmppLogger::WarningMessage, "QXmppSocksServer could not start listening"); + qWarning("QXmppSocksServer could not start listening"); } } @@ -476,15 +447,14 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) if (iq.streamHostUsed() == job->m_socksProxy.jid()) { const QXmppByteStreamIq::StreamHost streamHost = job->m_socksProxy; - emit logMessage(QXmppLogger::InformationMessage, - QString("Connecting to proxy: %1 (%2:%3)").arg( + info(QString("Connecting to proxy: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), QString::number(streamHost.port()))); // connect to proxy const QString hostName = streamHash(job->m_sid, - m_stream->configuration().jid(), + client()->configuration().jid(), job->m_jid); QXmppSocksClient *socksClient = new QXmppSocksClient(streamHost.host(), streamHost.port(), job); @@ -492,8 +462,7 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) // FIXME : this should probably be made asynchronous as it blocks XMPP packet handling if (!socksClient->waitForReady(socksTimeout)) { - emit logMessage(QXmppLogger::WarningMessage, - QString("Failed to connect to proxy: %1 (%2:%3)").arg( + warning(QString("Failed to connect to proxy: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), QString::number(streamHost.port()))); @@ -507,19 +476,19 @@ void QXmppTransferManager::byteStreamResultReceived(const QXmppByteStreamIq &iq) // activate stream QXmppByteStreamIq streamIq; streamIq.setType(QXmppIq::Set); - streamIq.setFrom(m_stream->configuration().jid()); + streamIq.setFrom(client()->configuration().jid()); streamIq.setTo(streamHost.jid()); streamIq.setSid(job->m_sid); streamIq.setActivate(job->m_jid); job->m_requestId = streamIq.id(); - m_stream->sendPacket(streamIq); + client()->sendPacket(streamIq); return; } // direction connection, start sending data if (!job->m_socksSocket) { - emit logMessage(QXmppLogger::WarningMessage, "Client says they connected to our SOCKS server, but they did not"); + warning("Client says they connected to our SOCKS server, but they did not"); job->terminate(QXmppTransferJob::ProtocolError); return; } @@ -548,22 +517,21 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) error.setCode(406); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } // try connecting to the offered stream hosts foreach (const QXmppByteStreamIq::StreamHost &streamHost, iq.streamHosts()) { - emit logMessage(QXmppLogger::InformationMessage, - QString("Connecting to streamhost: %1 (%2:%3)").arg( + info(QString("Connecting to streamhost: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), QString::number(streamHost.port()))); const QString hostName = streamHash(job->m_sid, job->m_jid, - m_stream->configuration().jid()); + client()->configuration().jid()); // try to connect to stream host QXmppSocksClient *socksClient = new QXmppSocksClient(streamHost.host(), streamHost.port(), job); @@ -582,11 +550,10 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) ackIq.setType(QXmppIq::Result); ackIq.setSid(job->m_sid); ackIq.setStreamHostUsed(streamHost.jid()); - m_stream->sendPacket(ackIq); + client()->sendPacket(ackIq); return; } else { - emit logMessage(QXmppLogger::WarningMessage, - QString("Failed to connect to streamhost: %1 (%2:%3)").arg( + warning(QString("Failed to connect to streamhost: %1 (%2:%3)").arg( streamHost.jid(), streamHost.host().toString(), QString::number(streamHost.port()))); @@ -599,11 +566,67 @@ void QXmppTransferManager::byteStreamSetReceived(const QXmppByteStreamIq &iq) error.setCode(404); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); job->terminate(QXmppTransferJob::ProtocolError); } +QStringList QXmppTransferManager::discoveryFeatures() const +{ + return QStringList() + << ns_ibb // XEP-0047: In-Band Bytestreams + << ns_bytestreams // XEP-0065: SOCKS5 Bytestreams + << ns_stream_initiation // XEP-0095: Stream Initiation + << ns_stream_initiation_file_transfer; // XEP-0096: SI File Transfer +} + +bool QXmppTransferManager::handleStanza(QXmppStream *stream, const QDomElement &element) +{ + if (element.tagName() != "iq") + return false; + + // XEP-0047 In-Band Bytestreams + if(QXmppIbbCloseIq::isIbbCloseIq(element)) + { + QXmppIbbCloseIq ibbCloseIq; + ibbCloseIq.parse(element); + ibbCloseIqReceived(ibbCloseIq); + return true; + } + else if(QXmppIbbDataIq::isIbbDataIq(element)) + { + QXmppIbbDataIq ibbDataIq; + ibbDataIq.parse(element); + ibbDataIqReceived(ibbDataIq); + return true; + } + else if(QXmppIbbOpenIq::isIbbOpenIq(element)) + { + QXmppIbbOpenIq ibbOpenIq; + ibbOpenIq.parse(element); + ibbOpenIqReceived(ibbOpenIq); + return true; + } + // XEP-0065: SOCKS5 Bytestreams + else if(QXmppByteStreamIq::isByteStreamIq(element)) + { + QXmppByteStreamIq byteStreamIq; + byteStreamIq.parse(element); + byteStreamIqReceived(byteStreamIq); + return true; + } + // XEP-0095: Stream Initiation + else if(QXmppStreamInitiationIq::isStreamInitiationIq(element)) + { + QXmppStreamInitiationIq siIq; + siIq.parse(element); + streamInitiationIqReceived(siIq); + return true; + } + + return false; +} + QXmppTransferJob* QXmppTransferManager::getJobByRequestId(QXmppTransferJob::Direction direction, const QString &jid, const QString &id) { foreach (QXmppTransferJob *job, m_jobs) @@ -638,13 +661,13 @@ void QXmppTransferManager::ibbCloseIqReceived(const QXmppIbbCloseIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::ItemNotFound); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } // acknowledge the packet response.setType(QXmppIq::Result); - m_stream->sendPacket(response); + client()->sendPacket(response); // check received data job->checkData(); @@ -665,7 +688,7 @@ void QXmppTransferManager::ibbDataIqReceived(const QXmppIbbDataIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::ItemNotFound); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } @@ -675,7 +698,7 @@ void QXmppTransferManager::ibbDataIqReceived(const QXmppIbbDataIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::UnexpectedRequest); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } @@ -685,7 +708,7 @@ void QXmppTransferManager::ibbDataIqReceived(const QXmppIbbDataIq &iq) // acknowledge the packet response.setType(QXmppIq::Result); - m_stream->sendPacket(response); + client()->sendPacket(response); } void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) @@ -702,7 +725,7 @@ void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Cancel, QXmppStanza::Error::ItemNotFound); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } @@ -712,7 +735,7 @@ void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) QXmppStanza::Error error(QXmppStanza::Error::Modify, QXmppStanza::Error::ResourceConstraint); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } @@ -721,7 +744,7 @@ void QXmppTransferManager::ibbOpenIqReceived(const QXmppIbbOpenIq &iq) // accept transfer response.setType(QXmppIq::Result); - m_stream->sendPacket(response); + client()->sendPacket(response); } void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) @@ -749,7 +772,7 @@ void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) dataIq.setSequence(job->m_ibbSequence++); dataIq.setPayload(buffer); job->m_requestId = dataIq.id(); - m_stream->sendPacket(dataIq); + client()->sendPacket(dataIq); job->m_done += buffer.size(); job->progress(job->m_done, job->fileSize()); @@ -759,7 +782,7 @@ void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) closeIq.setTo(job->m_jid); closeIq.setSid(job->m_sid); job->m_requestId = closeIq.id(); - m_stream->sendPacket(closeIq); + client()->sendPacket(closeIq); job->terminate(QXmppTransferJob::NoError); } @@ -771,7 +794,7 @@ void QXmppTransferManager::ibbResponseReceived(const QXmppIq &iq) closeIq.setTo(job->m_jid); closeIq.setSid(job->m_sid); job->m_requestId = closeIq.id(); - m_stream->sendPacket(closeIq); + client()->sendPacket(closeIq); job->terminate(QXmppTransferJob::ProtocolError); } @@ -796,7 +819,7 @@ void QXmppTransferManager::iqReceived(const QXmppIq &iq) job->sendData(); } else if (iq.type() == QXmppIq::Error) { // proxy stream not activated, terminate - emit logMessage(QXmppLogger::WarningMessage, "Could not activate SOCKS5 proxy bytestream"); + warning("Could not activate SOCKS5 proxy bytestream"); job->terminate(QXmppTransferJob::ProtocolError); } } else { @@ -853,7 +876,7 @@ void QXmppTransferManager::jobError(QXmppTransferJob::Error error) closeIq.setTo(job->m_jid); closeIq.setSid(job->m_sid); job->m_requestId = closeIq.id(); - m_stream->sendPacket(closeIq); + client()->sendPacket(closeIq); } } @@ -889,7 +912,7 @@ void QXmppTransferManager::jobStateChanged(QXmppTransferJob::State state) response.setId(job->m_offerId); response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); job->terminate(QXmppTransferJob::AbortError); return; @@ -928,7 +951,7 @@ void QXmppTransferManager::jobStateChanged(QXmppTransferJob::State state) response.setProfile(QXmppStreamInitiationIq::FileTransfer); response.setSiItems(feature); - m_stream->sendPacket(response); + client()->sendPacket(response); } /// Send file to a remote party. @@ -1067,14 +1090,14 @@ QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, QIODevice * request.setSiItems(items); request.setSiId(job->m_sid); job->m_requestId = request.id(); - m_stream->sendPacket(request); + client()->sendPacket(request); return job; } void QXmppTransferManager::socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port) { - const QString ownJid = m_stream->configuration().jid(); + const QString ownJid = client()->configuration().jid(); foreach (QXmppTransferJob *job, m_jobs) { if (hostName == streamHash(job->m_sid, ownJid, job->jid()) && port == 0) @@ -1083,13 +1106,13 @@ void QXmppTransferManager::socksServerConnected(QTcpSocket *socket, const QStrin return; } } - emit logMessage(QXmppLogger::WarningMessage, "QXmppSocksServer got a connection for a unknown stream"); + warning("QXmppSocksServer got a connection for a unknown stream"); socket->close(); } void QXmppTransferManager::socksServerSendOffer(QXmppTransferJob *job) { - const QString ownJid = m_stream->configuration().jid(); + const QString ownJid = client()->configuration().jid(); QList<QXmppByteStreamIq::StreamHost> streamHosts; // discover local IPs @@ -1124,7 +1147,7 @@ void QXmppTransferManager::socksServerSendOffer(QXmppTransferJob *job) // check we have some stream hosts if (!streamHosts.size()) { - emit logMessage(QXmppLogger::WarningMessage, "Could not determine local stream hosts"); + warning("Could not determine local stream hosts"); job->terminate(QXmppTransferJob::ProtocolError); return; } @@ -1136,7 +1159,7 @@ void QXmppTransferManager::socksServerSendOffer(QXmppTransferJob *job) streamIq.setSid(job->m_sid); streamIq.setStreamHosts(streamHosts); job->m_requestId = streamIq.id(); - m_stream->sendPacket(streamIq); + client()->sendPacket(streamIq); } void QXmppTransferManager::streamInitiationIqReceived(const QXmppStreamInitiationIq &iq) @@ -1188,11 +1211,11 @@ void QXmppTransferManager::streamInitiationResultReceived(const QXmppStreamIniti openIq.setSid(job->m_sid); openIq.setBlockSize(job->m_blockSize); job->m_requestId = openIq.id(); - m_stream->sendPacket(openIq); + client()->sendPacket(openIq); } else if (job->method() == QXmppTransferJob::SocksMethod) { if (!m_socksServer->isListening()) { - emit logMessage(QXmppLogger::WarningMessage, "QXmppSocksServer is not listening"); + warning("QXmppSocksServer is not listening"); job->terminate(QXmppTransferJob::ProtocolError); return; } @@ -1206,12 +1229,12 @@ void QXmppTransferManager::streamInitiationResultReceived(const QXmppStreamIniti streamIq.setTo(job->m_socksProxy.jid()); streamIq.setSid(job->m_sid); job->m_requestId = streamIq.id(); - m_stream->sendPacket(streamIq); + client()->sendPacket(streamIq); } else { socksServerSendOffer(job); } } else { - emit logMessage(QXmppLogger::WarningMessage, "QXmppTransferManager received an unsupported method"); + warning("QXmppTransferManager received an unsupported method"); job->terminate(QXmppTransferJob::ProtocolError); } } @@ -1232,7 +1255,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } @@ -1244,7 +1267,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); return; } @@ -1300,7 +1323,7 @@ void QXmppTransferManager::streamInitiationSetReceived(const QXmppStreamInitiati response.setType(QXmppIq::Error); response.setError(error); - m_stream->sendPacket(response); + client()->sendPacket(response); delete job; return; diff --git a/src/QXmppTransferManager.h b/src/QXmppTransferManager.h index 7ec84f15..e5498a27 100644 --- a/src/QXmppTransferManager.h +++ b/src/QXmppTransferManager.h @@ -31,13 +31,12 @@ #include <QVariant> #include <QTime> +#include "QXmppClientExtension.h" #include "QXmppIq.h" #include "QXmppByteStreamIq.h" -#include "QXmppLogger.h" class QTcpSocket; class QXmppByteStreamIq; -class QXmppOutgoingClient; class QXmppIbbCloseIq; class QXmppIbbDataIq; class QXmppIbbOpenIq; @@ -211,12 +210,12 @@ private: /// /// \ingroup Managers -class QXmppTransferManager : public QObject +class QXmppTransferManager : public QXmppClientExtension { Q_OBJECT public: - QXmppTransferManager(QXmppOutgoingClient *stream, QObject *parent = 0); + QXmppTransferManager(QXmppClient *client); 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()); @@ -229,6 +228,11 @@ public: QXmppTransferJob::Methods supportedMethods() const; void setSupportedMethods(QXmppTransferJob::Methods methods); + /// \cond + QStringList discoveryFeatures() const; + bool handleStanza(QXmppStream *stream, const QDomElement &element); + /// \endcond + signals: /// This signal is emitted when a new file transfer offer is received. /// @@ -241,35 +245,30 @@ signals: /// \sa QXmppTransferJob::finished() void finished(QXmppTransferJob *job); - /// This signal is emitted to send logging messages. - void logMessage(QXmppLogger::MessageType type, const QString &msg); - private slots: - void byteStreamIqReceived(const QXmppByteStreamIq&); - void ibbCloseIqReceived(const QXmppIbbCloseIq&); - void ibbDataIqReceived(const QXmppIbbDataIq&); - void ibbOpenIqReceived(const QXmppIbbOpenIq&); void iqReceived(const QXmppIq&); void jobDestroyed(QObject *object); void jobError(QXmppTransferJob::Error error); void jobFinished(); void jobStateChanged(QXmppTransferJob::State state); void socksServerConnected(QTcpSocket *socket, const QString &hostName, quint16 port); - void streamInitiationIqReceived(const QXmppStreamInitiationIq&); private: QXmppTransferJob *getJobByRequestId(QXmppTransferJob::Direction direction, const QString &jid, const QString &id); QXmppTransferJob *getJobBySid(QXmppTransferJob::Direction, const QString &jid, const QString &sid); + void byteStreamIqReceived(const QXmppByteStreamIq&); void byteStreamResponseReceived(const QXmppIq&); void byteStreamResultReceived(const QXmppByteStreamIq&); void byteStreamSetReceived(const QXmppByteStreamIq&); + void ibbCloseIqReceived(const QXmppIbbCloseIq&); + void ibbDataIqReceived(const QXmppIbbDataIq&); + void ibbOpenIqReceived(const QXmppIbbOpenIq&); void ibbResponseReceived(const QXmppIq&); + void streamInitiationIqReceived(const QXmppStreamInitiationIq&); void streamInitiationResultReceived(const QXmppStreamInitiationIq&); void streamInitiationSetReceived(const QXmppStreamInitiationIq&); void socksServerSendOffer(QXmppTransferJob *job); - // reference to XMPP stream (no ownership) - QXmppOutgoingClient* m_stream; int m_ibbBlockSize; QList<QXmppTransferJob*> m_jobs; QString m_proxy; |
