Telecom systems engineer
SIP proxies, media relays, PBXs and the code that runs them. OpenSIPS, Kamailio, rtpengine, Asterisk, FreeSWITCH, etc.
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: OpenSER since 2006, then OpenSIPS and Kamailio, and FreeSWITCH since 2008.
20 years contributing upstream (since 2006) · 75 merged pull requests across 10 upstream projects · ~20 upstream bug reports, 4 of them crashes · 75,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). | |
| vcon-server · vcon-server.com | Stores IETF vCons encrypted at rest — AES-256-GCM, a key per version wrapped by tenant and master keys — with tenants, retention, legal holds and append-only audit logs. 0.4.1 released, not yet for production. | |
| opensips-lsp · Open VSX | Language server for OpenSIPS routing scripts — completion, diagnostics, go-to-definition, rename across every use, outline and folding. Its tree-sitter grammar parses every config that opensips -C 4.0.2 accepts. |
|
| kamailio-lsp · Open VSX | The same, for Kamailio configuration files. Follows the #!ifdef preprocessor as Kamailio does; its grammar parses every shipped Kamailio 6.1.5 config that kamailio -c accepts. |
|
| vcon-datasets-core04 | Three public vcon-dev vCon datasets (16,799 containers) corrected to draft-ietf-vcon-vcon-core-04 by additive, rule-checked edits, reproducibly, with the open items listed. Before: 0 passed the core-04 schema; after: all 8,503 Supreme Court and 4,527 of 8,181 IETF containers. Fixes offered upstream as three open pull requests (Supreme Court · IETF · Newport). | |
| 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. |
Open upstream. NATS support for OpenSIPS is an open pull request,
OpenSIPS/opensips#4442: five community-contributed
modules under modules-contrib/ — nats, event_nats, cachedb_nats, cachedb_nats_fts and
nats_consumer — with development continuing on
feature/nats (672 commits ahead of upstream).
Not yet upstream. One branch lives in my OpenSIPS fork while it matures:
| Branch | What it adds |
|---|---|
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. |
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 | Keep-alive NOTIFY handling in FreeSWITCH — mod_sofia now answers keep-alive NOTIFY requests with 200 OK. Committed by Michael Jerris as SVN r7482 ("Thanks Norm"). |
| 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 | Seven merged into tfps, SipPulse's VoIP fraud prevention system, in Rust — five fixes: observe-only mode silently dropped its own verdicts, a schema upgrade deleted the block_log audit table, the APIBAN feed counted addresses the kernel never blocked, store writes discarded their own failures, and tfps_ctl ban could block the host it defends; tfps_ctl --json on every subcommand, a machine-readable contract beside the human columns so tools consume it without screen-scraping; and a record of who placed each manual ban and why, and of every manual unban. |
| 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. Both shipped in nats.c v3.14.0. |
| 2026 | A reusable rtpengine task for SIPssert, OpenSIPS' SIP testing framework — scenarios start an rtpengine media proxy as a first-class task, healthy once its ng control socket is bound, instead of an inline shell block. |
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 · 37 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,
now also served over HTTP beside the TUI; vCon output to draft-ietf-vcon-vcon-core-04, with
--vcon-fetchto read stored vCons back; step-by-step guides for running it beside OpenSIPS, Kamailio, Asterisk, FreeSWITCH, rtpengine, rtpproxy, Homer, Prometheus, fail2ban, a vCon server and TFPS, every step run on Debian 13 and Ubuntu 24.04; and a code-quality program that removes every lint suppression by redesigning the code it hid, and converts the tests to return their errors rather than panic - vcon-server — the store, the HTTP API, tenants and their keys, retention and the purge sweep, legal holds, the audit
logs, the command line, key rotation and
checkare built and tested, with S3 and Parquet storage; 0.4.1 is released, not yet for production; an optional PostgreSQL catalog is in progress - opensips-lsp / kamailio-lsp — bringing real editor tooling to SIP routing scripts, which have never had any; the
October and November releases (now 0.28.1 / 0.22.1) make scanning linear in document size, keep answering requests while a config check
runs, add outline, folding and selection by structure, and read
$(...)variables the way the real parsers do, proven against OpenSIPS 4.0.2 and Kamailio 6.1.5; kamailio-lsp resolves includes in the order Kamailio opens them - vCon — testing sipnab's vCon schema validator against the public vcon-dev datasets, and correcting those datasets to core-04
(vcon-datasets-core04), with the corrections offered back upstream, fake-vcons
included (#3); and an open issue
on the core draft, where
content_hashcannot be computed for a recording referenced by a streaming-service page - OpenSIPS NATS modules — five
modules-contribmodules, open upstream as #4442 - 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 — including in OpenSIPS' own SIPssert test framework
- 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 (archived) | OpenSIPS Summit, Chicago |
| 2013 | High availability with OpenSIPS — slides (archived) | 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).
Member of the OpenSIPS Foundation, listed on its member page (last updated December 2014).
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 · [email protected] · linkedin.com/in/nbrandinger
For anything about a specific project, an issue on that repository reaches me fastest.





