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/DefaultExtensionMessageFactory.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/DefaultExtensionMessageFactory.cc')
| -rw-r--r-- | src/DefaultExtensionMessageFactory.cc | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/src/DefaultExtensionMessageFactory.cc b/src/DefaultExtensionMessageFactory.cc index 4dad47e4..87261d5d 100644 --- a/src/DefaultExtensionMessageFactory.cc +++ b/src/DefaultExtensionMessageFactory.cc @@ -50,6 +50,10 @@ #include "UTMetadataRejectExtensionMessage.h" #include "message.h" #include "bencode.h" +#include "PieceStorage.h" +#include "UTMetadataRequestTracker.h" +#include "BtRuntime.h" +#include "RequestGroup.h" namespace aria2 { @@ -93,16 +97,8 @@ DefaultExtensionMessageFactory::createMessage(const unsigned char* data, size_t throw DL_ABORT_EX(StringFormat(MSG_TOO_SMALL_PAYLOAD_SIZE, "ut_metadata", length).str()); } - std::string listdata; - listdata += 'l'; - listdata += std::string(&data[1], &data[length]); - listdata += 'e'; - - const BDE& list = bencode::decode(listdata); - if(!list.isList() || list.empty()) { - throw DL_ABORT_EX("Bad ut_metadata"); - } - const BDE& dict = list[0]; + size_t end; + BDE dict = bencode::decode(data+1, length-1, end); if(!dict.isDict()) { throw DL_ABORT_EX("Bad ut_metadata: dictionary not found"); } @@ -126,13 +122,9 @@ DefaultExtensionMessageFactory::createMessage(const unsigned char* data, size_t return m; } case 1: { - if(list.size() != 2) { + if(end == length) { throw DL_ABORT_EX("Bad ut_metadata data: data not found"); } - const BDE& pieceData = list[1]; - if(!pieceData.isString()) { - throw DL_ABORT_EX("Bad ut_metadata data: data is not string"); - } const BDE& totalSize = dict["total_size"]; if(!totalSize.isInteger()) { throw DL_ABORT_EX("Bad ut_metadata data: total_size not found"); @@ -141,16 +133,18 @@ DefaultExtensionMessageFactory::createMessage(const unsigned char* data, size_t (new UTMetadataDataExtensionMessage(extensionMessageID)); m->setIndex(index.i()); m->setTotalSize(totalSize.i()); - m->setData(pieceData.s()); - // set tracker - // set piecestorage + m->setData(std::string(&data[1+end], &data[length])); + m->setUTMetadataRequestTracker(_tracker); + m->setPieceStorage(_dctx->getOwnerRequestGroup()->getPieceStorage()); + m->setDownloadContext(_dctx); + m->setBtRuntime(_btRuntime); return m; } case 2: { SharedHandle<UTMetadataRejectExtensionMessage> m (new UTMetadataRejectExtensionMessage(extensionMessageID)); m->setIndex(index.i()); - // set tracker if disconnecing peer on receive. + // No need to inject tracker because peer will be disconnected. return m; } default: |
