diff options
Diffstat (limited to 'src/CompactPeerListProcessor.cc')
| -rw-r--r-- | src/CompactPeerListProcessor.cc | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/CompactPeerListProcessor.cc b/src/CompactPeerListProcessor.cc index d18e2784..b98b5da8 100644 --- a/src/CompactPeerListProcessor.cc +++ b/src/CompactPeerListProcessor.cc @@ -43,19 +43,13 @@ Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) { Peers peers; const Data* peersData = (const Data*)peersEntry; - if(peersData->getLen() > 0) { + if(peersData->getLen()%6 == 0) { for(int32_t i = 0; i < peersData->getLen(); i += 6) { - uint32_t ipaddr1 = (unsigned char)*(peersData->getData()+i); - uint32_t ipaddr2 = (unsigned char)*(peersData->getData()+i+1); - uint32_t ipaddr3 = (unsigned char)*(peersData->getData()+i+2); - uint32_t ipaddr4 = (unsigned char)*(peersData->getData()+i+3); - int32_t port = ntohs(*(uint16_t*)(peersData->getData()+i+4)); - char ipaddr[16]; - - snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d", - ipaddr1, ipaddr2, ipaddr3, ipaddr4); - PeerHandle peer = new Peer(ipaddr, port, pieceLength, totalLength); - + struct in_addr in; + in.s_addr = *(uint32_t*)(peersData->getData()+i); + string ipaddr = inet_ntoa(in); + uint16_t port = ntohs(*(uint16_t*)(peersData->getData()+i+4)); + PeerHandle peer = new Peer(ipaddr, port, pieceLength, totalLength); peers.push_back(peer); } } |
