diff --git a/src/bitdht/bdfilter.cc b/src/bitdht/bdfilter.cc index 163693b..0efd087 100644 --- a/src/bitdht/bdfilter.cc +++ b/src/bitdht/bdfilter.cc @@ -126,7 +126,7 @@ int bdFilter::addPeerToFilter(const bdId *id, uint32_t flags) uint32_t saddr = id->addr.sin_addr.s_addr; mIpsBanned.insert(saddr); - std::cerr << "Adding New Banned Ip Address: " << inet_ntoa(id->addr.sin_addr); + std::cerr << "Adding New Banned Ip Address: " << bdnet_inet_ntoa(id->addr.sin_addr); std::cerr << std::endl; return true; diff --git a/src/bitdht/bdmanager.cc b/src/bitdht/bdmanager.cc index 55030d1..d03039d 100644 --- a/src/bitdht/bdmanager.cc +++ b/src/bitdht/bdmanager.cc @@ -1031,7 +1031,7 @@ int bdNodeManager::getDhtPeerAddress(const bdNodeId *id, struct sockaddr_in &fro from = pit->second.mDhtAddr; std::cerr << "bdNodeManager::getDhtPeerAddress() Found Peer Address:"; - std::cerr << inet_ntoa(from.sin_addr) << ":" << htons(from.sin_port); + std::cerr << bdnet_inet_ntoa(from.sin_addr) << ":" << htons(from.sin_port); std::cerr << std::endl; return 1; diff --git a/src/bitdht/bdnode.cc b/src/bitdht/bdnode.cc index 758cb89..66e918f 100644 --- a/src/bitdht/bdnode.cc +++ b/src/bitdht/bdnode.cc @@ -2234,7 +2234,7 @@ bdNodeNetMsg::bdNodeNetMsg(char *msg, int len, struct sockaddr_in *in_addr) void bdNodeNetMsg::print(std::ostream &out) { out << "bdNodeNetMsg::print(" << mSize << ") to " - << inet_ntoa(addr.sin_addr) << ":" << htons(addr.sin_port); + << bdnet_inet_ntoa(addr.sin_addr) << ":" << htons(addr.sin_port); out << std::endl; } diff --git a/src/bitdht/bdstddht.cc b/src/bitdht/bdstddht.cc index 6a2d5ab..7ccc2b0 100644 --- a/src/bitdht/bdstddht.cc +++ b/src/bitdht/bdstddht.cc @@ -209,7 +209,7 @@ void bdStdPrintNodeId(std::ostream &out, const bdNodeId *a) void bdStdPrintId(std::ostream &out, const bdId *a) { bdStdPrintNodeId(out, &(a->id)); - out << " ip:" << inet_ntoa(a->addr.sin_addr); + out << " ip:" << bdnet_inet_ntoa(a->addr.sin_addr); out << ":" << ntohs(a->addr.sin_port); return; } diff --git a/src/bitdht/bdstore.cc b/src/bitdht/bdstore.cc index bf51b16..d201234 100644 --- a/src/bitdht/bdstore.cc +++ b/src/bitdht/bdstore.cc @@ -227,7 +227,7 @@ void bdStore::writeStore(std::string file) std::list::iterator it; for(it = store.begin(); it != store.end(); it++) { - fprintf(fd, "%s %d\n", inet_ntoa(it->mPeerId.addr.sin_addr), ntohs(it->mPeerId.addr.sin_port)); + fprintf(fd, "%s %d\n", bdnet_inet_ntoa(it->mPeerId.addr.sin_addr).c_str(), ntohs(it->mPeerId.addr.sin_port)); #ifdef DEBUG_STORE fprintf(stderr, "Storing Peer Address: %s %d\n", inet_ntoa(it->mPeerId.addr.sin_addr), ntohs(it->mPeerId.addr.sin_port)); #endif diff --git a/src/udp/udplayer.cc b/src/udp/udplayer.cc index c618a8a..7dd521e 100644 --- a/src/udp/udplayer.cc +++ b/src/udp/udplayer.cc @@ -83,7 +83,7 @@ class udpPacket //std::ostream &operator<<(std::ostream &out, const struct sockaddr_in &addr) std::ostream &operator<<(std::ostream &out, struct sockaddr_in &addr) { - out << "[" << inet_ntoa(addr.sin_addr) << ":"; + out << "[" << bdnet_inet_ntoa(addr.sin_addr) << ":"; out << htons(addr.sin_port) << "]"; return out; } diff --git a/src/util/bdnet.cc b/src/util/bdnet.cc index 887230a..5f137e0 100644 --- a/src/util/bdnet.cc +++ b/src/util/bdnet.cc @@ -27,6 +27,7 @@ #include "bdnet.h" #include +#include #include #include @@ -356,4 +357,15 @@ void bdsockaddr_clear(struct sockaddr_in *addr) memset(addr, 0, sizeof(*addr)); } +/* thread-safe version of inet_ntoa */ +std::string bdnet_inet_ntoa(struct in_addr in) +{ + std::ostringstream str; + uint8_t *bytes = (uint8_t *) &(in.s_addr); + str << (int) bytes[0] << "."; + str << (int) bytes[1] << "."; + str << (int) bytes[2] << "."; + str << (int) bytes[3]; + return str.str(); +} diff --git a/src/util/bdnet.h b/src/util/bdnet.h index 2fc5f4a..6acba29 100644 --- a/src/util/bdnet.h +++ b/src/util/bdnet.h @@ -27,6 +27,7 @@ */ #include +#include /********************************** WINDOWS/UNIX SPECIFIC PART ******************/ #if defined(_WIN32) || defined(__MINGW32__) @@ -104,6 +105,8 @@ int bdnet_inet_aton(const char *name, struct in_addr *addr); int bdnet_checkTTL(int fd); void bdsockaddr_clear(struct sockaddr_in *addr); +/* thread-safe version of inet_ntoa */ +std::string bdnet_inet_ntoa(struct in_addr in); /* Extra stuff to declare for windows error handling (mimics unix errno) */