The feature catalogue

Know what you can build.

A detailed catalogue of the public engine. Every capability links to its reference, with optional components, dependencies and limitations made explicit.

GABPBX 1.8.270 capabilitiesPublic-source verified

SIP that fits your existing workflow

chan_sofia brings Sofia-SIP signalling to the familiar GABPBX channel, dialplan and management interfaces.

A familiar SIP interface

Available · migration review required

Keep SIP channel names, Dial(SIP/peer), common sip CLI commands, AMI integrations and the sippeers realtime family. Load chan_sofia or chan_sip, not both; review migration notes for option-specific differences.

Implementation & reference ↗

UDP, TCP, TLS, WS and WSS

Available · configure listeners and certificates

Connect conventional SIP endpoints and browser clients through configurable transports. Secure listeners need usable certificates; enabling a transport does not automatically secure the others.

Implementation & reference ↗

One account, multiple devices

Available · configurable contact limit

Register independent contacts with individual expiry times and ring live bindings in parallel. Mixed browser and desk-phone contacts receive the appropriate media profile; the first answer wins and the other branches are cancelled.

Implementation & reference ↗

Call control and trunk integration

Available · peer policy applies

Use outbound registration, OPTIONS reachability checks, REFER transfers, re-INVITE, UPDATE and session timers. Reliable provisional responses and timer policies are configurable; endpoint and carrier interoperability still need validation.

Implementation & reference ↗

Presence, BLF and SIP messaging

Available · subscription and context rules apply

Expose extension state through presence and busy-lamp subscriptions, with automatic hint creation for configured peers. Authenticated SIP MESSAGE traffic can be relayed to a local recipient's registered devices within the configured context.

Implementation & reference ↗

SIP Outbound registration

Available · opt-in, single flow

With sip_outbound=yes, outbound registration advertises a stable instance identifier and reg-id=1. The driver records the registrar's Outbound confirmation and Flow-Timer. This is a single-flow implementation; the global TCP keepalive interval must be configured separately.

Implementation & reference ↗

Registration Path routing

Available · opt-in per peer

For a peer with path=yes, retain the edge-proxy Path associated with each registered contact and use it when sending requests back to that device. Accepting Path is an explicit trust decision, not a mechanism for trusting arbitrary proxies.

Implementation & reference ↗

Provider Service-Route

Available · opt-in for registering trunks

Enable service_route on an outbound-registering trunk to learn the provider's route set from a successful registration and preload it on subsequent calls. Removing the option or receiving no route clears the stored value.

Implementation & reference ↗

GRUU-aware device identity

Available · requires registrar support

With gruu=yes, advertise +sip.instance and learn the public and temporary GRUUs issued by the upstream registrar. An active registration can use its learned public GRUU as the dialog Contact. This does not make GABPBX a general GRUU-issuing registrar.

Implementation & reference ↗

Outbound presence publishing

Available · publication configuration required

Publish configured extension state to an upstream SIP presence server using PUBLISH, with refreshes and ETag tracking. Configure the destination and publication identity explicitly; publishing is disabled when publish_server is empty.

Implementation & reference ↗

External event subscriptions

Available · one configured event per peer

Use subscribe_event to watch one configured event package per peer and expose received NOTIFY content through SofiaEventNotify in AMI. The driver does not interpret arbitrary event bodies or inject them automatically into device state; exported bodies are capped at 8 KiB.

Implementation & reference ↗

Message-waiting indications

Available · mailbox mapping required

Deliver voicemail counts to subscribed or configured phones. An optional outbound message-summary subscription can map an upstream mailbox into a local MWI cache, with retry backoff for failed initial subscriptions. Mailbox and context mappings remain explicit.

Implementation & reference ↗

Negotiated session timers

Available · negotiation policy applies

Configure session expiry, minimum interval and refresher role for SIP dialogs. The compiled policy accepts timers rather than originating them by default. The refuse setting suppresses local timer origination; it does not guarantee rejection of a timer offered by the remote endpoint.

Implementation & reference ↗

Q.850 causes and SIP Reason

Available · outbound Q.850 is opt-in

Map call termination and rejection causes to Q.850 Reason headers on eligible outbound BYE, CANCEL and INVITE rejection responses, and parse inbound reasons. Outbound Q.850 emission is opt-in through use_q850_reason; it is separate from losing-fork cancellation reasons.

