Версия 5.1 |
|||||||||||||||||||||||||||||||||
|
|
Когда программа - Помощник запущена, Сервер отправляет команды процессу Помощника через стандартный ввод процесса. Сервер читает ответы программы из процесса стандартный вывод.
Команды и ответы являются текстовыми строками, оканчивающимся символом (символами) EOL, используемыми в ОС Сервера.
Каждая команда начинается с последовательного числа и ответ, выдаваемый программой - Помощником, также начинается с этого же числа. Этот метод позволяет программе - Помощнику обрабатывать несколько одновременных запросов и возвращать ответы в любом порядке.
Программа - Помощник может отправлять информационные ответы в любое время. Все информационные ответы начинаются с символа звездочка (*). Сервер игнорирует информационные ответы, но они могут появляться в Журнале работы Сервера.
Строки с ответами, созданные в программе - Помощнике, должны иметь размер не более чем 4096 байт.
Обратите внимание: коммуникация между Сервером и программой - Помощником происходит через каналы ОС и многие библиотеки, используемые для создания программ, осуществляют буферизацию выходных данных, отправляемых в каналы. Убедитесь, что ваша программа - Помощник использует в том или ином виде команду типа flush после отправки ответа на стандартный вывод, потому что в противном случае ответ может не достичь сервера.
Текущей директорией запущенной программы - Помощника является директория данных CommuniGate Pro.
Программы - Помощники не должны записывать ничего в своей поток стандартного вывода ошибок, за исключения случаев, когда им необходимо уведомить о причине сбоя перед аварийным завершением работы. CommuniGate Pro читает поток стандартного вывода ошибок только после завершения программы и, если программа записывала что-либо в этот поток во время обработки команды Сервера, то её работа может быть приостановлена операционной системой при переполнении буфера канала стандартного вывода ошибок.
Команда "Версия Интерфейса" используется для обеспечения совместимости между различными версиями программ - Помощников и различными версиями Сервера CommuniGate Pro. Сервер отправляет эту команду, указывая реализованную в нём версию протокола:Программа - Помощник должна вернуть ответ INTF и поддерживаемую версию протокола.
nnnnnn INTF programInterfaceVersion
Если возвращаемый номер меньше, чем версия протокола Сервера, то Сервер будет использовать эту (более старую) версию протокола.
Когда Сервер прекращает свою работу или когда ему необходимо остановить программу - Помощника, он отправляет команду QUIT и затем закрывает стандартный ввод процесса. Программа - Помощник должна отправить ответ OK и прекратить работу в течении 5 секунд.
Пример сессии (I: - команда сервера, отправленная на стандартный ввод программы, O: - ответы программы, записанные в её стандартный вывод, COMMAND - специальная команда Помощника):В примере выше показывается, что сервер не ждёт ответа для отправки следующей команды, и что он может принимать ответы от нескольких отправленных ранее команд в любом порядке - до тех пор, пока эти ответы приходят в течении указанного ограничения времени.
Программы для Внешней Аутентификации могут использоваться для проведения аутентификации, управления пользователями и оказания услуг маршрутизации с использованием внешних источников данных.
Протокол Интерфейса Внешнего Аутентификатора основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 7 Интерфейса Внешнего Аутентификатора.
Когда пользователь должен быть аутентифицирован при помощи незащищённого (clear text) метода, Сервер отправляет следующую команду:Если пароль принимается, то Внешний Аутентификатор должен вернуть положительный ответ:
nnnnnn OK
Если пароль не принимается, то должен возвращаться отрицательный ответ:
nnnnnn ERROR optional-error-message
Если пароль принимается и есть аутентификационный ответ, который должен быть возвращён клиенту, то положительный ответ должен возвращаться как строка в кавычках:
nnnnnn RETURN "authentication-response"
проверка SASL пароля требует, что бы в программе Внешнего Аутентификатора все SASL методы и алгоритмы поддерживались корректно. Как альтернатива, программа Внешнего Аутентификатора может возвращать пароль пользователя в открытом виде, заставляя Сервер проверять пароль и расчитывать аутентификационные ответы. Пароль пользователя в открытом виде должен возвращаться как строка в кавычках:
nnnnnn PLAIN "plain-text-password"
Программы Внешней Аутентификации могут также использоваться для обработки неизвестных имён. Например, программа может осуществлять поиск в внешней базе данных, проверяя, существует ли в этой базе данных пользователь, создавать Пользователя, Псевдоним, Группу, Список Рассылки или Переадресатор используя CLI/APICommuniGate Pro и возвращать Серверу положительный ответ. В этом случае CommuniGate Pro повторно попытается открыть объект с указанным именем в этом домене.
Для проверки неизвестного имени, Сервер отправляет следующие команды:Если программа отправляет ответ OK, то Сервер снова пытается найти объект name в Домене domain.
Если программа отправляет ответ ROUTED address, то Сервер берёт полученный address и перезапускает процедуру Маршрутизации с этим адресом. Маршрутизируемый адрес получает атрибут "can Relay", за исключением ситуации, если он был указан с префиксом [NORELAY].
Если программа отправляет ответ FAILURE, то Маршрутизатор Сервера возвращает код "временной внутренней ошибки" (этот код заставляет SMTP модуль вернуть код ошибки 4xx, а не код постоянной ошибки 5xx).
Если программа отправляет любой другой ответ, то Маршрутизатор Сервера возвращает ошибку "неизвестный пользователь".
Пример сессии:Установка Домена "Обратиться к Внешней Программе" указывает серверу использовать программу Внешнего Аутентификатора при обработке неизвестного имени.
Программа Внешней Аутентификации может использоваться для помощи при Маршрутизации адреса. Если адрес направляется в домен @external, то "локальная часть" адреса передаётся Программе Внешней Аутентификации при помощи команды ROUTE:Если программа отправляет ответ ROUTED address, то Сервер берёт полученный address и перезапускает процедуру Маршрутизации с этим адресом. Маршрутизируемый адрес получает атрибут "can Relay", если он был указан с префиксом [RELAY].
Если программа отправляет ответ FAILURE, то Маршрутизатор Сервера возвращает код "временной внутренней ошибки" (этот код заставляет SMTP модуль вернуть код ошибки 4xx, а не код постоянной ошибки 5xx).
Если программа отправляет любой другой ответ, то Маршрутизатор Сервера возвращает ошибку "не могу провести маршрутизацию адреса".
Пример сессии:Программы - Внешние Фильтры Сообщений используются для фильтрования содержимого (от вирусов и спама).
Протокол Интерфейса Внешнего Фильтра основывается на обычном Протоколе Помощников.
В этом разделе описывается Версия 3 Протокола Внешнего Фильтра.
Если внешняя программа заканчивает свою работу аварийно, то CommuniGate Pro приостанавливает процесс Установки в Очередь до тех пор, пока внешняя программа не будет перезапущена.
Внешние RADIUS программы могут использоваться для проведения дополнительной проверки при операциях аутентификации, выполняемых через модуль RADIUS, а так же для добавления дополнительных атрибутов в ответы RADIUS.
Протокол Интерфейса Внешнего RADIUS основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 2 Интерфейса Внешнего RADIUS.
Если пароль не принимается, то должен возвращаться отрицательный ответ:
nnnnnn REJECT optional-error-message
Атрибуты в словаре должны использовать цифровые значения как ключи (например, 27 для Session-Timeout).
Следующие атрибуты интерпретируются как 32-битные целые значения и закодированы в словаре как числовые строки:
NAS-Port, Service-Type, Framed-Protocol, Framed-Routing, Framed-MTU, Framed-Compression, Login-Service, Login-TCP-Port, Framed-IPX-Network, Session-Timeout, Idle-Timeout, Termination-Action, Framed-AppleTalk-Link, Framed-AppleTalk-Network, Event-Timestamp, NAS-Port-Type, Port-Limit, ARAP-Zone-Access, Password-Retry, Prompt, Tunnel-Type, Tunnel-Medium-Type, Tunnel-Preference, Acct-Interim-Interval, Acct-Delay-Time, Acct-Input-Octets, Acct-Output-Octets, Acct-Authentic, Acct-Session-Time, Acct-Input-Packets, Acct-Output-Packets, Acct-Terminate-Cause, Acct-Link-Count, Acct-Input-Gigawords, Acct-Output-Gigawords.
Следующие атрибуты интерпретируются как 32-битные IP адреса и кодируются в словаре как строки вида aaa.bbb.ccc.ddd:
NAS-IP-Address, Framed-IP-Address, Framed-IP-Netmask, Login-IP-Host.
Следующие атрибуты игнорируются в ответах Помощника:
User-Name, User-Password, CHAP-Password, State, Proxy-State, EAP-Message, Message-Authenticator, Acct-Status-Type.
Все другие значения атрибутов кодируются либо как Строка, либо как Блок Данных. Сервер использует формат блока данных для тех значений атрибутов, которые содержат байты не из диапазона 0x20-0x7F.
Формат Блока Данных должен использоваться, если значение содержит байты с двоичными нулями.
Если атрибут имеет несколько значений, то значение атрибута кодируется как Массив.
Следующие атрибуты добавляются к атрибутам словаря, передаваемым Помощнику:Зависимые от Производителя атрибуты представляются при помощи ключей с отрицательными цифровыми значениями. Абсолютное значение ключа является значением "VendorID". Для каждого VendorID, связанный с ним элемент является словарём. Ключи этого словаря являются зависимыми от Производителя "типами производителя", со связанными с ними "специфическими атрибутами". Значения "специфических атрибутов" могут хранится как Строка, Блоки Данных, Числа или Массивы Строк, Блоков Данных и/или Чисел.
Пример сессии (I: - команда сервера, отправленная на стандартный ввод программы, O: - ответы программы, записанные в её стандартный вывод):Обратите внимание: Сервер может отправлять несколько параллельных запросов для одного Пользователя.
Обратите внимание: Внешняя программа RADIUS вызывается, когда данные Пользователя открыты. В системе с Динамическим Кластером это означает, что Внешние программы RADIUS должны запускаться на Backend Серверах и такие Внешние программы RADIUS, запущенные на других Backend Серверах, никогда не получат одновременные запросы для одного и того же Пользователя.
Программы - Внешние Обработчики CDR могут использоваться для обработки CDR (Call Detail Records, Детализированная Информация о Звонках), созданных компонентом Signal при попытках установления звонка и его дальнейшей обработке. Они также могут обрабатывать CDR записи, созданные CG/PL приложениями.
Протокол Интерфейса Внешнего Обработчика CDR основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 1 Интерфейса Внешнего Обработчика CDR.
Когда включена программа Внешний Обработчик CDR, то модуль Signal генерирует CDR и отправляет их в эту программу.
При создании CDR Сервер отправляет следующие команды:когда запись обработана, программа должна вернуть положительный ответ:
nnnnnn OK