diff --git a/src/dht.cpp b/src/dht.cpp index c315ea8d6cec8b42cad4e803ec2f8aac821de386..b24c6b05b35309f26b18da8287c8bda3b18f7d27 100644 --- a/src/dht.cpp +++ b/src/dht.cpp @@ -1724,7 +1724,7 @@ Dht::announce(const InfoHash& id, callback(false, {}); return; } - + created = std::min(now, created); storageStore(id, value, created); auto& srs = af == AF_INET ? searches4 : searches6; @@ -1741,7 +1741,7 @@ Dht::announce(const InfoHash& id, return a.value->id == value->id; }); if (a_sr == sr->announce.end()) { - sr->announce.emplace_back(Announce {permanent, value, std::min(now, created), callback}); + sr->announce.emplace_back(Announce {permanent, value, created, callback}); for (auto& n : sr->nodes) { n.probe_query.reset(); n.acked[value->id].first.reset(); @@ -2200,8 +2200,6 @@ bool Dht::storageStore(const InfoHash& id, const std::shared_ptr<Value>& value, time_point created) { const auto& now = scheduler.time(); - created = std::min(created, now); - auto expiration = created + getType(value->type).expiration; if (expiration < now) { using namespace std::chrono; @@ -3003,6 +3001,7 @@ Dht::importValues(const std::vector<ValuesExport>& import) if (h.second.empty()) continue; + const auto& now = scheduler.time(); try { msgpack::unpacked msg; msgpack::unpack(msg, (const char*)h.second.data(), h.second.size()); @@ -3022,10 +3021,7 @@ Dht::importValues(const std::vector<ValuesExport>& import) DHT_LOG.e(h.first, "Error reading value at %s", h.first.toString().c_str()); continue; } - if (val_time + getType(tmp_val.type).expiration < scheduler.time()) { - DHT_LOG.d(h.first, "Discarding expired value at %s", h.first.toString().c_str()); - continue; - } + val_time = std::min(val_time, now); storageStore(h.first, std::make_shared<Value>(std::move(tmp_val)), val_time); } } catch (const std::exception&) { @@ -3287,7 +3283,7 @@ Dht::onAnnounce(std::shared_ptr<Node> node, const InfoHash& hash, const Blob& token, const std::vector<std::shared_ptr<Value>>& values, - const time_point& created) + const time_point& creation_date) { if (hash == zeroes) { DHT_LOG.w(node->id, "put with no info_hash"); @@ -3310,6 +3306,7 @@ Dht::onAnnounce(std::shared_ptr<Node> node, } } + auto created = std::min(creation_date, scheduler.time()); for (const auto& v : values) { if (v->id == Value::INVALID_ID) { DHT_LOG.w(hash, node->id, "[value %s] incorrect value id", hash.toString().c_str());