Устройства без регистрации

Введение

Кейс решался в рамках задачи #140.

Телефоны подключены к конкретным гейтам (роль sg) на конкретные адреса (домены). Это настройка телефонов.

Звонок от телефона проходит без проверки авторизации (исключительно по адресу отправителя и связи с учетной записью sipuser без регистрации). Обеспечением этой части задачи занимаются роли SG и B2BUA, используя кэши учетных записей без регистрации, поддерживая данные в них в актуальном состоянии. При звонке с учетной записи без регистрации в поведении системы отличается исключительно авторизационная составляющая, а username и domain анализируются и используются аналогично стандартному режиму.

При звонке на телефон (на учетную запись без регистрации) система действует полностью аналогично учетным записям с регистрацией. Разница скрыта в поведении независимых внутренних сервисов, эмулирующих регистрацию. Так, данные о таких учетных записях лежат в регистраре (роль sr) и поддерживаются там в актуальном состоянии.

Поля учетной записи sipuser

reg (типа intbool) определяет режим работы учетной записи: с регистрацией или без, по умолчанию true – с регистрацией.

devices указывает совокупность устройств и их свойства в формате списка объектов (array<object>):

  "devices": [
     {
       "device": "192.168.0.10:5060",
       "gates": [ 4, 6 ],
       "proto": "udp"
     }
  ]
  • gates - указывает адрес внутреннего сервера (роль гейта sg), с которого отправлять запросы (порт не обязателен, и фактически игнорируется) в формате SrvIdx :: int (см. раздел Конфигурация) или IP-адрес и порт :: str.

  • device - указывает адрес внешнего сервера (IPV4), порт по умолчанию 5060, но может быть указан.

  • proto - протокол связи с устройством (tcp,udp,tls), по умолчанию udp.

Особенности работы

Каждая учетная запись может содержать несколько девайсов, их вызов осуществляется одновременными форками.

Каждый девайс имеет привязку к конкретному гейту с тем, чтобы исходящий звонок на учетную запись проходил строго через него. Это обеспечивает синхронизацию устройств, ведь оппозитное устройство аналогично настроено на конкретный адрес. Значение поля gates может содержать также * список из чисел SrvIdx, строк с ip-адресом гейта, строк с ip-адресом и портом, * значение "" - используется случайный гейт на сайте, обслуживающем домен, и имеющем лексикографически минимальное имя. * пустой список или пустая строка - используется значение по умолчанию, установленное в настройках домена (settings.ext.default_sipuser_noreg_gates), ожидается что там находится число RoleId, либо ip-адрес гейта, либо ip-адрес и порт гейта, либо список из этих значений. Если значение не задано, то поведение аналогично . Если итоговое значение не имеет пересечения с гейтами сайтов, обслуживающих домен, то учетная запись не регистрируется и звонки на нее невозможны, хотя с нее звонки проходить в систему будут через любой гейт на сайтах, обслуживающих домен.

Одно конкретное устройство (суть адрес устройства) может использовать несколько гейтов (роль SG). При этом запрос на одно устройство уходит всегда только с одного гейта, другие игнорируются и применяются только при недоступности гейта. Запросы же с устройств принимаются на любые гейты сайтов, где обслуживается домен, которому принадлежит учетная запись.

Количество адресов устройств не должно превышать количества лицензий, отведенных данному sipuser. Проверка и запрет изменения в каждую сторону в момент изменения учетной записи.

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

Поддержкой данных в регистраре занимается особый сервис эмуляции регистраций (роль mware, действует в режиме Active-Passive на каждом сайте). Он мониторит доменный центр (периодически забирает учетные записи) и сверяет данные с прошлой копией, создавая/обновляя/удаляя учетные записи в регистраре, одновременно проверяя доступность гейтов и гарантируя сохранение в регистраре пути через доступный гейт.

Сервис эмуляции регистраций занимается только теми девайсами (подмножество всех девайсов учетной записи), которые относятся к гейтам текущего сайта. Таким образом гарантируется отсутствие дублирования и паразитных влияний на регистрар с нескольких сайтов, но одновременно требует в одном девайсе не указывать несколько гейтов, относящихся к разным сайтам. Ответственность за это лежит на администраторе домена.

Особенности решения проблемы отсутствия домена в запросе

Для решения проблемы случая, когда в INVITE-запросе в поле домена указан только IP-адрес, используется общий кэш на b2b. По адресу и порту отправителя определяется, есть ли в каком либо домене, обслуживаемом на текущем сайте, устройство без регистрации с соответствующими значениями. Если таких устройств нет, то система работает в обычном режиме, применяя алгоритмы авторизации и определения учетной записи по заголовкам From и Authorization. Если устройства обнаруживаются, то в зависимости от количества учетных записей, привязанных к этому адресу отправителя, количества доменов на адресе, а также адреса From – домен или IPV4 – запрещает или обрабатывает звонок, рассматривая его как звонок от конкретной учетной записи конкретного домена.