I build and debug the parts of telephony that carry actual calls: SIP proxies, media relays, and the tooling around them. I have been contributing upstream since 2006. Most of my work is on OpenSIPS, Kamailio, rtpengine, FreeSWITCH and Asterisk — upstream where it belongs, and in my own tools where nothing suitable existed.
I also run this stack in production, which is where most of the bugs come from: nine years of Kamailio and OpenSIPS and eight of FreeSWITCH, carrying live traffic.
20 years contributing upstream (since 2006) · 64 merged pull requests across 8 upstream projects · ~20 upstream bug reports, 4 of them crashes · 48,000+ installs of my two language servers · 12 conference talks, 2007–2026
| Project | What it is | |
|---|---|---|
| sipnab · sipnab.com | SIP & RTP capture, analysis and security. One binary, one dependency (libpcap). | |
| opensips-lsp · Open VSX | Language server for OpenSIPS routing scripts — completion, diagnostics, go-to-definition. SIP routing scripts had never had editor tooling. | |
| kamailio-lsp · Open VSX | The same, for Kamailio configuration files. SIP routing scripts had never had editor tooling. | |
| devstack-core | Local VoIP development infrastructure — Docker, Postgres, MongoDB, RabbitMQ, Prometheus, Grafana. | |
| voip-stack | Production-shaped OpenSIPS + Asterisk + rtpengine deployment. | |
| opensips-experiment | An OpenSIPS module written in Rust — the experiment behind the 2023 Summit talk. | |
| homebrew-tap | brew install NormB/tap/sipnab |
|
| mod_mosquitto | FreeSWITCH ↔ MQTT event handler. Lives upstream under the FreeSWITCH org. |
Not yet upstream. Three branches live in my OpenSIPS fork while they mature:
| Branch | What it adds |
|---|---|
feature/nats |
NATS support for OpenSIPS — event_nats, cachedb_nats, cachedb_nats_fts and nats_consumer, over a shared lib/nats, with fault-model and TLS-backend docs. 618 commits. |
feature/rust |
A Rust module SDK for OpenSIPS 4.0 (rust) plus six modules written against it — ACL, concurrent-call limits, credit check, HTTP webhooks, REFER handling and session timers. 106 commits. |
feature/rtpengine-subscribe-publish |
rtpengine_subscribe_request(), rtpengine_subscribe_answer(), rtpengine_publish() and unsubscribe script functions, with docs covering the all flag, L16 transcoding and multi-section SDP. +497 lines. |
Two decades of features and fixes that landed in other people's projects, oldest first.
| When | What |
|---|---|
| 2006 | The OpenSIPS PostgreSQL driver — rewrote db_postgres in the OpenSER days, adding connection pooling and fetch support. Third-ranked contributor to the module in OpenSIPS' own documentation — DevScore 58, 1,501 lines added, active Aug 2006 – Oct 2021 (module docs). |
| 2008–2009 | FreeRADIUS patches for CDRTool — FreeRADIUS could not account for failed SIP sessions. Five patches adding acct type Failed (15) and MySQL stored-procedure support, carried in AG Projects' CDRTool as contrib/freeradius-brandinger/ and referenced from its install guide. |
| 2020 | mod_mosquitto — FreeSWITCH event handler bridging FreeSWITCH events to an MQTT broker. Written from scratch; now maintained upstream under the FreeSWITCH org. |
| 2021 | TLS for PostgreSQL in OpenSIPS — db_postgres use_tls, letting any OpenSIPS module reach Postgres over TLS via a tls_mgm client domain. |
| 2024 | Reported asterisk/asterisk#651 — MySQL 8.3 turned qualify into a reserved word, breaking Asterisk's alembic table scripts; fixed upstream. |
| 2024–2025 | Networking enhancements across four OpenSIPS modules — dispatcher ping_sock partition parameter, MySQL Unix-socket connections, Redis MOVED redirection, and per-socket rtpengine command routing. |
| 2026 | Kamailio fixes — tm transaction leak on drop, dialog race in link_dlg_profile, swapped comparison in core atomics, and a NULL deref in rtpengine DTMF handling. |
| 2026 | Per-key TTL in the NATS C client — brought nats.c KV to parity with nats.go's per-key TTL and limit markers, plus a follow-up preserving the create-path error through the marker-aware retry. |
Merged pull request counts by project — every number links to the search that produces it
Plus 6 merged into employer forks of projects listed above, kept separate because a fork is not a distinct upstream project:
| Fork | Forked from | Merged |
|---|---|---|
| Vocalocity/rtpcluster | sippy/rtp_cluster | 4 |
| Vonage/h2o-opensips | OpenSIPS/opensips | 2 |
By year: 9 merged in 2024 · 13 in 2025 · 26 in 2026 — the stretch covered by the 2026 Summit talk on AI-assisted development. The method is not delegation: I hold the design and the judgment, and use AI for the heavy lifting — correlating days of logs across dozens of servers into diagnosable patterns, and building the analysis scripts that follow.
Counts hide the interesting part. The OpenSIPS work alone spans at least a dozen
modules — cachedb_redis, dialog, tm, janus, rtpengine, b2b_entities,
pua_dialoginfo, stir_shaken, sockets_mgm, dispatcher, event_rabbitmq,
cfgutils — and is mostly memory-safety and concurrency work. A sample:
- Redis Cluster support for OpenSIPS — hash-tag support (#3815), safer redirect parsing (#3854), dynamic topology management (#3855) and Unix-socket transport with lazy connect (#3856)
- WebSocket fragment reassembly in the Janus module — RFC 6455 §5.4; fragmented frames were previously rejected outright
- Use-after-free and race in dialog cluster replication, and a
race in
sockets_mgmreceive_fd that spun the process on reload - STIR/SHAKEN: strip RFC 4904 user parameters from telephone numbers
- FreeSWITCH core —
switch_rtpmax-missed-packets handling, XML generation, a mod_v8 compile warning and switch_core parameter docs - Password handling in valkey-admin — decrypt passthrough and double-encryption fixes
- SIP→WebRTC transcoding regression tests —
four sipssert scenarios pinning down
rtp_relayissue #3902, contributed to the project's own test suite
Roughly twenty defects found while running this stack in production and reported upstream, with reproductions. Four were crashes:
| Project | Reported | Notable |
|---|---|---|
| OpenSIPS | 15 | segfault in b2b_logic/bridging.c · segfault during startup · crash when an rtpengine is down at startup · crash on an invalid TCP request |
| HOMER | 2 | PostgreSQL startup failures under docker-compose |
| rtpengine | 1 | no response to delete after play media |
| Asterisk | 1 | MySQL 8.3 reserved word breaks the alembic table scripts |
- sipnab — deepening protocol coverage (SIP, SDP, RTP/RTCP, STUN/TURN, TLS/DTLS) and the MCP server that exposes it to agents
- opensips-lsp / kamailio-lsp — bringing real editor tooling to SIP routing scripts, which have never had any
- OpenSIPS upstream — reproducing and fixing memory-safety and concurrency bugs (use-after-free, races, leaks) across the dialog, tm, Redis and media modules, and writing regression tests so they stay fixed
- devstack-core — making a full VoIP stack reproducible on an ARM laptop
Speaking on SIP and real-time media since 2007, mostly at the OpenSIPS Summit and ClueCon.
| Year | Talk | Venue |
|---|---|---|
| 2026 | OpenSIPS Development with an AI Apprentice: Core Patches, Redis Clustering, and a Rust Module — recording | OpenSIPS Summit, Bucharest |
| 2025 | Networking Enhancements to the Dispatcher, MySQL, Redis & rtpengine modules — slides | OpenSIPS Summit, Amsterdam |
| 2024 | Foundations of building a highly available OpenSIPS / rtpengine system — slides | OpenSIPS Summit, Valencia |
| 2023 | An experimental module written in Rust — slides | OpenSIPS Summit, Houston |
| 2021 | How OpenSIPS solved a tricky SIPREC problem — recording · slides · writeup | OpenSIPS Summit, Distributed |
| 2020 | mod_mosquitto — building a FreeSWITCH event_handler module — slides · notes | ClueCon |
Earlier talks, 2007–2018
| Year | Talk | Venue |
|---|---|---|
| 2018 | Mid-registrar and registration redirection — slides | OpenSIPS Summit, Amsterdam |
| 2017 | OpenSIPS & Vonage - a great call | OpenSIPS Summit, Amsterdam |
| 2014 | Advanced SIP routing with FreeSWITCH modules — slides · notes | ClueCon |
| 2014 | Advanced SIP routing with OpenSIPS modules — slides | OpenSIPS Summit, Chicago |
| 2013 | High availability with OpenSIPS — slides | OpenSIPS Summit, Chicago |
| 2007 | OpenSER and GOES — BOF session — slides · notes | VON, Boston |
Technical reviewer for FreeSWITCH 1.2 (Packt Publishing, second edition, May 2013, ISBN 978-1-78216-100-4).
SIP stacks OpenSIPS · Kamailio · Asterisk · FreeSWITCH
Media rtpengine · RTP/RTCP · SRTP · SDP · codecs
Languages Rust · C · Shell · Python
Data & bus Valkey/Redis · PostgreSQL · MongoDB · RabbitMQ · NATS
Ops Docker · Prometheus · Grafana · HAProxy · libpcap
Testing SIPp · tcpdump/pcap analysis · fault reproduction
sipnab.com · n.brandinger@gmail.com · linkedin.com/in/nbrandinger
For anything about a specific project, an issue on that repository reaches me fastest.





