2009-04-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

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
pull/1/head
Tatsuhiro Tsujikawa 2009-04-25 10:48:00 +00:00
parent 3908d86213
commit e385c68f52
11 changed files with 86 additions and 37 deletions

View File

@ -1,3 +1,19 @@
2009-04-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
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 <t-tujikawa@users.sourceforge.net>
Fixed typo in log messages

View File

@ -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);

View File

@ -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;
}

View File

@ -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",

View File

@ -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;

View File

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

View File

@ -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_

View File

@ -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

View File

@ -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 \

View File

@ -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);

View File

@ -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());
}