From 87f890295bdd857571e5289687ffb5ff61d88ed9 Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Wed, 3 Apr 2013 11:21:18 +0200 Subject: Doc: Fix network/torrent example to work on Qt 5 This change fixes two issues in the torrent example: - Correctly use a query constructed from the announce url to fetch the list of peers (using QUrlQuery). - Reimplement QAbstractSocket's connectToHost() and disconnectFromHost() which are virtual in Qt 5, instead of of using the protected connectToHostImplementation() / disconnectFromHostImplementation() slots. Also removes a warning about deprecation of QHttp class as it's no longer used in this example. Task-number: QTBUG-30329 Change-Id: I9230cd2204bfc1a66f2ea3e98940b09681df250e Reviewed-by: Peter Hartmann --- examples/network/torrent/main.cpp | 1 - examples/network/torrent/peerwireclient.cpp | 8 ++--- examples/network/torrent/peerwireclient.h | 9 +++--- examples/network/torrent/trackerclient.cpp | 49 ++++++++++++++--------------- 4 files changed, 31 insertions(+), 36 deletions(-) diff --git a/examples/network/torrent/main.cpp b/examples/network/torrent/main.cpp index 13b40d28cc..9cdca69122 100644 --- a/examples/network/torrent/main.cpp +++ b/examples/network/torrent/main.cpp @@ -45,7 +45,6 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - qWarning("The usage of QHttp is not recommended anymore, please use QNetworkAccessManager."); qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); Q_INIT_RESOURCE(icons); diff --git a/examples/network/torrent/peerwireclient.cpp b/examples/network/torrent/peerwireclient.cpp index ade465ab47..0f77ba10d3 100644 --- a/examples/network/torrent/peerwireclient.cpp +++ b/examples/network/torrent/peerwireclient.cpp @@ -386,15 +386,15 @@ bool PeerWireClient::canTransferMore() const || !outgoingBuffer.isEmpty() || !pendingBlocks.isEmpty(); } -void PeerWireClient::connectToHostImplementation(const QString &hostName, - quint16 port, OpenMode openMode) +void PeerWireClient::connectToHost(const QHostAddress &address, + quint16 port, OpenMode openMode) { setOpenMode(openMode); - socket.connectToHost(hostName, port, openMode); + socket.connectToHost(address, port, openMode); } -void PeerWireClient::diconnectFromHostImplementation() +void PeerWireClient::diconnectFromHost() { socket.disconnectFromHost(); } diff --git a/examples/network/torrent/peerwireclient.h b/examples/network/torrent/peerwireclient.h index 7cd08d90cb..35e4cc6ffb 100644 --- a/examples/network/torrent/peerwireclient.h +++ b/examples/network/torrent/peerwireclient.h @@ -118,6 +118,10 @@ public: void setReadBufferSize(qint64 size); + void connectToHost(const QHostAddress &address, + quint16 port, OpenMode openMode = ReadWrite); + void diconnectFromHost(); + signals: void infoHashReceived(const QByteArray &infoHash); void readyToTransfer(); @@ -133,11 +137,6 @@ signals: void bytesReceived(qint64 size); -protected slots: - void connectToHostImplementation(const QString &hostName, - quint16 port, OpenMode openMode = ReadWrite); - void diconnectFromHostImplementation(); - protected: void timerEvent(QTimerEvent *event); diff --git a/examples/network/torrent/trackerclient.cpp b/examples/network/torrent/trackerclient.cpp index d714050fa7..fef3c7d596 100644 --- a/examples/network/torrent/trackerclient.cpp +++ b/examples/network/torrent/trackerclient.cpp @@ -97,14 +97,10 @@ void TrackerClient::timerEvent(QTimerEvent *event) void TrackerClient::fetchPeerList() { - // Prepare connection details - QString fullUrl = metaInfo.announceUrl(); - QUrl url(fullUrl); - QString passkey = "?"; - if (fullUrl.contains("?passkey")) { - passkey = metaInfo.announceUrl().mid(fullUrl.indexOf("?passkey"), -1); - passkey += '&'; - } + QUrl url(metaInfo.announceUrl()); + + // Base the query on announce url to include a passkey (if any) + QUrlQuery query(url); // Percent encode the hash QByteArray infoHash = torrentDownloader->infoHash(); @@ -115,43 +111,44 @@ void TrackerClient::fetchPeerList() } bool seeding = (torrentDownloader->state() == TorrentClient::Seeding); - QByteArray query; - query += url.path().toLatin1(); - query += passkey; - query += "info_hash=" + encodedSum; - query += "&peer_id=" + ConnectionManager::instance()->clientId(); - query += "&port=" + QByteArray::number(TorrentServer::instance()->serverPort()); - query += "&compact=1"; - query += "&uploaded=" + QByteArray::number(torrentDownloader->uploadedBytes()); + + query.addQueryItem("info_hash", encodedSum); + query.addQueryItem("peer_id", ConnectionManager::instance()->clientId()); + query.addQueryItem("port", QByteArray::number(TorrentServer::instance()->serverPort())); + query.addQueryItem("compact", "1"); + query.addQueryItem("uploaded", QByteArray::number(torrentDownloader->uploadedBytes())); if (!firstSeeding) { - query += "&downloaded=0"; - query += "&left=0"; + query.addQueryItem("downloaded", "0"); + query.addQueryItem("left", "0"); } else { - query += "&downloaded=" + QByteArray::number( - torrentDownloader->downloadedBytes()); + query.addQueryItem("downloaded", + QByteArray::number(torrentDownloader->downloadedBytes())); int left = qMax(0, metaInfo.totalSize() - torrentDownloader->downloadedBytes()); - query += "&left=" + QByteArray::number(seeding ? 0 : left); + query.addQueryItem("left", QByteArray::number(seeding ? 0 : left)); } if (seeding && firstSeeding) { - query += "&event=completed"; + query.addQueryItem("event", "completed"); firstSeeding = false; } else if (firstTrackerRequest) { firstTrackerRequest = false; - query += "&event=started"; + query.addQueryItem("event", "started"); } else if(lastTrackerRequest) { - query += "&event=stopped"; + query.addQueryItem("event", "stopped"); } if (!trackerId.isEmpty()) - query += "&trackerid=" + trackerId; + query.addQueryItem("trackerid", trackerId); + + url.setQuery(query); QNetworkRequest req(url); if (!url.userName().isEmpty()) { uname = url.userName(); pwd = url.password(); - connect(&http, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(provideAuthentication(QNetworkReply*,QAuthenticator*))); + connect(&http, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), + this, SLOT(provideAuthentication(QNetworkReply*,QAuthenticator*))); } http.get(req); } -- cgit v1.2.3