WARNING SIP+Retransmissions

5xx — ответы на сбой сервера

500 — внутренняя ошибка сервера
Серверу не удалось выполнить запрос из-за непредвиденного состояния.
501 Не реализовано
Сервер не может выполнить запрос, например, потому что он не распознает метод запроса. (Сравните с , где сервер распознает метод, но не разрешает или не поддерживает его.)
502 Неверный шлюз
Сервер действует как шлюз или прокси и получил недопустимый ответ от нижестоящего сервера при попытке выполнить запрос.
503 Сервис недоступен
Сервер находится на обслуживании или временно перегружен и поэтому не может обработать запрос. Поле заголовка «Retry-After» может указывать, когда клиент может повторно попытаться выполнить свой запрос.
504 Тайм-аут сервера
Сервер попытался получить доступ к другому серверу, пытаясь обработать запрос, и не получил быстрого ответа.
Версия 505 не поддерживается
Версия протокола SIP в запросе не поддерживается сервером.
513 Сообщение слишком большое
Длина сообщения запроса больше, чем может обработать сервер.
555 Служба push-уведомлений не поддерживается
Сервер не поддерживает службу push-уведомлений, указанную в параметре SIP URI pn-provider.
580 Precondition Failure (Отказ предусловия)
Сервер не может или не желает соблюдать некоторые ограничения, указанные в предложении.

Идентификация провайдера

Для рада провайдеров телефонии может наблюдаться следующая картина:

  • Успешно проходит регистрация по адресу sip.test.ru

  • Допустим sip.test.ru резолвится в 10.10.10.10

  • Входящие вызовы поступают с 11.11.11.11

  • Входящие могут поступать и с 10.10.10.10

Вызовы могут не пройти авторизацию и будут завершены.

В PJSIP есть возможность идентификации по IP адресу:

В параметре «match», через запятую, можно описать все IP адреса провайдера. В этом случае входящий будет корректно сопоставлен с нужным endpoint.

Кроме того, следует обратить внимание на опцию «endpoint_identifier_order». Значение по умолчанию:

Значение по умолчанию:

Если у вас есть несколько учетных записей одного провайдера, которые регистрируются на одном и том же адресе IP:PORT, то имеет смысл поменять порядок идентификации:

Пример, есть три транка:

  • 99999 — подключается к 10.10.10.10:5060

  • 88888 — подключается к 10.10.10.10:5060

  • 77777 — подключается к 10.10.10.10:5060

Если не настроить «endpoint_identifier_order», то:

  • все входящие будут направлены в контекст произвольного endpoint (идентификация пройдет по адресу IP:PORT), к примеру в контекст endpoint «99999» .

  • канал, созданный при входящем будет всегда ассоциироваться с одним и тем же endpoint, к примеру PJSIP/99999-0000XXX, на какой внешний номер бы ни звонил клиент

5xx – ошибки сервера

SIP/2.0 500 Internal Server ErrorВнутренняя ошибка сервера.

SIP/2.0 500 DB TimeoutНет ответа от базы данных.

SIP/2.0 500 Database ErrorТо же самое, но в другой момент.

SIP/2.0 500 Wrong DB ResponseНеправильный ответ базы данных.

SIP/2.0 500 Undefined ReasonНеопределенная причина.

SIP/2.0 500 account has been moved to a remote systemАккаунт перенесен в удаленную систему (дословно).

SIP/2.0 500 Call placing quota exceededПревышен CPS.

SIP/2.0 501 Method Not Supported HereВ сервере не реализованы какие-либо функции, необходимые для обслуживания запроса. Метод запроса SIP не поддерживается.

SIP/2.0 502 Bad GatewayСервер, функционирующий в качестве шлюза или прокси-сервера, принимает некорректный ответ от сервера, к которому он направил запрос.

SIP/2.0 503 Service UnavailableСервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания.

SIP/2.0 504 Server time-outСервер не получил ответа в течение установленного промежутка времени от сервера, к которому он обратился для завершения вызова.

SIP/2.0 505 SIP Version not supportedВерсия не поддерживается. Сервер не поддерживает эту версию протокола SIP.

SIP/2.0 513 Message too bigСервер не в состоянии обработать запрос из-за большой длины сообщения.

1xx — предварительные ответы

100 попыток
Выполнение расширенного поиска может занять значительное время, поэтому ответственный прокси-сервер должен отправить ответ 100 Trying.
180 Звонок
Целевой пользовательский агент получил ПРИГЛАШЕНИЕ и предупреждает пользователя о вызове.
181 Вызов переадресован
Серверы могут дополнительно отправить этот ответ, чтобы указать, что вызов переадресован.
182 В очереди
Указывает, что адресат был временно недоступен, поэтому сервер поставил вызов в очередь до тех пор, пока адресат не станет доступен. Сервер может отправить несколько ответов 182 для обновления хода очереди.
183 Сессия Прогресс
Этот ответ может использоваться для отправки дополнительной информации о вызове, который все еще устанавливается.
199 Ранний диалог прекращен
Может использоваться сервером пользовательского агента, чтобы указать вышестоящим объектам SIP (включая клиента пользовательского агента (UAC)), что ранний диалог был прерван.

