| 81 | namespace aria2 { |
| 82 | |
| 83 | PeerInteractionCommand::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()); |
nothing calls this directly
no test coverage detected