Implementation & reference ↗

Caller identity and presentation

Available · explicit identity trust policy

Control caller identity through callerid, fromuser, P-Asserted-Identity or Remote-Party-ID, with privacy presentation handling. Trust of incoming asserted identity and emission to a provider are configurable. Carrier policy still determines which identities are accepted and displayed.

Implementation & reference ↗

Forwarding history with Diversion

Available · forwarding policy remains in the dialplan

Carry redirecting information in the SIP Diversion header and optionally force a trunk-owned diverting identity with forceddiversion. The header is tied to redirecting information on the call; it does not itself create forwarding rules or guarantee carrier acceptance.

Implementation & reference ↗

Registration lifetime control

Available · configurable expiry policy

Apply minimum and maximum registration lifetimes and answer an interval that is too short with 423 and Min-Expires. Contact expiry is tracked individually; contact-less REGISTER queries report bindings without changing them. A live registration is not itself a guarantee of reachability.

Implementation & reference ↗

TCP connection keepalive

Available · disabled by default

Configure tcp_keepalive and tcp_pingpong for SIP-layer CRLF checks on TCP connections. These controls do not apply to TLS/WS connections, which rely on socket SO_KEEPALIVE. Both settings default to off; ping/pong needs keepalive enabled. A provider's Flow-Timer produces diagnostics but does not automatically rewrite this global interval.

Implementation & reference ↗

Browser calling and media interoperability

The media engine connects SIP and WebRTC with explicit negotiation, build requirements and codec limits.

Two-way WebRTC audio

Available · WebRTC is opt-in

Browser clients can register and call over WSS using DTLS-SRTP, ICE-lite and RTCP multiplexing. Enable webrtc for the relevant peers and provide the required libraries and certificates. Opus can pass through when both legs negotiate it.

Implementation & reference ↗

Video across SIP and WebRTC

Available · no video transcoding

Relay VP8 or H.264 video between compatible endpoints, including supported SIP-to-WebRTC combinations. Video is passthrough, not transcoded: both sides need compatible codec parameters, otherwise the call can continue as audio-only.

Implementation & reference ↗

Optional audio/video BUNDLE

Available · disabled by default

Use webrtc_video_bundle to carry video over the audio ICE/DTLS transport, with payload and MID identification. It is disabled by default; otherwise video uses its own transport. Enable it for browser clients that require max-bundle audio/video negotiation.

Implementation & reference ↗

Relayed WebRTC DataChannels

Available · optional dependency and activation

Relay text and binary messages between two WebRTC legs using SCTP over DTLS. Requires usrsctp and datachannel=yes. The relay caps each message at 256 KiB or the remote endpoint's lower limit; it is not an unlimited file-transfer service.

Implementation & reference ↗

ICE path changes during a call

Available · client-dependent recovery

The ICE-lite responder follows an authenticated nomination of a new media path, enabling compatible clients to recover after a network change. Recovery depends on the client and network; GABPBX does not provide a full ICE candidate-gathering or TURN server implementation.

Implementation & reference ↗

T.38 fax negotiation

Available · compatible SIP peers required

Negotiate T.38 over UDPTL with explicit state transitions, re-INVITE handling and timeout recovery. Enable it for compatible SIP peers; this is not T.38 carried inside a WebRTC media session.

Implementation & reference ↗

DTMF across negotiated media modes

Available · peer and negotiated mode apply

Support RTP telephone-event, SIP INFO and in-band digit detection, with an auto mode that resolves after negotiation. SIPDtmfMode can change the mode during a call. WebRTC uses RTP telephone-event; in-band detection depends on suitable audio and endpoint behavior.

Implementation & reference ↗

Separate SIP and media NAT policies

Available · topology-specific configuration

force_rport governs SIP response routing; comedia enables symmetric-RTP media handling. They are different controls: a signalling proxy address should not automatically become the RTP destination. Configure external addresses and local networks for the actual topology.

Implementation & reference ↗

Hold, resume and video keyframes

Available · compatible feedback required

Mirror offered media directions during hold/resume and relay video keyframe requests through PLI/FIR, including supported SIP INFO translation. Compatible encoders can restore video after unhold. This is not support for REMB or transport-cc congestion feedback.

