summaryrefslogtreecommitdiff
path: root/src/HandshakeExtensionMessage.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-11-22 15:31:47 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-11-22 15:31:47 +0000
commitc1730aeea945f80b5bf152dc6e7b7d9a42a40b5c (patch)
tree801f8ea1893fdf0e6d3b22ba29cef3d0a2262ad9 /src/HandshakeExtensionMessage.cc
parentb563621dd13a5598cfa805290a95caec51bb7e8b (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.cc15
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);
}
}
}