aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-06-07 09:39:16 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-06-07 09:39:16 +0200
commit1dc96fbfa0de789d0a144fbed3c62b7027a5b2ff (patch)
tree0dd13162cc368ddfabb3af8d65eeac18c8f5f599 /src
parentf260085ef199428e9287a3f36387d697709af4ef (diff)
downloadqxmpp-1dc96fbfa0de789d0a144fbed3c62b7027a5b2ff.tar.gz
restore 7 second timeout for SOCKS candidate tests
Diffstat (limited to 'src')
-rw-r--r--src/client/QXmppTransferManager.cpp17
-rw-r--r--src/client/QXmppTransferManager_p.h2
2 files changed, 19 insertions, 0 deletions
diff --git a/src/client/QXmppTransferManager.cpp b/src/client/QXmppTransferManager.cpp
index d7bad7de..539d61d0 100644
--- a/src/client/QXmppTransferManager.cpp
+++ b/src/client/QXmppTransferManager.cpp
@@ -394,6 +394,7 @@ void QXmppTransferJob::terminate(QXmppTransferJob::Error cause)
QXmppTransferIncomingJob::QXmppTransferIncomingJob(const QString& jid, QXmppClient* client, QObject* parent)
: QXmppTransferJob(jid, IncomingDirection, client, parent)
, m_candidateClient(0)
+ , m_candidateTimer(0)
{
}
@@ -439,6 +440,7 @@ void QXmppTransferIncomingJob::connectToNextHost()
// try to connect to stream host
m_candidateClient = new QXmppSocksClient(m_candidateHost.host(), m_candidateHost.port(), this);
+ m_candidateTimer = new QTimer(this);
check = connect(m_candidateClient, SIGNAL(disconnected()),
this, SLOT(_q_candidateDisconnected()));
@@ -448,6 +450,12 @@ void QXmppTransferIncomingJob::connectToNextHost()
this, SLOT(_q_candidateReady()));
Q_ASSERT(check);
+ check = connect(m_candidateTimer, SIGNAL(timeout()),
+ this, SLOT(_q_candidateDisconnected()));
+ Q_ASSERT(check);
+
+ m_candidateTimer->setSingleShot(true);
+ m_candidateTimer->start(socksTimeout);
m_candidateClient->connectToHost(hostName, 0);
}
@@ -483,9 +491,16 @@ void QXmppTransferIncomingJob::_q_candidateReady()
if (!m_candidateClient)
return;
+ info(QString("Connected to streamhost: %1 (%2:%3)").arg(
+ m_candidateHost.jid(),
+ m_candidateHost.host().toString(),
+ QString::number(m_candidateHost.port())));
+
setState(QXmppTransferJob::TransferState);
d->socksSocket = m_candidateClient;
m_candidateClient = 0;
+ m_candidateTimer->deleteLater();
+ m_candidateTimer = 0;
check = connect(d->socksSocket, SIGNAL(readyRead()),
this, SLOT(_q_receiveData()));
@@ -516,6 +531,8 @@ void QXmppTransferIncomingJob::_q_candidateDisconnected()
m_candidateClient->deleteLater();
m_candidateClient = 0;
+ m_candidateTimer->deleteLater();
+ m_candidateTimer = 0;
// try next host
connectToNextHost();
diff --git a/src/client/QXmppTransferManager_p.h b/src/client/QXmppTransferManager_p.h
index 713353b7..5a21001e 100644
--- a/src/client/QXmppTransferManager_p.h
+++ b/src/client/QXmppTransferManager_p.h
@@ -38,6 +38,7 @@
// We mean it.
//
+class QTimer;
class QXmppSocksClient;
class QXmppTransferIncomingJob : public QXmppTransferJob
@@ -61,6 +62,7 @@ private:
QXmppByteStreamIq::StreamHost m_candidateHost;
QXmppSocksClient *m_candidateClient;
+ QTimer *m_candidateTimer;
QList<QXmppByteStreamIq::StreamHost> m_streamCandidates;
QString m_streamOfferId;
QString m_streamOfferFrom;