diff --git a/include/opendht/value.h b/include/opendht/value.h index f85b62b8c27f9be15681560bc4015bbff131a49e..8f03fa38b2a47ebedf650b4485dac0b04e90ded4 100644 --- a/include/opendht/value.h +++ b/include/opendht/value.h @@ -34,8 +34,11 @@ #include "crypto.h" #include "serialize.h" -#include <sys/socket.h> +#include <netinet/in.h> #include <netdb.h> +#ifdef __ANDROID__ +typedef uint16_t in_port_t; +#endif #include <string> #include <sstream> diff --git a/src/dht.cpp b/src/dht.cpp index 9beb173e4633e71035e7d65df13733d2ec4cc2ba..816c25ea1de790dcee9a2859d073bbaa626c8e75 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -63,8 +63,6 @@ set_nonblocking(int fd, int nonblocking) { unsigned long mode = !!nonblocking; int rc = ioctlsocket(fd, FIONBIO, &mode); - if (rc != 0) - errno = WSAGetLastError(); return rc == 0; } @@ -874,10 +872,8 @@ Dht::search(const InfoHash& id, sa_family_t af, GetCallback callback, DoneCallba }), sr->nodes.end()); } else { sr = newSearch(); - if (sr == searches.end()) { - errno = ENOSPC; + if (sr == searches.end()) return nullptr; - } sr->af = af; sr->tid = search_id++; sr->step_time = 0; @@ -1558,7 +1554,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc if (message != MessageType::Error && id == zeroes) throw DhtException("no or invalid InfoHash"); } catch (const std::exception& e) { - DHT_DEBUG("Can't process message of size %lu: %s.", buflen, e.what()); + DHT_WARN("Can't process message of size %lu: %s.", buflen, e.what()); DHT_DEBUG.logPrintable(buf, buflen); return; } @@ -1571,7 +1567,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc if (message > MessageType::Reply) { /* Rate limit requests. */ if (!rateLimit()) { - DHT_DEBUG("Dropping request due to rate limiting."); + DHT_WARN("Dropping request due to rate limiting."); return; } } @@ -1691,7 +1687,8 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc newNode(id, from, fromlen, 2); for (auto& sn : sr->nodes) if (sn.id == id) { - sn.acked.insert({value_id, {.request_time = 0, .reply_time = now.tv_sec}}); + auto it = sn.acked.insert({value_id, {}}); + it.first->second.reply_time = now.tv_sec; sn.request_time = 0; sn.pinged = 0; break; @@ -1720,7 +1717,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc DHT_DEBUG("Got \"get values\" request"); newNode(id, from, fromlen, 1); if (info_hash == zeroes) { - DHT_DEBUG("Eek! Got get_values with no info_hash."); + DHT_WARN("Eek! Got get_values with no info_hash."); sendError(from, fromlen, tid, 203, "Get_values with no info_hash"); break; } else { @@ -1739,18 +1736,18 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc DHT_DEBUG("Got \"announce value\" request!"); newNode(id, from, fromlen, 1); if (info_hash == zeroes) { - DHT_DEBUG("Announce_value with no info_hash."); + DHT_WARN("Announce_value with no info_hash."); sendError(from, fromlen, tid, 203, "Announce_value with no info_hash"); break; } if (!tokenMatch(token, from)) { - DHT_DEBUG("Incorrect token %s for announce_values.", to_hex(token.data(), token.size()).c_str()); + DHT_WARN("Incorrect token %s for announce_values.", to_hex(token.data(), token.size()).c_str()); sendError(from, fromlen, tid, 401, "Announce_value with wrong token"); break; } for (const auto& v : values) { if (v->id == Value::INVALID_ID) { - DHT_DEBUG("Incorrect value id "); + DHT_WARN("Incorrect value id "); sendError(from, fromlen, tid, 203, "Announce_value with invalid id"); continue; } @@ -1946,10 +1943,8 @@ Dht::exportNodes() bool Dht::insertNode(const InfoHash& id, const sockaddr *sa, socklen_t salen) { - if (sa->sa_family != AF_INET && sa->sa_family != AF_INET6) { - errno = EAFNOSUPPORT; + if (sa->sa_family != AF_INET && sa->sa_family != AF_INET6) return false; - } Node *n = newNode(id, sa, salen, 0); return !!n; } @@ -1988,7 +1983,6 @@ Dht::send(const void *buf, size_t len, int flags, const sockaddr *sa, socklen_t if (isNodeBlacklisted(sa, salen)) { DHT_DEBUG("Attempting to send to blacklisted node."); - errno = EPERM; return -1; } @@ -2000,10 +1994,8 @@ Dht::send(const void *buf, size_t len, int flags, const sockaddr *sa, socklen_t else s = -1; - if (s < 0) { - errno = EAFNOSUPPORT; + if (s < 0) return -1; - } return sendto(s, buf, len, flags, sa, salen); }