mirror of https://github.com/aria2/aria2
2008-05-14 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Made string literal for tracker response static const std::string * src/BtAnnounce.cc * src/BtAnnounce.h * src/DefaultBtAnnounce.ccpull/1/head
parent
412429dfe6
commit
cb795bc989
|
@ -1,3 +1,10 @@
|
||||||
|
2008-05-14 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
Made string literal for tracker response static const std::string
|
||||||
|
* src/BtAnnounce.cc
|
||||||
|
* src/BtAnnounce.h
|
||||||
|
* src/DefaultBtAnnounce.cc
|
||||||
|
|
||||||
2008-05-14 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2008-05-14 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
Use DHTMessage::T instead of "t".
|
Use DHTMessage::T instead of "t".
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
/* <!-- copyright */
|
||||||
|
/*
|
||||||
|
* aria2 - The high speed download utility
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Tatsuhiro Tsujikawa
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give
|
||||||
|
* permission to link the code of portions of this program with the
|
||||||
|
* OpenSSL library under certain conditions as described in each
|
||||||
|
* individual source file, and distribute linked combinations
|
||||||
|
* including the two.
|
||||||
|
* You must obey the GNU General Public License in all respects
|
||||||
|
* for all of the code used other than OpenSSL. If you modify
|
||||||
|
* file(s) with this exception, you may extend this exception to your
|
||||||
|
* version of the file(s), but you are not obligated to do so. If you
|
||||||
|
* do not wish to do so, delete this exception statement from your
|
||||||
|
* version. If you delete this exception statement from all source
|
||||||
|
* files in the program, then also delete it here.
|
||||||
|
*/
|
||||||
|
/* copyright --> */
|
||||||
|
#include "BtAnnounce.h"
|
||||||
|
|
||||||
|
namespace aria2 {
|
||||||
|
|
||||||
|
const std::string BtAnnounce::FAILURE_REASON("failure reason");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::WARNING_MESSAGE("warning message");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::TRACKER_ID("tracker id");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::INTERVAL("interval");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::MIN_INTERVAL("min interval");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::COMPLETE("complete");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::INCOMPLETE("incomplete");
|
||||||
|
|
||||||
|
const std::string BtAnnounce::PEERS("peers");
|
||||||
|
|
||||||
|
} // namespace aria2
|
|
@ -103,6 +103,22 @@ public:
|
||||||
* Shuffles the URLs in each announce tier.
|
* Shuffles the URLs in each announce tier.
|
||||||
*/
|
*/
|
||||||
virtual void shuffleAnnounce() = 0;
|
virtual void shuffleAnnounce() = 0;
|
||||||
|
|
||||||
|
static const std::string FAILURE_REASON;
|
||||||
|
|
||||||
|
static const std::string WARNING_MESSAGE;
|
||||||
|
|
||||||
|
static const std::string TRACKER_ID;
|
||||||
|
|
||||||
|
static const std::string INTERVAL;
|
||||||
|
|
||||||
|
static const std::string MIN_INTERVAL;
|
||||||
|
|
||||||
|
static const std::string COMPLETE;
|
||||||
|
|
||||||
|
static const std::string INCOMPLETE;
|
||||||
|
|
||||||
|
static const std::string PEERS;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef SharedHandle<BtAnnounce> BtAnnounceHandle;
|
typedef SharedHandle<BtAnnounce> BtAnnounceHandle;
|
||||||
|
|
|
@ -140,26 +140,26 @@ std::string DefaultBtAnnounce::getAnnounceUrl() {
|
||||||
if(left < 0) {
|
if(left < 0) {
|
||||||
left = 0;
|
left = 0;
|
||||||
}
|
}
|
||||||
std::string url = announceList.getAnnounce()+"?"+
|
std::string url = announceList.getAnnounce()+
|
||||||
"info_hash="+Util::torrentUrlencode(btContext->getInfoHash(),
|
"?info_hash="+Util::torrentUrlencode(btContext->getInfoHash(),
|
||||||
btContext->getInfoHashLength())+"&"+
|
btContext->getInfoHashLength())+
|
||||||
"peer_id="+Util::torrentUrlencode(btContext->getPeerId(), 20)+"&"+
|
"&peer_id="+Util::torrentUrlencode(btContext->getPeerId(), 20)+
|
||||||
"uploaded="+Util::uitos(stat.getSessionUploadLength())+"&"+
|
"&uploaded="+Util::uitos(stat.getSessionUploadLength())+
|
||||||
"downloaded="+Util::uitos(stat.getSessionDownloadLength())+"&"+
|
"&downloaded="+Util::uitos(stat.getSessionDownloadLength())+
|
||||||
"left="+Util::uitos(left)+"&"+
|
"&left="+Util::uitos(left)+
|
||||||
"compact=1"+"&"+
|
"&compact=1"+
|
||||||
"key="+key+"&"+
|
"&key="+key+
|
||||||
"numwant="+Util::uitos(numWant)+"&"+
|
"&numwant="+Util::uitos(numWant)+
|
||||||
"no_peer_id=1";
|
"&no_peer_id=1";
|
||||||
if(btRuntime->getListenPort() > 0) {
|
if(btRuntime->getListenPort() > 0) {
|
||||||
url += std::string("&")+"port="+Util::uitos(btRuntime->getListenPort());
|
url += "&port="+Util::uitos(btRuntime->getListenPort());
|
||||||
}
|
}
|
||||||
std::string event = announceList.getEventString();
|
std::string event = announceList.getEventString();
|
||||||
if(!event.empty()) {
|
if(!event.empty()) {
|
||||||
url += std::string("&")+"event="+event;
|
url += "&event="+event;
|
||||||
}
|
}
|
||||||
if(!trackerId.empty()) {
|
if(!trackerId.empty()) {
|
||||||
url += std::string("&")+"trackerid="+Util::torrentUrlencode(trackerId);
|
url += "&trackerid="+Util::torrentUrlencode(trackerId);
|
||||||
}
|
}
|
||||||
if(option->getAsBool(PREF_BT_REQUIRE_CRYPTO)) {
|
if(option->getAsBool(PREF_BT_REQUIRE_CRYPTO)) {
|
||||||
url += "&requirecrypto=1";
|
url += "&requirecrypto=1";
|
||||||
|
@ -202,23 +202,27 @@ DefaultBtAnnounce::processAnnounceResponse(const unsigned char* trackerResponse,
|
||||||
if(!response) {
|
if(!response) {
|
||||||
throw DlAbortEx(MSG_NULL_TRACKER_RESPONSE);
|
throw DlAbortEx(MSG_NULL_TRACKER_RESPONSE);
|
||||||
}
|
}
|
||||||
const Data* failureReasonData = dynamic_cast<const Data*>(response->get("failure reason"));
|
const Data* failureReasonData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::FAILURE_REASON));
|
||||||
if(failureReasonData) {
|
if(failureReasonData) {
|
||||||
throw DlAbortEx
|
throw DlAbortEx
|
||||||
(StringFormat(EX_TRACKER_FAILURE,
|
(StringFormat(EX_TRACKER_FAILURE,
|
||||||
failureReasonData->toString().c_str()).str());
|
failureReasonData->toString().c_str()).str());
|
||||||
}
|
}
|
||||||
const Data* warningMessageData = dynamic_cast<const Data*>(response->get("warning message"));
|
const Data* warningMessageData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::WARNING_MESSAGE));
|
||||||
if(warningMessageData) {
|
if(warningMessageData) {
|
||||||
logger->warn(MSG_TRACKER_WARNING_MESSAGE,
|
logger->warn(MSG_TRACKER_WARNING_MESSAGE,
|
||||||
warningMessageData->toString().c_str());
|
warningMessageData->toString().c_str());
|
||||||
}
|
}
|
||||||
const Data* trackerIdData = dynamic_cast<const Data*>(response->get("tracker id"));
|
const Data* trackerIdData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::TRACKER_ID));
|
||||||
if(trackerIdData) {
|
if(trackerIdData) {
|
||||||
trackerId = trackerIdData->toString();
|
trackerId = trackerIdData->toString();
|
||||||
logger->debug("Tracker ID:%s", trackerId.c_str());
|
logger->debug("Tracker ID:%s", trackerId.c_str());
|
||||||
}
|
}
|
||||||
const Data* intervalData = dynamic_cast<const Data*>(response->get("interval"));
|
const Data* intervalData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::INTERVAL));
|
||||||
if(intervalData) {
|
if(intervalData) {
|
||||||
time_t t = intervalData->toInt();
|
time_t t = intervalData->toInt();
|
||||||
if(t > 0) {
|
if(t > 0) {
|
||||||
|
@ -226,7 +230,8 @@ DefaultBtAnnounce::processAnnounceResponse(const unsigned char* trackerResponse,
|
||||||
logger->debug("Interval:%d", interval);
|
logger->debug("Interval:%d", interval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const Data* minIntervalData = dynamic_cast<const Data*>(response->get("min interval"));
|
const Data* minIntervalData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::MIN_INTERVAL));
|
||||||
if(minIntervalData) {
|
if(minIntervalData) {
|
||||||
time_t t = minIntervalData->toInt();
|
time_t t = minIntervalData->toInt();
|
||||||
if(t > 0) {
|
if(t > 0) {
|
||||||
|
@ -237,17 +242,19 @@ DefaultBtAnnounce::processAnnounceResponse(const unsigned char* trackerResponse,
|
||||||
if(minInterval > interval) {
|
if(minInterval > interval) {
|
||||||
minInterval = interval;
|
minInterval = interval;
|
||||||
}
|
}
|
||||||
const Data* completeData = dynamic_cast<const Data*>(response->get("complete"));
|
const Data* completeData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::COMPLETE));
|
||||||
if(completeData) {
|
if(completeData) {
|
||||||
complete = completeData->toInt();
|
complete = completeData->toInt();
|
||||||
logger->debug("Complete:%d", complete);
|
logger->debug("Complete:%d", complete);
|
||||||
}
|
}
|
||||||
const Data* incompleteData = dynamic_cast<const Data*>(response->get("incomplete"));
|
const Data* incompleteData =
|
||||||
|
dynamic_cast<const Data*>(response->get(BtAnnounce::INCOMPLETE));
|
||||||
if(incompleteData) {
|
if(incompleteData) {
|
||||||
incomplete = incompleteData->toInt();
|
incomplete = incompleteData->toInt();
|
||||||
logger->debug("Incomplete:%d", incomplete);
|
logger->debug("Incomplete:%d", incomplete);
|
||||||
}
|
}
|
||||||
const MetaEntry* peersEntry = response->get("peers");
|
const MetaEntry* peersEntry = response->get(BtAnnounce::PEERS);
|
||||||
if(peersEntry &&
|
if(peersEntry &&
|
||||||
!btRuntime->isHalt() &&
|
!btRuntime->isHalt() &&
|
||||||
btRuntime->lessThanMinPeer()) {
|
btRuntime->lessThanMinPeer()) {
|
||||||
|
|
|
@ -236,7 +236,7 @@ SRCS += MetaEntry.h\
|
||||||
DefaultBtContext.cc DefaultBtContext.h\
|
DefaultBtContext.cc DefaultBtContext.h\
|
||||||
PeerStorage.h\
|
PeerStorage.h\
|
||||||
DefaultPeerStorage.cc DefaultPeerStorage.h\
|
DefaultPeerStorage.cc DefaultPeerStorage.h\
|
||||||
BtAnnounce.h\
|
BtAnnounce.cc BtAnnounce.h\
|
||||||
DefaultBtAnnounce.cc DefaultBtAnnounce.h\
|
DefaultBtAnnounce.cc DefaultBtAnnounce.h\
|
||||||
BtRuntime.h\
|
BtRuntime.h\
|
||||||
BtContextAwareCommand.cc BtContextAwareCommand.h\
|
BtContextAwareCommand.cc BtContextAwareCommand.h\
|
||||||
|
|
|
@ -80,7 +80,7 @@ bin_PROGRAMS = aria2c$(EXEEXT)
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultBtContext.cc DefaultBtContext.h\
|
@ENABLE_BITTORRENT_TRUE@ DefaultBtContext.cc DefaultBtContext.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ PeerStorage.h\
|
@ENABLE_BITTORRENT_TRUE@ PeerStorage.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorage.cc DefaultPeerStorage.h\
|
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorage.cc DefaultPeerStorage.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ BtAnnounce.h\
|
@ENABLE_BITTORRENT_TRUE@ BtAnnounce.cc BtAnnounce.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultBtAnnounce.cc DefaultBtAnnounce.h\
|
@ENABLE_BITTORRENT_TRUE@ DefaultBtAnnounce.cc DefaultBtAnnounce.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ BtRuntime.h\
|
@ENABLE_BITTORRENT_TRUE@ BtRuntime.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ BtContextAwareCommand.cc BtContextAwareCommand.h\
|
@ENABLE_BITTORRENT_TRUE@ BtContextAwareCommand.cc BtContextAwareCommand.h\
|
||||||
|
@ -435,15 +435,16 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
||||||
DelegatingPeerListProcessor.h AnnounceTier.h AnnounceList.h \
|
DelegatingPeerListProcessor.h AnnounceTier.h AnnounceList.h \
|
||||||
AnnounceList.cc BtContext.h DefaultBtContext.cc \
|
AnnounceList.cc BtContext.h DefaultBtContext.cc \
|
||||||
DefaultBtContext.h PeerStorage.h DefaultPeerStorage.cc \
|
DefaultBtContext.h PeerStorage.h DefaultPeerStorage.cc \
|
||||||
DefaultPeerStorage.h BtAnnounce.h DefaultBtAnnounce.cc \
|
DefaultPeerStorage.h BtAnnounce.cc BtAnnounce.h \
|
||||||
DefaultBtAnnounce.h BtRuntime.h BtContextAwareCommand.cc \
|
DefaultBtAnnounce.cc DefaultBtAnnounce.h BtRuntime.h \
|
||||||
BtContextAwareCommand.h BtMessage.h AbstractBtMessage.cc \
|
BtContextAwareCommand.cc BtContextAwareCommand.h BtMessage.h \
|
||||||
AbstractBtMessage.h SimpleBtMessage.cc SimpleBtMessage.h \
|
AbstractBtMessage.cc AbstractBtMessage.h SimpleBtMessage.cc \
|
||||||
BtAllowedFastMessage.cc BtAllowedFastMessage.h \
|
SimpleBtMessage.h BtAllowedFastMessage.cc \
|
||||||
BtBitfieldMessage.cc BtBitfieldMessage.h BtCancelMessage.cc \
|
BtAllowedFastMessage.h BtBitfieldMessage.cc \
|
||||||
BtCancelMessage.h BtChokeMessage.cc BtChokeMessage.h \
|
BtBitfieldMessage.h BtCancelMessage.cc BtCancelMessage.h \
|
||||||
BtHaveAllMessage.cc BtHaveAllMessage.h BtHaveMessage.cc \
|
BtChokeMessage.cc BtChokeMessage.h BtHaveAllMessage.cc \
|
||||||
BtHaveMessage.h BtHaveNoneMessage.cc BtHaveNoneMessage.h \
|
BtHaveAllMessage.h BtHaveMessage.cc BtHaveMessage.h \
|
||||||
|
BtHaveNoneMessage.cc BtHaveNoneMessage.h \
|
||||||
BtInterestedMessage.cc BtInterestedMessage.h \
|
BtInterestedMessage.cc BtInterestedMessage.h \
|
||||||
BtKeepAliveMessage.cc BtKeepAliveMessage.h \
|
BtKeepAliveMessage.cc BtKeepAliveMessage.h \
|
||||||
BtNotInterestedMessage.cc BtNotInterestedMessage.h \
|
BtNotInterestedMessage.cc BtNotInterestedMessage.h \
|
||||||
|
@ -591,6 +592,7 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
||||||
@ENABLE_BITTORRENT_TRUE@ AnnounceList.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ AnnounceList.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultBtContext.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DefaultBtContext.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorage.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorage.$(OBJEXT) \
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ BtAnnounce.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultBtAnnounce.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DefaultBtAnnounce.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ BtContextAwareCommand.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ BtContextAwareCommand.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ AbstractBtMessage.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ AbstractBtMessage.$(OBJEXT) \
|
||||||
|
@ -1245,6 +1247,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BitfieldMan.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BitfieldMan.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BitfieldManFactory.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BitfieldManFactory.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtAllowedFastMessage.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtAllowedFastMessage.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtAnnounce.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtBitfieldMessage.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtBitfieldMessage.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCancelMessage.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCancelMessage.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCheckIntegrityEntry.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCheckIntegrityEntry.Po@am__quote@
|
||||||
|
|
Loading…
Reference in New Issue