Telecom infrastructure engineer. Carrier-grade signalling and media in Rust: SS7/SIGTRAN, IMS/VoLTE, SIP, SMPP.
The public work is one protocol per crate, each written against its own spec, plus the runtime that ties them together.
| Crate | What it does | Spec | |
|---|---|---|---|
| mtp2 | signal-unit framing, link state machine | ITU-T Q.703 | |
| m2pa | MTP2 peer-to-peer adaptation over SCTP | RFC 4165 | |
| m3ua | MTP3 user adaptation, ASP and SG state machines | RFC 4666 | |
| mtp3 | MTP3-user SAP and point codes, the seam every MTP3 user binds to | ITU-T Q.704 | |
| sccp | connectionless and connection-oriented SCCP | ITU-T Q.711 to Q.716 | |
| sua | SCCP user adaptation over SCTP | RFC 3868 | |
| tcap | transaction and component sublayers | ITU-T Q.771 to Q.775 | |
| itu-isup | ISUP messages and parameters, a direct MTP3 user (SI=5) | ITU-T Q.763 | |
| inap | INAP CS-1 operations, a TCAP user | Q.1218, ETSI EN 300 374-1 | |
| gsm_map | MAP operations, BER encode and decode | 3GPP TS 29.002 | |
| gsm_cap | CAMEL Application Part | 3GPP TS 29.078 | |
| tpdu | SMS transfer-layer PDUs | 3GPP TS 23.040, 23.038, 24.011 | |
| smpp34 | SMPP codec with an async client and server | SMPP 3.4 | |
| async-sctp | tokio SCTP over the Linux kernel stack, Rust and Python | RFC 4960 |
All MIT. The stack composes: MTP2 or M2PA under MTP3, M3UA or SUA for SIGTRAN transport, SCCP above that, TCAP above SCCP, then MAP, CAP or INAP as the application part.
SIPhon is the SIP and media side, scriptable in Python.
- siphon-sip: proxy, B2BUA and IMS platform.
- siphon-rtp: RTP and SRTP media engine, transcoding, DTLS.
- siphon-sigtran: SIGTRAN runtime over the crates above, M3UA and M2PA transport, MTP3 routing, SCCP.
- siphon-smpp: SMPP addon, inbound and outbound, scriptable.
- siphon-http: scriptable HTTP namespace.
- caddy-siphon: Caddy with layer4, for fronting SIP over TLS and WSS.
- pipecat-siphon: pipecat FrameSerializer for the media WebSocket.
- webrtc-rs/rtc#243: retransmit the last DTLS flight when the peer repeats its own. Merged.
- RestComm/jdiameter#170: SCTP multi-homing, client and server. Merged.
- opentelecoms-org/jsmpp#123: alert_notification on a transceiver bind. Merged.
- OpenSIPS/opensips#4277: hold a ctx reference for the rtp_relay in-dialog callback.
- nickvsnetworking/pyhss#244: fall back to Framed-IP-Address when Subscription-Id is absent.
Codecs get validated against known-answer vectors from the spec, never round-trips. A shared encode/decode bug passes a round-trip happily, and then you find it on someone else's network.
Wireshark is the second opinion. Emit what our encoder produces, text2pcap it, and
assert the dissector reads back the IEs we intended. It does not share our bugs, so it
catches what a round-trip cannot. A field that comes back [Malformed] is our problem
until proven otherwise.
No unwrap or expect outside tests. Clippy with -D warnings, green, before anything
lands.




