/* */ #include "TrackerInitCommand.h" #include "Request.h" #include "InitiateConnectionCommandFactory.h" #include "TorrentMan.h" #include "Util.h" TrackerInitCommand::TrackerInitCommand(int cuid, Request* req, TorrentDownloadEngine* e):Command(cuid), req(req), e(e) {} TrackerInitCommand::~TrackerInitCommand() {} bool TrackerInitCommand::execute() { if(e->torrentMan->downloadComplete()) { if(req->getTrackerEvent() == Request::COMPLETED) { req->setTrackerEvent(Request::AFTER_COMPLETED); } else { if(req->getTrackerEvent() == Request::STARTED) { req->setTrackerEvent(Request::AFTER_COMPLETED); } else if(req->getTrackerEvent() != Request::AFTER_COMPLETED) { req->setTrackerEvent(Request::COMPLETED); } } } string event; switch(req->getTrackerEvent()) { case Request::STARTED: event = "started"; break; case Request::STOPPED: event = "stopped"; break; case Request::COMPLETED: event = "completed"; break; } string url = e->torrentMan->announce+"?"+ "info_hash="+Util::urlencode(e->torrentMan->getInfoHash(), 20)+"&"+ "peer_id="+e->torrentMan->peerId+"&"+ "port="+Util::itos(e->torrentMan->getPort())+"&"+ "uploaded="+Util::llitos(e->torrentMan->getUploadedSize())+"&"+ "downloaded="+Util::llitos(e->torrentMan->getDownloadedSize())+"&"+ "left="+(e->torrentMan->totalSize-e->torrentMan->getDownloadedSize() <= 0 ? "0" : Util::llitos(e->torrentMan->totalSize-e->torrentMan->getDownloadedSize()))+"&"+ "compact=1"; if(!event.empty()) { url += string("&")+"event="+event; } if(!e->torrentMan->trackerId.empty()) { url += string("&")+"trackerid="+e->torrentMan->trackerId; } req->setUrl(url); Command* command = InitiateConnectionCommandFactory::createInitiateConnectionCommand(cuid, req, e); e->commands.push(command); return true; }