Денис Здесенко
14.06.2020
5816

PJSIP. Глубокая настройка глобальных параметров

О библиотеке pjsip написано не мало статей, но в большинстве из них внимание уделяют по большей степени таким вещам как конечные точки (эндпоинты), транспорт, контакты, регистрации и прочее. В данной же статье будет подробно рассмотрена секции global и system файла конфигурации pjsip.conf и их опции. О секциях system и global Вообще, прежде чем перейти к […]

О библиотеке pjsip написано не мало статей, но в большинстве из них внимание уделяют по большей степени таким вещам как конечные точки (эндпоинты), транспорт, контакты, регистрации и прочее. В данной же статье будет подробно рассмотрена секции global и system файла конфигурации pjsip.conf и их опции.

О секциях system и global

Вообще, прежде чем перейти к описанию конкретной секции, стоит пару слов сказать о библиотеке в целом. Отличительной особенностью PJSIP стала модульность. Это означает что, конфигурационный файл разбит на модули или секции. В этих секциях задается конфигурация каждого объекта, и исключением становятся как раз секции system и global. Более подробно с описанием и назначением секций можно ознакомиться в статье «Pjsip. Базовая настройка. Идеология настройки»

Казалось бы, что system и global – это такие незначительные детали, упоминать о которых особо и смысла то нет, но имеющие огромное значение. Об этих секцях можно сказать, что они вместе являются своего рода аналогом раздела general файла sip.conf в chan_sip. Как и в нём, в этих секцях описываются параметры, которые будут применяться глобально ко всем sip коммуникациям, да и к системе в целом.

Секции general и system описываются также, как и остальные объекты конфигурации в pjsip.conf — с помощью type = global или type = system

Вот так выглядят эти секции в конфигурационном файле:

Секции system и global в конфигурационном файле pjsip.conf

Опции system

А теперь разберем каждую секцию, какие опции в ней описываются и для чего они нужны. Для начала перечислим опции system и их назначение.

timer_t1 — устанавливает значение таймера транзакции T1 (задается в миллисекундах, значение по умолчанию = 500). Вообще таймер T1 необходим для определения того, как долго ждать перед повторной передачей запросов, которые не получают ответа при использовании ненадежного транспорта (например, UDP).

timer_b — устанавливает значение таймера транзакции B (задается в миллисекундах, значение по умолчанию 32000). Таймер B определяет максимальное время ожидания после отправки запроса INVITE до завершения транзакции.

compact_headers – устанавливает использование кратких форм общих имен заголовков SIP (значение по умолчанию no).

threadpool_initial_size – устанавливает начальное количество потоков в пуле потоков res_pjsip (значение по умолчанию 0).

threadpool_auto_increment – устанавливает число на которое увеличивается количество потоков при необходимости (значение по умолчанию 5).

threadpool_idle_timeout – устанавливает количество секунд, прежде чем удалить «пустой» поток (задается в секундах, значение по умолчанию 60).

threadpool_max_size – указывает максимальное количество потоков в пуле потоков res_pjsip. Значение 0 указывает на отсутствие максимума (значение по умолчанию 50).

disable_tcp_switch – отключает автоматическое переключение с UDP на TCP (значение по умолчанию yes).

type = system – задается тип секции system.

Так же стоит отметить, что есть еще 2 опции follow_early_media_fork (значение по умолчанию yes) и accept_multiple_sdp_answers (значение по умолчанию no), работающие с атрибутами SDP в ответах UAS и тэгом «To».

Опции global

Теперь стоит перечислить опции секции global и разобраться какая опция за что отвечает.

max_forwards – задает значение, используемое в заголовке Max-Forwards для запросов SIP (значение по умолчанию 70).

keep_alive_interval – задает интервал отправки keepalive-сообщений активным транспортам, ориентированным на соединение (задается в секундах, значение по умолчанию 90).

contact_expiration_check_interval – задается интервал для проверки «истекших» контактов (задается в секундах, значение по умолчанию 30).

