В прошлой статье я рассмотрел базовый сценарий 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/
Добавить комментарий