summaryrefslogtreecommitdiff
path: root/src/HandshakeExtensionMessage.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-11-23 13:17:48 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-11-23 13:17:48 +0000
commit6e8074c0876fa97e1ba868e5053fc50cd8f487f5 (patch)
tree9cc95e0d2df514dbb9280de586d0451b98a66229 /src/HandshakeExtensionMessage.cc
parent95370fc11f82d3f351e3c4e7a5d462d360c2ac65 (diff)
2009-11-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added BitTorrent Magnet Link support. Base32 encoded link is not supported yet. Fixed typo in method name in RequestGroup. In metadataGetMode, don't show "Your share ratio was ..." message. * src/DefaultBtInteractive.cc * src/DefaultBtInteractive.h * src/DownloadHandlerFactory.cc * src/DownloadHandlerFactory.h * src/HandshakeExtensionMessage.cc * src/Makefile.am * src/Metalink2RequestGroup.cc * src/PeerInteractionCommand.cc * src/RequestGroup.cc * src/RequestGroup.h * src/UTMetadataPostDownloadHandler.cc * src/UTMetadataPostDownloadHandler.h * src/download_helper.cc * test/HandshakeExtensionMessageTest.cc * test/Makefile.am * test/UTMetadataPostDownloadHandlerTest.cc * test/UTMetadataRejectExtensionMessageTest.cc
Diffstat (limited to 'src/HandshakeExtensionMessage.cc')
-rw-r--r--src/HandshakeExtensionMessage.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/HandshakeExtensionMessage.cc b/src/HandshakeExtensionMessage.cc
index fd722e78..74c713be 100644
--- a/src/HandshakeExtensionMessage.cc
+++ b/src/HandshakeExtensionMessage.cc
@@ -110,8 +110,15 @@ void HandshakeExtensionMessage::doReceivedAction()
const std::map<std::string, uint8_t>::value_type& vt = *itr;
_peer->setExtension(vt.first, vt.second);
}
+ BDE& attrs = _dctx->getAttribute(bittorrent::BITTORRENT);
+ if(!attrs.containsKey(bittorrent::METADATA) &&
+ !_peer->getExtensionMessageID("ut_metadata")) {
+ // TODO In metadataGetMode, if peer dont' support metadata
+ // transfer, should we drop connection? There is a possibility
+ // that peer can still tell us peers using PEX.
+ throw DL_ABORT_EX("Peer doesn't support ut_metadata extension. Goodbye.");
+ }
if(_metadataSize > 0) {
- BDE& attrs = _dctx->getAttribute(bittorrent::BITTORRENT);
if(attrs.containsKey(bittorrent::METADATA_SIZE)) {
if(_metadataSize != (size_t)attrs[bittorrent::METADATA_SIZE].i()) {
throw DL_ABORT_EX("Wrong metadata_size. Which one is correct!?");
@@ -126,6 +133,9 @@ void HandshakeExtensionMessage::doReceivedAction()
_dctx->getOwnerRequestGroup()->getPieceStorage();
pieceStorage->setEndGamePieceNum(0);
}
+ } else {
+ throw DL_ABORT_EX("Peer didn't provide metadata_size."
+ " It seems that it doesn't have whole metadata.");
}
}