Let the session own its bind state, written by bound() alone #42

Merged
lilleman merged 11 commits from session-bound into main 2026-09-28 04:37:29 +02:00
Showing only changes of commit 3cc38325cc - Show all commits
+12 -4
View File
@@ -455,15 +455,23 @@ describe('bind', () => {
assert.equal(session.boundAs, undefined); assert.equal(session.boundAs, undefined);
assert.equal(session.peerInterfaceVersion, undefined); assert.equal(session.peerInterfaceVersion, undefined);
session.bound('receiver', 0x34); assert.deepEqual(session.bound('receiver', 0x34), {});
assert.equal(session.boundAs, 'receiver'); assert.equal(session.boundAs, 'receiver');
assert.equal(session.peerInterfaceVersion, 0x34); assert.equal(session.peerInterfaceVersion, 0x34);
assert.equal(session.bindAllows('submit_sm'), false); assert.equal(session.bindAllows('submit_sm'), false);
session.bound('transmitter', undefined); assert.deepEqual(session.bound('transmitter', undefined), {});
assert.equal(session.peerInterfaceVersion, 0x00, 'no declared version is pre-3.4'); assert.equal(session.peerInterfaceVersion, 0x00, 'no declared version is pre-3.4');
// The mistakes an untyped caller makes: the TLV object for its value, a version past int8, a typo.
for (const [bindType, declared] of [['receiver', { tagValue: 0x34 }], ['receiver', 0x100], ['receiver', 3.4], ['tx', 0x34]]) {
const refused: unknown = Reflect.apply(session.bound, session, [bindType, declared]);
assert.ok(refused && typeof refused === 'object' && 'err' in refused && refused.err instanceof Error);
}
assert.equal(session.boundAs, 'transmitter', 'a refused bind leaves the recorded one alone');
assert.equal(session.peerInterfaceVersion, 0x00);
assert.equal(Reflect.set(session, 'boundAs', 'transceiver'), false); assert.equal(Reflect.set(session, 'boundAs', 'transceiver'), false);
assert.equal(Reflect.set(session, 'peerInterfaceVersion', 0x50), false); assert.equal(Reflect.set(session, 'peerInterfaceVersion', 0x50), false);
assert.equal(session.boundAs, 'transmitter'); assert.equal(session.boundAs, 'transmitter');