diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-23 13:17:48 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-23 13:17:48 +0000 |
| commit | 6e8074c0876fa97e1ba868e5053fc50cd8f487f5 (patch) | |
| tree | 9cc95e0d2df514dbb9280de586d0451b98a66229 /src/HandshakeExtensionMessage.cc | |
| parent | 95370fc11f82d3f351e3c4e7a5d462d360c2ac65 (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.cc | 12 |
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."); } } |
