diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-22 15:31:47 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-22 15:31:47 +0000 |
| commit | c1730aeea945f80b5bf152dc6e7b7d9a42a40b5c (patch) | |
| tree | 801f8ea1893fdf0e6d3b22ba29cef3d0a2262ad9 /src/HandshakeExtensionMessage.cc | |
| parent | b563621dd13a5598cfa805290a95caec51bb7e8b (diff) | |
2009-11-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed ut_metadata data handling. Implemented
UTMetadataDataExtensionMessage::doReceivedAction(). Initialize
PeerStorage in HandshakeExtensionMessage::doReceivedAction() when
metadata_size is received.
* src/DefaultExtensionMessageFactory.cc
* src/DefaultExtensionMessageFactory.h
* src/HandshakeExtensionMessage.cc
* src/HandshakeExtensionMessage.h
* src/UTMetadataDataExtensionMessage.cc
* src/UTMetadataDataExtensionMessage.h
* src/UTMetadataRequestExtensionMessage.cc
* src/UTMetadataRequestFactory.cc
* src/UTMetadataRequestFactory.h
* src/UTMetadataRequestTracker.cc
* src/UTMetadataRequestTracker.h
* test/DefaultExtensionMessageFactoryTest.cc
* test/HandshakeExtensionMessageTest.cc
* test/MockBtMessage.h
* test/UTMetadataDataExtensionMessageTest.cc
* test/UTMetadataRequestExtensionMessageTest.cc
* test/UTMetadataRequestFactoryTest.cc
* test/UTMetadataRequestTrackerTest.cc
* test/extension_message_test_helper.h
Diffstat (limited to 'src/HandshakeExtensionMessage.cc')
| -rw-r--r-- | src/HandshakeExtensionMessage.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/HandshakeExtensionMessage.cc b/src/HandshakeExtensionMessage.cc index a0c04c3a..fd722e78 100644 --- a/src/HandshakeExtensionMessage.cc +++ b/src/HandshakeExtensionMessage.cc @@ -43,6 +43,8 @@ #include "bencode.h" #include "DownloadContext.h" #include "bittorrent_helper.h" +#include "RequestGroup.h" +#include "PieceStorage.h" namespace aria2 { @@ -110,8 +112,19 @@ void HandshakeExtensionMessage::doReceivedAction() } if(_metadataSize > 0) { BDE& attrs = _dctx->getAttribute(bittorrent::BITTORRENT); - if(!attrs.containsKey(bittorrent::METADATA_SIZE)) { + 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!?"); + } + } else { attrs[bittorrent::METADATA_SIZE] = _metadataSize; + _dctx->getFirstFileEntry()->setLength(_metadataSize); + _dctx->markTotalLengthIsKnown(); + _dctx->getOwnerRequestGroup()->initPieceStorage(); + + SharedHandle<PieceStorage> pieceStorage = + _dctx->getOwnerRequestGroup()->getPieceStorage(); + pieceStorage->setEndGamePieceNum(0); } } } |