Implementation & reference ↗

RTP inactivity and keepalive timers

Available · timers require deliberate configuration

Inspect answered calls on a periodic sweep and apply configured rtptimeout, rtpholdtimeout and rtpkeepalive policies. The watchdog skips active T.38 and media that has never started; hold timeout depends on an enabled normal RTP timeout. Choose values for the real endpoint behavior.

Implementation & reference ↗

Conservative direct-media routing

Available · disabled by default per peer

For eligible plain-RTP calls, directmedia can let endpoints exchange media directly. NAT flags and cross-leg ACL checks restrict that path. SRTP/DTLS legs use the PBX's generic bridge instead; enabling directmedia does not bypass these encryption protections.

Implementation & reference ↗

Mobile calling with push wake-up

Integrated call parking, push delivery and registration-driven resume help compatible mobile apps receive calls while asleep.

Park, wake and resume

Available · push is disabled by default

With push enabled, a call to a sleeping device can wait while APNs VoIP or FCM wakes the app, then resume when it registers. Requires app token headers, credentials and the SQLite realtime schema. The default wait is 24 seconds; timeout returns NOANSWER.

Implementation & reference ↗

Suspended-app fallback

Available · requires push integration

A connection may look open even though the app no longer answers. The configurable no-response guard can trigger push after 4 seconds without a provisional SIP response on the eligible connection-oriented call path, reusing the Call-ID for app-side deduplication.

Implementation & reference ↗

Coordinated multi-device ringing

Available · explicit device and parking limits

Collect wake-up registrations for a configurable window, then fork to the available devices; the default window is 2 seconds. A late registration can join while the call rings. Push storage allows up to 10 devices per account, with bounded parked-call capacity.

Implementation & reference ↗

Native HTTP/2 push delivery

Available · native sender selected when push is enabled

The native sender multiplexes APNs/FCM requests over persistent HTTP/2 connections, with a 64-job cap. It needs compatible libcurl, OpenSSL and res_curl. Native credential discovery reads companion Python sender files that the public repository does not include; provision those files and credentials externally. Script fallback also needs executable senders.

Implementation & reference ↗

Push token lifecycle

Available · app registration contract required

Update tokens from registration, collapse duplicate tokens within an account and remove stale or provider-rejected entries under the configured policy. Logout with X-Device-ID removes that device's token; an unregister without the identifier retains it for wake-up. Correct app identifiers remain essential.

Implementation & reference ↗

Security controls you can configure

Authentication, access policies and media protection are explicit controls—not a substitute for deployment hardening.

MD5 and SHA-256 digest policies

Available · review legacy authentication policy

Select the offered digest algorithms and use nonce validation and constant-time response comparison. Legacy MD5 compatibility is retained, and auth_qop is off by default; do not assume universal replay protection or a hardened sample configuration.

Implementation & reference ↗

ACLs and local abuse controls

Available · deployment hardening required

Apply source, registration-contact and direct-media access lists, plus a local SIP blacklist and authentication-rejection policy. Configure guest access deliberately: the compiled allowguest default is yes. These controls do not guarantee protection from every denial-of-service attack.

Implementation & reference ↗

Explicit TLS verification

Available · certificate verification is opt-in

Configure certificate verification, optional client-certificate checks, cipher policy and TLS version floor. The default minimum is TLS 1.2; server and client certificate verification are opt-in and require a suitable trust configuration.

Implementation & reference ↗

Verified DTLS-SRTP media legs

Available · PBX terminates the encrypted legs

DTLS media keying waits for the negotiated SDP fingerprint and rejects a mismatch. SRTP/WebRTC media is terminated and bridged by the PBX; this is encrypted endpoint-to-PBX transport, not end-to-end encryption that hides media from the server.

Implementation & reference ↗

SRTP with SDES key negotiation

Available · peer encryption policy and libraries required

Compatible SIP peers can negotiate SRTP through SDP a=crypto, with configurable AES-CM and supported GCM suites. Cryptographic parameters are validated before media policy changes are committed. SDES carries key material in signalling, so protect that signalling path and its diagnostics.

Implementation & reference ↗

Inspect, integrate and measure

Use the CLI, AMI and source-level diagnostics to understand a deployment before making performance or reliability claims.

