├── .env
├── .github
└── workflows
│ └── sipssert.yml
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── docker-compose.yml
├── docs
├── components.md
├── devel.md
├── getting-started.md
├── homer.md
├── provisioning.md
├── setup.md
└── testing.md
├── etc
├── freeswitch
│ ├── conf
│ │ └── 00_vars.sh
│ └── dialplan
│ │ └── public.xml
├── mysql
│ ├── 00_config_db.sh
│ ├── 10_config_acc.sh
│ ├── 10_config_dialplan.sh
│ ├── 10_config_domain.sh
│ ├── 10_config_rtpproxy.sh
│ ├── 10_config_subscriber.sh
│ ├── 20_create_dids.sh
│ └── functions
└── opensips-cp
│ ├── docker-entrypoint.d
│ ├── 00_config_db.sh
│ ├── 10_config_user_management.sh
│ ├── 20_config_alias_management.sh
│ ├── 30_config_drouting.sh
│ └── user_management
│ │ ├── acls.inc.php
│ │ └── user_management_acls.php
│ └── image
│ └── modules.inc.php
├── run-sipssert.sh
└── tests
├── 01.register_disabled
├── scenario.yml
└── scripts
│ ├── check-register.py
│ ├── disable_user.sh
│ ├── enable_user.sh
│ └── sipp-register.xml
├── 01.register_enabled
├── scenario.yml
└── scripts
│ ├── check-register.py
│ └── sipp-register.xml
├── 02.call
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ └── sipp-register.xml
├── 02.call_disabled_callee
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller-fail.xml
│ ├── caller.xml
│ ├── disable_user.sh
│ ├── enable_user.sh
│ └── sipp-register.xml
├── 02.call_disabled_caller
├── scenario.yml
└── scripts
│ ├── caller.xml
│ ├── disable_user.sh
│ ├── enable_user.sh
│ └── sipp-register.xml
├── 03.call_unregistered_callee
├── scenario.yml
└── scripts
│ ├── caller.xml
│ ├── check-register.py
│ └── sipp-register.xml
├── 03.call_vm_always
├── scenario.yml
└── scripts
│ ├── caller.xml
│ ├── disable_vm.sh
│ ├── enable_vm.sh
│ └── sipp-register.xml
├── 03.call_vm_not_found
├── scenario.yml
└── scripts
│ ├── caller.xml
│ ├── check-register.py
│ ├── disable_vm.sh
│ ├── enable_vm.sh
│ └── sipp-register.xml
├── 04.call_callee_reject
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ └── sipp-register.xml
├── 04.call_vm_busy
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ ├── disable_vm.sh
│ ├── enable_vm.sh
│ └── sipp-register.xml
├── 05.call_no_answer
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ └── sipp-register.xml
├── 05.call_vm_no_answer
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ ├── disable_vm.sh
│ ├── enable_vm.sh
│ └── sipp-register.xml
├── 06.db_dnd
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ ├── caller_busy.xml
│ ├── set_user_dnd.sh
│ ├── sipp-register.xml
│ └── unset_user_dnd.sh
├── 06.star_dnd
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ ├── caller_busy.xml
│ ├── check_dnd_off.sh
│ ├── check_dnd_on.sh
│ ├── dnd_off.xml
│ ├── dnd_on.xml
│ └── sipp-register.xml
├── 06.star_dnd_with_vm
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ ├── caller_vm.xml
│ ├── check_dnd_off.sh
│ ├── check_dnd_on.sh
│ ├── disable_vm.sh
│ ├── dnd_off.xml
│ ├── dnd_on.xml
│ ├── enable_vm.sh
│ └── sipp-register.xml
├── 07.cf_always
├── scenario.yml
└── scripts
│ ├── add_cf_uri.sh
│ ├── caller.xml
│ ├── cf-user.xml
│ ├── disable_user.sh
│ ├── enable_user.sh
│ ├── remove_cf_uri.sh
│ └── sipp-register.xml
├── 07.cf_busy
├── scenario.yml
└── scripts
│ ├── add_cf_uri.sh
│ ├── callee.xml
│ ├── caller.xml
│ ├── cf-user.xml
│ ├── disable_user.sh
│ ├── enable_user.sh
│ ├── remove_cf_uri.sh
│ └── sipp-register.xml
├── 07.cf_no_answer
├── scenario.yml
└── scripts
│ ├── add_cf_uri.sh
│ ├── callee.xml
│ ├── caller.xml
│ ├── cf-user.xml
│ ├── disable_user.sh
│ ├── enable_user.sh
│ ├── remove_cf_uri.sh
│ └── sipp-register.xml
├── 07.cf_not_found
├── scenario.yml
└── scripts
│ ├── add_cf_uri.sh
│ ├── caller.xml
│ ├── disable_user.sh
│ ├── enable_user.sh
│ ├── remove_cf_uri.sh
│ ├── responder.xml
│ └── sipp-register.xml
├── 08.call_did
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ └── sipp-register.xml
├── 09.unknown_domain_callee
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── caller.xml
│ └── sipp-register.xml
├── 09.unknown_domain_caller
├── scenario.yml
└── scripts
│ └── caller.xml
├── 10.listen_vm_disabled
├── scenario.yml
└── scripts
│ ├── caller.xml
│ └── sipp-register.xml
├── 10.listen_vm_enabled
├── scenario.yml
└── scripts
│ ├── caller.xml
│ ├── disable_vm.sh
│ ├── enable_vm.sh
│ └── sipp-register.xml
├── 11.call_gateway
├── scenario.yml
└── scripts
│ ├── allow_pstn.sh
│ ├── caller.xml
│ ├── deny_pstn.sh
│ ├── gateway.xml
│ └── sipp-register.xml
├── 11.call_gateway2
├── scenario.yml
└── scripts
│ ├── allow_pstn.sh
│ ├── caller.xml
│ ├── deny_pstn.sh
│ ├── gateway.xml
│ └── sipp-register.xml
├── 11.gateway_call_did
├── scenario.yml
└── scripts
│ ├── callee.xml
│ ├── gateway.xml
│ └── sipp-register.xml
├── cleanup_tasks
├── delete_did.sh
├── delete_gateway.sh
├── delete_rule.sh
└── remove_domain.sh
├── config.yml
├── defines.yml
├── init_tasks
├── add_did.sh
├── add_domain.sh
├── add_gateway.sh
├── add_rule.sh
└── enable_user.sh
└── run.yml
/.env:
--------------------------------------------------------------------------------
1 | HOST_IP=192.168.1.129
2 |
3 | NETWORK=172.72.0.0/24
4 |
5 | OPENSIPS_IP=172.72.0.2
6 |
7 | MYSQL_IP=172.72.0.3
8 | MYSQL_ROOT_PASSWORD=root
9 | MYSQL_DATABASE=opensips
10 | MYSQL_USER=opensips
11 | MYSQL_PASSWORD=opensipsrw
12 | MYSQL_PORT=3306
13 |
14 | CP_IP=172.72.0.4
15 |
16 | RTPPROXY_IP=172.72.0.5
17 | RTPPROXY_PORT=7899
18 | MINPORT=30000
19 | MAXPORT=30100
20 |
21 | FREESWITCH_IP=172.72.0.6
22 |
23 | ENABLE_HOMER=no
24 | HOMER_IP=${HOST_IP}
25 | HOMER_PORT=9060
26 |
27 | DEFAULT_DOMAIN=domain.sip
28 |
--------------------------------------------------------------------------------
/.github/workflows/sipssert.yml:
--------------------------------------------------------------------------------
1 | ---
2 | name: Run SIPSsert tests
3 |
4 | on:
5 | push:
6 | pull_request:
7 | schedule:
8 | - cron: '0 2 * * Mon'
9 |
10 | jobs:
11 | test:
12 |
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 |
17 | - name: Checkout Repository
18 | uses: actions/checkout@v4
19 | with:
20 | submodules: recursive
21 |
22 | - name: Setup Environment
23 | run: |
24 | HOST_IP=$(hostname -I | cut -d ' ' -f 1)
25 | sed "s/^HOST_IP=.*/HOST_IP=$HOST_IP/g" -i .env
26 | while read line; do
27 | [ "$line" = "" ] && continue;
28 | echo "$line" >> $GITHUB_ENV
29 | done < .env
30 | shell: bash
31 |
32 | - name: Setup Docker Compose
33 | uses: hoverkraft-tech/compose-action@v2.0.2
34 |
35 | - name: Prepare SIPssert
36 | uses: OpenSIPS/SIPssert/.github/actions/Prepare_SIPssert@main
37 | with:
38 | sipssert-repo: OpenSIPS/SIPSsert
39 |
40 | - name: Run Test
41 | uses: OpenSIPS/SIPssert/.github/actions/Run_Tests@main
42 | with:
43 | directory: tests
44 | tests: .
45 |
46 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | etc/opensips/opensips-cli.cfg
2 | logs/
3 | etc/opensips-cp/docker-entrypoint.d/functions
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "etc/opensips"]
2 | path = etc/opensips
3 | url = https://github.com/OpenSIPS/opensips-softswitch-ce-config.git
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition
2 |
3 | [](https://github.com/OpenSIPS/opensips-softswitch-ce/actions/workflows/sipssert.yml)
4 |
5 | This project contains a fully functional OpenSIPS setup used as a SoftSwitch
6 | that provides the following features:
7 |
8 | * SIP Proxy with **support for TCP and UDP**
9 | * **topology hiding** for all calls
10 | * **dialplans** for user and did formats
11 | * star codes to **enable/disable DND**
12 | * **call forward** URIs for each user:
13 | * **always forward**
14 | * **busy forward**
15 | * **no answer forward**
16 | * **not found forward**
17 | * **ACLs** for each user:
18 | * **User Enabled**
19 | * **Force NAT**
20 | * **Enable PSTN**
21 | * **DND**
22 | * **VM Enabled**
23 | * **VM Permanent Redirect**
24 | * **VM Redirect Not Found**
25 | * **VM Redirect on Busy**
26 | * **VM Redirect on No Answer**
27 | * **RTPProxy** for voice traffic
28 | * **FreeSWITCH** for media services:
29 | * **voicemails**
30 | * **announcements**
31 |
32 | ## Getting Started
33 |
34 | The simplest way to get the project running is to setup [Docker](https://www.docker.com/) on your host and then run:
35 |
36 | ``` shell
37 | git clone --recursive https://github.com/OpenSIPS/opensips-softswitch-ce.git
38 | cd softswitch
39 |
40 | # configure your private IP address before launching the containers
41 | MY_IP=10.0.0.23; sed -i 's/HOST_IP=.*/HOST_IP='$MY_IP'/g' .env
42 |
43 | docker compose up
44 | ```
45 |
46 | For more information about setup, please check the [Setup
47 | page](docs/setup.md).
48 |
49 | Once everything is initialized, you should be able to access the OpenSIPS
50 | Control Panel using the following credentials:
51 |
52 | * URL: [http://localhost/cp](http://localhost/cp)
53 | * User: `admin`
54 | * Password: `opensips`
55 |
56 | For more information about provisioning, please check the [Provisioning
57 | page](docs/provisioning.md).
58 |
59 |
60 | At this point you can follow the [Getting Started](docs/getting-started.md)
61 | tutorial to test the OpenSIPS SoftSwitch Community Edition.
62 |
63 | ## Testing
64 |
65 | OpenSIPS SoftwSwitch comes with a set of tests that you can run once the setup
66 | is complete:
67 | ``` shell
68 | ./run-sipssert.sh
69 | ```
70 |
71 | For more information, please check the [Testing page](docs/testing.md).
72 |
73 | ## OpenSIPS
74 |
75 | OpenSIPS configuration is developed in a separate git repository that can be
76 | found [here](https://github.com/OpenSIPS/opensips-softswitch-ce-config.git).
77 |
78 | ## Homer
79 |
80 | In order to be able to visualize SoftSwitch call flows, it is recommended to
81 | setup the [Homer](https://github.com/sipcapture/homer) tool by following [these](docs/homer.md)
82 | steps.
83 |
84 | ## Documentation
85 |
86 | Documentation pages contain the following topics:
87 |
88 | * [Setup](docs/setup.md) - contains information about how to install and setup
89 | * [Getting Started](docs/getting-started.md) - show how you can use the
90 | SoftSwitch to test certain scenarios
91 | * [Components](docs/components.md) - list of components used in the project
92 | * [Provisioning](docs/provisioning.md) - useful information about provisioning
93 | the platform
94 | * [Testing](docs/testing.md) - information about testing the platform
95 | * [Homer](docs/homer.md) - information about setting up Homer server
96 | * [Devel](docs/devel.md) - information about development
97 |
98 |
99 | ## Contribute
100 |
101 | This project is Community driven, therefore any contribution is welcome. Feel
102 | free to open a pull request for any fix/feature you find useful.
103 |
104 | ## License
105 |
106 |
107 | [License-GPLv3]: https://www.gnu.org/licenses/gpl-3.0.en.html "GNU GPLv3"
108 | [Logo-CC_BY]: https://i.creativecommons.org/l/by/4.0/88x31.png "Creative Common Logo"
109 | [License-CC_BY]: https://creativecommons.org/licenses/by/4.0/legalcode "Creative Common License"
110 |
111 | The `OpenSIPS SoftSwitch Community Edition` source code is licensed under the [GNU General Public License v3.0][License-GPLv3]
112 |
113 | All documentation files (i.e. `.md` extension) are licensed under the [Creative Common License 4.0][License-CC_BY]
114 |
115 | ![Creative Common Logo][Logo-CC_BY]
116 |
117 | © 2024 - SIP Point Consulting SRL
118 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | services:
2 | mysql:
3 | build:
4 | dockerfile_inline: |
5 | FROM mysql:latest
6 | # get the latest/newest opensips-mysql-dbschema package
7 | RUN echo "https://yum.opensips.org/3.6/nightly/el/9/x86_64/$(curl -s -L https://yum.opensips.org/3.6/nightly/el/9/x86_64 | grep -oE "opensips-mysql-dbschema[^r]*.rpm" | tail -1)" | xargs rpm -i
8 | container_name: mysql
9 | volumes:
10 | - ./etc/mysql:/docker-entrypoint-initdb.d
11 | - db:/var/lib/mysql
12 | env_file:
13 | - .env
14 | environment:
15 | - MYSQL_IP=localhost
16 | healthcheck:
17 | test: mysql -u ${MYSQL_USER} -p'${MYSQL_PASSWORD}' opensips -e 'SHOW TABLES LIKE "location"' 2>&1 | grep -q location
18 | interval: 10s
19 | timeout: 1s
20 | retries: 5
21 | start_period: 20s
22 | networks:
23 | localnetwork:
24 | ipv4_address: ${MYSQL_IP}
25 |
26 | opensips:
27 | image: opensips/opensips:softswitch-ce
28 | container_name: opensips
29 | volumes:
30 | - ./etc/opensips:/etc/opensips
31 | ports:
32 | - 5060:5060/udp
33 | - 5060:5060/tcp
34 | expose:
35 | - 9060/tcp
36 | env_file:
37 | - .env
38 | depends_on:
39 | mysql:
40 | condition: service_healthy
41 | command:
42 | - -p /etc/opensips/substenv.sh
43 | networks:
44 | localnetwork:
45 | ipv4_address: ${OPENSIPS_IP}
46 |
47 | opensips-cp:
48 | build:
49 | context: ./etc/opensips-cp/image
50 | dockerfile_inline: FROM opensips/opensips-cp:latest
51 | container_name: opensips-cp
52 | env_file:
53 | - .env
54 | ports:
55 | - 80:80
56 | expose:
57 | - 9060/tcp
58 | depends_on:
59 | mysql:
60 | condition: service_healthy
61 | volumes:
62 | - ./etc/opensips-cp/docker-entrypoint.d:/docker-entrypoint.d
63 | - type: bind
64 | source: ./etc/mysql/functions
65 | target: /docker-entrypoint.d/functions
66 | networks:
67 | localnetwork:
68 | ipv4_address: ${CP_IP}
69 |
70 | rtpproxy:
71 | image: sippylabs/rtpproxy
72 | container_name: rtpproxy
73 | env_file:
74 | - .env
75 | ports:
76 | - "${MINPORT}-${MAXPORT}:${MINPORT}-${MAXPORT}/udp"
77 | networks:
78 | localnetwork:
79 | ipv4_address: ${RTPPROXY_IP}
80 | command: -s udp:${RTPPROXY_IP}:${RTPPROXY_PORT} -l ${RTPPROXY_IP} -m ${MINPORT} -M ${MAXPORT} -A ${HOST_IP}
81 |
82 | freeswitch:
83 | image: opensips/freeswitch-ce
84 | container_name: freeswitch
85 | env_file:
86 | - .env
87 | volumes:
88 | - ./etc/freeswitch/dialplan:/etc/freeswitch/dialplan
89 | - ./etc/freeswitch/conf:/docker-entrypoint.d
90 | cap_add:
91 | - SYS_NICE
92 | networks:
93 | localnetwork:
94 | ipv4_address: ${FREESWITCH_IP}
95 |
96 | volumes:
97 | db:
98 |
99 | networks:
100 | localnetwork:
101 | name: softswitch-br
102 | driver: bridge
103 | driver_opts:
104 | com.docker.network.bridge.host_binding_ipv4: "${HOST_IP}"
105 | com.docker.network.bridge.name: softswitch-br
106 | ipam:
107 | config:
108 | - subnet: ${NETWORK}
109 |
--------------------------------------------------------------------------------
/docs/components.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Components
2 |
3 | This platform uses the following compoents/docker images:
4 |
5 | - **mysql**: MySQL database server; used to store OpenSIPS data;
6 | - *ports*: **3306** (by default, but can be changed in [.env](/.env) file at `MYSQL_PORT`)
7 | - this port can be used to connect to the database from outside Docker environment
8 | and manually inspect the database; use `MYSQL_USER`, `MYSQL_PASSWORD` and `MYSQL_DATABASE` from [.env](/.env) file
9 | - **opensips**: OpenSIPS SIP server; used to handle SIP traffic;
10 | - *ports*: **5060** (for both UDP and TCP connections), **8888** (for OpenSIPS Management Interface)
11 | - **8888** can be used to send MI commands to OpenSIPS server from outside Docker environment (e.g. using `opensips-cli` tool)
12 | - **opensips-cp**: OpenSIPS Control Panel; used to manage SoftSwitch platform;
13 | - *ports*: **80** (used to access the web interface from browser)
14 | - you can access it at `http://localhost/cp` with default credentials `admin:opensips`
15 | - **rtpproxy**: RTP proxy server; used to handle RTP traffic;
16 | - *ports*: **MINPORT**-**MAXPORT** (by default, **30000**-**30100**, but can be changed in [.env](/.env) file)
17 | - these ports are meant to be used to send voice traffic
18 | - **freeswitch**: FreeSWITCH media server; used for voicemails and announcements; **no ports opened** to the world;
19 |
--------------------------------------------------------------------------------
/docs/devel.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Development
2 |
3 | This document contains information about development of the platform.
4 |
5 | ## Structure
6 |
7 | This repository contains the following directory structure:
8 |
9 | * [**docs/**](/docs/): contains documentation files
10 | * [**etc/**](/etc/):
11 | * [**opensips/**](/etc/opensips/): subproject for OpenSIPS configuration files; contains [opensips.cfg](/etc/opensips/opensips.cfg) and other configuration files
12 | * [**opensips-cp/**](/etc/opensips-cp/):
13 | * [**docker-entrypoint.d/**](/etc/opensips-cp/docker-entrypoint.d/): scripts that are executed when the container starts (e.g. to set up the database)
14 | * [**user_management/**](/etc/opensips-cp/docker-entrypoint.d/user_management/): php files for that implement ACLs for user management tool
15 | * [**image/**](/etc/opensips-cp/image/): [modules.inc.php](/etc/opensips-cp/image/modules.inc.php) file where modules can be enabled/disabled for OpenSIPS Control Panel
16 | * [**mysql/**](/etc/mysql/): scripts to initialize the MySQL database schema
17 | * [**freeswitch/**](/etc/freeswitch/):
18 | * [**conf/**](/etc/freeswitch/conf/): scripts that are executed when the container starts
19 | * [**dialplan/**](/etc/freeswitch/dialplan/): xml files that define voicemail and announcements extensions for FreeSWITCH
20 | * [**sipssert/**](/sipssert/): contains a suite of tests for the platform to be run with SIPssert framework
21 | * [**docker-compose.yml**](/docker-compose.yml): main file that defines services, networks and volumes for the platform
22 | * [**.env**](/.env): environment file that contains configuration for the platform
23 | * [**run-sipssert.sh**](/run-sipssert.sh): script that runs the SIPssert tests (in a Docker container, no need to install SIPssert locally)
24 |
--------------------------------------------------------------------------------
/docs/getting-started.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Getting Started
2 |
3 | Once the setup of the platform is completely done, you can follow this
4 | guide that shows you how you can get the platform provisioned.
5 |
6 | OpenSIPS Control Panel is the simplest way to do this. You can access it at [http://localhost/cp](http://localhost/cp) using the following credentials:
7 | * username: `admin`
8 | * password: `opensips`
9 |
10 | ## Domains
11 |
12 | Besides the default `domain.sip` that is created when the platform is started, you can add more domains using the OpenSIPS Control Panel. From the left panel, select `System` -> `Domains`, fill in the domain name and click `Add New Domain`, then `Reload on Server` (to refresh the OpenSIPS cache).
13 |
14 | ## Users
15 |
16 | You can also add users using Control Panel web interface. From the left panel, go to `Users` -> `User Management` and click `Add New`. Fill in the user details (mandatory fields are `Username`, `Domain`, `Password`) and click `Register`. You can enable/disable one user by clicking on his `ACLs` button and ticking the `User Enabled` checkbox.
17 |
18 | ## Voicemail
19 |
20 | Each user can have a voicemail box. To enable voicemail for a user, go to `Users` -> `User Management`, click on ACLS button for the user you want to enable voicemail for, and tick the `VM Enabled` checkbox.
21 | Now you must select what scenarios will trigger the voicemail redirect. In the same `ACLs` window, you can select the following:
22 | * `VM Permanent Redirect` - if enabled, the call will always be redirected to voicemail
23 | * `VM Redirect Not Found` - if enabled, the call will be redirected to voicemail if the callee is not found
24 | * `VM Redirect on Busy` - if enabled, the call will be redirected to voicemail if the callee rejects the call
25 | * `VM Redirect on No Answer` - if enabled, the call will be redirected to voicemail if the callee does not answer
26 |
27 | ## Call Forward
28 |
29 | When you add a new user (or edit an existing one), you can set up call forwarding for him. There are 4 scenarios:
30 | * `Always Forward` - if present, the call will always be forwarded to the URI specified in this field
31 | * `Busy Forward` - if present, the call will be forwarded to the URI specified in this field if the callee rejects the call
32 | * `No Answer Forward` - if present, the call will be forwarded to the URI specified in this field if the callee does not answer
33 | * `Not Found Forward` - if present, the call will be forwarded to the URI specified in this field if the callee is not found
34 |
35 | You must use SIP URIs like: `sip:cf_user@domain.sip`.
36 |
37 | ## DIDs
38 |
39 | From the OpenSIPS Control Panel, you can add DIDs to users. Go to `Users` -> `Alias Management` and click on the `Add New Alias` button. Fill in the required fields and click `Create`.
40 |
41 | ## PSTN Routing
42 |
43 | You can also tweak inbound and outbound routing for PSTN calls using Control Panel web interface. From the left panel, go to `System` -> `Dynamic Routing`. There are three tabs:
44 | * **Gateways** - here you can manage gateways
45 | * **Carriers** - here you can manage carriers
46 | * **Rules** - here you can manage routing rules
47 |
48 | To allow one user to make PSTN calls, you must enable the `Enable PSTN` ACL for him.
49 |
--------------------------------------------------------------------------------
/docs/homer.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Homer
2 |
3 | The [Homer](https://github.com/sipcapture/homer) project can be used to capture and analyze call flows.
4 | There is a containerized version of Homer available [here](https://github.com/sipcapture/homer-docker).
5 |
6 | ## Installation
7 |
8 | To install Homer, you need to clone the repository and start the containers:
9 |
10 | ```shell
11 | git clone https://github.com/sipcapture/homer-docker.git
12 | cd homer-docker/all-in-one
13 | docker compose up -d # or docker-compose up -d
14 | ```
15 |
16 | A web interface will be available at [http://localhost:3000](http://localhost:3000) with the following credentials:
17 | * username: `admin`
18 | * password: `admin`
19 |
20 | Homer will listen for HEP traffic on port 9060 and will be accessible via port forwarding from the host machine.
21 |
22 | After setting up Homer, you need to enable it in the environment file; edit
23 | `.env` and switch the `ENABLE_HOMER=yes`; Make sure `HOMER_IP` and
24 | `HOMER_PORT` variables are pointing to the correct values (`HOST_IP:9060`).
25 |
--------------------------------------------------------------------------------
/docs/provisioning.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Provisioning
2 |
3 | The SoftSwitch can be provisioned through different interfaces
4 |
5 | ## OpenSIPS Control Panel
6 |
7 | The simplest way to provision the SoftSwitch is through the OpenSIPS Control Panel. You can access it at [http://localhost/cp](http://localhost/cp) using the following credentials:
8 | * username: `admin`
9 | * password: `opensips`
10 |
11 | Here you can use various web interface tools to manage: **users**, **aliases**, **domains**, **PSTN traffic**, **dialplans**.
12 | You can also send **MI commands** to OpenSIPS or view **statistics** and **logs**.
13 |
14 | ## OpenSIPS CLI
15 |
16 | You can run CLI commands by running the following command to execute `opensips-cli` in the OpenSIPS container:
17 | ```shell
18 | docker exec -it opensips opensips-cli # to enter in interactive mode
19 | Welcome to OpenSIPS Command Line Interface!
20 | (opensips-cli):
21 |
22 | # or run a single command, for example:
23 | docker exec -it opensips opensips-cli -x mi reload_routes
24 | ```
25 |
26 | ## MySQL
27 |
28 | You can also provision the SoftSwitch by directly accessing the MySQL database.
29 |
30 | ```shell
31 | # using a Docker exec command to access the MySQL container
32 | docker exec -it mysql mysql -uopensips -popensipsrw -D opensips
33 |
34 | # or use the IP address and port
35 | mysql -h $MYSQL_IP --port=$MYSQL_PORT -uopensips -popensipsrw -D opensips
36 | ```
37 |
--------------------------------------------------------------------------------
/docs/setup.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Setup
2 |
3 | ## Prerequisites
4 |
5 | To run this platform, you need to have [Docker](https://www.docker.com/) and [Docker
6 | Compose](https://docs.docker.com/compose/) installed on your machine. Also, `git` is another requirement to clone the repository.
7 |
8 | ## Network
9 |
10 | The platform uses a bridge network to connect the containers. This means that the containers can communicate with each other using their IP addresses. The IP addresses are set in the [.env](/.env) file.
11 |
12 | To access the containers from outside this network, port forwarding is used to map the ports from the host machine to the containers. (e.g. OpenSIPS-CP container will be accessible at `localhost:80`).
13 |
14 | Containers may also have access to every service on the host machine that is listening on some port. This is why the **HOST_IP** address is set in the [.env](/.env) file and you **MUST** set it to the IP address of an interface from the host machine.
15 |
16 | ## Configuration
17 |
18 | There is the `.env` file where you can set up the following variables:
19 | - `HOST_IP`: IP address of a interface from the host machine; defaults to the
20 | first IP associated on the host
21 | - `NETWORK`: IP addresses class for Docker containers in CIDR notation (IP/mask);
22 | default is `172.72.0.0/24`
23 | - `OPENSIPS_IP`: IP address of the OpenSIPS container; default is `172.72.0.2`
24 | - `MYSQL_IP`: IP address of the MySQL container; default is `172.72.0.3`
25 | - `MYSQL_ROOT_PASSWORD`: root password for MySQL container; default is `root`
26 | - `MYSQL_DATABASE`: database name for OpenSIPS; default is `opensips`
27 | - `MYSQL_USER`: database user for OpenSIPS; default is `opensips`
28 | - `MYSQL_PASSWORD`: password for OpenSIPS database user; default is
29 | `opensipsrw`
30 | - `CP_IP`: IP address of the OpenSIPS-CP container; default is `172.72.0.4`
31 | - `RTPPROXY_IP`: IP address of the RTPProxy container; default is `172.72.0.5`
32 | - `RTPPROXY_PORT`: listening port for RTPProxy; default is `7899`
33 | - `MINPORT`: minimum of the port range for RTPProxy; default is `30000`
34 | - `MAXPORT`: maximum of the port range for RTPProxy; default is `30100`
35 | - `FREESWITCH_IP`: IP address of the FreeSWITCH container; default is
36 | `172.72.0.6`
37 | - `ENABLE_HOMER`: enable or disable Homer SIP capture (`yes`/`no`); check the [Homer](homer.md) section to enable it; default is `no`/disabled
38 | - `HOMER_IP`: Homer IP used to trace the traffic; check the [Homer](homer.md); default is `HOST_IP`
39 | - `HOMER_Port`: Homer port used to trace the traffic; check the [Homer](homer.md); default is `9060`
40 | - `DEFAULT_DOMAIN`: a default domain provided for OpenSIPS; default is
41 | `domain.sip`
42 |
43 | ## Start Service
44 |
45 | Once the configuration is finalized (i.e. editting the `.env` file), you can
46 | start the service using:
47 | ``` shell
48 | docker-compose up # if you use the standalone Docker Compose
49 |
50 | # use --build when you need to rebuild the images (e.g. after editing the modules.inc.php)
51 | docker-compose up --build
52 |
53 | # or
54 | docker compose up --build # if you use the Docker Compose plugin
55 |
56 | # add -d to run in detached mode
57 | docker-compose up --build -d
58 | ```
59 |
--------------------------------------------------------------------------------
/docs/testing.md:
--------------------------------------------------------------------------------
1 | # OpenSIPS SoftSwitch - Community Edition - Testing
2 |
3 | OpenSIPS SoftSwitch comes with a set of tests to validate the correctness of
4 | the platform.
5 |
6 | ## Testing
7 |
8 | The following tests suite is available:
9 | * [01.register_disabled](/sipssert/01.register_disabled/): checks that a disabled user cannot register
10 | * [01.register_enabled](/sipssert/01.register_enabled/): tests that an enabled user can register
11 | * [02.call](/sipssert/02.call/): verifies that a user - *caller* can call another user - *callee*
12 | * [02.call_disabled_callee](/sipssert/02.call_disabled_callee/): checks that a disabled user cannot receive calls; first, *caller* and *callee* register, then *callee* is disabled and *caller* tries to call *callee* 2 times: first time the call is completed, the second time, after 70 seconds, the call is rejected (because *callee*'s REGISTER expires)
13 | * [02.call_disabled_caller](/sipssert/02.call_disabled_caller/): tests that a disabled *caller* cannot make calls
14 | * [03.call_unregistered_callee](/sipssert/03.call_unregistered_callee/): checks that a call with an unregistered *callee* is rejected
15 | * [03.call_vm_not_found](/sipssert/03.call_vm_not_found/): checks that a call with an unregistered *callee* is redirected to voicemail if *callee* has voicemail enabled for *not found* scenario
16 | * [04.call_callee_reject](/sipssert/04.call_callee_reject/): checks that a call rejected by *callee* is correctly handled
17 | * [04.call_vm_busy](/sipssert/04.call_vm_busy/): tests that a call rejected by *callee* is redirected to voicemail if *callee* has voicemail enabled for *busy* scenario
18 | * [05.call_no_answer](/sipssert/05.call_no_answer/): checks that a call with no answer is correctly handled
19 | * [05.call_vm_no_answer](/sipssert/05.call_vm_no_answer/): verifies that a call with no answer is redirected to voicemail if *callee* has voicemail enabled for *no answer* scenario
20 | * [06.db_dnd](/sipssert/06.db_dnd/): checks if DND ACL works correctly by enabling/disabling it in the database
21 | * [06.star_dnd](/sipssert/06.star_dnd/): tests if DND ACL works correctly by using the star code to enable/disable it
22 | * [06.star_dnd_with_vm](/sipssert/06.star_dnd_with_vm/): checks if DND ACL works correctly by using the star code to enable/disable it, when voicemail is enabled for *callee* for *busy* scenario
23 | * [07.cf_always](/sipssert/07.cf_always/): tests that a call is always forwarded to a different URI if *callee* has call forwarding enabled for *always* scenario
24 | * [07.cf_busy](/sipssert/07.cf_busy/): verifies that a rejected call is forwarded to a different URI if *callee* has call forwarding enabled for *busy* scenario
25 | * [07.cf_no_answer](/sipssert/07.cf_no_answer/): tests that a call with no answer is forwarded to a different URI if *callee* has call forwarding enabled for *no answer* scenario
26 | * [07.cf_not_found](/sipssert/07.cf_not_found/): checks that a call with an unregistered *callee* is forwarded to a different URI if *callee* has call forwarding enabled for *not found* scenario
27 | * [08.call_did](/sipssert/08.call_did/): checks if *callee* can receive calls on a DID assigned to him
28 | * [09.unknown_domain_callee](/sipssert/09.unknown_domain_callee/): tests that a call to a local IP address is completed
29 | * [09.unknown_domain_caller](/sipssert/09.unknown_domain_caller/): verifies that a call from an unknown domain is rejected
30 | * [10.listen_vm_disabled](/sipssert/10.listen_vm_disabled/): checks that a user cannot listen to voicemail if voicemail is disabled
31 | * [10.listen_vm_enabled](/sipssert/10.listen_vm_enabled/): tests that a user can listen to voicemail if voicemail is enabled
32 | * [11.call_gateway](/sipssert/11.call_gateway/): checks that a call to a known gateway is completed
33 | * [11.gateway_call_did](/sipssert/11.gateway_call_did/): tests that a call coming from a known gateway is completed
34 |
35 | ## Running the tests
36 |
37 | The following command will start a Docker container that will run these SIPssert scenarios:
38 | ``` shell
39 | ./run-sipssert.sh
40 |
41 | # or, if you want to run a specific test
42 | ./run-sipssert.sh sipssert/ -t 01.register_enabled
43 | ```
44 |
--------------------------------------------------------------------------------
/etc/freeswitch/conf/00_vars.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | eval "sed -E -i 's/external_sip_ip=[^\"]+/external_sip_ip=${FREESWITCH_IP}/' /etc/freeswitch/vars.xml"
4 | eval "sed -E -i 's/external_rtp_ip=[^\"]+/external_rtp_ip=${FREESWITCH_IP}/' /etc/freeswitch/vars.xml"
5 |
--------------------------------------------------------------------------------
/etc/freeswitch/dialplan/public.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/etc/mysql/00_config_db.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Installing OpenSIPS database schema..."
4 |
5 | cd "$(dirname "$0")"
6 | . functions
7 |
8 | TABLE_FILES=(
9 | "acc-create.sql"
10 | "alias_db-create.sql"
11 | "auth_db-create.sql"
12 | "dialog-create.sql"
13 | "dialplan-create.sql"
14 | "dispatcher-create.sql"
15 | "domain-create.sql"
16 | "drouting-create.sql"
17 | "presence-create.sql"
18 | "rtpproxy-create.sql"
19 | "sqlops-create.sql"
20 | "usrloc-create.sql"
21 | )
22 |
23 | add_table /usr/share/opensips/mysql/standard-create.sql
24 |
25 | for file in "${TABLE_FILES[@]}"; do
26 | add_table /usr/share/opensips/mysql/$file
27 | done
28 |
--------------------------------------------------------------------------------
/etc/mysql/10_config_acc.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Configuring OpenSIPS acc table..."
4 |
5 | cd "$(dirname "$0")"
6 | . functions
7 |
8 | add_column acc caller_ip
9 | add_column acc caller_ua
10 | add_column acc callee_ip
11 | add_column acc callee_ua
12 | add_column acc caller_id
13 | add_column acc callee_id
14 | add_column acc leg_status
15 |
--------------------------------------------------------------------------------
/etc/mysql/10_config_dialplan.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Configuring OpenSIPS CP Dialplan Tool ..."
4 |
5 | add_dp_rule() {
6 | local attr="$1"
7 | local regex="$2"
8 | local subst="$3"
9 | local repl="$4"
10 |
11 | [ -n "$subst" ] && subst="'$subst'" || subst=NULL
12 | [ -n "$repl" ] && repl="'$repl'" || repl=NULL
13 |
14 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D"${MYSQL_DATABASE}" -e \
15 | "INSERT INTO dialplan (dpid, match_op, match_exp, subst_exp, repl_exp, attrs)
16 | SELECT 1, 1, '${regex}', ${subst}, ${repl}, '${attr}'
17 | WHERE NOT EXISTS (
18 | SELECT 1 FROM dialplan WHERE dpid = 1 AND attrs = '${attr}');"
19 | }
20 |
21 | add_dp_rule DP_DID '^(\\+|00|011)?[1-9][0-9]{6,}$' '^(\\+|00|011)?([1-9][0-9]{6,})$' '\\2'
22 | add_dp_rule DP_USER '^[a-zA-Z][a-zA-Z0-9\\-_\\.]{4,}$'
23 | add_dp_rule DP_DND_ON '^\\*78$'
24 | add_dp_rule DP_DND_OFF '^\\*79$'
25 | add_dp_rule DP_VMLISTEN '^\\*98$'
26 |
--------------------------------------------------------------------------------
/etc/mysql/10_config_domain.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Configuring OpenSIPS CP Domain Tool ..."
4 |
5 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D"${MYSQL_DATABASE}" -e \
6 | "INSERT INTO domain (domain)
7 | SELECT '${DEFAULT_DOMAIN}'
8 | WHERE NOT EXISTS (
9 | SELECT 1 FROM domain WHERE domain = '${DEFAULT_DOMAIN}');"
10 |
--------------------------------------------------------------------------------
/etc/mysql/10_config_rtpproxy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Configuring OpenSIPS CP RTPProxy Tool ..."
4 |
5 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D ${MYSQL_DATABASE} -e \
6 | "INSERT INTO rtpproxy_sockets (rtpproxy_sock, set_id)
7 | SELECT 'udp:${RTPPROXY_IP}:${RTPPROXY_PORT}', 0
8 | WHERE NOT EXISTS (
9 | SELECT 1 FROM rtpproxy_sockets WHERE rtpproxy_sock = 'udp:${RTPPROXY_IP}:${RTPPROXY_PORT}');"
10 |
11 |
--------------------------------------------------------------------------------
/etc/mysql/10_config_subscriber.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Configuring OpenSIPS subscriber table..."
4 |
5 | cd "$(dirname "$0")"
6 | . functions
7 |
8 | add_column subscriber cli
9 | add_column subscriber acls 'varchar(32) DEFAULT "" NOT NULL'
10 | add_column subscriber cfaw_uri
11 | add_column subscriber cfbs_uri
12 | add_column subscriber cfna_uri
13 | add_column subscriber cfnf_uri
14 |
--------------------------------------------------------------------------------
/etc/mysql/20_create_dids.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "Configuring DIDs Table ..."
4 |
5 | TABLE_EXISTS=$(mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D"${MYSQL_DATABASE}" -e \
6 | "SELECT 1 FROM information_schema.tables WHERE table_schema = '${MYSQL_DATABASE}' AND table_name = 'dids';")
7 |
8 | if [ -n "$TABLE_EXISTS" ]; then
9 | echo "Table dids already exists"
10 | else
11 | echo "Creating dids table"
12 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D"${MYSQL_DATABASE}" -e \
13 | "INSERT INTO version (table_name, table_version) values ('dids','1');"
14 |
15 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D"${MYSQL_DATABASE}" -e \
16 | "CREATE TABLE dids (
17 | id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
18 | alias_username CHAR(64) DEFAULT '' NOT NULL,
19 | alias_domain CHAR(64) DEFAULT '' NOT NULL,
20 | username CHAR(64) DEFAULT '' NOT NULL,
21 | domain CHAR(64) DEFAULT '' NOT NULL,
22 | CONSTRAINT alias_idx UNIQUE (alias_username, alias_domain)
23 | ) ENGINE=InnoDB;"
24 |
25 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D"${MYSQL_DATABASE}" -e \
26 | "CREATE INDEX target_idx ON dids (username, domain);"
27 | fi
28 |
--------------------------------------------------------------------------------
/etc/mysql/functions:
--------------------------------------------------------------------------------
1 | add_column() {
2 | table_name=$1
3 | column_name=$2
4 | column_options=${3:-'VARCHAR(255) DEFAULT NULL'}
5 |
6 | COLUMN_EXISTS=$(mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D ${MYSQL_DATABASE} -e \
7 | "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '${table_name}' AND COLUMN_NAME = '${column_name}';")
8 |
9 | [ -z "$COLUMN_EXISTS" ] && mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D ${MYSQL_DATABASE} -e \
10 | "ALTER TABLE ${table_name} ADD COLUMN ${column_name} ${column_options};"
11 | }
12 |
13 | add_parameter() {
14 | module_name=$1
15 | param_name=$2
16 | value=$3
17 |
18 | mysql -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D ${MYSQL_DATABASE} -e \
19 | "INSERT INTO ocp_tools_config (module, param, value)
20 | SELECT '${module_name}', '${param_name}', ${value}
21 | WHERE NOT EXISTS (
22 | SELECT 1 FROM ocp_tools_config WHERE module = '${module_name}' AND param = '${param_name}');"
23 | }
24 |
25 | extract_table_name() {
26 | local sql_file="$1"
27 |
28 | table_name=$(grep -m 1 -oP 'CREATE TABLE\s+\K[`'\'']?(\w+)[`'\'']?' $sql_file | grep -oP '[`'\'']?\K\w+')
29 |
30 | echo $table_name
31 | }
32 |
33 | add_table() {
34 | local sql_file="$1"
35 |
36 | echo "Adding tables from $sql_file"
37 |
38 | mysql --force -h ${MYSQL_IP} -u ${MYSQL_USER} -p"${MYSQL_PASSWORD}" -D ${MYSQL_DATABASE} < $sql_file
39 | }
40 |
--------------------------------------------------------------------------------
/etc/opensips-cp/docker-entrypoint.d/00_config_db.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cd "$(dirname "$0")"
4 | . functions
5 |
6 | echo "Configuring OpenSIPS-CP database connection..."
7 |
8 | sed -i "s/localhost/${MYSQL_IP}/g" /var/www/html/opensips-cp/config/db.inc.php
9 |
10 | sed -i "s/127.0.0.1/${OPENSIPS_IP}/g" /var/www/html/opensips-cp/config/db_schema.mysql
11 |
12 | add_table /var/www/html/opensips-cp/config/db_schema.mysql
13 |
--------------------------------------------------------------------------------
/etc/opensips-cp/docker-entrypoint.d/10_config_user_management.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cd "$(dirname "$0")"
4 | . functions
5 |
6 | echo "Configuring OpenSIPS CP User Management Tool ..."
7 |
8 | # Password Mode
9 | add_parameter user_management passwd_mode '1'
10 |
11 | # ACLs
12 | cp -u user_management/acls.inc.php /var/www/html/opensips-cp/config/tools/users/user_management/
13 | cp -u user_management/user_management_acls.php /var/www/html/opensips-cp/web/tools/users/user_management/
14 |
15 | add_parameter user_management subs_extra_actions "UNHEX('7B2261636C73223A7B22686561646572223A2241434C73222C2269636F6E223A222E2E5C2F2E2E5C2F2E2E5C2F696D616765735C2F73686172655C2F6163636573732E706E67222C22616374696F6E223A225365742041434C73222C22616374696F6E5F66696C65223A22757365725F6D616E6167656D656E745F61636C732E706870222C22616374696F6E5F66756E63223A2266756E6374696F6E202824726573756C7429207B2072657475726E205C226A6176617363726970743A3B5C5C5C22206F6E636C69636B3D5C5C5C2272756E5F696E5F77696E646F772827757365725F6D616E6167656D656E745F61636C732E7068703F7569643D5C222E24726573756C745B276964275D2E5C2227295C223B7D227D7D')"
16 |
17 | add_parameter user_management subs_extra "UNHEX('7B22636661775F757269223A7B22686561646572223A22416C7761797320466F7277617264222C22696E666F223A22416C7761797320666F72776172642063616C6C7320746F207468697320555249222C2273686F775F696E5F6D61696E5F666F726D223A747275652C2273686F775F696E5F6164645F666F726D223A747275652C2273686F775F696E5F656469745F666F726D223A747275652C2269735F6F7074696F6E616C223A2279222C2273656172636861626C65223A66616C73657D2C22636662735F757269223A7B22686561646572223A224275737920466F7277617264222C22696E666F223A225768656E20627573792C20666F7277617264207468652063616C6C20746F207468697320555249222C2273686F775F696E5F6D61696E5F666F726D223A747275652C2273686F775F696E5F6164645F666F726D223A747275652C2273686F775F696E5F656469745F666F726D223A747275652C2269735F6F7074696F6E616C223A2279222C2273656172636861626C65223A66616C73657D2C2263666E615F757269223A7B22686561646572223A224E6F20416E7377657220466F7277617264222C22696E666F223A225768656E207468657265206973206E6F20616E737765722C20666F7277617264207468652063616C6C20746F207468697320555249222C2273686F775F696E5F6D61696E5F666F726D223A747275652C2273686F775F696E5F6164645F666F726D223A747275652C2273686F775F696E5F656469745F666F726D223A747275652C2269735F6F7074696F6E616C223A2279222C2273656172636861626C65223A66616C73657D2C2263666E665F757269223A7B22686561646572223A224E6F7420466F756E6420466F7277617264222C22696E666F223A225768656E2063616C6C6565206973206E6F7420666F756E642C20666F7277617264207468652063616C6C20746F207468697320555249222C2273686F775F696E5F6D61696E5F666F726D223A747275652C2273686F775F696E5F6164645F666F726D223A747275652C2273686F775F696E5F656469745F666F726D223A747275652C2269735F6F7074696F6E616C223A2279222C2273656172636861626C65223A66616C73657D7D')"
18 |
19 | add_parameter user_management user_format_func "UNHEX('66756E6374696F6E28247573657229207B0D0A202020207265717569726528226D695F636F6D6D2E70687022293B0D0A202020207265717569726528226366675F636F6D6D2E70687022293B0D0A0D0A20202020246D695F636F6E6E6563746F7273203D206765745F70726F7879735F62795F6173736F635F6964286765745F73657474696E67735F76616C7565282774616C6B5F746F5F746869735F6173736F635F69642729293B0D0A0D0A20202020246572726F7273203D205B5D3B0D0A0D0A2020202069662028656D70747928246D695F636F6E6E6563746F72732929207B0D0A202020202020202072657475726E2066616C73653B0D0A202020207D0D0A0D0A2020202024726573756C74203D206D695F636F6D6D616E64282264705F7472616E736C617465222C205B226470696422203D3E20312C2022696E70757422203D3E2024757365725D2C20246D695F636F6E6E6563746F72735B305D2C20246572726F7273293B0D0A0D0A202020206966202821656D70747928246572726F72732929207B0D0A202020202020202072657475726E2066616C73653B0D0A202020207D0D0A0D0A2020202072657475726E2024726573756C745B2241545452494255544553225D203D3D202244505F55534552223B0D0A7D')"
20 |
--------------------------------------------------------------------------------
/etc/opensips-cp/docker-entrypoint.d/20_config_alias_management.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cd "$(dirname "$0")"
4 | . functions
5 |
6 | echo "Configuring OpenSIPS CP Alias Management Tool ..."
7 |
8 | add_parameter alias_management table_aliases "'{\"DIDs\":\"dids\"}'"
9 | add_parameter alias_management implicit_domain '1'
10 | add_parameter alias_management suppress_alias_type '1'
11 |
--------------------------------------------------------------------------------
/etc/opensips-cp/docker-entrypoint.d/30_config_drouting.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cd "$(dirname "$0")"
4 | . functions
5 |
6 | echo "Configuring OpenSIPS CP Dynamic Routing Tool..."
7 |
8 | add_parameter drouting tabs "'gateways.php,carriers.php,rules.php'"
9 | add_parameter drouting group_ids_file "'{\"1\":\"Default\"}'"
10 | add_parameter drouting gw_attributes_mode "'none'"
11 | add_parameter drouting carrier_attributes_mode "'none'"
12 |
--------------------------------------------------------------------------------
/etc/opensips-cp/docker-entrypoint.d/user_management/acls.inc.php:
--------------------------------------------------------------------------------
1 | "User Enabled",
25 | "N" => "Force NAT",
26 | "P" => "Enable PSTN",
27 | "D" => "DND",
28 | "4" => "VM Enabled",
29 | "5" => "VM Permanent Redirect",
30 | "6" => "VM Redirect Not Found",
31 | "7" => "VM Redirect on Busy",
32 | "8" => "VM Redirect on No Answer"
33 | );
34 |
35 | ?>
36 |
--------------------------------------------------------------------------------
/etc/opensips-cp/docker-entrypoint.d/user_management/user_management_acls.php:
--------------------------------------------------------------------------------
1 | prepare($sql);
23 | if ($stm===FALSE || $stm->execute( array($acls, $uid) )===FALSE) {
24 | $errors[] = 'Failed to update subscriber\'s ACLS';
25 | }
26 | }else{
27 | $errors[] = "User with Read-Only Rights";
28 | }
29 |
30 | return;
31 | }
32 |
33 | # otherwise, we query for the user
34 | $stm = $link->prepare($sql);
35 | if ($stm === false) {
36 | die('Failed to issue query ['.$sql.'], error message : ' . print_r($link->errorInfo(), true));
37 | }
38 | $stm->execute( array($uid) );
39 | $info = $stm->fetchAll(PDO::FETCH_ASSOC)[0];
40 |
41 | // we consider 20 as a reasonable number of acls / row
42 | $max_rows = 20;
43 | if (sizeof($config_user_acls) <= $max_rows) {
44 | $height = 80 + sizeof($config_user_acls) * 25;
45 | $columns = 1;
46 | } else {
47 | $height = 580;
48 | $columns = ceil(sizeof($config_user_acls) / $max_rows);
49 | }
50 |
51 | ?>
52 |
94 |
95 |
--------------------------------------------------------------------------------
/etc/opensips-cp/image/modules.inc.php:
--------------------------------------------------------------------------------
1 | array (
29 | "enabled" => true,
30 | "name" => "Access"
31 | ),
32 | "boxes_config" => array (
33 | "enabled" => true,
34 | "name" => "Boxes"
35 | ),
36 | "db_config" => array (
37 | "enabled" => true,
38 | "name" => "DB config"
39 | )
40 | );
41 |
42 | $config_modules = array (
43 | "dashboard" => array (
44 | "enabled" => true,
45 | "name" => "Dashboard",
46 | "icon" => "images/icon-dashboard.png",
47 | "modules" => array (
48 | "dashboard" => array (
49 | "enabled" => true,
50 | "name" => "Dashboard",
51 | "path" => "system/dashboard"
52 | ),
53 | )
54 | ),
55 | "users" => array (
56 | "enabled" => true,
57 | "name" => "Users",
58 | "icon" => "images/icon-user.svg",
59 | "modules" => array (
60 | "user_management" => array (
61 | "enabled" => true,
62 | "name" => "User Management"
63 | ),
64 | "alias_management" => array (
65 | "enabled" => true,
66 | "name" => "Alias Management"
67 | ),
68 | "group_management" => array (
69 | "enabled" => false,
70 | "name" => "Group Management"
71 | ),
72 | )
73 | ),
74 | "system" => array (
75 | "enabled" => true,
76 | "name" => "System",
77 | "icon" => "images/icon-system.svg",
78 | "modules" => array (
79 | "addresses" => array (
80 | "enabled" => false,
81 | "name" => "Addresses"
82 | ),
83 | "callcenter" => array (
84 | "enabled" => false,
85 | "name" => "Callcenter"
86 | ),
87 | "cdrviewer" => array (
88 | "enabled" => true,
89 | "name" => "CDR Viewer"
90 | ),
91 | "dialog" => array (
92 | "enabled" => true,
93 | "name" => "Dialog"
94 | ),
95 | "dialplan" => array (
96 | "enabled" => true,
97 | "name" => "Dialplan"
98 | ),
99 | "dispatcher" => array (
100 | "enabled" => true,
101 | "name" => "Dispatcher"
102 | ),
103 | "domains" => array (
104 | "enabled" => true,
105 | "name" => "Domains"
106 | ),
107 | "drouting" => array (
108 | "enabled" => true,
109 | "name" => "Dynamic Routing"
110 | ),
111 | "clusterer" => array (
112 | "enabled" => false,
113 | "name" => "Clusterer"
114 | ),
115 | "keepalived" => array (
116 | "enabled" => false,
117 | "name" => "Keepalived"
118 | ),
119 | "loadbalancer" => array (
120 | "enabled" => false,
121 | "name" => "Load Balancer"
122 | ),
123 | "mi" => array (
124 | "enabled" => true,
125 | "name" => "MI Commands"
126 | ),
127 | "monit" => array (
128 | "enabled" => false,
129 | "name" => "Monit"
130 | ),
131 | "rtpproxy" => array (
132 | "enabled" => true,
133 | "name" => "RTPProxy"
134 | ),
135 | "rtpengine" => array (
136 | "enabled" => false,
137 | "name" => "RTPEngine"
138 | ),
139 | "siptrace" => array (
140 | "enabled" => false,
141 | "name" => "SIP Trace"
142 | ),
143 | "smonitor" => array (
144 | "enabled" => true,
145 | "name" => "Statistics Monitor"
146 | ),
147 | "statusreport" => array (
148 | "enabled" => true,
149 | "name" => "Status Report"
150 | ),
151 | "tls_mgm" => array (
152 | "enabled" => false,
153 | "name" => "TLS Management"
154 | ),
155 | "uac_registrant" => array (
156 | "enabled" => false,
157 | "name" => "UAC Registrant"
158 | ),
159 | "smpp" => array (
160 | "enabled" => false,
161 | "name" => "SMPP Gateway"
162 | ),
163 | "tcp_mgm" => array (
164 | "enabled" => false,
165 | "name" => "TCP Management"
166 | ),
167 | "tracer" => array (
168 | "enabled" => false,
169 | "name" => "Tracer"
170 | ),
171 | )
172 | ),
173 | );
174 |
175 |
176 |
177 |
178 | ?>
179 |
--------------------------------------------------------------------------------
/run-sipssert.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | TESTS_DIR=${1:-tests}
4 | test -n "$1" && shift
5 |
6 | docker run --rm -t \
7 | --env-file .env \
8 | -v /var/run/docker.sock:/var/run/docker.sock \
9 | -v "$(pwd)/${TESTS_DIR}":"$(pwd)/${TESTS_DIR}" \
10 | -w "$(pwd)/${TESTS_DIR}" \
11 | opensips/sipssert . $@
12 |
--------------------------------------------------------------------------------
/tests/01.register_disabled/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 30
3 |
4 | init_tasks:
5 | - name: Disable ACL caller
6 | type: mysql-client
7 | script: scripts/disable_user.sh
8 | args: {{ caller }} {{ default_domain }}
9 |
10 | - name: Disable ACL callee
11 | type: mysql-client
12 | script: scripts/disable_user.sh
13 | args: {{ callee }} {{ default_domain }}
14 |
15 | tasks:
16 | - name: Register caller
17 | type: uac-sipp
18 | username: {{ caller }}
19 | password: "{{ caller_password }}"
20 | config_file: scripts/sipp-register.xml
21 | ip: {{ caller_ip }}
22 | port: {{ caller_port }}
23 |
24 | - name: Register callee
25 | type: uac-sipp
26 | username: {{ callee }}
27 | password: "{{ callee_password }}"
28 | config_file: scripts/sipp-register.xml
29 | ip: {{ callee_ip }}
30 | port: {{ callee_port }}
31 |
32 | - name: MI check Not Registered caller
33 | type: opensips-mi
34 | script: scripts/check-register.py
35 | args: {{ caller }}
36 | require:
37 | after:
38 | task: Register caller
39 | wait: 1
40 |
41 | - name: MI check Not Registered callee
42 | type: opensips-mi
43 | script: scripts/check-register.py
44 | args: {{ callee }}
45 | require:
46 | after:
47 | task: Register callee
48 | wait: 1
49 |
50 | cleanup_tasks:
51 | - name: Enable ACL caller
52 | type: mysql-client
53 | script: scripts/enable_user.sh
54 | args: {{ caller }} {{ default_domain }}
55 |
56 | - name: Enable ACL callee
57 | type: mysql-client
58 | script: scripts/enable_user.sh
59 | args: {{ callee }} {{ default_domain }}
60 |
--------------------------------------------------------------------------------
/tests/01.register_disabled/scripts/check-register.py:
--------------------------------------------------------------------------------
1 | from opensips.mi import OpenSIPSMI, OpenSIPSMIException
2 | import sys
3 | import os
4 |
5 | conn = os.getenv('CONN', 'http')
6 | url = os.getenv('URL', 'http://localhost:8888/mi')
7 | handler = OpenSIPSMI(conn=conn, url=url)
8 |
9 | if len(sys.argv) < 2:
10 | print("FAILED: Usage: check-register.py ")
11 | sys.exit(1)
12 |
13 | username = sys.argv[1]
14 |
15 | out = handler.execute('ul_dump')
16 | l = len(out['Domains'][0]['AORs'])
17 |
18 | found = False
19 |
20 | for i in range(l):
21 | if out['Domains'][0]['AORs'][i]['AOR'].startswith(username):
22 | found = True
23 | break
24 |
25 | if found:
26 | print("FAILED: User %s found" % username)
27 | sys.exit(1)
28 |
29 | print("SUCCESS: User %s not found" % username)
30 | sys.exit(0)
31 |
--------------------------------------------------------------------------------
/tests/01.register_disabled/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/01.register_disabled/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/01.register_disabled/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/01.register_enabled/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 30
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: MI check Register caller
22 | type: opensips-mi
23 | script: scripts/check-register.py
24 | args: {{ caller }}
25 | require:
26 | after:
27 | task: Register caller
28 | wait: 1
29 |
30 | - name: MI check Register callee
31 | type: opensips-mi
32 | script: scripts/check-register.py
33 | args: {{ callee }}
34 | require:
35 | after:
36 | task: Register callee
37 | wait: 1
38 |
39 | cleanup_tasks:
40 | - name: Delete caller AOR
41 | type: opensips-mi
42 | args: ul_rm location {{ caller }}@{{ default_domain }}
43 |
44 | - name: Delete callee AOR
45 | type: opensips-mi
46 | args: ul_rm location {{ callee }}@{{ default_domain }}
47 |
--------------------------------------------------------------------------------
/tests/01.register_enabled/scripts/check-register.py:
--------------------------------------------------------------------------------
1 | from opensips.mi import OpenSIPSMI, OpenSIPSMIException
2 | import sys
3 | import os
4 |
5 | conn = os.getenv('CONN', 'http')
6 | url = os.getenv('URL', 'http://localhost:8888/mi')
7 | handler = OpenSIPSMI(conn=conn, url=url)
8 |
9 | if len(sys.argv) < 2:
10 | print("FAILED: Usage: check-register.py ")
11 | sys.exit(1)
12 |
13 | username = sys.argv[1]
14 |
15 | out = handler.execute('ul_dump')
16 | l = len(out['Domains'][0]['AORs'])
17 |
18 | found = False
19 |
20 | for i in range(l):
21 | if out['Domains'][0]['AORs'][i]['AOR'].startswith(username):
22 | found = True
23 | break
24 |
25 | if not found:
26 | print("FAILED: User %s not found" % username)
27 | sys.exit(1)
28 |
29 | print("SUCCESS: User %s found" % username)
30 | sys.exit(0)
31 |
--------------------------------------------------------------------------------
/tests/01.register_enabled/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/02.call/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: Caller UAC
22 | type: uac-sipp
23 | username: {{ caller }}
24 | password: "{{ caller_password }}"
25 | config_file: scripts/caller.xml
26 | ip: {{ caller_ip }}
27 | port: {{ caller_port }}
28 | require:
29 | - after:
30 | task: Register caller
31 |
32 | - name: Callee UAC
33 | type: uas-sipp
34 | username: {{ callee }}
35 | password: "{{ callee_password }}"
36 | config_file: scripts/callee.xml
37 | ip: {{ callee_ip }}
38 | port: {{ callee_port }}
39 | require:
40 | - after:
41 | task: Register callee
42 | - started:
43 | task: Caller UAC
44 |
45 | cleanup_tasks:
46 | - name: Delete caller AOR
47 | type: opensips-mi
48 | args: ul_rm location {{ caller }}@{{ default_domain }}
49 |
50 | - name: Delete callee AOR
51 | type: opensips-mi
52 | args: ul_rm location {{ callee }}@{{ default_domain }}
53 |
--------------------------------------------------------------------------------
/tests/02.call/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_callee/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 120
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: Disable ACL callee
22 | type: mysql-client
23 | script: scripts/disable_user.sh
24 | args: {{ callee }} {{ default_domain }}
25 | require:
26 | after:
27 | task: Register callee
28 | wait: 1
29 |
30 | - name: Caller UAC
31 | type: uac-sipp
32 | username: {{ caller }}
33 | password: "{{ caller_password }}"
34 | config_file: scripts/caller.xml
35 | ip: {{ caller_ip }}
36 | port: {{ caller_port }}
37 | require:
38 | - after:
39 | task: Disable ACL callee
40 |
41 | - name: Callee UAC
42 | type: uas-sipp
43 | username: {{ callee }}
44 | password: "{{ callee_password }}"
45 | config_file: scripts/callee.xml
46 | ip: {{ callee_ip }}
47 | port: {{ callee_port }}
48 | require:
49 | - after:
50 | task: Disable ACL callee
51 | - started:
52 | task: Caller UAC
53 |
54 | - name: Fail caller UAC
55 | type: uac-sipp
56 | username: {{ caller }}
57 | password: "{{ caller_password }}"
58 | config_file: scripts/caller-fail.xml
59 | ip: {{ caller_ip }}
60 | port: {{ caller_port }}
61 | require:
62 | - after:
63 | task: Register callee
64 | wait: 70
65 |
66 | - name: Enable ACL callee
67 | type: mysql-client
68 | script: scripts/enable_user.sh
69 | args: {{ callee }} {{ default_domain }}
70 | require:
71 | after:
72 | task: Fail caller UAC
73 | wait: 1
74 |
75 | cleanup_tasks:
76 | - name: Delete caller AOR
77 | type: opensips-mi
78 | args: ul_rm location {{ caller }}@{{ default_domain }}
79 |
80 | - name: Delete callee AOR
81 | type: opensips-mi
82 | args: ul_rm location {{ callee }}@{{ default_domain }}
83 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_callee/scripts/caller-fail.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]_fail:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]_fail:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]_fail:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | [peer_tag_param]
112 | From: ;tag=[call_number]
113 | Call-ID: [scenario]_fail:///[call_id]
114 | CSeq: 2 ACK
115 | Content-Length: 0
116 |
117 | ]]>
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_callee/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_callee/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_callee/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_caller/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Disable ACL caller
14 | type: mysql-client
15 | script: scripts/disable_user.sh
16 | args: {{ caller }} {{ default_domain }}
17 | require:
18 | after:
19 | task: Register caller
20 | wait: 1
21 |
22 | - name: Caller UAC
23 | type: uac-sipp
24 | username: {{ caller }}
25 | password: "{{ caller_password }}"
26 | config_file: scripts/caller.xml
27 | ip: {{ caller_ip }}
28 | port: {{ caller_port }}
29 | require:
30 | - after:
31 | task: Disable ACL caller
32 | wait: 1
33 |
34 | - name: Enable ACL caller
35 | type: mysql-client
36 | script: scripts/enable_user.sh
37 | args: {{ caller }} {{ default_domain }}
38 | require:
39 | after:
40 | task: Caller UAC
41 | wait: 1
42 |
43 | cleanup_tasks:
44 | - name: Delete caller AOR
45 | type: opensips-mi
46 | args: ul_rm location {{ caller }}@{{ default_domain }}
47 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_caller/scripts/caller.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | [peer_tag_param]
108 | From: ;tag=[call_number]
109 | Call-ID: [scenario]:///[call_id]
110 | CSeq: 2 ACK
111 | Content-Length: 0
112 |
113 | ]]>
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_caller/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_caller/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/02.call_disabled_caller/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/03.call_unregistered_callee/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Check callee not registered
14 | type: opensips-mi
15 | script: scripts/check-register.py
16 | args: {{ callee }}
17 |
18 | - name: Caller UAC
19 | type: uac-sipp
20 | username: {{ caller }}
21 | password: "{{ caller_password }}"
22 | config_file: scripts/caller.xml
23 | ip: {{ caller_ip }}
24 | port: {{ caller_port }}
25 | require:
26 | - after:
27 | task: Check callee not registered
28 |
29 | cleanup_tasks:
30 | - name: Delete caller AOR
31 | type: opensips-mi
32 | args: ul_rm location {{ caller }}@{{ default_domain }}
33 |
--------------------------------------------------------------------------------
/tests/03.call_unregistered_callee/scripts/caller.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | [peer_tag_param]
112 | From: ;tag=[call_number]
113 | Call-ID: [scenario]:///[call_id]
114 | CSeq: 2 ACK
115 | Content-Length: 0
116 |
117 | ]]>
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/tests/03.call_unregistered_callee/scripts/check-register.py:
--------------------------------------------------------------------------------
1 | from opensips.mi import OpenSIPSMI, OpenSIPSMIException
2 | import sys
3 | import os
4 |
5 | conn = os.getenv('CONN', 'http')
6 | url = os.getenv('URL', 'http://localhost:8888/mi')
7 | handler = OpenSIPSMI(conn=conn, url=url)
8 |
9 | if len(sys.argv) < 2:
10 | print("FAILED: Usage: check-register.py ")
11 | sys.exit(1)
12 |
13 | username = sys.argv[1]
14 |
15 | out = handler.execute('ul_dump')
16 | l = len(out['Domains'][0]['AORs'])
17 |
18 | found = False
19 |
20 | for i in range(l):
21 | if out['Domains'][0]['AORs'][i]['AOR'].startswith(username):
22 | found = True
23 | break
24 |
25 | if found:
26 | print("FAILED: User %s found" % username)
27 | sys.exit(1)
28 |
29 | print("SUCCESS: User %s not found" % username)
30 | sys.exit(0)
31 |
--------------------------------------------------------------------------------
/tests/03.call_unregistered_callee/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/03.call_vm_always/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | init_tasks:
5 | - name: Enable VM ALWAYS for callee
6 | type: mysql-client
7 | script: scripts/enable_vm.sh
8 | args: {{ callee }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register callee
20 | type: uac-sipp
21 | username: {{ callee }}
22 | password: "{{ callee_password }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ callee_ip }}
25 | port: {{ callee_port }}
26 |
27 | - name: Caller UAC
28 | type: uac-sipp
29 | username: {{ caller }}
30 | password: "{{ caller_password }}"
31 | config_file: scripts/caller.xml
32 | ip: {{ caller_ip }}
33 | port: {{ caller_port }}
34 | require:
35 | - after: Register caller
36 | - after: Register callee
37 |
38 | cleanup_tasks:
39 | - name: Delete caller AOR
40 | type: opensips-mi
41 | args: ul_rm location {{ caller }}@{{ default_domain }}
42 |
43 | - name: Delete callee AOR
44 | type: opensips-mi
45 | args: ul_rm location {{ callee }}@{{ default_domain }}
46 |
47 | - name: Disable VM ALWAYS for callee
48 | type: mysql-client
49 | script: scripts/disable_vm.sh
50 | args: {{ callee }} {{ default_domain }}
51 |
--------------------------------------------------------------------------------
/tests/03.call_vm_always/scripts/disable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(REPLACE(acls, '4', ''), '5', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/03.call_vm_always/scripts/enable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, '45') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/03.call_vm_always/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/03.call_vm_not_found/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | init_tasks:
5 | - name: Enable VM NOT FOUND for callee
6 | type: mysql-client
7 | script: scripts/enable_vm.sh
8 | args: {{ callee }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Check callee not registered
20 | type: opensips-mi
21 | script: scripts/check-register.py
22 | args: {{ callee }}
23 |
24 | - name: Caller UAC
25 | type: uac-sipp
26 | username: {{ caller }}
27 | password: "{{ caller_password }}"
28 | config_file: scripts/caller.xml
29 | ip: {{ caller_ip }}
30 | port: {{ caller_port }}
31 | require:
32 | - after:
33 | task: Register caller
34 | wait: 1
35 |
36 | cleanup_tasks:
37 | - name: Delete caller AOR
38 | type: opensips-mi
39 | args: ul_rm location {{ caller }}@{{ default_domain }}
40 |
41 | - name: Disable VM NOT FOUND for callee
42 | type: mysql-client
43 | script: scripts/disable_vm.sh
44 | args: {{ callee }} {{ default_domain }}
45 |
--------------------------------------------------------------------------------
/tests/03.call_vm_not_found/scripts/check-register.py:
--------------------------------------------------------------------------------
1 | from opensips.mi import OpenSIPSMI, OpenSIPSMIException
2 | import sys
3 | import os
4 |
5 | conn = os.getenv('CONN', 'http')
6 | url = os.getenv('URL', 'http://localhost:8888/mi')
7 | handler = OpenSIPSMI(conn=conn, url=url)
8 |
9 | if len(sys.argv) < 2:
10 | print("FAILED: Usage: check-register.py ")
11 | sys.exit(1)
12 |
13 | username = sys.argv[1]
14 |
15 | out = handler.execute('ul_dump')
16 | l = len(out['Domains'][0]['AORs'])
17 |
18 | found = False
19 |
20 | for i in range(l):
21 | if out['Domains'][0]['AORs'][i]['AOR'].startswith(username):
22 | found = True
23 | break
24 |
25 | if found:
26 | print("FAILED: User %s found" % username)
27 | sys.exit(1)
28 |
29 | print("SUCCESS: User %s not found" % username)
30 | sys.exit(0)
31 |
--------------------------------------------------------------------------------
/tests/03.call_vm_not_found/scripts/disable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(REPLACE(acls, '4', ''), '6', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/03.call_vm_not_found/scripts/enable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, '46') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/03.call_vm_not_found/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/04.call_callee_reject/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: Caller UAC
22 | type: uac-sipp
23 | username: {{ caller }}
24 | password: "{{ caller_password }}"
25 | config_file: scripts/caller.xml
26 | ip: {{ caller_ip }}
27 | port: {{ caller_port }}
28 | require:
29 | - after:
30 | task: Register caller
31 |
32 | - name: Callee UAC
33 | type: uas-sipp
34 | username: {{ callee }}
35 | password: "{{ callee_password }}"
36 | config_file: scripts/callee.xml
37 | ip: {{ callee_ip }}
38 | port: {{ callee_port }}
39 | require:
40 | - after:
41 | task: Register callee
42 | - started:
43 | task: Caller UAC
44 |
45 | cleanup_tasks:
46 | - name: Delete caller AOR
47 | type: opensips-mi
48 | args: ul_rm location {{ caller }}@{{ default_domain }}
49 |
50 | - name: Delete callee AOR
51 | type: opensips-mi
52 | args: ul_rm location {{ callee }}@{{ default_domain }}
53 |
--------------------------------------------------------------------------------
/tests/04.call_callee_reject/scripts/callee.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
60 | Content-Length: 0
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
79 |
80 |
90 |
91 |
92 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/tests/04.call_callee_reject/scripts/caller.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/tests/04.call_callee_reject/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/04.call_vm_busy/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | init_tasks:
5 | - name: Enable VM BUSY for callee
6 | type: mysql-client
7 | script: scripts/enable_vm.sh
8 | args: {{ callee }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register callee
20 | type: uac-sipp
21 | username: {{ callee }}
22 | password: "{{ callee_password }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ callee_ip }}
25 | port: {{ callee_port }}
26 |
27 | - name: Caller UAC
28 | type: uac-sipp
29 | username: {{ caller }}
30 | password: "{{ caller_password }}"
31 | config_file: scripts/caller.xml
32 | ip: {{ caller_ip }}
33 | port: {{ caller_port }}
34 | require:
35 | - after:
36 | task: Register caller
37 | wait: 1
38 |
39 | - name: Callee UAC
40 | type: uac-sipp
41 | username: {{ callee }}
42 | password: "{{ callee_password }}"
43 | config_file: scripts/callee.xml
44 | ip: {{ callee_ip }}
45 | port: {{ callee_port }}
46 | require:
47 | - after:
48 | task: Register callee
49 | wait: 1
50 |
51 | cleanup_tasks:
52 | - name: Delete caller AOR
53 | type: opensips-mi
54 | args: ul_rm location {{ caller }}@{{ default_domain }}
55 |
56 | - name: Delete callee AOR
57 | type: opensips-mi
58 | args: ul_rm location {{ callee }}@{{ default_domain }}
59 |
60 | - name: Disable VM BUSY for callee
61 | type: mysql-client
62 | script: scripts/disable_vm.sh
63 | args: {{ callee }} {{ default_domain }}
64 |
--------------------------------------------------------------------------------
/tests/04.call_vm_busy/scripts/callee.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
60 | Content-Length: 0
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
79 |
80 |
90 |
91 |
92 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/tests/04.call_vm_busy/scripts/disable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(REPLACE(acls, '4', ''), '7', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/04.call_vm_busy/scripts/enable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, '47') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/04.call_vm_busy/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/05.call_no_answer/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: Caller UAC
22 | type: uac-sipp
23 | username: {{ caller }}
24 | password: "{{ caller_password }}"
25 | config_file: scripts/caller.xml
26 | ip: {{ caller_ip }}
27 | port: {{ caller_port }}
28 | require:
29 | - after:
30 | task: Register caller
31 |
32 | - name: Callee UAC
33 | type: uas-sipp
34 | username: {{ callee }}
35 | password: "{{ callee_password }}"
36 | config_file: scripts/callee.xml
37 | ip: {{ callee_ip }}
38 | port: {{ callee_port }}
39 | require:
40 | - after:
41 | task: Register callee
42 | - started:
43 | task: Caller UAC
44 |
45 | cleanup_tasks:
46 | - name: Delete caller AOR
47 | type: opensips-mi
48 | args: ul_rm location {{ caller }}@{{ default_domain }}
49 |
50 | - name: Delete callee AOR
51 | type: opensips-mi
52 | args: ul_rm location {{ callee }}@{{ default_domain }}
53 |
--------------------------------------------------------------------------------
/tests/05.call_no_answer/scripts/callee.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
60 | Content-Length: 0
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
78 | Content-Length: 0
79 |
80 | ]]>
81 |
82 |
83 |
84 |
94 |
95 |
96 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/tests/05.call_no_answer/scripts/caller.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/tests/05.call_no_answer/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/05.call_vm_no_answer/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | init_tasks:
5 | - name: Enable VM NO ANSWER for callee
6 | type: mysql-client
7 | script: scripts/enable_vm.sh
8 | args: {{ callee }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register callee
20 | type: uac-sipp
21 | username: {{ callee }}
22 | password: "{{ callee_password }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ callee_ip }}
25 | port: {{ callee_port }}
26 |
27 | - name: Caller UAC
28 | type: uac-sipp
29 | username: {{ caller }}
30 | password: "{{ caller_password }}"
31 | config_file: scripts/caller.xml
32 | ip: {{ caller_ip }}
33 | port: {{ caller_port }}
34 | require:
35 | - after:
36 | task: Register caller
37 | wait: 1
38 |
39 | - name: Callee UAC
40 | type: uac-sipp
41 | username: {{ callee }}
42 | password: "{{ callee_password }}"
43 | config_file: scripts/callee.xml
44 | ip: {{ callee_ip }}
45 | port: {{ callee_port }}
46 | require:
47 | - after:
48 | task: Register callee
49 | wait: 1
50 |
51 | cleanup_tasks:
52 | - name: Delete caller AOR
53 | type: opensips-mi
54 | args: ul_rm location {{ caller }}@{{ default_domain }}
55 |
56 | - name: Delete callee AOR
57 | type: opensips-mi
58 | args: ul_rm location {{ callee }}@{{ default_domain }}
59 |
60 | - name: Disable VM NO ANSWER for callee
61 | type: mysql-client
62 | script: scripts/disable_vm.sh
63 | args: {{ callee }} {{ default_domain }}
64 |
--------------------------------------------------------------------------------
/tests/05.call_vm_no_answer/scripts/callee.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
60 | Content-Length: 0
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
78 | Content-Length: 0
79 |
80 | ]]>
81 |
82 |
83 |
84 |
94 |
95 |
96 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/tests/05.call_vm_no_answer/scripts/disable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(REPLACE(acls, '4', ''), '8', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/05.call_vm_no_answer/scripts/enable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, '48') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/05.call_vm_no_answer/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/06.db_dnd/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: DND ACL callee
22 | type: mysql-client
23 | script: scripts/set_user_dnd.sh
24 | args: {{ callee }} {{ default_domain }}
25 | require:
26 | after:
27 | task: Register callee
28 |
29 | - name: Caller UAC Busy
30 | type: uac-sipp
31 | username: {{ caller }}
32 | password: "{{ caller_password }}"
33 | config_file: scripts/caller_busy.xml
34 | ip: {{ caller_ip }}
35 | port: {{ caller_port }}
36 | require:
37 | - after:
38 | task: DND ACL callee
39 |
40 | - name: DND OFF ACL callee
41 | type: mysql-client
42 | script: scripts/unset_user_dnd.sh
43 | args: {{ callee }} {{ default_domain }}
44 | require:
45 | after:
46 | task: Caller UAC Busy
47 |
48 | - name: Caller UAC
49 | type: uac-sipp
50 | username: {{ caller }}
51 | password: "{{ caller_password }}"
52 | config_file: scripts/caller.xml
53 | ip: {{ caller_ip }}
54 | port: {{ caller_port }}
55 | require:
56 | - after:
57 | task: DND OFF ACL callee
58 |
59 | - name: Callee UAC
60 | type: uac-sipp
61 | username: {{ callee }}
62 | password: "{{ callee_password }}"
63 | config_file: scripts/callee.xml
64 | ip: {{ callee_ip }}
65 | port: {{ callee_port }}
66 | require:
67 | - after:
68 | task: DND OFF ACL callee
69 |
70 | cleanup_tasks:
71 | - name: Delete caller AOR
72 | type: opensips-mi
73 | args: ul_rm location {{ caller }}@{{ default_domain }}
74 |
75 | - name: Delete callee AOR
76 | type: opensips-mi
77 | args: ul_rm location {{ callee }}@{{ default_domain }}
78 |
--------------------------------------------------------------------------------
/tests/06.db_dnd/scripts/caller_busy.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]_fail:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]_fail:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]_fail:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | [peer_tag_param]
112 | From: ;tag=[call_number]
113 | Call-ID: [scenario]_fail:///[call_id]
114 | CSeq: 2 ACK
115 | Content-Length: 0
116 |
117 | ]]>
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/tests/06.db_dnd/scripts/set_user_dnd.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'D') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/06.db_dnd/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/06.db_dnd/scripts/unset_user_dnd.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'D', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/06.star_dnd/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: Set Callee DND
22 | type: uac-sipp
23 | username: {{ callee }}
24 | password: "{{ callee_password }}"
25 | config_file: scripts/dnd_on.xml
26 | ip: {{ callee_ip }}
27 | port: {{ callee_port }}
28 | require:
29 | after:
30 | task: Register callee
31 |
32 | - name: Check DND ACL
33 | type: mysql-client
34 | script: scripts/check_dnd_on.sh
35 | args: {{ callee }} {{ default_domain }}
36 | require:
37 | after:
38 | task: Set Callee DND
39 |
40 | - name: Caller BUSY
41 | type: uac-sipp
42 | username: {{ caller }}
43 | password: "{{ caller_password }}"
44 | config_file: scripts/caller_busy.xml
45 | ip: {{ caller_ip }}
46 | port: {{ caller_port }}
47 | require:
48 | after:
49 | task: Check DND ACL
50 |
51 | - name: Reset Callee DND
52 | type: uac-sipp
53 | username: {{ callee }}
54 | password: "{{ callee_password }}"
55 | config_file: scripts/dnd_off.xml
56 | ip: {{ callee_ip }}
57 | port: {{ callee_port }}
58 | require:
59 | after:
60 | task: Caller BUSY
61 |
62 | - name: Check DND OFF ACL
63 | type: mysql-client
64 | script: scripts/check_dnd_off.sh
65 | args: {{ callee }} {{ default_domain }}
66 | require:
67 | after:
68 | task: Reset Callee DND
69 |
70 | - name: Caller UAC
71 | type: uac-sipp
72 | username: {{ caller }}
73 | password: "{{ caller_password }}"
74 | config_file: scripts/caller.xml
75 | ip: {{ caller_ip }}
76 | port: {{ caller_port }}
77 | require:
78 | after:
79 | task: Check DND OFF ACL
80 |
81 | - name: Callee UAS
82 | type: uas-sipp
83 | username: {{ callee }}
84 | password: "{{ callee_password }}"
85 | config_file: scripts/callee.xml
86 | ip: {{ callee_ip }}
87 | port: {{ callee_port }}
88 | require:
89 | after:
90 | task: Check DND OFF ACL
91 |
92 | cleanup_tasks:
93 | - name: Delete caller AOR
94 | type: opensips-mi
95 | args: ul_rm location {{ caller }}@{{ default_domain }}
96 |
97 | - name: Delete callee AOR
98 | type: opensips-mi
99 | args: ul_rm location {{ callee }}@{{ default_domain }}
100 |
--------------------------------------------------------------------------------
/tests/06.star_dnd/scripts/caller_busy.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]_fail:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]_fail:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]_fail:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | [peer_tag_param]
112 | From: ;tag=[call_number]
113 | Call-ID: [scenario]_fail:///[call_id]
114 | CSeq: 2 ACK
115 | Content-Length: 0
116 |
117 | ]]>
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/tests/06.star_dnd/scripts/check_dnd_off.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "SELECT username FROM subscriber WHERE username = '$1' AND domain = '$2' AND acls NOT LIKE '%D%';" | grep "$1"
--------------------------------------------------------------------------------
/tests/06.star_dnd/scripts/check_dnd_on.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "SELECT username FROM subscriber WHERE username = '$1' AND domain = '$2' AND acls LIKE '%D%';" | grep "$1"
--------------------------------------------------------------------------------
/tests/06.star_dnd/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/06.star_dnd_with_vm/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Enable VM BUSY for callee
6 | type: mysql-client
7 | script: scripts/enable_vm.sh
8 | args: {{ callee }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register callee
20 | type: uac-sipp
21 | username: {{ callee }}
22 | password: "{{ callee_password }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ callee_ip }}
25 | port: {{ callee_port }}
26 |
27 | - name: Set Callee DND
28 | type: uac-sipp
29 | username: {{ callee }}
30 | password: "{{ callee_password }}"
31 | config_file: scripts/dnd_on.xml
32 | ip: {{ callee_ip }}
33 | port: {{ callee_port }}
34 | require:
35 | after:
36 | task: Register callee
37 |
38 | - name: Check DND ACL
39 | type: mysql-client
40 | script: scripts/check_dnd_on.sh
41 | args: {{ callee }} {{ default_domain }}
42 | require:
43 | after:
44 | task: Set Callee DND
45 |
46 | - name: Caller VM
47 | type: uac-sipp
48 | username: {{ caller }}
49 | password: "{{ caller_password }}"
50 | config_file: scripts/caller_vm.xml
51 | ip: {{ caller_ip }}
52 | port: {{ caller_port }}
53 | require:
54 | after:
55 | task: Check DND ACL
56 |
57 | - name: Reset Callee DND
58 | type: uac-sipp
59 | username: {{ callee }}
60 | password: "{{ callee_password }}"
61 | config_file: scripts/dnd_off.xml
62 | ip: {{ callee_ip }}
63 | port: {{ callee_port }}
64 | require:
65 | after:
66 | task: Caller VM
67 |
68 | - name: Check DND OFF ACL
69 | type: mysql-client
70 | script: scripts/check_dnd_off.sh
71 | args: {{ callee }} {{ default_domain }}
72 | require:
73 | after:
74 | task: Reset Callee DND
75 |
76 | - name: Caller UAC
77 | type: uac-sipp
78 | username: {{ caller }}
79 | password: "{{ caller_password }}"
80 | config_file: scripts/caller.xml
81 | ip: {{ caller_ip }}
82 | port: {{ caller_port }}
83 | require:
84 | after:
85 | task: Check DND OFF ACL
86 |
87 | - name: Callee UAS
88 | type: uas-sipp
89 | username: {{ callee }}
90 | password: "{{ callee_password }}"
91 | config_file: scripts/callee.xml
92 | ip: {{ callee_ip }}
93 | port: {{ callee_port }}
94 | require:
95 | after:
96 | task: Check DND OFF ACL
97 |
98 | cleanup_tasks:
99 | - name: Delete caller AOR
100 | type: opensips-mi
101 | args: ul_rm location {{ caller }}@{{ default_domain }}
102 |
103 | - name: Delete callee AOR
104 | type: opensips-mi
105 | args: ul_rm location {{ callee }}@{{ default_domain }}
106 |
107 | - name: Disable VM BUSY for callee
108 | type: mysql-client
109 | script: scripts/disable_vm.sh
110 | args: {{ callee }} {{ default_domain }}
111 |
--------------------------------------------------------------------------------
/tests/06.star_dnd_with_vm/scripts/check_dnd_off.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "SELECT username FROM subscriber WHERE username = '$1' AND domain = '$2' AND acls NOT LIKE '%D%';" | grep "$1"
--------------------------------------------------------------------------------
/tests/06.star_dnd_with_vm/scripts/check_dnd_on.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "SELECT username FROM subscriber WHERE username = '$1' AND domain = '$2' AND acls LIKE '%D%';" | grep "$1"
--------------------------------------------------------------------------------
/tests/06.star_dnd_with_vm/scripts/disable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(REPLACE(acls, '4', ''), '7', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/06.star_dnd_with_vm/scripts/enable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, '47') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/06.star_dnd_with_vm/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/07.cf_always/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Add CF Always URI for callee
6 | type: mysql-client
7 | script: scripts/add_cf_uri.sh
8 | args: {{ callee }} {{ default_domain }} sip:{{ cf_user }}@{{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register call forward user
20 | type: uac-sipp
21 | username: {{ cf_user }}
22 | password: "{{ cf_pass }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ cf_ip }}
25 | port: {{ cf_port }}
26 |
27 | - name: Caller UAC
28 | type: uac-sipp
29 | username: {{ caller }}
30 | password: "{{ caller_password }}"
31 | config_file: scripts/caller.xml
32 | ip: {{ caller_ip }}
33 | port: {{ caller_port }}
34 | keys:
35 | task_tag: nocallee
36 | require:
37 | after: Register caller
38 | after: Register call forward user
39 |
40 | - name: CF User UAC
41 | type: uas-sipp
42 | username: {{ cf_user }}
43 | password: "{{ cf_pass }}"
44 | config_file: scripts/cf-user.xml
45 | ip: {{ cf_ip }}
46 | port: {{ cf_port }}
47 | require:
48 | after: Register caller
49 | after: Register call forward user
50 |
51 | - name: Register Callee
52 | type: uac-sipp
53 | username: {{ callee }}
54 | password: "{{ callee_password }}"
55 | config_file: scripts/sipp-register.xml
56 | ip: {{ callee_ip }}
57 | port: {{ callee_port }}
58 | require:
59 | after: Caller UAC
60 | after: CF User UAC
61 |
62 | - name: Caller UAC 2
63 | type: uac-sipp
64 | username: {{ caller }}
65 | password: "{{ caller_password }}"
66 | config_file: scripts/caller.xml
67 | ip: {{ caller_ip }}
68 | port: {{ caller_port }}
69 | keys:
70 | task_tag: withcallee
71 | require:
72 | after: Register Callee
73 |
74 | - name: CF User UAC 2
75 | type: uas-sipp
76 | username: {{ cf_user }}
77 | password: "{{ cf_pass }}"
78 | config_file: scripts/cf-user.xml
79 | ip: {{ cf_ip }}
80 | port: {{ cf_port }}
81 | require:
82 | after: Register Callee
83 |
84 | cleanup_tasks:
85 | - name: Delete caller AOR
86 | type: opensips-mi
87 | args: ul_rm location {{ caller }}@{{ default_domain }}
88 |
89 | - name: Delete callee AOR
90 | type: opensips-mi
91 | args: ul_rm location {{ callee }}@{{ default_domain }}
92 |
93 | - name: Delete call forward user AOR
94 | type: opensips-mi
95 | args: ul_rm location {{ cf_user }}@{{ default_domain }}
96 |
97 | - name: Remove CF Always URI for callee
98 | type: mysql-client
99 | script: scripts/remove_cf_uri.sh
100 | args: {{ callee }} {{ default_domain }}
101 |
--------------------------------------------------------------------------------
/tests/07.cf_always/scripts/add_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfaw_uri='$3' WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_always/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_always/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_always/scripts/remove_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfaw_uri=NULL WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_always/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/07.cf_busy/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Add CF Busy URI for callee
6 | type: mysql-client
7 | script: scripts/add_cf_uri.sh
8 | args: {{ callee }} {{ default_domain }} sip:{{ cf_user }}@{{ default_domain }}
9 |
10 | tasks:
11 | - name: Register Caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register call forward user
20 | type: uac-sipp
21 | username: {{ cf_user }}
22 | password: "{{ cf_pass }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ cf_ip }}
25 | port: {{ cf_port }}
26 |
27 | - name: Register Callee
28 | type: uac-sipp
29 | username: {{ callee }}
30 | password: "{{ callee_password }}"
31 | config_file: scripts/sipp-register.xml
32 | ip: {{ callee_ip }}
33 | port: {{ callee_port }}
34 |
35 | - name: Caller UAC
36 | type: uac-sipp
37 | username: {{ caller }}
38 | password: "{{ caller_password }}"
39 | config_file: scripts/caller.xml
40 | ip: {{ caller_ip }}
41 | port: {{ caller_port }}
42 | require:
43 | after: Register Caller
44 | after: Register call forward user
45 | after: Register Callee
46 |
47 | - name: CF User UAC
48 | type: uas-sipp
49 | username: {{ cf_user }}
50 | password: "{{ cf_pass }}"
51 | config_file: scripts/cf-user.xml
52 | ip: {{ cf_ip }}
53 | port: {{ cf_port }}
54 | require:
55 | after: Register Caller
56 | after: Register call forward user
57 | after: Register Callee
58 |
59 | - name: Callee UAC
60 | type: uas-sipp
61 | username: {{ callee }}
62 | password: "{{ callee_password }}"
63 | config_file: scripts/callee.xml
64 | ip: {{ callee_ip }}
65 | port: {{ callee_port }}
66 | require:
67 | after: Register Caller
68 | after: Register call forward user
69 | after: Register Callee
70 |
71 | cleanup_tasks:
72 | - name: Delete caller AOR
73 | type: opensips-mi
74 | args: ul_rm location {{ caller }}@{{ default_domain }}
75 |
76 | - name: Delete callee AOR
77 | type: opensips-mi
78 | args: ul_rm location {{ callee }}@{{ default_domain }}
79 |
80 | - name: Delete call forward user AOR
81 | type: opensips-mi
82 | args: ul_rm location {{ cf_user }}@{{ default_domain }}
83 |
84 | - name: Remove CF Busy URI for callee
85 | type: mysql-client
86 | script: scripts/remove_cf_uri.sh
87 | args: {{ callee }} {{ default_domain }}
88 |
--------------------------------------------------------------------------------
/tests/07.cf_busy/scripts/add_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfbs_uri='$3' WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_busy/scripts/callee.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
60 | Content-Length: 0
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
79 |
80 |
90 |
91 |
92 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/tests/07.cf_busy/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_busy/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_busy/scripts/remove_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfbs_uri=NULL WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_busy/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Add CF No Answer URI for callee
6 | type: mysql-client
7 | script: scripts/add_cf_uri.sh
8 | args: {{ callee }} {{ default_domain }} sip:{{ cf_user }}@{{ default_domain }}
9 |
10 | tasks:
11 | - name: Register Caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register call forward user
20 | type: uac-sipp
21 | username: {{ cf_user }}
22 | password: "{{ cf_pass }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ cf_ip }}
25 | port: {{ cf_port }}
26 |
27 | - name: Register Callee
28 | type: uac-sipp
29 | username: {{ callee }}
30 | password: "{{ callee_password }}"
31 | config_file: scripts/sipp-register.xml
32 | ip: {{ callee_ip }}
33 | port: {{ callee_port }}
34 |
35 | - name: Caller UAC
36 | type: uac-sipp
37 | username: {{ caller }}
38 | password: "{{ caller_password }}"
39 | config_file: scripts/caller.xml
40 | ip: {{ caller_ip }}
41 | port: {{ caller_port }}
42 | require:
43 | after: Register Caller
44 | after: Register call forward user
45 | after: Register Callee
46 |
47 | - name: Callee UAC
48 | type: uas-sipp
49 | username: {{ callee }}
50 | password: "{{ callee_password }}"
51 | config_file: scripts/callee.xml
52 | ip: {{ callee_ip }}
53 | port: {{ callee_port }}
54 | require:
55 | after: Register Caller
56 | after: Register call forward user
57 | after: Register Callee
58 |
59 | - name: CF User UAC
60 | type: uas-sipp
61 | username: {{ cf_user }}
62 | password: "{{ cf_pass }}"
63 | config_file: scripts/cf-user.xml
64 | ip: {{ cf_ip }}
65 | port: {{ cf_port }}
66 | require:
67 | after: Callee UAC
68 |
69 | cleanup_tasks:
70 | - name: Delete caller AOR
71 | type: opensips-mi
72 | args: ul_rm location {{ caller }}@{{ default_domain }}
73 |
74 | - name: Delete callee AOR
75 | type: opensips-mi
76 | args: ul_rm location {{ callee }}@{{ default_domain }}
77 |
78 | - name: Delete call forward user AOR
79 | type: opensips-mi
80 | args: ul_rm location {{ cf_user }}@{{ default_domain }}
81 |
82 | - name: Remove CF No Answer URI for callee
83 | type: mysql-client
84 | script: scripts/remove_cf_uri.sh
85 | args: {{ callee }} {{ default_domain }}
86 |
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scripts/add_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfna_uri='$3' WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scripts/callee.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
60 | Content-Length: 0
61 |
62 | ]]>
63 |
64 |
65 |
66 |
67 |
68 |
69 |
78 | Content-Length: 0
79 |
80 | ]]>
81 |
82 |
83 |
84 |
94 |
95 |
96 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scripts/remove_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfna_uri=NULL WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_no_answer/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/07.cf_not_found/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Add CF Not Found URI for callee
6 | type: mysql-client
7 | script: scripts/add_cf_uri.sh
8 | args: {{ callee }} {{ default_domain }} sip:{{ cf_user }}@{{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Register call forward user
20 | type: uac-sipp
21 | username: {{ cf_user }}
22 | password: "{{ cf_pass }}"
23 | config_file: scripts/sipp-register.xml
24 | ip: {{ cf_ip }}
25 | port: {{ cf_port }}
26 |
27 | - name: Caller UAC
28 | type: uac-sipp
29 | username: {{ caller }}
30 | password: "{{ caller_password }}"
31 | config_file: scripts/caller.xml
32 | ip: {{ caller_ip }}
33 | port: {{ caller_port }}
34 | keys:
35 | task_tag: nocallee
36 | require:
37 | after: Register caller
38 | after: Register call forward user
39 |
40 | - name: CF User UAC
41 | type: uas-sipp
42 | username: {{ cf_user }}
43 | password: "{{ cf_pass }}"
44 | config_file: scripts/responder.xml
45 | ip: {{ cf_ip }}
46 | port: {{ cf_port }}
47 | require:
48 | after: Register caller
49 | after: Register call forward user
50 |
51 | - name: Register Callee
52 | type: uac-sipp
53 | username: {{ callee }}
54 | password: "{{ callee_password }}"
55 | config_file: scripts/sipp-register.xml
56 | ip: {{ callee_ip }}
57 | port: {{ callee_port }}
58 | require:
59 | after: Caller UAC
60 | after: CF User UAC
61 |
62 | - name: Caller UAC 2
63 | type: uac-sipp
64 | username: {{ caller }}
65 | password: "{{ caller_password }}"
66 | config_file: scripts/caller.xml
67 | ip: {{ caller_ip }}
68 | port: {{ caller_port }}
69 | keys:
70 | task_tag: withcallee
71 | require:
72 | after: Register Callee
73 |
74 | - name: Callee UAC 2
75 | type: uas-sipp
76 | username: {{ callee }}
77 | password: "{{ callee_password }}"
78 | config_file: scripts/responder.xml
79 | ip: {{ callee_ip }}
80 | port: {{ callee_port }}
81 | require:
82 | after: Register Callee
83 |
84 | cleanup_tasks:
85 | - name: Delete caller AOR
86 | type: opensips-mi
87 | args: ul_rm location {{ caller }}@{{ default_domain }}
88 |
89 | - name: Delete callee AOR
90 | type: opensips-mi
91 | args: ul_rm location {{ callee }}@{{ default_domain }}
92 |
93 | - name: Delete call forward user AOR
94 | type: opensips-mi
95 | args: ul_rm location {{ cf_user }}@{{ default_domain }}
96 |
97 | - name: Remove CF Not Found URI for callee
98 | type: mysql-client
99 | script: scripts/remove_cf_uri.sh
100 | args: {{ callee }} {{ default_domain }}
101 |
--------------------------------------------------------------------------------
/tests/07.cf_not_found/scripts/add_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfnf_uri='$3' WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_not_found/scripts/disable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'E', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_not_found/scripts/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/07.cf_not_found/scripts/remove_cf_uri.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET cfnf_uri=NULL WHERE username='$1' AND domain='$2';"
--------------------------------------------------------------------------------
/tests/07.cf_not_found/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/08.call_did/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Register callee
14 | type: uac-sipp
15 | username: {{ callee }}
16 | password: "{{ callee_password }}"
17 | config_file: scripts/sipp-register.xml
18 | ip: {{ callee_ip }}
19 | port: {{ callee_port }}
20 |
21 | - name: Caller UAC
22 | type: uac-sipp
23 | username: {{ caller }}
24 | password: "{{ caller_password }}"
25 | config_file: scripts/caller.xml
26 | ip: {{ caller_ip }}
27 | port: {{ caller_port }}
28 | keys:
29 | callee_did: {{ callee_did }}
30 | require:
31 | - after:
32 | task: Register caller
33 |
34 | - name: Callee UAC
35 | type: uas-sipp
36 | username: {{ callee }}
37 | password: "{{ callee_password }}"
38 | config_file: scripts/callee.xml
39 | ip: {{ callee_ip }}
40 | port: {{ callee_port }}
41 | require:
42 | - started:
43 | task: Caller UAC
44 |
45 | cleanup_tasks:
46 | - name: Delete caller AOR
47 | type: opensips-mi
48 | args: ul_rm location {{ caller }}@{{ default_domain }}
49 |
50 | - name: Delete callee AOR
51 | type: opensips-mi
52 | args: ul_rm location {{ callee }}@{{ default_domain }}
53 |
--------------------------------------------------------------------------------
/tests/08.call_did/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/09.unknown_domain_callee/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Caller UAC
14 | type: uac-sipp
15 | username: {{ caller }}
16 | password: "{{ caller_password }}"
17 | config_file: scripts/caller.xml
18 | ip: {{ caller_ip }}
19 | port: {{ caller_port }}
20 | keys:
21 | unknown_domain: {{ opensips_ip }}:{{ callee_port }}
22 | require:
23 | - after:
24 | task: Register caller
25 |
26 | - name: Callee UAC
27 | type: uas-sipp
28 | username: {{ callee }}
29 | password: "{{ callee_password }}"
30 | config_file: scripts/callee.xml
31 | ip: {{ callee_ip }}
32 | port: {{ callee_port }}
33 | require:
34 | - after:
35 | task: Register caller
36 |
37 | cleanup_tasks:
38 | - name: Delete caller AOR
39 | type: opensips-mi
40 | args: ul_rm location {{ caller }}@{{ default_domain }}
41 |
42 | - name: Delete callee AOR
43 | type: opensips-mi
44 | args: ul_rm location {{ callee }}@{{ default_domain }}
45 |
--------------------------------------------------------------------------------
/tests/09.unknown_domain_callee/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/09.unknown_domain_caller/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Caller UAC
6 | type: uac-sipp
7 | config_file: scripts/caller.xml
8 | ip: {{ caller_ip }}
9 | port: {{ caller_port }}
10 | keys:
11 | unknown_domain: domain.unknown
12 |
--------------------------------------------------------------------------------
/tests/09.unknown_domain_caller/scripts/caller.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | [peer_tag_param]
54 | From: ;tag=[call_number]
55 | Call-ID: [scenario]:///[call_id]
56 | CSeq: 2 ACK
57 | Content-Length: 0
58 |
59 | ]]>
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_disabled/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | tasks:
5 | - name: Register caller
6 | type: uac-sipp
7 | username: {{ caller }}
8 | password: "{{ caller_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ caller_ip }}
11 | port: {{ caller_port }}
12 |
13 | - name: Caller UAC
14 | type: uac-sipp
15 | username: {{ caller }}
16 | password: "{{ caller_password }}"
17 | config_file: scripts/caller.xml
18 | ip: {{ caller_ip }}
19 | port: {{ caller_port }}
20 | require:
21 | - after:
22 | task: Register caller
23 |
24 | cleanup_tasks:
25 | - name: Delete caller AOR
26 | type: opensips-mi
27 | args: ul_rm location {{ caller }}@{{ default_domain }}
28 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_disabled/scripts/caller.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
43 |
44 |
45 |
46 |
52 | To:
53 | From: ;tag=[call_number]
54 | Call-ID: [scenario]:///[call_id]
55 | CSeq: 1 ACK
56 | Content-Length: 0
57 | ]]>
58 |
59 |
60 |
61 |
67 | To:
68 | From: ;tag=[call_number]
69 | Call-ID: [scenario]:///[call_id]
70 | CSeq: 2 INVITE
71 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
72 | Content-Type: application/sdp
73 | [authentication]
74 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
75 | Allow-Events: presence, kpml, talk, as-feature-event
76 | Content-Length: [len]
77 |
78 | v=0
79 | o=Z 0 21457613 IN IP4 [local_ip]
80 | s=Z
81 | c=IN IP4 [local_ip]
82 | t=0 0
83 | m=audio 43265 RTP/AVP 106 9 98 101 0 8 3
84 | a=rtpmap:106 opus/48000/2
85 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
86 | a=rtpmap:98 telephone-event/48000
87 | a=fmtp:98 0-16
88 | a=rtpmap:101 telephone-event/8000
89 | a=fmtp:101 0-16
90 | a=sendrecv
91 | a=rtcp-mux
92 |
93 | ]]>
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | [peer_tag_param]
108 | From: ;tag=[call_number]
109 | Call-ID: [scenario]:///[call_id]
110 | CSeq: 2 ACK
111 | Content-Length: 0
112 |
113 | ]]>
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_disabled/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_enabled/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 40
3 |
4 | init_tasks:
5 | - name: Enable VM for caller
6 | type: mysql-client
7 | script: scripts/enable_vm.sh
8 | args: {{ caller }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Caller UAC
20 | type: uac-sipp
21 | username: {{ caller }}
22 | password: "{{ caller_password }}"
23 | config_file: scripts/caller.xml
24 | ip: {{ caller_ip }}
25 | port: {{ caller_port }}
26 | require:
27 | - after:
28 | task: Register caller
29 |
30 | cleanup_tasks:
31 | - name: Delete caller AOR
32 | type: opensips-mi
33 | args: ul_rm location {{ caller }}@{{ default_domain }}
34 |
35 | - name: Disable VM for caller
36 | type: mysql-client
37 | script: scripts/disable_vm.sh
38 | args: {{ caller }} {{ default_domain }}
39 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_enabled/scripts/disable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, '4', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_enabled/scripts/enable_vm.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, '4') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/10.listen_vm_enabled/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/11.call_gateway/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Allow PSTN for Caller
6 | type: mysql-client
7 | script: scripts/allow_pstn.sh
8 | args: {{ caller }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Caller UAC
20 | type: uac-sipp
21 | config_file: scripts/caller.xml
22 | username: {{ caller }}
23 | password: "{{ caller_password }}"
24 | ip: {{ caller_ip }}
25 | port: {{ caller_port }}
26 | keys:
27 | did: {{ outgoing_did }}
28 | require:
29 | - after:
30 | task: Register caller
31 |
32 | - name: Gateway UAS
33 | type: uas-sipp
34 | config_file: scripts/gateway.xml
35 | ip: {{ gateway1_ip }}
36 | port: {{ gateway1_port }}
37 | require:
38 | - started:
39 | task: Caller UAC
40 |
41 | cleanup_tasks:
42 | - name: Deny PSTN for Caller
43 | type: mysql-client
44 | script: scripts/deny_pstn.sh
45 | args: {{ caller }} {{ default_domain }}
46 |
47 | - name: Delete caller AOR
48 | type: opensips-mi
49 | args: ul_rm location {{ caller }}@{{ default_domain }}
50 |
--------------------------------------------------------------------------------
/tests/11.call_gateway/scripts/allow_pstn.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'P') WHERE username = '$1' AND domain = '$2';"
--------------------------------------------------------------------------------
/tests/11.call_gateway/scripts/deny_pstn.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'P', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/11.call_gateway/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/11.call_gateway2/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 60
3 |
4 | init_tasks:
5 | - name: Allow PSTN for Caller
6 | type: mysql-client
7 | script: scripts/allow_pstn.sh
8 | args: {{ caller }} {{ default_domain }}
9 |
10 | tasks:
11 | - name: Register caller
12 | type: uac-sipp
13 | username: {{ caller }}
14 | password: "{{ caller_password }}"
15 | config_file: scripts/sipp-register.xml
16 | ip: {{ caller_ip }}
17 | port: {{ caller_port }}
18 |
19 | - name: Caller UAC
20 | type: uac-sipp
21 | config_file: scripts/caller.xml
22 | username: {{ caller }}
23 | password: "{{ caller_password }}"
24 | ip: {{ caller_ip }}
25 | port: {{ caller_port }}
26 | keys:
27 | did: {{ outgoing_did }}
28 | require:
29 | - after:
30 | task: Register caller
31 |
32 | - name: Gateway UAS
33 | type: uas-sipp
34 | config_file: scripts/gateway.xml
35 | ip: {{ gateway2_ip }}
36 | port: {{ gateway2_port }}
37 | require:
38 | - started:
39 | task: Caller UAC
40 |
41 | cleanup_tasks:
42 | - name: Deny PSTN for Caller
43 | type: mysql-client
44 | script: scripts/deny_pstn.sh
45 | args: {{ caller }} {{ default_domain }}
46 |
47 | - name: Delete caller AOR
48 | type: opensips-mi
49 | args: ul_rm location {{ caller }}@{{ default_domain }}
50 |
--------------------------------------------------------------------------------
/tests/11.call_gateway2/scripts/allow_pstn.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'P') WHERE username = '$1' AND domain = '$2';"
--------------------------------------------------------------------------------
/tests/11.call_gateway2/scripts/deny_pstn.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = REPLACE(acls, 'P', '') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/11.call_gateway2/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/11.gateway_call_did/scenario.yml:
--------------------------------------------------------------------------------
1 | ---
2 | timeout: 30
3 |
4 | tasks:
5 | - name: Register callee
6 | type: uac-sipp
7 | username: {{ callee }}
8 | password: "{{ callee_password }}"
9 | config_file: scripts/sipp-register.xml
10 | ip: {{ callee_ip }}
11 | port: {{ callee_port }}
12 |
13 | - name: Callee UAC
14 | type: uas-sipp
15 | config_file: scripts/callee.xml
16 | ip: {{ callee_ip }}
17 | port: {{ callee_port }}
18 | require: Register callee
19 |
20 | - name: Gateway UAC
21 | type: uac-sipp
22 | config_file: scripts/gateway.xml
23 | ip: {{ gateway1_ip }}
24 | port: {{ gateway1_port }}
25 | keys:
26 | callee_did: {{ callee_did }}
27 | require:
28 | started: Callee UAC
29 |
30 | cleanup_tasks:
31 | - name: Delete callee AOR
32 | type: opensips-mi
33 | args: ul_rm location {{ callee }}@{{ default_domain }}
34 |
--------------------------------------------------------------------------------
/tests/11.gateway_call_did/scripts/gateway.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | \
5 |
6 |
7 |
8 |
14 | To:
15 | From: ;tag=[call_number]
16 | Call-ID: [scenario]:///[call_id]
17 | CSeq: 1 INVITE
18 | Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
19 | Content-Type: application/sdp
20 | Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
21 | Allow-Events: presence, kpml, talk, as-feature-event
22 | Content-Length: [len]
23 |
24 | v=0
25 | o=Z 0 21195650 IN IP4 [local_ip]
26 | s=Z
27 | c=IN IP4 [local_ip]
28 | t=0 0
29 | m=audio 43126 RTP/AVP 106 9 98 101 0 8 3
30 | a=rtpmap:106 opus/48000/2
31 | a=fmtp:106 sprop-maxcapturerate=16000; minptime=20; useinbandfec=1
32 | a=rtpmap:98 telephone-event/48000
33 | a=fmtp:98 0-16
34 | a=rtpmap:101 telephone-event/8000
35 | a=fmtp:101 0-16
36 | a=sendrecv
37 | a=rtcp-mux
38 |
39 | ]]>
40 |
41 |
42 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | [peer_tag_param]
63 | From: ;tag=[call_number]
64 | [routes]
65 | CSeq: 1 ACK
66 | Contact:
67 | Call-ID: [scenario]:///[call_id]
68 | Max-Forwards: 70
69 | Content-Length: 0
70 |
71 | ]]>
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | [peer_tag_param]
85 | From: ;tag=[call_number]
86 | [routes]
87 | CSeq: 2 BYE
88 | Contact:
89 | Call-ID: [scenario]:///[call_id]
90 | Max-Forwards: 70
91 | Content-Length: 0
92 |
93 | ]]>
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/tests/11.gateway_call_did/scripts/sipp-register.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 | From: ;tag=[call_number]
15 | Contact: ;transport=[transport]
16 | Expires: 60
17 | Call-ID: [scenario]-register-[service]:///[call_id]
18 | Supported: path
19 | Max-Forwards: 70
20 | CSeq: 1 REGISTER
21 | Content-Length: 0
22 |
23 | ]]>
24 |
25 |
26 |
27 |
28 |
29 |
30 |
35 | From: ;tag=[call_number]
36 | Contact: ;transport=[transport]
37 | Expires: 60
38 | [authentication]
39 | Call-ID: [scenario]-register-[service]:///[call_id]
40 | Supported: path
41 | Max-Forwards: 70
42 | CSeq: 2 REGISTER
43 | Content-Length: 0
44 |
45 | ]]>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/tests/cleanup_tasks/delete_did.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "DELETE FROM dids WHERE alias_username='$1';"
--------------------------------------------------------------------------------
/tests/cleanup_tasks/delete_gateway.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "DELETE FROM dr_gateways WHERE address = '$1';"
--------------------------------------------------------------------------------
/tests/cleanup_tasks/delete_rule.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "DELETE FROM dr_rules WHERE prefix = '$1';"
--------------------------------------------------------------------------------
/tests/cleanup_tasks/remove_domain.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "DELETE FROM domain WHERE domain = '$1';"
2 |
--------------------------------------------------------------------------------
/tests/defines.yml:
--------------------------------------------------------------------------------
1 | caller: caller
2 | caller_password: 123456
3 | caller_port: 5065
4 | callee: callee
5 | callee_password: 123456
6 | callee_port: 5066
7 | default_domain: domain.test
8 | opensips_ip: {{ 'HOST_IP' | getenv }}
9 | opensips_port: 5060
10 | mi_ip: {{ 'OPENSIPS_IP' | getenv }}
11 | caller_ip: {{ 'HOST_IP' | getenv }}
12 | callee_ip: {{ 'HOST_IP' | getenv }}
13 | mysql_ip: {{ 'MYSQL_IP' | getenv }}
14 | mysql_user: {{ 'MYSQL_USER' | getenv }}
15 | mysql_password: {{ 'MYSQL_PASSWORD' | getenv }}
16 | database: opensips
17 | cf_user: callforward
18 | cf_pass: 123456
19 | cf_ip: {{ 'HOST_IP' | getenv }}
20 | cf_port: 5067
21 | callee_did: 1715201
22 | gateway1_ip: {{ 'HOST_IP' | getenv }}
23 | gateway1_port: 5100
24 | gateway2_ip: {{ 'HOST_IP' | getenv }}
25 | gateway2_port: 5200
26 | outgoing_did: 1225200
27 |
--------------------------------------------------------------------------------
/tests/init_tasks/add_did.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "REPLACE INTO dids (alias_username, alias_domain, username, domain) VALUES ('$3', '$2', '$1', '$2');"
2 |
--------------------------------------------------------------------------------
/tests/init_tasks/add_domain.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "REPLACE INTO domain (domain) VALUES ('$1');"
2 |
--------------------------------------------------------------------------------
/tests/init_tasks/add_gateway.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "REPLACE INTO dr_gateways (gwid, type, address, strip, pri_prefix, attrs, probe_mode, state, socket, description) VALUES ('$1', 1, '$2', 0, '', '', 0, 0, '', '$3');"
2 |
--------------------------------------------------------------------------------
/tests/init_tasks/add_rule.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "REPLACE INTO dr_rules VALUES (1, '1', $1, '', 0, '', '$2', 'N', NULL, NULL, '$3');"
2 |
--------------------------------------------------------------------------------
/tests/init_tasks/enable_user.sh:
--------------------------------------------------------------------------------
1 | mysql opensips -e "UPDATE subscriber SET acls = CONCAT(acls, 'E') WHERE username = '$1' AND domain = '$2';"
2 |
--------------------------------------------------------------------------------
/tests/run.yml:
--------------------------------------------------------------------------------
1 | ---
2 | logging:
3 | controller:
4 | level: DEBUG
5 | # console: true
6 | exclude:
7 | - 11.gateway_call_did
8 | os:
9 | - ubuntu-latest
10 |
--------------------------------------------------------------------------------