New features:
- SipMessage::method reads the SIP method from the reassembled bytes without
parsing the message: the request line for requests, CSeq for responses. It
answers None wherever the bytes leave the method in doubt, so filtering on it
drops only what it has classified. A consumer keeping a small fraction of a
trace can now reject before Level 3 turns every header into owned strings.
Performance:
- The CLI applies --exclude, --method and the default OPTIONS exclusion before
parsing. On a 352MB ESInet TCP dump the default output drops from 937ms to
558ms and -m INVITE from 818ms to 378ms.
- Header blocks reach &str through a borrowing conversion instead of a lossy
one, which also removes the crate's only unsafe block. Parsing every message
of that dump drops from 1.82s to 1.69s.
Bug fixes:
- --stats and --dialog output is deterministic: methods with equal counts and
dialog messages sharing a timestamp were ordered by hash map iteration, so
two runs over one dump could differ.
Build:
- The slash-command definition and secret-scanner config no longer ship in the
published package.
Documentation:
- docs/performance.md: measured throughput on Zen 4, Cascade Lake and
Neoverse-N1, why decompression has never been the bottleneck, the CRC64 check
worth skipping when scanning an archive in bulk, and the protocol for
measuring a parser change.