# drachtio/drachtio-server architecture

> Architecture diagram of the GitHub repository drachtio/drachtio-server, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/drachtio/drachtio-server
- Repository: https://github.com/drachtio/drachtio-server

## Overview

drachtio-server is a SIP signaling engine controlled by JavaScript applications over an authenticated TCP/TLS admin connection. Its central workflow is to receive SIP traffic, select an application or routing action, exchange SIP requests and responses, and maintain transaction and dialog state. It also supports SIP proxying, configurable transports, logging, Homer capture, Prometheus metrics, and optional HTTP routing. The graph reflects README capabilities and the supplied source excerpts; wiring for unsampled subsystems is shown only where documented, and some internal control-flow links are omitted where excerpts do not establish them.

Main entry points: [`src/controller.cpp`](https://github.com/drachtio/drachtio-server/blob/main/src/controller.cpp) (Server Controller), [`src/client-controller.cpp`](https://github.com/drachtio/drachtio-server/blob/main/src/client-controller.cpp) (Client Connections), [`src/pending-request-controller.cpp`](https://github.com/drachtio/drachtio-server/blob/main/src/pending-request-controller.cpp) (Pending Requests), [`src/sip-dialog-controller.cpp`](https://github.com/drachtio/drachtio-server/blob/main/src/sip-dialog-controller.cpp) (Dialog Control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime and Configuration"]
  node_server["drachtio Server<br/>[main.cpp]"]
  node_config["Configuration"]
  node_controller["Server Controller<br/>[controller.cpp]"]
end

subgraph group_sip["SIP Processing"]
  node_transports["SIP Transports<br/>[sip-transports.cpp]"]
  node_handler["Request Handling"]
  node_router["Request Router<br/>[request-router.cpp]"]
  node_pending[("Pending Requests")]
  node_proxy["SIP Proxy"]
  node_dialogs["Dialog Control"]
  node_dialogstate[("Dialog State<br/>[sip-dialog.cpp]")]
  node_timers["SIP Timers"]
end

subgraph group_apps["Application Control"]
  node_clients["Client Connections"]
  node_client["Client Protocol<br/>[client.cpp]"]
end

subgraph group_ops["Monitoring and Operations"]
  node_stats["Metrics Collection"]
  node_blacklist[("Blacklist<br/>[blacklist.cpp]")]
  node_cdr["Call Records<br/>[cdr.cpp]"]
end

node_app(("JavaScript App"))
node_peer(("SIP Peer"))
node_homer(("Homer"))
node_prometheus(("Prometheus"))

node_app -->|"connects"| node_clients
node_clients -->|"creates sessions"| node_client
node_client -->|"sends messages"| node_clients
node_clients -->|"dispatches SIP"| node_app
node_peer -->|"sends SIP"| node_transports
node_transports -->|"delivers traffic"| node_controller
node_controller -->|"tracks requests"| node_pending
node_pending -->|"routes requests"| node_clients
node_controller -->|"selects routing"| node_router
node_router -.->|"requests HTTP route"| node_handler
node_controller -->|"starts proxying"| node_proxy
node_controller -->|"handles dialog traffic"| node_dialogs
node_dialogs -->|"updates state"| node_dialogstate
node_dialogs -->|"dispatches SIP"| node_clients
node_proxy -->|"schedules timers"| node_timers
node_pending -->|"schedules expiry"| node_timers
node_server -->|"loads settings"| node_config
node_config -->|"configures runtime"| node_controller
node_controller -->|"collects metrics"| node_stats
node_stats -->|"exposes metrics"| node_prometheus
node_controller -.->|"sends SIP capture"| node_homer
node_controller -->|"checks policy"| node_blacklist
node_controller -->|"records calls"| node_cdr

click node_server "https://github.com/drachtio/drachtio-server/blob/main/src/main.cpp"
click node_config "https://github.com/drachtio/drachtio-server/blob/main/src/drachtio-config.cpp"
click node_controller "https://github.com/drachtio/drachtio-server/blob/main/src/controller.cpp"
click node_transports "https://github.com/drachtio/drachtio-server/blob/main/src/sip-transports.cpp"
click node_handler "https://github.com/drachtio/drachtio-server/blob/main/src/request-handler.cpp"
click node_router "https://github.com/drachtio/drachtio-server/blob/main/src/request-router.cpp"
click node_pending "https://github.com/drachtio/drachtio-server/blob/main/src/pending-request-controller.cpp"
click node_proxy "https://github.com/drachtio/drachtio-server/blob/main/src/sip-proxy-controller.cpp"
click node_dialogs "https://github.com/drachtio/drachtio-server/blob/main/src/sip-dialog-controller.cpp"
click node_dialogstate "https://github.com/drachtio/drachtio-server/blob/main/src/sip-dialog.cpp"
click node_clients "https://github.com/drachtio/drachtio-server/blob/main/src/client-controller.cpp"
click node_client "https://github.com/drachtio/drachtio-server/blob/main/src/client.cpp"
click node_timers "https://github.com/drachtio/drachtio-server/blob/main/src/timer-queue-manager.cpp"
click node_stats "https://github.com/drachtio/drachtio-server/blob/main/src/stats-collector.cpp"
click node_blacklist "https://github.com/drachtio/drachtio-server/blob/main/src/blacklist.cpp"
click node_cdr "https://github.com/drachtio/drachtio-server/blob/main/src/cdr.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_config,node_controller toneBlue
class node_transports,node_handler,node_router,node_pending,node_proxy,node_dialogs,node_dialogstate,node_timers toneAmber
class node_clients,node_client toneMint
class node_stats,node_blacklist,node_cdr toneRose
class node_app,node_peer,node_homer,node_prometheus toneIndigo
```

## Components

### Runtime and Configuration

- [drachtio Server](https://github.com/drachtio/drachtio-server/blob/main/src/main.cpp): `src/main.cpp`
- [Configuration](https://github.com/drachtio/drachtio-server/blob/main/src/drachtio-config.cpp): `src/drachtio-config.cpp`
- [Server Controller](https://github.com/drachtio/drachtio-server/blob/main/src/controller.cpp): `src/controller.cpp`

### SIP Processing

- [SIP Transports](https://github.com/drachtio/drachtio-server/blob/main/src/sip-transports.cpp): `src/sip-transports.cpp`
- [Request Handling](https://github.com/drachtio/drachtio-server/blob/main/src/request-handler.cpp): `src/request-handler.cpp`
- [Request Router](https://github.com/drachtio/drachtio-server/blob/main/src/request-router.cpp): `src/request-router.cpp`
- [Pending Requests](https://github.com/drachtio/drachtio-server/blob/main/src/pending-request-controller.cpp): `src/pending-request-controller.cpp`
- [SIP Proxy](https://github.com/drachtio/drachtio-server/blob/main/src/sip-proxy-controller.cpp): `src/sip-proxy-controller.cpp`
- [Dialog Control](https://github.com/drachtio/drachtio-server/blob/main/src/sip-dialog-controller.cpp): `src/sip-dialog-controller.cpp`
- [Dialog State](https://github.com/drachtio/drachtio-server/blob/main/src/sip-dialog.cpp): `src/sip-dialog.cpp`
- [SIP Timers](https://github.com/drachtio/drachtio-server/blob/main/src/timer-queue-manager.cpp): `src/timer-queue-manager.cpp`

### Application Control

- [Client Connections](https://github.com/drachtio/drachtio-server/blob/main/src/client-controller.cpp): `src/client-controller.cpp`
- [Client Protocol](https://github.com/drachtio/drachtio-server/blob/main/src/client.cpp): `src/client.cpp`

### Monitoring and Operations

- [Metrics Collection](https://github.com/drachtio/drachtio-server/blob/main/src/stats-collector.cpp): `src/stats-collector.cpp`
- [Blacklist](https://github.com/drachtio/drachtio-server/blob/main/src/blacklist.cpp): `src/blacklist.cpp`
- [Call Records](https://github.com/drachtio/drachtio-server/blob/main/src/cdr.cpp): `src/cdr.cpp`

### Other components

- **JavaScript App**
- **SIP Peer**
- **Homer**
- **Prometheus**

## Connections

- JavaScript App → Client Connections: connects
- Client Connections → Client Protocol: creates sessions
- Client Protocol → Client Connections: sends messages
- Client Connections → JavaScript App: dispatches SIP
- SIP Peer → SIP Transports: sends SIP
- SIP Transports → Server Controller: delivers traffic
- Server Controller → Pending Requests: tracks requests
- Pending Requests → Client Connections: routes requests
- Server Controller → Request Router: selects routing
- Request Router → Request Handling: requests HTTP route
- Server Controller → SIP Proxy: starts proxying
- Server Controller → Dialog Control: handles dialog traffic
- Dialog Control → Dialog State: updates state
- Dialog Control → Client Connections: dispatches SIP
- SIP Proxy → SIP Timers: schedules timers
- Pending Requests → SIP Timers: schedules expiry
- drachtio Server → Configuration: loads settings
- Configuration → Server Controller: configures runtime
- Server Controller → Metrics Collection: collects metrics
- Metrics Collection → Prometheus: exposes metrics
- Server Controller → Homer: sends SIP capture
- Server Controller → Blacklist: checks policy
- Server Controller → Call Records: records calls
