summaryrefslogtreecommitdiff
path: root/src/PeerInteractionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-07-06 21:12:55 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-07-06 22:03:37 +0900
commit3f5f1e26d9932a00caffb4866e8a277b7477fa47 (patch)
tree3c385ccb72be03e3326a2da682f555ae7954fc8c /src/PeerInteractionCommand.cc
parent3c66c18489bb7e4f828fc5107299174cbc4ee4e5 (diff)
Refactor PeerInterationCommand ctor
Diffstat (limited to 'src/PeerInteractionCommand.cc')
-rw-r--r--src/PeerInteractionCommand.cc215
1 files changed, 104 insertions, 111 deletions
diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc
index 6ef89187..8cc9635e 100644
--- a/src/PeerInteractionCommand.cc
+++ b/src/PeerInteractionCommand.cc
@@ -90,13 +90,13 @@ PeerInteractionCommand::PeerInteractionCommand
const std::shared_ptr<PeerStorage>& peerStorage,
const std::shared_ptr<SocketCore>& s,
Seq sequence,
- const std::shared_ptr<PeerConnection>& passedPeerConnection)
- :PeerAbstractCommand(cuid, p, e, s),
- requestGroup_(requestGroup),
- btRuntime_(btRuntime),
- pieceStorage_(pieceStorage),
- peerStorage_(peerStorage),
- sequence_(sequence)
+ std::unique_ptr<PeerConnection> peerConnection)
+ : PeerAbstractCommand{cuid, p, e, s},
+ requestGroup_{requestGroup},
+ btRuntime_{btRuntime},
+ pieceStorage_{pieceStorage},
+ peerStorage_{peerStorage},
+ sequence_{sequence}
{
// TODO move following bunch of processing to separate method, like init()
if(sequence_ == INITIATOR_SEND_HANDSHAKE) {
@@ -119,59 +119,47 @@ PeerInteractionCommand::PeerInteractionCommand
bittorrent::getTorrentAttrs(requestGroup_->getDownloadContext());
bool metadataGetMode = torrentAttrs->metadata.empty();
- std::shared_ptr<ExtensionMessageRegistry> exMsgRegistry
- (new ExtensionMessageRegistry());
+ auto exMsgRegistry = make_unique<ExtensionMessageRegistry>();
exMsgRegistry->setExtensionMessageID(ExtensionMessageRegistry::UT_PEX, 8);
// http://www.bittorrent.org/beps/bep_0009.html
exMsgRegistry->setExtensionMessageID(ExtensionMessageRegistry::UT_METADATA,
9);
- std::shared_ptr<UTMetadataRequestFactory> utMetadataRequestFactory;
- std::shared_ptr<UTMetadataRequestTracker> utMetadataRequestTracker;
- if(metadataGetMode) {
- utMetadataRequestFactory.reset(new UTMetadataRequestFactory());
- utMetadataRequestTracker.reset(new UTMetadataRequestTracker());
- }
-
auto extensionMessageFactory =
make_unique<DefaultExtensionMessageFactory>(getPeer(),
exMsgRegistry.get());
+ auto extensionMessageFactoryPtr = extensionMessageFactory.get();
extensionMessageFactory->setPeerStorage(peerStorage.get());
extensionMessageFactory->setDownloadContext
(requestGroup_->getDownloadContext().get());
- extensionMessageFactory->setUTMetadataRequestTracker
- (utMetadataRequestTracker.get());
// PieceStorage will be set later.
- DefaultBtMessageFactory* factoryPtr(new DefaultBtMessageFactory());
- factoryPtr->setCuid(cuid);
- factoryPtr->setDownloadContext(requestGroup_->getDownloadContext().get());
- factoryPtr->setPieceStorage(pieceStorage.get());
- factoryPtr->setPeerStorage(peerStorage.get());
- factoryPtr->setExtensionMessageFactory(extensionMessageFactory.get());
- factoryPtr->setPeer(getPeer());
+ auto factory = make_unique<DefaultBtMessageFactory>();
+ auto factoryPtr = factory.get();
+ factory->setCuid(cuid);
+ factory->setDownloadContext(requestGroup_->getDownloadContext().get());
+ factory->setPieceStorage(pieceStorage.get());
+ factory->setPeerStorage(peerStorage.get());
+ factory->setExtensionMessageFactory(extensionMessageFactory.get());
+ factory->setPeer(getPeer());
if(family == AF_INET) {
- factoryPtr->setLocalNode(DHTRegistry::getData().localNode.get());
- factoryPtr->setRoutingTable(DHTRegistry::getData().routingTable.get());
- factoryPtr->setTaskQueue(DHTRegistry::getData().taskQueue.get());
- factoryPtr->setTaskFactory(DHTRegistry::getData().taskFactory.get());
+ factory->setLocalNode(DHTRegistry::getData().localNode.get());
+ factory->setRoutingTable(DHTRegistry::getData().routingTable.get());
+ factory->setTaskQueue(DHTRegistry::getData().taskQueue.get());
+ factory->setTaskFactory(DHTRegistry::getData().taskFactory.get());
} else {
- factoryPtr->setLocalNode(DHTRegistry::getData6().localNode.get());
- factoryPtr->setRoutingTable(DHTRegistry::getData6().routingTable.get());
- factoryPtr->setTaskQueue(DHTRegistry::getData6().taskQueue.get());
- factoryPtr->setTaskFactory(DHTRegistry::getData6().taskFactory.get());
+ factory->setLocalNode(DHTRegistry::getData6().localNode.get());
+ factory->setRoutingTable(DHTRegistry::getData6().routingTable.get());
+ factory->setTaskQueue(DHTRegistry::getData6().taskQueue.get());
+ factory->setTaskFactory(DHTRegistry::getData6().taskFactory.get());
}
if(metadataGetMode) {
- factoryPtr->enableMetadataGetMode();
+ factory->enableMetadataGetMode();
}
- std::shared_ptr<BtMessageFactory> factory(factoryPtr);
-
- std::shared_ptr<PeerConnection> peerConnection;
- if(!passedPeerConnection) {
- peerConnection.reset(new PeerConnection(cuid, getPeer(), getSocket()));
+ if(!peerConnection) {
+ peerConnection = make_unique<PeerConnection>(cuid, getPeer(), getSocket());
} else {
- peerConnection = passedPeerConnection;
if(sequence_ == RECEIVER_WAIT_HANDSHAKE &&
peerConnection->getBufferLength() > 0) {
setStatus(Command::STATUS_ONESHOT_REALTIME);
@@ -187,106 +175,111 @@ PeerInteractionCommand::PeerInteractionCommand
1+(requestGroup_->getDownloadContext()->getNumPieces()+7)/8;
peerConnection->reserveBuffer(bitfieldPayloadSize);
- DefaultBtMessageDispatcher* dispatcherPtr(new DefaultBtMessageDispatcher());
- dispatcherPtr->setCuid(cuid);
- dispatcherPtr->setPeer(getPeer());
- dispatcherPtr->setDownloadContext(requestGroup_->getDownloadContext().get());
- dispatcherPtr->setPieceStorage(pieceStorage.get());
- dispatcherPtr->setPeerStorage(peerStorage.get());
- dispatcherPtr->setRequestTimeout(getOption()->
+ auto dispatcher = make_unique<DefaultBtMessageDispatcher>();
+ auto dispatcherPtr = dispatcher.get();
+ dispatcher->setCuid(cuid);
+ dispatcher->setPeer(getPeer());
+ dispatcher->setDownloadContext(requestGroup_->getDownloadContext().get());
+ dispatcher->setPieceStorage(pieceStorage.get());
+ dispatcher->setPeerStorage(peerStorage.get());
+ dispatcher->setRequestTimeout(getOption()->
getAsInt(PREF_BT_REQUEST_TIMEOUT));
- dispatcherPtr->setBtMessageFactory(factoryPtr);
- dispatcherPtr->setRequestGroupMan
+ dispatcher->setBtMessageFactory(factory.get());
+ dispatcher->setRequestGroupMan
(getDownloadEngine()->getRequestGroupMan().get());
- dispatcherPtr->setPeerConnection(peerConnection.get());
- std::shared_ptr<BtMessageDispatcher> dispatcher(dispatcherPtr);
-
- DefaultBtMessageReceiver* receiverPtr(new DefaultBtMessageReceiver());
- std::shared_ptr<BtMessageReceiver> receiver(receiverPtr);
- receiverPtr->setDownloadContext(requestGroup_->getDownloadContext().get());
- receiverPtr->setPeerConnection(peerConnection.get());
- receiverPtr->setDispatcher(dispatcherPtr);
- receiverPtr->setBtMessageFactory(factoryPtr);
-
- DefaultBtRequestFactory* reqFactoryPtr(new DefaultBtRequestFactory());
- reqFactoryPtr->setPeer(getPeer());
- reqFactoryPtr->setPieceStorage(pieceStorage.get());
- reqFactoryPtr->setBtMessageDispatcher(dispatcherPtr);
- reqFactoryPtr->setBtMessageFactory(factoryPtr);
- reqFactoryPtr->setCuid(cuid);
- std::shared_ptr<BtRequestFactory> reqFactory(reqFactoryPtr);
+ dispatcher->setPeerConnection(peerConnection.get());
- // reverse depends
- factoryPtr->setBtMessageDispatcher(dispatcherPtr);
- factoryPtr->setBtRequestFactory(reqFactoryPtr);
- factoryPtr->setPeerConnection(peerConnection.get());
+ auto receiver = make_unique<DefaultBtMessageReceiver>();
+ receiver->setDownloadContext(requestGroup_->getDownloadContext().get());
+ receiver->setPeerConnection(peerConnection.get());
+ receiver->setDispatcher(dispatcher.get());
+ receiver->setBtMessageFactory(factory.get());
- extensionMessageFactory->setBtMessageDispatcher(dispatcherPtr);
- extensionMessageFactory->setBtMessageFactory(factoryPtr);
+ auto reqFactory = make_unique<DefaultBtRequestFactory>();
+ reqFactory->setPeer(getPeer());
+ reqFactory->setPieceStorage(pieceStorage.get());
+ reqFactory->setBtMessageDispatcher(dispatcher.get());
+ reqFactory->setBtMessageFactory(factory.get());
+ reqFactory->setCuid(cuid);
- if(metadataGetMode) {
- utMetadataRequestFactory->setCuid(cuid);
- utMetadataRequestFactory->setDownloadContext
- (requestGroup_->getDownloadContext().get());
- utMetadataRequestFactory->setBtMessageDispatcher(dispatcherPtr);
- utMetadataRequestFactory->setBtMessageFactory(factoryPtr);
- utMetadataRequestFactory->setPeer(getPeer());
- utMetadataRequestFactory->setUTMetadataRequestTracker
- (utMetadataRequestTracker.get());
- }
+ // reverse depends
+ factory->setBtMessageDispatcher(dispatcher.get());
+ factory->setBtRequestFactory(reqFactory.get());
+ factory->setPeerConnection(peerConnection.get());
+
+ extensionMessageFactory->setBtMessageDispatcher(dispatcher.get());
+ extensionMessageFactory->setBtMessageFactory(factory.get());
getPeer()->allocateSessionResource
(requestGroup_->getDownloadContext()->getPieceLength(),
requestGroup_->getDownloadContext()->getTotalLength());
- getPeer()->setBtMessageDispatcher(dispatcherPtr);
-
- DefaultBtInteractive* btInteractivePtr
- (new DefaultBtInteractive(requestGroup_->getDownloadContext(), getPeer()));
- btInteractivePtr->setBtRuntime(btRuntime_);
- btInteractivePtr->setPieceStorage(pieceStorage_);
- btInteractivePtr->setPeerStorage(peerStorage); // Note: Not a member variable.
- btInteractivePtr->setCuid(cuid);
- btInteractivePtr->setBtMessageReceiver(receiver);
- btInteractivePtr->setDispatcher(dispatcher);
- btInteractivePtr->setBtRequestFactory(reqFactory);
- btInteractivePtr->setPeerConnection(peerConnection);
- btInteractivePtr->setExtensionMessageFactory
+ getPeer()->setBtMessageDispatcher(dispatcher.get());
+
+ auto btInteractive = make_unique<DefaultBtInteractive>
+ (requestGroup_->getDownloadContext(), getPeer());
+ btInteractive->setBtRuntime(btRuntime_);
+ btInteractive->setPieceStorage(pieceStorage_);
+ btInteractive->setPeerStorage(peerStorage); // Note: Not a member variable.
+ btInteractive->setCuid(cuid);
+ btInteractive->setBtMessageReceiver(std::move(receiver));
+ btInteractive->setDispatcher(std::move(dispatcher));
+ btInteractive->setBtRequestFactory(std::move(reqFactory));
+ btInteractive->setPeerConnection(std::move(peerConnection));
+ btInteractive->setExtensionMessageFactory
(std::move(extensionMessageFactory));
- btInteractivePtr->setExtensionMessageRegistry(exMsgRegistry);
- btInteractivePtr->setKeepAliveInterval
+ btInteractive->setExtensionMessageRegistry(std::move(exMsgRegistry));
+ btInteractive->setKeepAliveInterval
(getOption()->getAsInt(PREF_BT_KEEP_ALIVE_INTERVAL));
- btInteractivePtr->setRequestGroupMan
+ btInteractive->setRequestGroupMan
(getDownloadEngine()->getRequestGroupMan().get());
- btInteractivePtr->setBtMessageFactory(factory);
+ btInteractive->setBtMessageFactory(std::move(factory));
if((metadataGetMode || !torrentAttrs->privateTorrent) &&
!getPeer()->isLocalPeer()) {
if(getOption()->getAsBool(PREF_ENABLE_PEER_EXCHANGE)) {
- btInteractivePtr->setUTPexEnabled(true);
+ btInteractive->setUTPexEnabled(true);
}
if(family == AF_INET) {
if(DHTRegistry::isInitialized()) {
- btInteractivePtr->setDHTEnabled(true);
+ btInteractive->setDHTEnabled(true);
factoryPtr->setDHTEnabled(true);
- btInteractivePtr->setLocalNode(DHTRegistry::getData().localNode.get());
+ btInteractive->setLocalNode(DHTRegistry::getData().localNode.get());
}
} else {
if(DHTRegistry::isInitialized6()) {
- btInteractivePtr->setDHTEnabled(true);
+ btInteractive->setDHTEnabled(true);
factoryPtr->setDHTEnabled(true);
- btInteractivePtr->setLocalNode(DHTRegistry::getData6().localNode.get());
+ btInteractive->setLocalNode(DHTRegistry::getData6().localNode.get());
}
}
}
- btInteractivePtr->setUTMetadataRequestFactory(utMetadataRequestFactory);
- btInteractivePtr->setUTMetadataRequestTracker(utMetadataRequestTracker);
- btInteractivePtr->setTcpPort(e->getBtRegistry()->getTcpPort());
+
if(metadataGetMode) {
- btInteractivePtr->enableMetadataGetMode();
- }
- std::shared_ptr<BtInteractive> btInteractive(btInteractivePtr);
+ auto utMetadataRequestFactory = make_unique<UTMetadataRequestFactory>();
+ auto utMetadataRequestTracker = make_unique<UTMetadataRequestTracker>();
+
+ utMetadataRequestFactory->setCuid(cuid);
+ utMetadataRequestFactory->setDownloadContext
+ (requestGroup_->getDownloadContext().get());
+ utMetadataRequestFactory->setBtMessageDispatcher(dispatcherPtr);
+ utMetadataRequestFactory->setBtMessageFactory(factoryPtr);
+ utMetadataRequestFactory->setPeer(getPeer());
+ utMetadataRequestFactory->setUTMetadataRequestTracker
+ (utMetadataRequestTracker.get());
+
+ extensionMessageFactoryPtr->setUTMetadataRequestTracker
+ (utMetadataRequestTracker.get());
- btInteractive_ = btInteractive;
+ btInteractive->setUTMetadataRequestFactory
+ (std::move(utMetadataRequestFactory));
+ btInteractive->setUTMetadataRequestTracker
+ (std::move(utMetadataRequestTracker));
+ }
+ btInteractive->setTcpPort(e->getBtRegistry()->getTcpPort());
+ if(metadataGetMode) {
+ btInteractive->enableMetadataGetMode();
+ }
+ btInteractive_ = std::move(btInteractive);
btRuntime_->increaseConnections();
requestGroup_->increaseNumCommand();