/* */ #include "DefaultPeerListProcessor.h" #include "Peer.h" #include "List.h" #include "Dictionary.h" #include "Data.h" namespace aria2 { const std::string DefaultPeerListProcessor::IP("ip"); const std::string DefaultPeerListProcessor::PORT("port"); DefaultPeerListProcessor::DefaultPeerListProcessor() {} DefaultPeerListProcessor::~DefaultPeerListProcessor() {} bool DefaultPeerListProcessor::canHandle(const MetaEntry* peersEntry) const { const List* peersList = dynamic_cast(peersEntry); return peersList != 0; } void DefaultPeerListProcessor::extractPeer (std::deque >& peers, const MetaEntry* peersEntry) { const List* peersList = dynamic_cast(peersEntry); if(!peersList) { return; } const std::deque& metaList = peersList->getList(); for(std::deque::const_iterator itr = metaList.begin(); itr != metaList.end(); itr++) { const Dictionary* peerDic = dynamic_cast(*itr); if(!peerDic) { break; } const Data* ip = dynamic_cast(peerDic->get(IP)); const Data* port = dynamic_cast(peerDic->get(PORT)); if(!ip || !port || !port->isNumber()) { continue; } PeerHandle peer(new Peer(ip->toString(), port->toInt())); peers.push_back(peer); } } } // namespace aria2