# kiran-daware/easysipp architecture

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

- Interactive diagram: https://gitdiagram.com/kiran-daware/easysipp
- Repository: https://github.com/kiran-daware/easysipp

## Overview

easySIPp is a Django web platform for configuring and running SIPp-based SIP/VoIP tests. The main workflow is: a tester selects or edits UAC/UAS settings and XML scenarios, starts a test, then monitors and controls its output. The graph also preserves scenario generation and call-flow preview, configuration persistence, and XML/PCAP/CSV management. Some feature links are based on README descriptions because their implementation was not sampled; these are cited to the README rather than presented as inspected code.

Main entry points: [`easySIPp/views.py`](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/views.py) (Web views), [`easySIPp/scripts/ksipp.py`](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/ksipp.py) (SIPp runner), [`easySIPp/forms.py`](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/forms.py) (UAC/UAS forms), [`easySIPp/routing.py`](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/routing.py) (WebSocket routing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_views["Web views<br/>[views.py]"]
  node_pages["Web pages"]
  node_scenario_builder["Scenario builder<br/>[createUACxml.js]"]
  node_callflow["Call-flow preview<br/>[kflow.js]"]
end

subgraph group_config["Test configuration"]
  node_forms["UAC/UAS forms<br/>[forms.py]"]
  node_config_models[("Configuration records<br/>[models.py]")]
end

subgraph group_run["Execution and monitoring"]
  node_websocket_routes["WebSocket routing<br/>[routing.py]"]
  node_asgi["ASGI entry<br/>[asgi.py]"]
  node_log_consumer["Live log control<br/>[consumers.py]"]
  node_sipp_runner["SIPp runner<br/>[ksipp.py]"]
  node_stun["STUN/NAT detection<br/>[kstun.py]"]
  node_xml_modifier["XML adjustment<br/>[modify.py]"]
end

subgraph group_assets["Scenario assets"]
  node_xml_catalog["XML catalog<br/>[list.py]"]
  node_xml_editor["XML editor<br/>[ace.js]"]
  node_asset_management["Asset management<br/>[views.py]"]
  node_scenario_files["Scenario and data files"]
end

node_tester(("Tester"))
node_sipp_engine["SIPp engine"]
node_stun_service(("STUN service"))

node_tester -->|"uses web UI"| node_views
node_views -->|"renders"| node_pages
node_views -->|"uses forms"| node_forms
node_views -->|"reads and saves"| node_config_models
node_forms -->|"validates records"| node_config_models
node_views -->|"starts tests"| node_sipp_runner
node_sipp_runner -->|"runs scenarios"| node_sipp_engine
node_sipp_runner -->|"checks NAT"| node_stun
node_sipp_runner -->|"adjusts XML"| node_xml_modifier
node_stun -->|"queries"| node_stun_service
node_views -.->|"opens monitor"| node_websocket_routes
node_asgi -->|"routes sockets"| node_websocket_routes
node_websocket_routes -->|"dispatches"| node_log_consumer
node_log_consumer -->|"signals process"| node_sipp_engine
node_tester -->|"creates scenarios"| node_scenario_builder
node_scenario_builder -.->|"produces XML"| node_scenario_files
node_tester -->|"previews calls"| node_callflow
node_views -->|"lists scenarios"| node_xml_catalog
node_views -->|"manages uploads"| node_asset_management
node_asset_management -->|"reads and writes"| node_scenario_files
node_forms -->|"offers scenario choices"| node_scenario_files
node_tester -->|"edits XML"| node_xml_editor

click node_views "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/views.py"
click node_pages "https://github.com/kiran-daware/easysipp/tree/main/easySIPp/templates"
click node_scenario_builder "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/static/createUACxml.js"
click node_callflow "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/static/kflow.js"
click node_websocket_routes "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/routing.py"
click node_asgi "https://github.com/kiran-daware/easysipp/blob/main/easySIPp_project/asgi.py"
click node_log_consumer "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/consumers.py"
click node_forms "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/forms.py"
click node_config_models "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/models.py"
click node_sipp_runner "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/ksipp.py"
click node_stun "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/kstun.py"
click node_xml_modifier "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/modify.py"
click node_xml_catalog "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/list.py"
click node_xml_editor "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/static/ace/ace.js"
click node_asset_management "https://github.com/kiran-daware/easysipp/blob/main/easySIPp/views.py"
click node_scenario_files "https://github.com/kiran-daware/easysipp/tree/main/easySIPp/xml"

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_views,node_pages,node_scenario_builder,node_callflow toneBlue
class node_forms,node_config_models toneAmber
class node_websocket_routes,node_asgi,node_log_consumer,node_sipp_runner,node_stun,node_xml_modifier toneMint
class node_xml_catalog,node_xml_editor,node_asset_management,node_scenario_files toneRose
class node_tester,node_sipp_engine,node_stun_service toneIndigo
```

## Components

### Web experience

- [Web views](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/views.py): `easySIPp/views.py`
- [Web pages](https://github.com/kiran-daware/easysipp/tree/main/easySIPp/templates): `easySIPp/templates`
- [Scenario builder](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/static/createUACxml.js): `easySIPp/static/createUACxml.js`
- [Call-flow preview](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/static/kflow.js): `easySIPp/static/kflow.js`

### Test configuration

- [UAC/UAS forms](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/forms.py): `easySIPp/forms.py`
- [Configuration records](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/models.py): `easySIPp/models.py`

### Execution and monitoring

- [WebSocket routing](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/routing.py): `easySIPp/routing.py`
- [ASGI entry](https://github.com/kiran-daware/easysipp/blob/main/easySIPp_project/asgi.py): `easySIPp_project/asgi.py`
- [Live log control](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/consumers.py): `easySIPp/consumers.py`
- [SIPp runner](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/ksipp.py): `easySIPp/scripts/ksipp.py`
- [STUN/NAT detection](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/kstun.py): `easySIPp/scripts/kstun.py`
- [XML adjustment](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/modify.py): `easySIPp/scripts/modify.py`

### Scenario assets

- [XML catalog](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/scripts/list.py): `easySIPp/scripts/list.py`
- [XML editor](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/static/ace/ace.js): `easySIPp/static/ace/ace.js`
- [Asset management](https://github.com/kiran-daware/easysipp/blob/main/easySIPp/views.py): `easySIPp/views.py`
- [Scenario and data files](https://github.com/kiran-daware/easysipp/tree/main/easySIPp/xml): `easySIPp/xml`

### Other components

- **Tester**
- **SIPp engine**
- **STUN service**

## Connections

- Tester → Web views: uses web UI (evidence: `README.md`)
- Web views → Web pages: renders (evidence: `easySIPp/views.py`)
- Web views → UAC/UAS forms: uses forms (evidence: `easySIPp/views.py`)
- Web views → Configuration records: reads and saves (evidence: `easySIPp/views.py`)
- UAC/UAS forms → Configuration records: validates records (evidence: `easySIPp/forms.py`)
- Web views → SIPp runner: starts tests (evidence: `easySIPp/views.py`)
- SIPp runner → SIPp engine: runs scenarios (evidence: `README.md`)
- SIPp runner → STUN/NAT detection: checks NAT (evidence: `easySIPp/scripts/ksipp.py`)
- SIPp runner → XML adjustment: adjusts XML (evidence: `easySIPp/scripts/ksipp.py`)
- STUN/NAT detection → STUN service: queries (evidence: `easySIPp/scripts/kstun.py`)
- Web views → WebSocket routing: opens monitor
- ASGI entry → WebSocket routing: routes sockets (evidence: `easySIPp_project/asgi.py`)
- WebSocket routing → Live log control: dispatches (evidence: `easySIPp/routing.py`)
- Live log control → SIPp engine: signals process (evidence: `easySIPp/consumers.py`)
- Tester → Scenario builder: creates scenarios (evidence: `README.md`)
- Scenario builder → Scenario and data files: produces XML
- Tester → Call-flow preview: previews calls (evidence: `README.md`)
- Web views → XML catalog: lists scenarios (evidence: `easySIPp/views.py`)
- Web views → Asset management: manages uploads (evidence: `easySIPp/views.py`)
- Asset management → Scenario and data files: reads and writes (evidence: `easySIPp/views.py`)
- UAC/UAS forms → Scenario and data files: offers scenario choices (evidence: `easySIPp/forms.py`)
- Tester → XML editor: edits XML (evidence: `README.md`)
