Написание и запуск сценариев SIPP. Часть 2.UAS сценарии

от автора

В прошлой статье я рассмотрел базовый сценарий UAC клиента, но зачастую в процессе обучение или тестирование необходимо смоделировать ситуацию в которой sipp будет выступать в качестве вызываемого абонента.

Передо мной стояла задача — узнать что будет слышать вызывающий абонент при отстуствии сообщения 180 ringing.

Как и в прошлой статье я буду целиком и полностью ссылаться на официальную документацию — http://sipp.sourceforge.net/doc/reference.html .

Написание сценария.

Т.к. я уже обозначил задачу давайте схематично изобразим процесс обмена сообщениями между устройствами. В качестве вызывающего абонента А я использую SIP телефон.

ASIPP ----------> INVITE                   <---------- 100                      [5000ms] Pause                      <---------- 200                          ----------> ACK                 ----------> BYE                       <---------- 200                                            [4000ms] Pause   

Если Вы читали мою предыдущую статью, то думаю уже знакомы с синтаксисом сценариев и понимание кода не вызовет у Вас затруднений.

Первый шаг одинаков для каждого сценария: создаем файл uas_no180.xml, в заголовке прописываем:

?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <scenario name="Basic UAS responder">

Далее опираясь на схему ожидаем получение сообщения INVITE от пользователя А

<recv request="INVITE" crlf="true">   </recv>

На полученный запрос INVITE sipp отвечает сообщением 100 TRYING, командой pause заменяем отсутсвующее сообщение 180Ringing.

<send>     <![CDATA[       SIP/2.0 100 Trying       [last_Via:]       [last_From:]       [last_To:];tag=[call_number]       [last_Call-ID:]       [last_CSeq:]       Contact: <sip:[local_ip]:[local_port];transport=[transport]>       Content-Length:0     ]]>   </send>  <pause milliseconds="5000"/>

После паузы отправляем ответ 200OK в тело сообщения добавляем протокол SDP с описанием сессии.

<send retrans="500">     <![CDATA[       SIP/2.0 200 OK       [last_Via:]       [last_From:]       [last_To:];tag=[pid]SIPpTag01[call_number]       [last_Call-ID:]       [last_CSeq:]       Contact: <sip:[local_ip]:[local_port];transport=[transport]>       Content-Type: application/sdp       Content-Length: [len]        v=0       o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]       s=-       c=IN IP[media_ip_type] [media_ip]       t=0 0       m=audio [media_port] RTP/AVP 0       a=rtpmap:0 PCMU/8000       ]]>    </send>

На ответ 200ОК ожидаем получения ACK. После разговора ожидаем запроса BYE, отвечаем на него сообщением 200OK и заканчиваем скрипт типовыми тегами.

<recv request="ACK"         optional="true"         rtd="true"         crlf="true">   </recv>     <recv request="BYE">   </recv>     <send>     <![CDATA[       SIP/2.0 200 OK       [last_Via:]       [last_From:]       [last_To:]       [last_Call-ID:]       [last_CSeq:]       Contact: <sip:[local_ip]:[local_port];transport=[transport]>     ]]>   </send>     <timewait milliseconds="4000"/>      <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>     <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>  </scenario>

Создание диалплана

Т.к. мы будем устанавливать соединение между sipp и телефоном необходимо прописать соответствующий диалплан. Я использую SIP телефон и в соответствующем подразделе «План нумерации» добавляю номер для sipp.

S4, L8 (4xxxx | 111@192.168.1.23:5071)

В моем случае к уже существующему правилу я добавляю номер, при наборе которого будет вызван абонент с ip адресом 192.168.1.23:5071, это и есть адрес устройства на котором запущен sipp.

Вы также можете задать диалплан в своем софтфоне.

Запуск сценария

Последним шагом остается лишь запуск сценария с соответсвующими ключами.

sudo sipp 192.168.1.23 -sf uas_no180.xml  -p 5071

Данное окно и будем говорить нам об успешном запуске. Набирая номер 111 произведем звонок. Скрипт отрабатывает так, как это было задумано и позволяет нам наглядно рассмотреть ситуацию в которой сообщение 180Ringing не было получено или отправлено.

Для более наглядного теста uas сценариев можно использовать ключ -rtp_echo

sudo sipp 192.168.1.23 -sf uas_no180.xml  -p 5071 -rtp_echo

Он позволит sipp ретранслировать полученные rtp пакеты, тем самым позволяя Вам оценить качество звука и наличие потерь и задержек с точки зрения потребителя.

Надеюсь рассмотрение такого простенького uas сценария поможет в дальнейшем изучении sipp.


Ссылка на первую часть — https://habr.com/ru/post/648293/

SIPp reference documentation — http://sipp.sourceforge.net/doc/reference.html

Репозиторий с большим количеством uas и uac сценариев — https://github.com/saghul/sipp-scenarios


ссылка на оригинал статьи https://habr.com/ru/post/648693/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *