Skip to content

Commit 78cb192

Browse files
authored
fix: return relay reservations in seconds (#1641)
Other bug fixes: * Guard on setTimeout input being too large, over the max value for a signed 32 bit integer and node will set it to 1. * Calculate a TTL in the future for the tag, rather than the past
1 parent 5cb917e commit 78cb192

File tree

5 files changed

+14
-8
lines changed

5 files changed

+14
-8
lines changed

src/circuit/server/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ class CircuitRelayServer extends EventEmitter<RelayServerEvents> implements Star
259259
// tag relay target peer
260260
// result.expire is non-null if `ReservationStore.reserve` returns with status == OK
261261
if (result.expire != null) {
262-
const ttl = new Date().getTime() - result.expire
262+
const ttl = (result.expire * 1000) - Date.now()
263263
await this.peerStore.tagPeer(connection.remotePeer, RELAY_SOURCE_TAG, { value: 1, ttl })
264264
}
265265

src/circuit/server/reservation-store.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,18 @@ export class ReservationStore implements Startable {
8888
if (this.reservations.size >= this.maxReservations && !this.reservations.has(peer)) {
8989
return { status: Status.RESERVATION_REFUSED }
9090
}
91+
9192
const expire = new Date(Date.now() + this.reservationTtl)
9293
let checkedLimit: Limit | undefined
94+
9395
if (this.applyDefaultLimit) {
9496
checkedLimit = limit ?? { data: this.defaultDataLimit, duration: this.defaultDurationLimit }
9597
}
98+
9699
this.reservations.set(peer, { addr, expire, limit: checkedLimit })
97-
return { status: Status.OK, expire: expire.getTime() }
100+
101+
// return expiry time in seconds
102+
return { status: Status.OK, expire: Math.round(expire.getTime() / 1000) }
98103
}
99104

100105
removeReservation (peer: PeerId): void {

src/circuit/transport/discovery.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { logger } from '@libp2p/logger'
22
import { namespaceToCid } from '../utils.js'
33
import {
4-
RELAY_RENDEZVOUS_NS
5-
, RELAY_V2_HOP_CODEC
4+
RELAY_RENDEZVOUS_NS,
5+
RELAY_V2_HOP_CODEC
66
} from '../constants.js'
77
import type { PeerId } from '@libp2p/interface-peer-id'
88
import type { PeerStore } from '@libp2p/interface-peer-store'

src/circuit/transport/listener.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { ConnectionManager } from '@libp2p/interface-connection-manager'
33
import type { Listener, ListenerEvents } from '@libp2p/interface-transport'
44
import type { Multiaddr } from '@multiformats/multiaddr'
55
import { multiaddr } from '@multiformats/multiaddr'
6-
import type { ReservationStore } from './reservation-store'
6+
import type { ReservationStore } from './reservation-store.js'
77
import type { PeerId } from '@libp2p/interface-peer-id'
88
import { PeerMap } from '@libp2p/peer-collections'
99
import { logger } from '@libp2p/logger'

src/circuit/transport/reservation-store.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,9 @@ export class ReservationStore extends EventEmitter<ReservationStoreEvents> imple
167167

168168
const expiration = getExpirationMilliseconds(reservation.expire)
169169

170-
// sets a lower bound on the timeout
171-
const timeoutDuration = Math.max(expiration - REFRESH_TIMEOUT, REFRESH_TIMEOUT_MIN)
170+
// sets a lower bound on the timeout, and also don't let it go over
171+
// 2^31 - 1 (setTimeout will only accept signed 32 bit integers)
172+
const timeoutDuration = Math.min(Math.max(expiration - REFRESH_TIMEOUT, REFRESH_TIMEOUT_MIN), Math.pow(2, 31) - 1)
172173

173174
const timeout = setTimeout(() => {
174175
this.addRelay(peerId, type).catch(err => {
@@ -215,7 +216,7 @@ export class ReservationStore extends EventEmitter<ReservationStoreEvents> imple
215216
try {
216217
response = await hopstr.read()
217218
} catch (err: any) {
218-
log.error('error parsing reserve message response from %s because', connection.remotePeer, err.message)
219+
log.error('error parsing reserve message response from %p because', connection.remotePeer, err)
219220
throw err
220221
} finally {
221222
stream.close()

0 commit comments

Comments
 (0)