浏览代码

2009-04-25 Tatsuhiro Tsujikawa <[email protected]>

	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
Tatsuhiro Tsujikawa 16 年之前
父节点
当前提交
e385c68f52

+ 16 - 0
ChangeLog

@@ -1,3 +1,19 @@
+2009-04-25  Tatsuhiro Tsujikawa  <[email protected]>
+
+	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  <[email protected]>
 
 	Fixed typo in log messages

+ 3 - 2
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<BtMessage> msg = messageFactory->createBtExtendedMessage(m);
   dispatcher->addMessageToQueue(msg);

+ 8 - 0
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> peerConnection;
   SharedHandle<BtMessageFactory> messageFactory;
   SharedHandle<ExtensionMessageFactory> _extensionMessageFactory;
+  SharedHandle<ExtensionMessageRegistry> _extensionMessageRegistry;
 
   WeakHandle<DHTNode> _localNode;
 
@@ -203,6 +205,12 @@ public:
   void setExtensionMessageFactory
   (const SharedHandle<ExtensionMessageFactory>& factory);
 
+  void setExtensionMessageRegistry
+  (const SharedHandle<ExtensionMessageRegistry>& registry)
+  {
+    _extensionMessageRegistry = registry;
+  }
+
   void setKeepAliveInterval(time_t keepAliveInterval) {
     this->keepAliveInterval = keepAliveInterval;
   }

+ 7 - 3
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<ExtensionMessageRegistry>& 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",

+ 13 - 2
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> _peer;
 
+  SharedHandle<ExtensionMessageRegistry> _registry;
+
   Logger* _logger;
 
 public:
   DefaultExtensionMessageFactory();
 
-  DefaultExtensionMessageFactory(const SharedHandle<BtContext>& btContext,
-				 const SharedHandle<Peer>& peer);
+  DefaultExtensionMessageFactory
+  (const SharedHandle<BtContext>& btContext,
+   const SharedHandle<Peer>& peer,
+   const SharedHandle<ExtensionMessageRegistry>& registry);
 
   virtual ~DefaultExtensionMessageFactory();
 
@@ -70,6 +75,12 @@ public:
   void setPeerStorage(const SharedHandle<PeerStorage>& peerStorage);
 
   void setPeer(const SharedHandle<Peer>& peer);
+
+  void setExtensionMessageRegistry
+  (const SharedHandle<ExtensionMessageRegistry>& registry)
+  {
+    _registry = registry;
+  }
 };
 
 typedef SharedHandle<DefaultExtensionMessageFactory> DefaultExtensionMessageFactoryHandle;

+ 2 - 2
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() {}
 

+ 11 - 11
src/ExtendedMessagingAware.h → 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 <string>
+
 #include "BtConstants.h"
 #include "A2STR.h"
-#include <string>
 
 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_

+ 2 - 2
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

+ 11 - 12
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 \

+ 6 - 1
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> peerStorage =
     btRegistry->getPeerStorage(_btContext->getInfoHashAsString());
 
+  SharedHandle<ExtensionMessageRegistry> exMsgRegistry
+    (new ExtensionMessageRegistry());
+
   SharedHandle<DefaultExtensionMessageFactory> extensionMessageFactory
-    (new DefaultExtensionMessageFactory(_btContext, peer));
+    (new DefaultExtensionMessageFactory(_btContext, peer, exMsgRegistry));
   extensionMessageFactory->setPeerStorage(peerStorage);
 
   SharedHandle<DefaultBtMessageFactory> 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);

+ 7 - 2
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<MockPeerStorage> _peerStorage;
   SharedHandle<Peer> _peer;
   SharedHandle<DefaultExtensionMessageFactory> _factory;
+  SharedHandle<ExtensionMessageRegistry> _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<UTPexExtensionMessage>
      (_factory->createMessage
       (reinterpret_cast<const unsigned char*>(data.c_str()), data.size())));
-  CPPUNIT_ASSERT_EQUAL(_factory->getExtensionMessageID("ut_pex"),
+  CPPUNIT_ASSERT_EQUAL(_registry->getExtensionMessageID("ut_pex"),
 		       m->getExtensionMessageID());
 }