/* */ #include "DefaultPeerListProcessor.h" #include "Peer.h" #include "bencode.h" namespace aria2 { const std::string DefaultPeerListProcessor::IP("ip"); const std::string DefaultPeerListProcessor::PORT("port"); DefaultPeerListProcessor::DefaultPeerListProcessor() {} DefaultPeerListProcessor::~DefaultPeerListProcessor() {} bool DefaultPeerListProcessor::canHandle(const bencode::BDE& peerData) const { return peerData.isList(); } void DefaultPeerListProcessor::extractPeer (std::deque >& peers, const bencode::BDE& peerData) { if(!canHandle(peerData)) { return; } for(bencode::BDE::List::const_iterator itr = peerData.listBegin(); itr != peerData.listEnd(); ++itr) { const bencode::BDE& peerDict = *itr; if(!peerDict.isDict()) { continue; } const bencode::BDE& ip = peerDict[IP]; const bencode::BDE& port = peerDict[PORT]; if(!ip.isString() || !port.isInteger() || !(0 < port.i() && port.i() < 65536)) { continue; } PeerHandle peer(new Peer(ip.s(), port.i())); peers.push_back(peer); } } } // namespace aria2