Operational visibility

Available · administrative access required

Inspect peers, contacts, registrations, channels and the loaded Sofia-SIP version. AMI actions and events support external management, while sip show push reports token-cache and parked-call state with token redaction.

Implementation & reference ↗

SIP traces and HEP capture

Available · capture is opt-in

Enable focused SIP, SDP, ICE, DTMF and fork diagnostics, or export decrypted signalling to a HEP collector or file. Capture is off by default. Traces can contain sensitive call metadata and SDP, so restrict access and retention.

Implementation & reference ↗

Architecture you can measure

Available · REGISTER offload is opt-in

A single signalling event thread, hash-based lookup tables and optional realtime REGISTER worker lanes make the execution model explicit. REGISTER offload is disabled by default. Hash and queue diagnostics help measure your workload; there is no universal call-capacity guarantee.

Implementation & reference ↗

Experimental paths stay explicit

Experimental · disabled by default

Fork early media and locally generated hold re-INVITEs are implemented behind disabled-by-default options. Treat them as experimental and validate them with your endpoints before enabling them. Ordinary remote hold/resume support is a separate capability.

Implementation & reference ↗

Bounded per-call SIP history

Available · disabled by default

Enable a compact timeline of signalling events with optional caller/destination filtering. Each dialog keeps up to 50 entries and the driver retains up to 32 completed histories. Entries contain summaries and metadata, not complete messages or Authorization headers; this is not durable CDR storage.

Implementation & reference ↗

SIP-aware dialplan functions

Available · inspect supported fields

Inspect peers, headers, channel information and configured local SIP domains through SIPPEER, SIP_HEADER, SIPCHANINFO and CHECKSIPDOMAIN. Supported fields and return semantics are documented in the implementation; compatibility names do not imply every historical field has a live value.

Implementation & reference ↗

Realtime peer and registration storage

Available · realtime backend required

Load peers through the sippeers realtime family and optionally use sipregs for registration state. rtupdate controls registration write-back; an optional worker pool moves writes off the signalling thread. Configure the backend and schema separately, and do not assume every parsed cache option implements eviction.

Implementation & reference ↗

A PBX you can program

Build call flows with the classic Asterisk-style dialplan and the applications included in the source tree. Select, load and configure the modules your installation needs.

Dialplan and call routing

Choose the PBX engine and its dependencies

Organise calls into contexts, extensions and priorities. Use Dial and subroutines to compose your call logic; AEL, Lua and realtime PBX engines are also available in the source tree.

Implementation & reference ↗

IVR and announcements

Requires applications, prompts and dialplan configuration

Combine playback, digit collection and dialplan routing for voice menus. ExternalIVR and AGI provide integration points for more specialised applications.

Implementation & reference ↗

Voicemail

Configure app_voicemail, mailboxes and storage

VoiceMail records messages and VoiceMailMain provides mailbox access. The source also includes mailbox checks and authentication helpers.

Implementation & reference ↗

Queues and agent membership

Requires app_queue and queue configuration

Queue sends callers to configured call queues. Dialplan applications can add, remove, pause and unpause members, with queue logging available for integration.

Implementation & reference ↗

Audio conferences

Load the application and appropriate bridge/timing modules

ConfBridge uses the bridging core for multi-party audio, with options for moderators, muted participants, menus and music on hold.

Implementation & reference ↗

Call recording

Configure storage, media formats and recording policy

MixMonitor records and mixes call audio; StopMixMonitor closes the recording for subsequent processing. Record and Monitor provide additional recording tools.

Implementation & reference ↗

Music on hold

Requires res_musiconhold, configured classes and compatible media files

Organise hold audio into configurable classes. MusicOnHold, StartMusicOnHold and StopMusicOnHold let the dialplan control playback, with native file-based sources supported.

Implementation & reference ↗

Call parking and retrieval

Configure features.conf and access to the parking context

Park places a call in a parking space and ParkedCall retrieves it. Parking lots provide dialplan contexts, numbered spaces and timeout/return behaviour.

Implementation & reference ↗

Directed and group call pickup

Requires app_directed_pickup and configured group/context permissions

Pickup answers another ringing extension, a marked channel or a matching pickup group. PickupChan can target a specific ringing channel.

