summaryrefslogtreecommitdiff
path: root/src/CompactPeerListProcessor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/CompactPeerListProcessor.cc')
-rw-r--r--src/CompactPeerListProcessor.cc18
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);
}
}