@@ -64,14 +64,25 @@ namespace libp2p::peer {
64
64
return false ;
65
65
}
66
66
67
+ Clock::time_point InmemAddressRepository::calculateExpirationTime (
68
+ const Milliseconds &ttl) const {
69
+ static const auto max_time = Clock::time_point::max ();
70
+ const auto now = Clock::now ();
71
+ if (now >= max_time - ttl) {
72
+ return max_time;
73
+ }
74
+ return now + ttl;
75
+ }
76
+
67
77
outcome::result<bool > InmemAddressRepository::addAddresses (
68
78
const PeerId &p,
69
79
std::span<const multi::Multiaddress> ma,
70
80
AddressRepository::Milliseconds ttl) {
71
81
bool added = false ;
72
82
auto &addresses = db_[p];
73
83
74
- auto expires_at = Clock::now () + ttl;
84
+ auto expires_at = calculateExpirationTime (ttl);
85
+
75
86
for (const auto &m : ma) {
76
87
if (addresses.expires .emplace (m, expires_at).second ) {
77
88
addresses.order .emplace_back (m);
@@ -90,7 +101,8 @@ namespace libp2p::peer {
90
101
bool added = false ;
91
102
auto &addresses = db_[p];
92
103
93
- auto expires_at = Clock::now () + ttl;
104
+ auto expires_at = calculateExpirationTime (ttl);
105
+
94
106
for (const auto &m : ma) {
95
107
auto [addr_it, emplaced] = addresses.expires .emplace (m, expires_at);
96
108
if (emplaced) {
@@ -113,7 +125,8 @@ namespace libp2p::peer {
113
125
}
114
126
auto &addresses = peer_it->second ;
115
127
116
- auto expires_at = Clock::now () + ttl;
128
+ auto expires_at = calculateExpirationTime (ttl);
129
+
117
130
for (auto &item : addresses.expires ) {
118
131
item.second = expires_at;
119
132
}
0 commit comments