Skip to content

Commit 589702b

Browse files
committed
fix: crisper rejection of closed and revoked ports/connections
1 parent 7c9cc18 commit 589702b

File tree

1 file changed

+16
-1
lines changed
  • packages/cosmic-swingset/lib/ag-solo/vats

1 file changed

+16
-1
lines changed

packages/cosmic-swingset/lib/ag-solo/vats/ibc.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,11 @@ export function makeIBCProtocolHandler(
297297
*/
298298
const outboundWaiters = makeStore('destination');
299299

300+
/**
301+
* @type {Store<Port, Set<PromiseRecord<ConnectionHandler,any>>>}
302+
*/
303+
const portToPendingConns = makeStore('Port');
304+
300305
/**
301306
* @type {ProtocolHandler}
302307
*/
@@ -315,14 +320,16 @@ export function makeIBCProtocolHandler(
315320
async onBind(port, localAddr, _protocolHandler) {
316321
const portID = localAddrToPortID(localAddr);
317322
portToCircuits.init(port, []);
323+
portToPendingConns.init(port, new Set());
318324
const packet = {
319325
source_port: portID,
320326
};
321327
return callIBCDevice('bindPort', { packet });
322328
},
323-
async onConnect(_port, localAddr, remoteAddr, chandler, _protocolHandler) {
329+
async onConnect(port, localAddr, remoteAddr, chandler, _protocolHandler) {
324330
console.warn('IBC onConnect', localAddr, remoteAddr);
325331
const portID = localAddrToPortID(localAddr);
332+
const pendingConns = portToPendingConns.get(port);
326333

327334
const match = remoteAddr.match(
328335
/^(\/ibc-hop\/[^/]+)*\/ibc-port\/([^/]+)\/(ordered|unordered)\/([^/]+)$/s,
@@ -352,13 +359,15 @@ export function makeIBCProtocolHandler(
352359
const rChannelID = generateChannelID();
353360

354361
const rchandler = producePromise();
362+
pendingConns.add(rchandler);
355363

356364
/**
357365
* @type {typeof makeIBCConnectionHandler}
358366
*/
359367
function connected(cID, pID, rCID, rPID, ord) {
360368
const ch = makeIBCConnectionHandler(cID, pID, rCID, rPID, ord);
361369
rchandler.resolve(ch);
370+
pendingConns.delete(rchandler);
362371
return ch;
363372
}
364373

@@ -459,7 +468,13 @@ paths:
459468
},
460469
async onRevoke(port, localAddr, _protocolHandler) {
461470
console.warn('IBC onRevoke', localAddr);
471+
const pendingConns = portToPendingConns.get(port);
472+
portToPendingConns.delete(port);
462473
portToCircuits.delete(port);
474+
const revoked = Error(`Port ${localAddr} revoked`);
475+
for (const rchandler of pendingConns.values()) {
476+
rchandler.reject(revoked);
477+
}
463478
},
464479
});
465480

0 commit comments

Comments
 (0)