VoIP Server¶
The GVA VoIP Server (gva-voip-server) is a SIP registrar and proxy server designed for
military vehicle communications. It manages user registration, call routing, and provides
centralised logging of call activity.
Overview¶
sequenceDiagram
participant C1 as Client 1
participant SRV as VoIP Server
participant C2 as Client 2
Note over C1,SRV: Registration
C1->>SRV: REGISTER
SRV->>C1: 200 OK
Note over C2,SRV: Registration
C2->>SRV: REGISTER
SRV->>C2: 200 OK
Note over C1,C2: Call Setup
C1->>SRV: INVITE (to C2)
SRV->>C2: INVITE
C2->>SRV: 180 Ringing
SRV->>C1: 180 Ringing
C2->>SRV: 200 OK (SDP)
SRV->>C1: 200 OK (SDP)
C1->>SRV: ACK
SRV->>C2: ACK
Note over C1,C2: RTP Media (Direct)
C1<-->C2: Audio Stream
Note over C1,C2: Call Teardown
C1->>SRV: BYE
SRV->>C2: BYE
C2->>SRV: 200 OK
SRV->>C1: 200 OK
Features¶
SIP Registration¶
- User registration with configurable expiry
- Multiple registrations per user (forking)
- Registration state published to DDS
Call Routing¶
- Direct call routing between registered users
- Call forwarding support
- Busy/unavailable handling
Call Detail Records (CDR)¶
The server maintains detailed logs of all calls:
2026-04-13 16:30:45 | operator1 -> operator2 | CONNECTED | 00:05:23 | G.729
2026-04-13 16:36:08 | operator2 -> agent.ai | COMPLETED | 00:02:15 | MELPe
Quality of Service¶
- DSCP EF (46) marking for voice packets
- RTP packet prioritisation
- Jitter buffer recommendations
Command Line Options¶
gva-voip-server [options]
Options:
-h, --help Show help message
-v, --version Show version
-a, --address=<addr> Bind address (default: 0.0.0.0)
-p, --port=<port> SIP listen port (default: 5060)
-f, --groups-file=<path> Load conference groups from JSON file
-g, --group=<name> Add a conference group (repeatable)
-w, --wideband Use wideband codec profile (RFC 8817)
Examples¶
# Start server with groups file
gva-voip-server -f /etc/gva-voip-server/groups.json
# Custom address and individual groups
gva-voip-server --address=192.168.1.1 -g command -g alpha -g bravo
Configuration¶
Default Ports¶
| Service | Port | Protocol |
|---|---|---|
| SIP Signalling | 5060 | UDP/TCP |
| RTP Media | 10000-10100 | UDP |
Supported Codecs¶
The server supports codec negotiation via SDP. Clients advertise their supported codecs and the server facilitates negotiation:
| Payload Type | Codec | Clock Rate |
|---|---|---|
| 0 | PCMU (G.711 μ-law) | 8000 |
| 8 | PCMA (G.711 A-law) | 8000 |
| 18 | G.729 | 8000 |
| 96 | MELPe 2400 | 8000 |
| 97 | TSVCIS (STANAG 4591) | 8000 |
| 111 | Opus | 48000 |
DDS Integration¶
The VoIP Server publishes registration and call state to the DDS domain:
Topics Published¶
P_VoIP_Registration- User registration eventsP_VoIP_CallState- Active call informationP_VoIP_Statistics- Server statistics
Topics Subscribed¶
C_VoIP_Config- Dynamic configuration updates
Example Usage¶
Starting the Server¶
# Basic startup
./build/bin/gva-voip-server --domain=0
# Production mode with CDR logging
./build/bin/gva-voip-server \
--domain=0 \
--dscp-ef \
--cdr-file=/var/log/gva/voip-cdr.log \
--headless
Testing Registration¶
# Start server
./build/bin/gva-voip-server --domain=0 &
# Register clients
./build/bin/gva-voip-client --user=alice --server=127.0.0.1 &
./build/bin/gva-voip-client --user=bob --server=127.0.0.1 &
# Alice can now call bob@127.0.0.1
Troubleshooting¶
Common Issues¶
Port already in use:
Another SIP server or instance is running. Either stop it or use a different port:
Registration timeout: Ensure firewall allows UDP traffic on ports 5060 and 10000-10100.
No audio: Check that RTP ports are not blocked and clients can reach each other directly.