diff options
Diffstat (limited to 'examples/network/torrent/trackerclient.cpp')
-rw-r--r-- | examples/network/torrent/trackerclient.cpp | 49 |
1 files changed, 23 insertions, 26 deletions
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<int>(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); } |