diff --git a/ChangeLog b/ChangeLog index a3b5574e..5c6eecc0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2009-04-25 Tatsuhiro Tsujikawa + + Removed ExtendedMessagingAware. Instead of using inheritance, + added ExtensionMessageRegistry and it is passed to + DefaultExtensionMessageFactory. + * src/DefaultBtInteractive.cc + * src/DefaultBtInteractive.h + * src/DefaultExtensionMessageFactory.cc + * src/DefaultExtensionMessageFactory.h + * src/ExtendedMessagingAware.h: Removed. + * src/ExtensionMessageFactory.h + * src/ExtensionMessageRegistry.h: Added. + * src/Makefile.am + * src/PeerInteractionCommand.cc + * test/DefaultExtensionMessageFactoryTest.cc + 2009-04-25 Tatsuhiro Tsujikawa Fixed typo in log messages diff --git a/src/DefaultBtInteractive.cc b/src/DefaultBtInteractive.cc index ef91f64b..f6fb3915 100644 --- a/src/DefaultBtInteractive.cc +++ b/src/DefaultBtInteractive.cc @@ -50,6 +50,7 @@ #include "HandshakeExtensionMessage.h" #include "UTPexExtensionMessage.h" #include "DefaultExtensionMessageFactory.h" +#include "ExtensionMessageRegistry.h" #include "DHTNode.h" #include "Peer.h" #include "Piece.h" @@ -115,7 +116,7 @@ BtMessageHandle DefaultBtInteractive::receiveHandshake(bool quickReply) { if(message->isExtendedMessagingEnabled()) { peer->setExtendedMessagingEnabled(true); if(!_utPexEnabled) { - _extensionMessageFactory->removeExtension("ut_pex"); + _extensionMessageRegistry->removeExtension("ut_pex"); } logger->info(MSG_EXTENDED_MESSAGING_ENABLED, cuid); } @@ -162,7 +163,7 @@ void DefaultBtInteractive::addHandshakeExtendedMessageToQueue() HandshakeExtensionMessageHandle m(new HandshakeExtensionMessage()); m->setClientVersion(CLIENT_ARIA2); m->setTCPPort(_btRuntime->getListenPort()); - m->setExtensions(_extensionMessageFactory->getExtensions()); + m->setExtensions(_extensionMessageRegistry->getExtensions()); SharedHandle msg = messageFactory->createBtExtendedMessage(m); dispatcher->addMessageToQueue(msg); diff --git a/src/DefaultBtInteractive.h b/src/DefaultBtInteractive.h index dd3a79bb..ee522aed 100644 --- a/src/DefaultBtInteractive.h +++ b/src/DefaultBtInteractive.h @@ -55,6 +55,7 @@ class BtMessageFactory; class BtRequestFactory; class PeerConnection; class ExtensionMessageFactory; +class ExtensionMessageRegistry; class DHTNode; class Logger; class RequestGroupMan; @@ -112,6 +113,7 @@ private: SharedHandle peerConnection; SharedHandle messageFactory; SharedHandle _extensionMessageFactory; + SharedHandle _extensionMessageRegistry; WeakHandle _localNode; @@ -203,6 +205,12 @@ public: void setExtensionMessageFactory (const SharedHandle& factory); + void setExtensionMessageRegistry + (const SharedHandle& registry) + { + _extensionMessageRegistry = registry; + } + void setKeepAliveInterval(time_t keepAliveInterval) { this->keepAliveInterval = keepAliveInterval; } diff --git a/src/DefaultExtensionMessageFactory.cc b/src/DefaultExtensionMessageFactory.cc index b8ccee7e..006540b2 100644 --- a/src/DefaultExtensionMessageFactory.cc +++ b/src/DefaultExtensionMessageFactory.cc @@ -42,16 +42,20 @@ #include "Logger.h" #include "StringFormat.h" #include "PeerStorage.h" +#include "ExtensionMessageRegistry.h" namespace aria2 { DefaultExtensionMessageFactory::DefaultExtensionMessageFactory(): _logger(LogFactory::getInstance()) {} -DefaultExtensionMessageFactory::DefaultExtensionMessageFactory(const BtContextHandle& btContext, - const PeerHandle& peer): +DefaultExtensionMessageFactory::DefaultExtensionMessageFactory +(const BtContextHandle& btContext, + const PeerHandle& peer, + const SharedHandle& registry): _btContext(btContext), _peer(peer), + _registry(registry), _logger(LogFactory::getInstance()) {} DefaultExtensionMessageFactory::~DefaultExtensionMessageFactory() {} @@ -67,7 +71,7 @@ DefaultExtensionMessageFactory::createMessage(const unsigned char* data, size_t m->setPeer(_peer); return m; } else { - std::string extensionName = getExtensionName(extensionMessageID); + std::string extensionName = _registry->getExtensionName(extensionMessageID); if(extensionName.empty()) { throw DlAbortEx (StringFormat("No extension registered for extended message ID %u", diff --git a/src/DefaultExtensionMessageFactory.h b/src/DefaultExtensionMessageFactory.h index e1cef02f..a3ffd309 100644 --- a/src/DefaultExtensionMessageFactory.h +++ b/src/DefaultExtensionMessageFactory.h @@ -43,6 +43,7 @@ class BtContext; class PeerStorage; class Peer; class Logger; +class ExtensionMessageRegistry; class DefaultExtensionMessageFactory:public ExtensionMessageFactory { private: @@ -52,13 +53,17 @@ private: SharedHandle _peer; + SharedHandle _registry; + Logger* _logger; public: DefaultExtensionMessageFactory(); - DefaultExtensionMessageFactory(const SharedHandle& btContext, - const SharedHandle& peer); + DefaultExtensionMessageFactory + (const SharedHandle& btContext, + const SharedHandle& peer, + const SharedHandle& registry); virtual ~DefaultExtensionMessageFactory(); @@ -70,6 +75,12 @@ public: void setPeerStorage(const SharedHandle& peerStorage); void setPeer(const SharedHandle& peer); + + void setExtensionMessageRegistry + (const SharedHandle& registry) + { + _registry = registry; + } }; typedef SharedHandle DefaultExtensionMessageFactoryHandle; diff --git a/src/ExtensionMessageFactory.h b/src/ExtensionMessageFactory.h index 9dd60b98..114e501b 100644 --- a/src/ExtensionMessageFactory.h +++ b/src/ExtensionMessageFactory.h @@ -35,14 +35,14 @@ #ifndef _D_EXTENSION_MESSAGE_FACTORY_H_ #define _D_EXTENSION_MESSAGE_FACTORY_H_ -#include "ExtendedMessagingAware.h" +#include "common.h" #include "SharedHandle.h" namespace aria2 { class ExtensionMessage; -class ExtensionMessageFactory:public ExtendedMessagingAware { +class ExtensionMessageFactory { public: virtual ~ExtensionMessageFactory() {} diff --git a/src/ExtendedMessagingAware.h b/src/ExtensionMessageRegistry.h similarity index 87% rename from src/ExtendedMessagingAware.h rename to src/ExtensionMessageRegistry.h index 02803eb7..d79c8e4b 100644 --- a/src/ExtendedMessagingAware.h +++ b/src/ExtensionMessageRegistry.h @@ -2,7 +2,7 @@ /* * aria2 - The high speed download utility * - * Copyright (C) 2006 Tatsuhiro Tsujikawa + * Copyright (C) 2009 Tatsuhiro Tsujikawa * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,27 +32,27 @@ * files in the program, then also delete it here. */ /* copyright --> */ -#ifndef _D_EXTENDED_MESSAGING_AWARE_H_ -#define _D_EXTENDED_MESSAGING_AWARE_H_ +#ifndef _D_EXTENSION_MESSAGE_REGISTRY_H_ +#define _D_EXTENSION_MESSAGE_REGISTRY_H_ #include "common.h" + +#include + #include "BtConstants.h" #include "A2STR.h" -#include namespace aria2 { -class ExtendedMessagingAware { +class ExtensionMessageRegistry { private: Extensions _extensions; public: - ExtendedMessagingAware() + ExtensionMessageRegistry() { _extensions["ut_pex"] = 8; } - virtual ~ExtendedMessagingAware() {} - const Extensions& getExtensions() const { return _extensions; @@ -68,10 +68,10 @@ public: } } - std::string getExtensionName(uint8_t id) const + const std::string& getExtensionName(uint8_t id) const { for(Extensions::const_iterator itr = _extensions.begin(); - itr != _extensions.end(); ++itr) { + itr != _extensions.end(); ++itr) { const Extensions::value_type& p = *itr; if(p.second == id) { return p.first; @@ -88,4 +88,4 @@ public: } // namespace aria2 -#endif // _D_EXTENDED_MESSAGING_AWARE_H_ +#endif // _D_EXTENSION_MESSAGE_REGISTRY_H_ diff --git a/src/Makefile.am b/src/Makefile.am index 23789f56..fa61578a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -326,7 +326,6 @@ SRCS += PeerMessageUtil.cc PeerMessageUtil.h\ DefaultExtensionMessageFactory.cc DefaultExtensionMessageFactory.h\ HandshakeExtensionMessage.cc HandshakeExtensionMessage.h\ UTPexExtensionMessage.cc UTPexExtensionMessage.h\ - ExtendedMessagingAware.h\ DHTNode.cc DHTNode.h\ DHTUtil.cc DHTUtil.h\ DHTBucket.cc DHTBucket.h\ @@ -410,7 +409,8 @@ SRCS += PeerMessageUtil.cc PeerMessageUtil.h\ IndexBtMessage.cc IndexBtMessage.h\ ZeroBtMessage.cc ZeroBtMessage.h\ RangeBtMessageValidator.h\ - IndexBtMessageValidator.h + IndexBtMessageValidator.h\ + ExtensionMessageRegistry.h endif # ENABLE_BITTORRENT if ENABLE_METALINK diff --git a/src/Makefile.in b/src/Makefile.in index 77c932f3..4eca3e3d 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -127,7 +127,6 @@ bin_PROGRAMS = aria2c$(EXEEXT) @ENABLE_BITTORRENT_TRUE@ DefaultExtensionMessageFactory.cc DefaultExtensionMessageFactory.h\ @ENABLE_BITTORRENT_TRUE@ HandshakeExtensionMessage.cc HandshakeExtensionMessage.h\ @ENABLE_BITTORRENT_TRUE@ UTPexExtensionMessage.cc UTPexExtensionMessage.h\ -@ENABLE_BITTORRENT_TRUE@ ExtendedMessagingAware.h\ @ENABLE_BITTORRENT_TRUE@ DHTNode.cc DHTNode.h\ @ENABLE_BITTORRENT_TRUE@ DHTUtil.cc DHTUtil.h\ @ENABLE_BITTORRENT_TRUE@ DHTBucket.cc DHTBucket.h\ @@ -211,7 +210,8 @@ bin_PROGRAMS = aria2c$(EXEEXT) @ENABLE_BITTORRENT_TRUE@ IndexBtMessage.cc IndexBtMessage.h\ @ENABLE_BITTORRENT_TRUE@ ZeroBtMessage.cc ZeroBtMessage.h\ @ENABLE_BITTORRENT_TRUE@ RangeBtMessageValidator.h\ -@ENABLE_BITTORRENT_TRUE@ IndexBtMessageValidator.h +@ENABLE_BITTORRENT_TRUE@ IndexBtMessageValidator.h\ +@ENABLE_BITTORRENT_TRUE@ ExtensionMessageRegistry.h @ENABLE_METALINK_TRUE@am__append_11 = Metalinker.cc Metalinker.h\ @ENABLE_METALINK_TRUE@ MetalinkEntry.cc MetalinkEntry.h\ @@ -475,13 +475,12 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \ ExtensionMessageFactory.h DefaultExtensionMessageFactory.cc \ DefaultExtensionMessageFactory.h HandshakeExtensionMessage.cc \ HandshakeExtensionMessage.h UTPexExtensionMessage.cc \ - UTPexExtensionMessage.h ExtendedMessagingAware.h DHTNode.cc \ - DHTNode.h DHTUtil.cc DHTUtil.h DHTBucket.cc DHTBucket.h \ - DHTRoutingTable.cc DHTRoutingTable.h DHTMessageEntry.cc \ - DHTMessageEntry.h DHTMessageDispatcher.h \ - DHTMessageDispatcherImpl.cc DHTMessageDispatcherImpl.h \ - DHTMessageReceiver.cc DHTMessageReceiver.h \ - DHTMessageTracker.cc DHTMessageTracker.h \ + UTPexExtensionMessage.h DHTNode.cc DHTNode.h DHTUtil.cc \ + DHTUtil.h DHTBucket.cc DHTBucket.h DHTRoutingTable.cc \ + DHTRoutingTable.h DHTMessageEntry.cc DHTMessageEntry.h \ + DHTMessageDispatcher.h DHTMessageDispatcherImpl.cc \ + DHTMessageDispatcherImpl.h DHTMessageReceiver.cc \ + DHTMessageReceiver.h DHTMessageTracker.cc DHTMessageTracker.h \ DHTMessageTrackerEntry.cc DHTMessageTrackerEntry.h \ DHTMessage.cc DHTMessage.h DHTConnection.h \ DHTConnectionImpl.cc DHTConnectionImpl.h DHTAbstractMessage.cc \ @@ -533,9 +532,9 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \ BtSeederStateChoke.h RangeBtMessage.cc RangeBtMessage.h \ IndexBtMessage.cc IndexBtMessage.h ZeroBtMessage.cc \ ZeroBtMessage.h RangeBtMessageValidator.h \ - IndexBtMessageValidator.h Metalinker.cc Metalinker.h \ - MetalinkEntry.cc MetalinkEntry.h MetalinkResource.cc \ - MetalinkResource.h MetalinkProcessor.h \ + IndexBtMessageValidator.h ExtensionMessageRegistry.h \ + Metalinker.cc Metalinker.h MetalinkEntry.cc MetalinkEntry.h \ + MetalinkResource.cc MetalinkResource.h MetalinkProcessor.h \ MetalinkProcessorFactory.cc MetalinkProcessorFactory.h \ MetalinkParserController.cc MetalinkParserController.h \ MetalinkParserStateMachine.cc MetalinkParserStateMachine.h \ diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index 2b6b8f65..fa65fffc 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -69,6 +69,7 @@ #include "BtProgressInfoFile.h" #include "DefaultExtensionMessageFactory.h" #include "RequestGroupMan.h" +#include "ExtensionMessageRegistry.h" namespace aria2 { @@ -102,8 +103,11 @@ PeerInteractionCommand::PeerInteractionCommand SharedHandle peerStorage = btRegistry->getPeerStorage(_btContext->getInfoHashAsString()); + SharedHandle exMsgRegistry + (new ExtensionMessageRegistry()); + SharedHandle extensionMessageFactory - (new DefaultExtensionMessageFactory(_btContext, peer)); + (new DefaultExtensionMessageFactory(_btContext, peer, exMsgRegistry)); extensionMessageFactory->setPeerStorage(peerStorage); SharedHandle factory(new DefaultBtMessageFactory()); @@ -164,6 +168,7 @@ PeerInteractionCommand::PeerInteractionCommand btInteractive->setBtRequestFactory(reqFactory); btInteractive->setPeerConnection(peerConnection); btInteractive->setExtensionMessageFactory(extensionMessageFactory); + btInteractive->setExtensionMessageRegistry(exMsgRegistry); btInteractive->setKeepAliveInterval (e->option->getAsInt(PREF_BT_KEEP_ALIVE_INTERVAL)); btInteractive->setRequestGroupMan(e->_requestGroupMan); diff --git a/test/DefaultExtensionMessageFactoryTest.cc b/test/DefaultExtensionMessageFactoryTest.cc index c95bcce7..5c56ecf8 100644 --- a/test/DefaultExtensionMessageFactoryTest.cc +++ b/test/DefaultExtensionMessageFactoryTest.cc @@ -12,6 +12,7 @@ #include "UTPexExtensionMessage.h" #include "Exception.h" #include "FileEntry.h" +#include "ExtensionMessageRegistry.h" namespace aria2 { @@ -27,6 +28,7 @@ private: SharedHandle _peerStorage; SharedHandle _peer; SharedHandle _factory; + SharedHandle _registry; public: void setUp() { @@ -41,10 +43,13 @@ public: _peer->allocateSessionResource(1024, 1024*1024); _peer->setExtension("ut_pex", 1); + _registry.reset(new ExtensionMessageRegistry()); + _factory.reset(new DefaultExtensionMessageFactory()); _factory->setBtContext(_btContext); _factory->setPeerStorage(_peerStorage); _factory->setPeer(_peer); + _factory->setExtensionMessageRegistry(_registry); } void testCreateMessage_unknown(); @@ -95,7 +100,7 @@ void DefaultExtensionMessageFactoryTest::testCreateMessage_UTPex() PeerMessageUtil::createcompact(c3, "192.168.0.2", 6882); PeerMessageUtil::createcompact(c4, "10.1.1.3",10000); - char id[1] = { _factory->getExtensionMessageID("ut_pex") }; + char id[1] = { _registry->getExtensionMessageID("ut_pex") }; std::string data = std::string(&id[0], &id[1])+"d5:added12:"+ std::string(&c1[0], &c1[6])+std::string(&c2[0], &c2[6])+ @@ -107,7 +112,7 @@ void DefaultExtensionMessageFactoryTest::testCreateMessage_UTPex() (dynamic_pointer_cast (_factory->createMessage (reinterpret_cast(data.c_str()), data.size()))); - CPPUNIT_ASSERT_EQUAL(_factory->getExtensionMessageID("ut_pex"), + CPPUNIT_ASSERT_EQUAL(_registry->getExtensionMessageID("ut_pex"), m->getExtensionMessageID()); }