Автоподъем. Paging. Intercom

Это крайне интересные функции. Все они завязаны на функцию «Автоответ». Может работать как с настольными телефонами, так и с многими софтфонами.

Принцип работы многих UAC схож. Чтобы «поднять трубку» достаточно в INVITE передать дополнительный заголовок. Пример:

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

При работе с chan_sip при originate достаточно было установить переменную SIPADDHEADER:

Работа с этой переменной была описана в chan_sip.с и при звонке заголовок добавлялся автоматически в INVITE.

В случае с PJSIP подход отличается. Упрощенный пример extensions.conf:

Опция «b» в команде «Dial» позволяет созданный канал назначения с помощью Gosub направить в дополнительный контекст «dial_create_chan».

Только в этом месте есть возможность управлять SIP заголовками ДО отправки INVITE.

Интересный вывод: «dial_create_chan» — место в dialplan, где канал еще существует, но НЕ связан с SIP диалогом.

Теперь более правильный пример установки заголовка:

С помощью функции «FIELDQTY» мы анализируем количество контактов, подключенных к endpoint. Если контактов несколько, то функцию лучше отключить, ведь сложно предугадать, на каком из телефонов сработает ответ на вызов.

С помощью функции «CUT» происходит разбор строки «SIPADDHEADER», выделяем имя заголовка и его значение.

Обязательно, после PJSIP_HEADER очищаем значение переменной SIPADDHEADER. Это страховка от случайного срабатывания «ответа» на вызов при переадресациях.

6xx — глобальные реакции на сбой

600 везде заняты
Все возможные направления заняты. В отличие от ответа 486, этот ответ указывает на то, что адресат знает, что нет альтернативных адресатов (таких как сервер голосовой почты), способных принять вызов.
603 Отклонить
Пункт назначения не желает участвовать в вызове или не может этого сделать, и, кроме того, пункт назначения знает, что нет альтернативных пунктов назначения (таких как сервер голосовой почты), желающих принять вызов. Ответ может указывать на лучшее время для вызова в поле заголовка Retry-After.
604 Нигде не существует
Сервер имеет достоверную информацию о том, что запрошенный пользователь нигде не существует.
606 неприемлемо
С агентом пользователя установилось соединение, но некоторые аспекты описания сеанса, такие как запрошенный носитель, пропускная способность или стиль адресации, были неприемлемы.
607 Нежелательный
Вызываемая сторона не хотела этого вызова от вызывающей стороны. Будущие попытки вызывающей стороны, скорее всего, будут отклонены аналогичным образом.
608 отклонено
Посредническая машина или процесс отклонили попытку вызова. Это контрастирует с кодом ответа SIP 607 (нежелательный), в котором вызываемая сторона отклонила вызов. Ответ может включать контактные объекты, которые заблокировали вызов, в заголовке Call-Info, содержащем. Это обеспечивает механизм исправления для законных абонентов, которые обнаруживают, что их звонки заблокированы.

О природе каналов и их происхождении

Каждый канал SIP и PJSIP непосредственно связан с SIP диалогом «PBX — UAC».

Проще говоря один INVITE = один канал вида SIP/104-0000XX.

Если к endpoint подключено несколько контактов, то при звонке на внутренний номер INVITE будет отправлен каждому контакту, будет создано несколько каналов.

Зная это, можно сделать следующие выводы:

  • Чем больше каналов, тем больше событий в AMI

  • Каждый канал пройдет определенный для него dialplan

  • Каждый канал повлияет на CDR записи

Если кратко подвести итог, то, после включения множественной регистрации, мы видим влияние на все основные модули наших продуктов:

  • История звонков на АТС

  • Функция записи разговоров

  • Работа CTI приложений, завязанных на AMI

3xx — ответы на перенаправление

300 вариантов выбора
Адрес преобразован в один из нескольких вариантов, которые может выбрать пользователь или клиент, которые перечислены в теле сообщения или в полях контакта сообщения.
301 перемещен навсегда
Исходный Request-URI больше не действителен, новый адрес указан в поле заголовка Contact, и клиент должен обновить все записи исходного Request-URI новым значением.
302 перемещен временно
Клиент должен попробовать по адресу в поле «Контакт». Если присутствует поле Expires, клиент может кэшировать результат за этот период времени.
305 Использовать прокси
В поле «Контакт» указывается прокси, который должен использоваться для доступа к запрошенному месту назначения.
380 Альтернативная служба
Вызов не удался, но альтернативы подробно описаны в теле сообщения.

3xx – сообщения о переадресации

SIP/2.0 300 Multiple ChoicesУказывает несколько SIP-адресов, по которым можно найти вызываемого пользователя.

SIP/2.0 301 Moved PermanentlyВызываемый пользователь больше не находится по адресу, указанному в запросе.

SIP/2.0 302 Moved TemporarilyПользователь временно сменил местоположение. (Настроена переадресация по SIPUA в т.ч. с VOIP-телефона)

SIP/2.0 305 Use ProxyВызываемый пользователь не доступен непосредственно. Входящий вызов должен пройти через прокси-сервер.

SIP/2.0 380 Alternative ServiceЗапрошенная услуга недоступна, но доступны альтернативные услуги.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: