summaryrefslogtreecommitdiff
path: root/src/TrackerUpdateCommand.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/TrackerUpdateCommand.cc')
-rw-r--r--src/TrackerUpdateCommand.cc34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/TrackerUpdateCommand.cc b/src/TrackerUpdateCommand.cc
index 1fdebc96..eebe71b4 100644
--- a/src/TrackerUpdateCommand.cc
+++ b/src/TrackerUpdateCommand.cc
@@ -40,7 +40,13 @@
#include "SleepCommand.h"
#include "Util.h"
-TrackerUpdateCommand::TrackerUpdateCommand(int cuid, TorrentDownloadEngine* e):Command(cuid), e(e) {
+extern PeerHandle nullPeer;
+
+TrackerUpdateCommand::TrackerUpdateCommand(int cuid,
+ TorrentDownloadEngine* e,
+ const BtContextHandle& btContext):
+ BtContextAwareCommand(cuid, btContext), e(e)
+{
logger = LogFactory::getInstance();
}
@@ -77,7 +83,7 @@ char* TrackerUpdateCommand::getTrackerResponse(size_t& trackerResponseLength) {
}
bool TrackerUpdateCommand::execute() {
- if(e->segmentMan->errors > 0 && e->torrentMan->isHalt()) {
+ if(e->segmentMan->errors > 0 && btRuntime->isHalt()) {
return true;
}
if(!e->segmentMan->finished()) {
@@ -89,19 +95,25 @@ bool TrackerUpdateCommand::execute() {
try {
trackerResponse = getTrackerResponse(trackerResponseLength);
- e->torrentMan->processAnnounceResponse(trackerResponse,
- trackerResponseLength);
- while(e->torrentMan->needMorePeerConnection()) {
- PeerHandle peer = e->torrentMan->getPeer();
- int newCuid = e->torrentMan->getNewCuid();
+ btAnnounce->processAnnounceResponse(trackerResponse,
+ trackerResponseLength);
+ while(!btRuntime->isHalt() && btRuntime->lessThanMinPeer()) {
+ PeerHandle peer = peerStorage->getUnusedPeer();
+ if(peer == nullPeer) {
+ break;
+ }
+ int newCuid = btRuntime->getNewCuid();
peer->cuid = newCuid;
PeerInitiateConnectionCommand* command =
- new PeerInitiateConnectionCommand(newCuid, peer, e);
+ new PeerInitiateConnectionCommand(newCuid,
+ peer,
+ e,
+ btContext);
e->commands.push_back(command);
logger->debug("CUID#%d - Adding new command CUID#%d", cuid, newCuid);
}
- e->torrentMan->announceSuccess();
- e->torrentMan->resetAnnounce();
+ btAnnounce->announceSuccess();
+ btAnnounce->resetAnnounce();
e->segmentMan->init();
} catch(Exception* err) {
logger->error("CUID#%d - Error occurred while processing tracker response.", cuid, err);
@@ -111,7 +123,7 @@ bool TrackerUpdateCommand::execute() {
if(trackerResponse) {
delete [] trackerResponse;
}
- if(e->torrentMan->isHalt()) {
+ if(btRuntime->isHalt()) {
return true;
} else {
return prepareForRetry();