Use more faithful packet frame parsing

This commit is contained in:
Jack Kingsman
2026-03-07 22:35:53 -08:00
parent 48dab293ae
commit 34318e4814
11 changed files with 310 additions and 245 deletions
+23
View File
@@ -1,6 +1,7 @@
import { describe, it, expect } from 'vitest';
import {
parsePathHops,
extractPacketPayloadHex,
findContactsByPrefix,
calculateDistance,
resolvePath,
@@ -107,6 +108,28 @@ describe('parsePathHops', () => {
});
});
describe('extractPacketPayloadHex', () => {
it('extracts payload from legacy 1-byte-hop packet', () => {
expect(extractPacketPayloadHex('0902AABB48656C6C6F')).toBe('48656C6C6F');
});
it('extracts payload from 2-byte-hop packet', () => {
expect(extractPacketPayloadHex('0942AABBCCDD48656C6C6F')).toBe('48656C6C6F');
});
it('rejects reserved mode 3', () => {
expect(extractPacketPayloadHex('09C1AABBCCDDEEFF')).toBeNull();
});
it('rejects oversized path encoding', () => {
expect(extractPacketPayloadHex(`09BF${'AA'.repeat(189)}4869`)).toBeNull();
});
it('rejects packets with no payload after path', () => {
expect(extractPacketPayloadHex('0902AABB')).toBeNull();
});
});
describe('findContactsByPrefix', () => {
const contacts: Contact[] = [
createContact({