mirror of https://github.com/aria2/aria2
Eliminated inet_ntoa and inet_ntop. Use getnameinfo() instead.
parent
af46293ef9
commit
3c73b6e767
|
@ -369,8 +369,6 @@ AC_CHECK_FUNCS([__argz_count \
|
|||
gethostbyname \
|
||||
getifaddrs \
|
||||
getpagesize \
|
||||
inet_ntoa \
|
||||
inet_ntop \
|
||||
memchr \
|
||||
memmove \
|
||||
mempcpy \
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
|
||||
#include "A2STR.h"
|
||||
#include "LogFactory.h"
|
||||
#include "SocketCore.h"
|
||||
|
||||
namespace aria2 {
|
||||
|
||||
|
@ -50,21 +51,10 @@ void callback(void* arg, int status, int timeouts, struct hostent* host)
|
|||
return;
|
||||
}
|
||||
for(char** ap = host->h_addr_list; *ap; ++ap) {
|
||||
#ifdef HAVE_INET_NTOP
|
||||
char addrstring[INET6_ADDRSTRLEN];
|
||||
const char* dst =
|
||||
inet_ntop(host->h_addrtype, *ap, addrstring, sizeof(addrstring));
|
||||
if(dst) {
|
||||
resolverPtr->resolvedAddresses_.push_back(dst);
|
||||
char addrstring[NI_MAXHOST];
|
||||
if(inetNtop(host->h_addrtype, *ap, addrstring, sizeof(addrstring)) == 0) {
|
||||
resolverPtr->resolvedAddresses_.push_back(addrstring);
|
||||
}
|
||||
#else // !HAVE_INET_NTOP
|
||||
if(host->h_addrtype != AF_INET) {
|
||||
continue;
|
||||
}
|
||||
struct in_addr addr;
|
||||
memcpy(&addr, *ap, sizeof(in_addr));
|
||||
resolverPtr->resolvedAddresses_.push_back(inet_ntoa(addr));
|
||||
#endif // !HAVE_INET_NTOP
|
||||
}
|
||||
if(resolverPtr->resolvedAddresses_.empty()) {
|
||||
resolverPtr->error_ = "address conversion failed";
|
||||
|
|
|
@ -235,7 +235,9 @@ void BtSetup::setup(std::vector<Command*>& commands,
|
|||
i = ifAddrs.begin(), eoi = ifAddrs.end(); i != eoi; ++i) {
|
||||
sockaddr_in addr;
|
||||
memcpy(&addr, &(*i).first, (*i).second);
|
||||
if(receiver->init(inet_ntoa(addr.sin_addr))) {
|
||||
char host[NI_MAXHOST];
|
||||
if(inetNtop(AF_INET, &addr.sin_addr, host, sizeof(host)) == 0 &&
|
||||
receiver->init(host)) {
|
||||
initialized = true;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1237,4 +1237,27 @@ int callGetaddrinfo
|
|||
return getaddrinfo(host, service, &hints, resPtr);
|
||||
}
|
||||
|
||||
int inetNtop(int af, const void* src, char* dst, socklen_t size)
|
||||
{
|
||||
int s;
|
||||
if(af == AF_INET) {
|
||||
sockaddr_in sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sa.sin_family = AF_INET;
|
||||
memcpy(&sa.sin_addr, src, sizeof(in_addr));
|
||||
s = getnameinfo(reinterpret_cast<const sockaddr*>(&sa), sizeof(sa),
|
||||
dst, size, 0, 0, NI_NUMERICHOST);
|
||||
} else if(af == AF_INET6) {
|
||||
sockaddr_in6 sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sa.sin6_family = AF_INET6;
|
||||
memcpy(&sa.sin6_addr, src, sizeof(in6_addr));
|
||||
s = getnameinfo(reinterpret_cast<const sockaddr*>(&sa), sizeof(sa),
|
||||
dst, size, 0, 0, NI_NUMERICHOST);
|
||||
} else {
|
||||
s = EAI_FAMILY;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -369,6 +369,11 @@ void getInterfaceAddress
|
|||
(std::vector<std::pair<struct sockaddr_storage, socklen_t> >& ifAddrs,
|
||||
const std::string& iface, int family = AF_UNSPEC, int aiFlags = 0);
|
||||
|
||||
// Provides functionality of inet_ntop using getnameinfo. The return
|
||||
// value is the exact value of getnameinfo returns. You can get error
|
||||
// message using gai_strerror(3).
|
||||
int inetNtop(int af, const void* src, char* dst, socklen_t size);
|
||||
|
||||
} // namespace aria2
|
||||
|
||||
#endif // D_SOCKET_CORE_H
|
||||
|
|
|
@ -831,27 +831,14 @@ std::pair<std::string, uint16_t> unpackcompact
|
|||
(const unsigned char* compact, int family)
|
||||
{
|
||||
std::pair<std::string, uint16_t> r;
|
||||
#ifdef HAVE_INET_NTOP
|
||||
int portOffset = family == AF_INET?4:16;
|
||||
char buf[INET6_ADDRSTRLEN];
|
||||
if(!inet_ntop(family, compact, buf, sizeof(buf))) {
|
||||
return r;
|
||||
char buf[NI_MAXHOST];
|
||||
if(inetNtop(family, compact, buf, sizeof(buf)) == 0) {
|
||||
r.first = buf;
|
||||
uint16_t portN;
|
||||
memcpy(&portN, compact+portOffset, sizeof(portN));
|
||||
r.second = ntohs(portN);
|
||||
}
|
||||
r.first = buf;
|
||||
uint16_t portN;
|
||||
memcpy(&portN, compact+portOffset, sizeof(portN));
|
||||
r.second = ntohs(portN);
|
||||
#else // !HAVE_INET_NTOP
|
||||
if(family != AF_INET) {
|
||||
return r;
|
||||
}
|
||||
struct in_addr addr;
|
||||
memcpy(&addr, compact, sizeof(in_addr));
|
||||
r.first = inet_ntoa(addr);
|
||||
uint16_t portN;
|
||||
memcpy(&portN, compact+4, sizeof(portN));
|
||||
r.second = ntohs(portN);
|
||||
#endif // !HAVE_INET_NTOP
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -818,7 +818,6 @@ void BittorrentHelperTest::testExtractPeerFromString()
|
|||
SharedHandle<ValueBase> str = bencode2::decode(peersstr);
|
||||
std::deque<SharedHandle<Peer> > peers;
|
||||
extractPeer(str, AF_INET6, std::back_inserter(peers));
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("1002:1035:4527:3546:7854:1237:3247:3217"),
|
||||
peers[0]->getIPAddress());
|
||||
|
@ -826,9 +825,6 @@ void BittorrentHelperTest::testExtractPeerFromString()
|
|||
CPPUNIT_ASSERT_EQUAL(std::string("2001:db8:bd05:1d2:288a:1fc0:1:10ee"),
|
||||
peers[1]->getIPAddress());
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6882, peers[1]->getPort());
|
||||
#else // !HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)0, peers.size());
|
||||
#endif // !HAVE_INET_NTOP
|
||||
|
||||
hextext = "c0a800011ae1";
|
||||
hextext += "c0a800021ae2";
|
||||
|
@ -904,13 +900,9 @@ void BittorrentHelperTest::testUnpackcompact()
|
|||
0x1A, 0xE1 };
|
||||
std::pair<std::string, uint16_t> p =
|
||||
unpackcompact(compact6, AF_INET6);
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("1002:1035:4527:3546:7854:1237:3247:3217"),
|
||||
p.first);
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6881, p.second);
|
||||
#else // !HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL(std::string(), p.first);
|
||||
#endif // !HAVE_INET_NTOP
|
||||
|
||||
unsigned char compact[] = { 0xC0, 0xa8, 0x00, 0x01, 0x1A, 0xE1 };
|
||||
p = unpackcompact(compact, AF_INET);
|
||||
|
|
|
@ -31,14 +31,10 @@ class DHTMessageFactoryImplTest:public CppUnit::TestFixture {
|
|||
CPPUNIT_TEST(testCreatePingReplyMessage);
|
||||
CPPUNIT_TEST(testCreateFindNodeMessage);
|
||||
CPPUNIT_TEST(testCreateFindNodeReplyMessage);
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_TEST(testCreateFindNodeReplyMessage6);
|
||||
#endif // HAVE_INET_NTOP
|
||||
CPPUNIT_TEST(testCreateGetPeersMessage);
|
||||
CPPUNIT_TEST(testCreateGetPeersReplyMessage);
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_TEST(testCreateGetPeersReplyMessage6);
|
||||
#endif // HAVE_INET_NTOP
|
||||
CPPUNIT_TEST(testCreateAnnouncePeerMessage);
|
||||
CPPUNIT_TEST(testCreateAnnouncePeerReplyMessage);
|
||||
CPPUNIT_TEST(testReceivedErrorMessage);
|
||||
|
@ -208,7 +204,6 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage()
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_INET_NTOP
|
||||
void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage6()
|
||||
{
|
||||
factory.reset(new DHTMessageFactoryImpl(AF_INET6));
|
||||
|
@ -260,7 +255,6 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage6()
|
|||
CPPUNIT_FAIL(e.stackTrace());
|
||||
}
|
||||
}
|
||||
#endif // HAVE_INET_NTOP
|
||||
|
||||
void DHTMessageFactoryImplTest::testCreateGetPeersMessage()
|
||||
{
|
||||
|
@ -359,7 +353,6 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage()
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_INET_NTOP
|
||||
void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage6()
|
||||
{
|
||||
factory.reset(new DHTMessageFactoryImpl(AF_INET6));
|
||||
|
@ -431,7 +424,6 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage6()
|
|||
CPPUNIT_FAIL(e.stackTrace());
|
||||
}
|
||||
}
|
||||
#endif // HAVE_INET_NTOP
|
||||
|
||||
void DHTMessageFactoryImplTest::testCreateAnnouncePeerMessage()
|
||||
{
|
||||
|
|
|
@ -20,9 +20,7 @@ class DHTRoutingTableDeserializerTest:public CppUnit::TestFixture {
|
|||
|
||||
CPPUNIT_TEST_SUITE(DHTRoutingTableDeserializerTest);
|
||||
CPPUNIT_TEST(testDeserialize);
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_TEST(testDeserialize6);
|
||||
#endif // HAVE_INET_NTOP
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
public:
|
||||
void setUp() {}
|
||||
|
@ -75,7 +73,6 @@ void DHTRoutingTableDeserializerTest::testDeserialize()
|
|||
CPPUNIT_ASSERT(memcmp(nodes[2]->getID(), dsnodes[1]->getID(), DHT_ID_LENGTH) == 0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_INET_NTOP
|
||||
void DHTRoutingTableDeserializerTest::testDeserialize6()
|
||||
{
|
||||
SharedHandle<DHTNode> localNode(new DHTNode());
|
||||
|
@ -115,6 +112,5 @@ void DHTRoutingTableDeserializerTest::testDeserialize6()
|
|||
CPPUNIT_ASSERT(memcmp(nodes[2]->getID(), dsnodes[1]->getID(),
|
||||
DHT_ID_LENGTH) == 0);
|
||||
}
|
||||
#endif // HAVE_INET_NTOP
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -20,9 +20,7 @@ class DHTRoutingTableSerializerTest:public CppUnit::TestFixture {
|
|||
|
||||
CPPUNIT_TEST_SUITE(DHTRoutingTableSerializerTest);
|
||||
CPPUNIT_TEST(testSerialize);
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_TEST(testSerialize6);
|
||||
#endif // HAVE_INET_NTOP
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
private:
|
||||
char zero[256];
|
||||
|
@ -226,7 +224,6 @@ void DHTRoutingTableSerializerTest::testSerialize()
|
|||
CPPUNIT_ASSERT(ss.eof());
|
||||
}
|
||||
|
||||
#ifdef HAVE_INET_NTOP
|
||||
void DHTRoutingTableSerializerTest::testSerialize6()
|
||||
{
|
||||
SharedHandle<DHTNode> localNode(new DHTNode());
|
||||
|
@ -316,6 +313,5 @@ void DHTRoutingTableSerializerTest::testSerialize6()
|
|||
CPPUNIT_ASSERT_EQUAL((std::streamsize)0, ss.gcount());
|
||||
CPPUNIT_ASSERT(ss.eof());
|
||||
}
|
||||
#endif // HAVE_INET_NTOP
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -405,18 +405,12 @@ void DefaultBtAnnounceTest::testProcessAnnounceResponse()
|
|||
CPPUNIT_ASSERT_EQUAL((time_t)1800, an.getMinInterval());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)100, an.getComplete());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)200, an.getIncomplete());
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, peerStorage_->getPeers().size());
|
||||
SharedHandle<Peer> peer = peerStorage_->getPeers()[0];
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress());
|
||||
peer = peerStorage_->getPeers()[1];
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("1002:1035:4527:3546:7854:1237:3247:3217"),
|
||||
peer->getIPAddress());
|
||||
#else // !HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)1, peerStorage_->getPeers().size());
|
||||
SharedHandle<Peer> peer = peerStorage_->getPeers()[0];
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress());
|
||||
#endif // !HAVE_INET_NTOP
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -205,7 +205,6 @@ void UTPexExtensionMessageTest::testCreate()
|
|||
UTPexExtensionMessage::create
|
||||
(reinterpret_cast<const unsigned char*>(data.c_str()), data.size());
|
||||
CPPUNIT_ASSERT_EQUAL((uint8_t)1, msg->getExtensionMessageID());
|
||||
#ifdef HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)3, msg->getFreshPeers().size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"),
|
||||
msg->getFreshPeers()[0]->getIPAddress());
|
||||
|
@ -229,24 +228,6 @@ void UTPexExtensionMessageTest::testCreate()
|
|||
msg->getDroppedPeers()[2]->getIPAddress());
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6998,
|
||||
msg->getDroppedPeers()[2]->getPort());
|
||||
#else // !HAVE_INET_NTOP
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, msg->getFreshPeers().size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"),
|
||||
msg->getFreshPeers()[0]->getIPAddress());
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6881, msg->getFreshPeers()[0]->getPort());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("10.1.1.2"),
|
||||
msg->getFreshPeers()[1]->getIPAddress());
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)9999, msg->getFreshPeers()[1]->getPort());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((size_t)2, msg->getDroppedPeers().size());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.2"),
|
||||
msg->getDroppedPeers()[0]->getIPAddress());
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)6882, msg->getDroppedPeers()[0]->getPort());
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("10.1.1.3"),
|
||||
msg->getDroppedPeers()[1]->getIPAddress());
|
||||
CPPUNIT_ASSERT_EQUAL((uint16_t)10000,
|
||||
msg->getDroppedPeers()[1]->getPort());
|
||||
#endif // !HAVE_INET_NTOP
|
||||
try {
|
||||
// 0 length data
|
||||
std::string in = "";
|
||||
|
|
Loading…
Reference in New Issue