Implementation & reference ↗

Paging and announcements

This source version requires app_page, app_meetme and DAHDI

Page calls several destinations and joins them as listeners, with an optional full-duplex mode and a shared announcement. Automatic answering depends on endpoint configuration.

Implementation & reference ↗

Find-me / follow-me call flows

Requires app_followme, chan_local and a followme.conf profile

FollowMe executes a named contact profile with configurable calling steps. Options can announce the caller's recorded name and report when no destination is reachable.

Implementation & reference ↗

Caller identity in the dialplan

Requires func_callerid; transmitted identity also depends on the channel and provider policy

CALLERID reads or updates channel identity data. CONNECTEDLINE and REDIRECTING expose connected-party and diversion information for call-flow logic.

Implementation & reference ↗

Dial-by-name directory

Requires app_directory, app_voicemail, mailbox names and dialplan configuration

Directory lets callers find voicemail-backed extensions by first name, surname or both, then continue through the selected dialplan context.

Implementation & reference ↗

Connect your applications

Use documented control protocols and modular data backends. These are integration building blocks, not a bundled business application or an automatically enabled public API.

AMI actions and events

Disabled in the sample configuration; requires protected access

Manage calls and observe PBX events through the Manager Interface. The core implements actions including Originate, Status, Redirect and Hangup.

Implementation & reference ↗

AGI, FastAGI and EAGI

Requires res_agi and your external application

Control a channel from external programs through AGI, use networked FastAGI, or access incoming audio through EAGI. res_agi also includes asynchronous AGI integration.

Implementation & reference ↗

Realtime configuration

Optional drivers need libraries, mappings and backend setup

Map configuration families through extconfig.conf. Source drivers include PostgreSQL, ODBC, SQLite3, LDAP and cURL, allowing configuration to come from your chosen backend.

Implementation & reference ↗

CDR and channel events

Select and configure logging backends; not a billing engine

CDR provides call summaries; CEL records channel-lifecycle events. Optional backends include files, AMI events, PostgreSQL, ODBC and SQLite3.

Implementation & reference ↗

Custom application events

Requires app_userevent and an authorised AMI consumer

UserEvent emits a named AMI event with additional headers from the dialplan, giving external applications a place to observe your own call-flow milestones.

Implementation & reference ↗

Audio and fax building blocks

Codec translators, file formats and fax technologies are separate modules. Select compatible codecs and install the dependencies required by each capability.

Opus and wideband audio

Opus requires libopus; load the negotiated codec modules

The source includes an Opus encoder/decoder using libopus and a G.722 translator. These complement traditional G.711 A-law and μ-law audio.

Implementation & reference ↗

Playback and file formats

Load formats required by your prompts and recordings

Format modules support media files such as WAV, signed-linear audio, PCM and GSM. A file-format reader is not the same as a codec transcoder.

Implementation & reference ↗

Fax with SpanDSP

Requires SpanDSP and the selected fax modules

res_fax provides SendFAX and ReceiveFAX; res_fax_spandsp supplies G.711 and T.38 fax technologies. Choose one fax stack: res_fax with res_fax_spandsp, or the standalone app_fax. Do not load both: they register the same application names.

Implementation & reference ↗

Build from open source

Follow the official build guide and select only the modules you need. The published v1.8.2 release provides source archives, with no attached prebuilt packages.

Source build and module selection

Documented source workflow; compilation required

Build Sofia-SIP v2.0.4 into /usr/local first, then configure GABPBX and select modules with menuselect. The official guide includes a Debian 13 recipe and verification steps.

Implementation & reference ↗

Dependencies and safe configuration

Source availability does not mean enabled at runtime

TLS, SRTP, codecs and database modules need their corresponding libraries. Verify the installed and loaded modules; make samples is for fresh lab setups and can overwrite existing configuration.

Implementation & reference ↗

GPLv2 and upstream credits

Read the licence and notices for each component

GABPBX is an Asterisk fork distributed under GPLv2. The project retains the applicable Asterisk, Digium and third-party copyright and licence notices in its source.

Implementation & reference ↗

Security features are configuration controls, not a guarantee. Validate authentication, network exposure, TLS/media policies and third-party library versions for your deployment. Experimental options are not promoted as production defaults.

Read the security reference