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

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

Как и в прошлой статье я буду целиком и полностью ссылаться на официальную документацию.

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

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

A							SIPP
----------> 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.


Ссылка на первую часть

SIPp reference documentation

Репозиторий с большим количеством uas и uac сценариев

Комментарии (0)