disable_multi_domain – отключает поддержку нескольких доменов (значение по умолчанию no). Стоит отметить, что если этот параметр отключен, то повышается производительность в реальном времени из-за уменьшения количества запросов к БД.

unidentified_request_period – задается временной промежуток, в течение которого накапливаются неопознанные запросы (задается в секундах, значение по умолчанию 5).

unidentified_request_count – задается количество разрешенных неопознанных запросов с одного IP (значение по умолчанию 5).

Если будут получены unidentified_request_count запросы во время действия unidentified_request_period описанного выше, то будет сгенерировано событие безопасности.

user_agent –задается значение, используемое в заголовке User-Agent для запросов SIP и заголовок сервера для ответов SIP.

default_outbound_endpoint – задается эндпоинт, используемый при отправке исходящего запроса на URI (значение по умолчанию default_outbound_endpoint).

default_voicemail_extension – задается экстеншен голосовой почты для отправки в заголовке сообщения-уведомления NOTIFY, если он не указан в эндпоинте или в другом месте.

debug – включает или выключает лог отладки SIP (значение по умолчанию no, может принимать значения yes/no/[ip-адрес удаленного хоста для дебага]).

endpoint_identifier_order – устанавливает порядок обработки идентефикаторов эндпоинта (значение по умолчанию ip,username,anonymous).

default_from_user – задает значение для поля «From» SIP-запроса, если не будет варианта получше, например CallerID (значение по умолчанию asterisk).

default_realm – задает значение поля «realm» SIP-запроса (значение по умолчанию asterisk).

mwi_tps_queue_high — задается значение для триггера, при достижении которого будут выдаваться сообщения о высокой загрузке на Астериск и pjsip прекратит обрабатывать новые запросы, пока значение не снизится (значение по умолчанию 500).

mwi_tps_queue_low – задается значение для триггера, при котором загрузка Астериска перестает быть критической (значение по умолчанию -1).

mwi_disable_initial_unsolicited – включает/выключает отправку нежелательных MWI на все эндпоинты при запуске (значение по умолчанию no). Функция полезна, если у вас в системе больше тысячи эндпоинтов, чтобы ее сильно не загружать при старте.

ignore_uri_user_options – включает/выключает игнорирование параметров поля пользователя SIP URI (значение по умолчанию no). Т.е. если эта опция включена, и в пользовательском поле SIP URI есть точки с запятой, то поле усекается до первой точки с запятой. Это фактически делает точку с запятой неиспользуемым символом для имен эндпоинтов PJSIP, экстеншенов и aor. Функция может оказаться полезной для работы с провайдерами, использующими по той или иной причине пользовательские параметры.

use_callerid_contact – помещает CallerID в сгенерированный заголовок контакта (значение по умолчанию no).

send_contact_status_on_update_registration – включает отправку ami-события ContactStatus, когда устройство обновляет свою регистрацию (значение по умолчанию yes).

taskprocessor_overload_trigger – задает область действия триггера для перегрузок процессора задач (по умолчанию область глобальная, значение global). Принимает одно из трех значений:

  • global – любая перегрузка процессора задач вызовет алерт-сообщения
  • pjsip_only – алерт вызовут только перегрузки процессора задач pjsip
  • none – выключает триггер
Параметры none и pjsip_only есть смысл использовать для решения лишь конкретных проблем. Использовать необходимо с особой осторожностью, т.к. при определенных условиях они могут ухудшить ситуацию.

type = global задается тип секции global.

Заключение

В качестве заключения и своего рода вывода хотелось бы написать, что теме глобальных параметров PJSIP уделяется недостаточно внимания, и на мой взгляд очень зря, т.к. эта библиотека хороша своей гибкостью, а параметры, задаваемые в рассмотренных нами секциях, в этом играют значимую роль. Возможно, какие-либо параметры я мог пропустить, полный список можно найти на официальном сайте проекта или же в sample-файлах самого Астериска, описание прилагается, но на английском языке.

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.