Skip to content

Commit

Permalink
fix: crisper rejection of closed and revoked ports/connections
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelfig committed May 2, 2020
1 parent 7c9cc18 commit 589702b
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion packages/cosmic-swingset/lib/ag-solo/vats/ibc.js
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,11 @@ export function makeIBCProtocolHandler(
*/
const outboundWaiters = makeStore('destination');

/**
* @type {Store<Port, Set<PromiseRecord<ConnectionHandler,any>>>}
*/
const portToPendingConns = makeStore('Port');

/**
* @type {ProtocolHandler}
*/
Expand All @@ -315,14 +320,16 @@ export function makeIBCProtocolHandler(
async onBind(port, localAddr, _protocolHandler) {
const portID = localAddrToPortID(localAddr);
portToCircuits.init(port, []);
portToPendingConns.init(port, new Set());
const packet = {
source_port: portID,
};
return callIBCDevice('bindPort', { packet });
},
async onConnect(_port, localAddr, remoteAddr, chandler, _protocolHandler) {
async onConnect(port, localAddr, remoteAddr, chandler, _protocolHandler) {
console.warn('IBC onConnect', localAddr, remoteAddr);
const portID = localAddrToPortID(localAddr);
const pendingConns = portToPendingConns.get(port);

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

const rchandler = producePromise();
pendingConns.add(rchandler);

/**
* @type {typeof makeIBCConnectionHandler}
*/
function connected(cID, pID, rCID, rPID, ord) {
const ch = makeIBCConnectionHandler(cID, pID, rCID, rPID, ord);
rchandler.resolve(ch);
pendingConns.delete(rchandler);
return ch;
}

Expand Down Expand Up @@ -459,7 +468,13 @@ paths:
},
async onRevoke(port, localAddr, _protocolHandler) {
console.warn('IBC onRevoke', localAddr);
const pendingConns = portToPendingConns.get(port);
portToPendingConns.delete(port);
portToCircuits.delete(port);
const revoked = Error(`Port ${localAddr} revoked`);
for (const rchandler of pendingConns.values()) {
rchandler.reject(revoked);
}
},
});

Expand Down

0 comments on commit 589702b

Please sign in to comment.