MCPcopy Create free account
hub / github.com/aria2/aria2 / PeerInteractionCommand

Method PeerInteractionCommand

src/PeerInteractionCommand.cc:83–283  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

81namespace aria2 {
82
83PeerInteractionCommand::PeerInteractionCommand(
84 cuid_t cuid, RequestGroup* requestGroup, const std::shared_ptr<Peer>& p,
85 DownloadEngine* e, const std::shared_ptr<BtRuntime>& btRuntime,
86 const std::shared_ptr<PieceStorage>& pieceStorage,
87 const std::shared_ptr<PeerStorage>& peerStorage,
88 const std::shared_ptr<SocketCore>& s, Seq sequence,
89 std::unique_ptr<PeerConnection> peerConnection)
90 : PeerAbstractCommand{cuid, p, e, s},
91 requestGroup_{requestGroup},
92 btRuntime_{btRuntime},
93 pieceStorage_{pieceStorage},
94 peerStorage_{peerStorage},
95 sequence_{sequence}
96{
97 // TODO move following bunch of processing to separate method, like init()
98 if (sequence_ == INITIATOR_SEND_HANDSHAKE) {
99 disableReadCheckSocket();
100 setWriteCheckSocket(getSocket());
101 setTimeout(std::chrono::seconds(
102 getOption()->getAsInt(PREF_PEER_CONNECTION_TIMEOUT)));
103 }
104
105 int family;
106 unsigned char compact[COMPACT_LEN_IPV6];
107 int compactlen = bittorrent::packcompact(compact, getPeer()->getIPAddress(),
108 getPeer()->getPort());
109 if (compactlen == COMPACT_LEN_IPV6) {
110 family = AF_INET6;
111 }
112 else {
113 family = AF_INET;
114 }
115
116 auto torrentAttrs =
117 bittorrent::getTorrentAttrs(requestGroup_->getDownloadContext());
118 bool metadataGetMode = torrentAttrs->metadata.empty();
119
120 auto exMsgRegistry = make_unique<ExtensionMessageRegistry>();
121 exMsgRegistry->setExtensionMessageID(ExtensionMessageRegistry::UT_PEX, 8);
122 // http://www.bittorrent.org/beps/bep_0009.html
123 exMsgRegistry->setExtensionMessageID(ExtensionMessageRegistry::UT_METADATA,
124 9);
125
126 auto extensionMessageFactory = make_unique<DefaultExtensionMessageFactory>(
127 getPeer(), exMsgRegistry.get());
128 auto extensionMessageFactoryPtr = extensionMessageFactory.get();
129 extensionMessageFactory->setPeerStorage(peerStorage.get());
130 extensionMessageFactory->setDownloadContext(
131 requestGroup_->getDownloadContext().get());
132 // PieceStorage will be set later.
133
134 auto factory = make_unique<DefaultBtMessageFactory>();
135 auto factoryPtr = factory.get();
136 factory->setCuid(cuid);
137 factory->setDownloadContext(requestGroup_->getDownloadContext().get());
138 factory->setPieceStorage(pieceStorage.get());
139 factory->setPeerStorage(peerStorage.get());
140 factory->setExtensionMessageFactory(extensionMessageFactory.get());

Callers

nothing calls this directly

Calls 15

packcompactFunction · 0.85
getTorrentAttrsFunction · 0.85
getAsIntMethod · 0.80
setExtensionMessageIDMethod · 0.80
setNoWaitMethod · 0.80
reserveBufferMethod · 0.80
setRequestTimeoutMethod · 0.80
getRequestGroupManMethod · 0.80
setBtMessageReceiverMethod · 0.80
setKeepAliveIntervalMethod · 0.80
isLocalPeerMethod · 0.80

Tested by

no test coverage detected