CommuniGate Pro
Версия 6.4
 

Программы Помощники

Сервер CommuniGate Pro может использовать внешние программы для выполнения различных операций - сканирования сообщений, аутентификации пользователей, реализации политик входа RADIUS и т.д. Работа с этими внешними программами строится одинаковым образом - они взаимодействуют с Сервером через простой протокол Интерфейса Помощника.




Настройки Помощников

Для того, чтобы указать путь к Внешнему Помощнику, через Веб Интерфейс Администратора откройте в области Установки страницу Общее и нажмите на ссылку Помощники:

Название Помощника
Уровень Журнала: Путь к Программе:
Тайм-аут: Авторестарт:

Флажок рядом с именем Помощника предписывает Серверу запускать указанную программу как отдельный процесс ОС.

Уровень Журнала
Используйте эту настройку, чтобы указать, какую информацию модуль поддержки Помощников должен сохранять в Журнале работы Сервера. Каждый Помощник использует свою собственную метку в записях Журнала.
Путь к Программе
Имя файла (путь) программы-Помощника. Если указан относительный путь, то он определяется относительно директории данных CommuniGate Pro.
Если первый символ строки этой настройки - $, тогда оставшаяся часть строки трактуется относительно директории приложения.
Тайм-аут
Если программа-Помощник не посылает ответ в течение указанного периода времени, программа останавливается.
Авторестарт
Если программа-Помощник останавливается, и эта опция отключена, то все необработанные запросы к этой программе отвергаются. Если программа-Помощник останавливается, когда эта опция включена, то Сервер ожидает указанный период времени, перезапускает Программу-Помощника и пересылает ей запросы.

Манифест Дочерних Процессов

В целях безопасности имена внешних программ, запускаемых Сервером CommuniGate Pro, должны быть указаны в файле Манифеста Дочерних Процессов. Это текстовый файл Settings/ChildProcs.data из директории данных Сервера.
Внешняя программа не будет запущена, если начальная часть её пути/имени не совпадёт с одной из строк из Манифеста.

Помимо программ-Помощников, Манифест также применяется к другим программам, которые могут запускаться Сервером:

  • к CGI программам
  • программам Проверки Орфографии
  • Внешним Приложениям для доставки через модуль PIPE
  • программам, запускаемым из Правил действием "Выполнить"

Имена программ зависят от используемой ОС. В ОС Windows имена регистро-независимы, в Unix-подобных ОС имена регистро-зависимы.

Строки из манифеста помимо пути и имени программы также могут включать идущие далее параметры командной строки Программы. Пробелы имеют значение.

Пример для ОС Windows:

CGPKAV\CGPKAV.exe
CGPKAS\CGPKAS.exe
c:\perl64\bin\perl authLDAPNewAD.pl

Пример для Unix-подобной ОС:

./mmindex-helper
CGPKAV/CGPKAV
CGPKAS/CGPKAS
/usr/local/bin/aspell -a --lang=

Обратите внимание: указав на Unix-подобных ОС в Манифесте строки / и ., можно разрешить запускать программы с любыми именами.


Протокол Помощников

Когда программа-Помощник запущена, Сервер отправляет команды процессу Помощника через стандартный ввод процесса. Сервер читает ответы программы из стандартного вывода процесса.

Команды и ответы являются текстовыми строками, оканчивающимся символом (символами) EOL, используемыми в ОС Сервера.

Каждая команда начинается с последовательного числа и ответ, выдаваемый программой - Помощником, также начинается с этого же числа. Этот метод позволяет программе - Помощнику обрабатывать несколько одновременных запросов и возвращать ответы в любом порядке.

Программа - Помощник может отправлять информационные ответы в любое время. Все информационные ответы начинаются с символа звездочка (*). Сервер игнорирует информационные ответы, но они могут появляться в Журнале работы Сервера.

Строки с ответами, созданные в программе - Помощнике, должны иметь размер не более чем 4096 байт.

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

Текущей директорией запущенной программы-Помощника является директория данных CommuniGate Pro.

Программы-Помощники не должны записывать ничего в своей поток стандартного вывода ошибок, за исключения случаев, когда им необходимо уведомить о причине сбоя перед аварийным завершением работы. CommuniGate Pro читает поток стандартного вывода ошибок только после завершения программы и, если программа записывала что-либо в этот поток во время обработки команды Сервера, то её работа может быть приостановлена операционной системой при переполнении буфера канала стандартного вывода ошибок.

Команда "Версия Интерфейса" используется для обеспечения совместимости между различными версиями программ - Помощников и различными версиями Сервера CommuniGate Pro. Сервер отправляет эту команду, указывая реализованную в нём версию протокола:
nnnnnn INTF serverInterfaceVersion
где:

nnnnnn
это уникальный последовательный номер этого запроса
serverInterfaceVersion
версия протокола Помощников, реализованная в этой версии Сервера CommuniGate Pro

Программа - Помощник должна вернуть ответ INTF и поддерживаемую версию протокола.
nnnnnn INTF programInterfaceVersion
Если возвращаемый номер меньше, чем версия протокола Сервера, то Сервер будет использовать эту (более старую) версию протокола.

Когда Сервер прекращает свою работу или когда ему необходимо остановить программу - Помощника, он отправляет команду QUIT и затем закрывает стандартный ввод процесса. Программа - Помощник должна отправить ответ OK и прекратить работу в течение 5 секунд.

Пример сессии (I: - команда сервера, отправленная на стандартный ввод программы, O: - ответы программы, записанные в её стандартный вывод, COMMAND - специальная команда Помощника):

O: * My Helper program started
I: 00001 INTF 1
O: 00001 INTF 1
I: 00002 COMMAND parameters
O: 00002 OK
I: 00003 COMMAND parameters
I: 00004 COMMAND parameters
O: * processing 00003 will take some time
O: 00004 ERROR description
O: 00003 OK
I: 00005 QUIT
O: * processed: 5 requests. Quitting.
O: 00005 OK
I: stdin closed

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


Внешняя Аутентификация

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

Протокол Интерфейса Внешнего Аутентификатора основывается на обычном Протоколе Помощников.

В этом руководстве описывается Версия 11 Интерфейса Внешнего Аутентификатора.

Когда пользователь должен быть аутентифицирован при помощи незащищённого (clear text) метода, Сервер отправляет следующую команду:
nnnnnn VRFY (mode) name@domain password [loginAddress]
где:

nnnnnn
это уникальный последовательный номер этого запроса
mode
имя услуги (IMAP, POP, FTP и т.д.), которая требует проведения этой операции аутентификации.
Этот параметр может отсутствовать, если запрос был получен от безымянного компонента Сервера.
Если имя услуги указывается, то оно заключается в скобки.
name
имя Пользователя
domain
имя Домена Пользователя
password
проверяемая парольная строка. Если пароль содержит специальные символы, то он кодируется так же, как Строка в кавычках.
loginAddress
сетевой адрес, с которого входит пользователь.
Этот параметр может отсутствовать, если пароль проверяется внутренним компонентом Сервера.
Если параметр указывается, то он заключается в квадратные скобки.

Если пользователь должен быть аутентифицирован при помощи безопасного SASL метода, то отправляется следующая команда:
nnnnnn SASL(method) (mode) name@domain password key [loginAddress]
где:

method
имя безопасного SASL метода (CRAM-MD5, APOP)
key
строка challenge, отправляемая почтовой программе клиента. Если в challenge содержится специальный символ, он кодируется так же, как Строка в кавычках.

Если пароль принимается, то Внешний Аутентификатор должен вернуть положительный ответ:
nnnnnn OK

Если пароль не принимается, то должен возвращаться отрицательный ответ:
nnnnnn ERROR optional-error-message

Если пароль принимается и есть аутентификационный ответ, который должен быть возвращён клиенту, то положительный ответ должен возвращаться как строка в кавычках:
nnnnnn RETURN "authentication-response"

Проверка SASL пароля требует, чтобы в программе Внешнего Аутентификатора все SASL методы и алгоритмы поддерживались корректно. Как альтернатива, программа Внешнего Аутентификатора может возвращать пароль пользователя в открытом виде, заставляя Сервер проверять пароль и рассчитывать аутентификационные ответы. Пароль пользователя в открытом виде должен возвращаться как строка в кавычках:
nnnnnn PLAIN "plain-text-password"

Пример сессии (I: - команда сервера, отправленная на стандартный ввод программы, O: - ответы программы, записанные в её стандартный вывод):

I: 00001 INTF 1
O: 00001 INTF 1
I: 00010 VRFY user1@domain1.com dsyui134
O: 00010 OK
I: 00011 VRFY (IMAP) user2@domain2.com jskj23#45 [10.0.3.4]
O: 00011 ERROR incorrect password
I: 00012 SASL(CRAM-MD6) user4@domain2.com hdkj547812329394055 <pop-23456@mydomain.com> [10.0.1.4]
I: 00012 ERROR unsupported SASL method
I: 00014 SASL(DIGEST-MD5) user4@domain2.com 012345 "user:qop:zz:mmm:uri" [10.0.1.4]
O: 00014 RETURN "0123456789AAAA"
I: 00015 SASL(DIGEST-MD5) user4@domain2.com 012345 "user:qop:zz:mmm:uri" [10.0.1.4]
O: 00015 PLAIN "my$$password"

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

Для того, чтобы получить пароль, Сервер отправляет следующие команды:
nnnnnn READPLAIN name@domain
где:

name@domain
полное имя (адрес) требуемого Пользователя.

Программа должна возвращать пароль пользователя в открытом виде как строка в кавычках:
nnnnnn PLAIN "plain-text-password"
Если программа не может получить пароль в открытом виде, то она должна возвращать ответ FAILURE.

Программы Внешней Аутентификации могут также использоваться для обработки неизвестных имён. Например, программа может осуществлять поиск во внешней базе данных, проверяя, существует ли в этой базе данных пользователь, создавать Пользователя, Псевдоним, Группу, Список Рассылки или Переадресатор используя CLI/APICommuniGate Pro и возвращать Серверу положительный ответ. В этом случае CommuniGate Pro повторно попытается открыть объект с указанным именем в этом домене.

Для проверки неизвестного имени, Сервер отправляет следующие команды:
nnnnnn NEW name@domain relayType
где:

relayType
[MAIL] - если команда отправляется в процессе операции маршрутизации почты,
[SIGNAL] если команда отправляется в процессе операции маршрутизации сигналов,
[ACCESS] - если команда отправляется в процессе операции маршрутизации доступа.
name@domain
полное имя (адрес) неизвестного локального объекта.

Если программа отправляет ответ OK, то Сервер снова пытается найти объект name в Домене domain.

Если программа отправляет ответ ROUTED address, то Сервер берёт полученный address и перезапускает процедуру Маршрутизации с этим адресом. Маршрутизируемый адрес получает атрибут "can Relay", за исключением ситуации, если он был указан с префиксом [NORELAY].

Если программа отправляет ответ FAILURE, то Маршрутизатор Сервера возвращает код "временной внутренней ошибки" (этот код заставляет SMTP модуль вернуть код ошибки 4xx, а не код постоянной ошибки 5xx).

Если программа отправляет любой другой ответ, то Маршрутизатор Сервера возвращает ошибку "неизвестный пользователь".

Пример сессии:

I: 00010 NEW user1@domain1.com [MAIL]
O: 00010 ERROR this account is not known
I: 00011 NEW user2@domain2.com [MAIL]
I: 00012 NEW user3@domain2.com [ACCESS]
O: 00012 OK
O: 00011 ROUTED [NORELAY] userX@domain2.com

Установка Домена "Обратиться к Помощнику для Неизвестных" указывает серверу использовать программу Внешнего Аутентификатора при адресации неизвестного имени.

Программа Внешней Аутентификации может использоваться для помощи при Маршрутизации адреса. Если адрес направляется в домен @external, то "локальная часть" адреса передаётся Программе Внешней Аутентификации при помощи команды ROUTE:
nnnnnn ROUTE <address> relayType
где:

relayType
[MAIL] - если команда отправляется в процессе операции маршрутизации почты,
[SIGNAL] если команда отправляется в процессе операции маршрутизации сигналов,
[ACCESS] - если команда отправляется в процессе операции маршрутизации доступа.
address
локальная часть адреса с доменной частью external.

Если программа отправляет ответ ROUTED address, то Сервер берёт полученный address и перезапускает процедуру Маршрутизации с этим адресом. Маршрутизируемый адрес получает атрибут "can Relay", если он был указан с префиксом [RELAY].

Если программа отправляет ответ FAILURE, то Маршрутизатор Сервера возвращает код "временной внутренней ошибки" (этот код заставляет SMTP модуль вернуть код ошибки 4xx, а не код постоянной ошибки 5xx).

Если программа отправляет любой другой ответ, то Маршрутизатор Сервера возвращает ошибку "не могу провести маршрутизацию адреса".

Пример сессии:

I: 00010 ROUTE <user1> [MAIL]
O: 00010 ERROR this account is blocked
I: 00011 ROUTE <user2%domain1.dom> [MAIL]
I: 00012 ROUTE <"user3##name"%domain2.dom> [SIGNAL]
O: 00012 FAILURE internal error
O: 00011 ROUTED [RELAY] userX@domain100.dom

Программа Внешней Аутентификации может использоваться для помощи при операциях управления услугами. Если включена Установка Домена Обратиться к Помощнику для Регистраций, то Сервер отправляет следующие команды программе Внешней Аутентификации:

до создания Пользователя:
nnnnnn PRECREATE [authAccount] accountName@domainName accountType initialSettings
initialSettings является словарём.
Если эта операция заканчивается неуспешно, то Пользователь не создаётся.
после создания Пользователя:
nnnnnn POSTCREATE [authAccount] accountName@domainName accountType initialSettings
Если эта операция заканчивается неуспешно, то вновь созданный Пользователь удаляется.
до переименования Пользователя:
nnnnnn PRERENAME [authAccount] accountName@domainName newAccountName@newDomainName
Если эта операция заканчивается неуспешно, то Пользователь не переименовывается.
после переименования Пользователя:
nnnnnn POSTRENAME [authAccount] accountName@domainName newAccountName@newDomainName
Если эта операция заканчивается неуспешно, то Пользователь переименовывается обратно.
до удаления Пользователя:
nnnnnn PREDELETE [authAccount] accountName@domainName
Если эта операция заканчивается неуспешно, то Пользователь не удаляется.
после удаления Пользователя:
nnnnnn POSTDELETE [authAccount] accountName@domainName
до изменения Класса Лицензии Пользователя:
nnnnnn PRETYPECHANGE [authAccount] accountName@domainName newClass
Если эта операция заканчивается неуспешно, то Класс Лицензии Пользователя не изменяется.
после изменения Класса Лицензии Пользователя:
nnnnnn POSTTYPECHANGE [authAccount] accountName@domainName newClass
до обновления Установок Пользователя:
nnnnnn PREUPDATE [authAccount] accountName@domainName newSettings
Если эта операция заканчивается неуспешно, то Установки Пользователя не изменяются.
после обновления Установок Пользователя:
nnnnnn POSTUPDATE [authAccount] accountName@domainName newSettings
до обновления пароля Пользователя:
nnnnnn PREPWDCHANGE [authAccount] accountName@domainName newPassword
Если эта операция заканчивается неуспешно, то пароль Пользователя не обновляется.
Пароль - это одна из Установок Пользователя; таким образом, за этой командой последует команда PREUPDATE.

Имя аутентифицированного Пользователя CommuniGate Pro, от имени которого выполняется операция, - authAccount. Если имя этого Пользователя неизвестно, то имя и квадратные скобки в команде не передаются.

Программа должна либо отправить ответ OK, либо ответ FAILURE "errorCode".


Внешние Фильтры Сообщений

Программы - Внешние Фильтры Сообщений используются для фильтрования содержимого (от вирусов и спама).

Протокол Интерфейса Внешнего Фильтра основывается на обычном Протоколе Помощников.
В этом разделе описывается Версия 4 Протокола Внешнего Фильтра.

  • Программа должна обрабатывать запросы Внешнего Фильтра:
    seqNum FILE fileName
    где fileName является именем файла, который программа должна сканировать.

  • Если обработка сообщения должна продолжаться, то строка с ответом должна иметь следующий формат:
    seqNum [ modifiers ] OK
    где modifiers - необязательные ключевые слова (каждое со своими параметрами), разделённые запятыми:
    ADDHEADER header-field-text
    header-field-text - это строка, которая добавляется к заголовкам письма. Она должна содержать один или несколько заголовков RFC822/RFC2822.
    Этот текст (возможно - из нескольких строк) должен быть помещён в строку ответа в формате Строка.
    MIRRORTO address
    address - это адрес, на который должна быть отправлена полная копия письма.
    Эта строка должна содержать ровно один адрес E-mail. Если копия письма должна быть отправлена на несколько адресов, используйте несколько ключей MIRRORTO.
    Текст адреса должен быть помещён в строку ответа в формате Строка.
    ADDROUTE address
    Это ключевое слово поддерживается только при использовании в общесерверных и общекластерных правилах.
    address - это текстовая строка с адресом, который должен быть добавлен в набор маршрутов письма, то есть адресов, куда письмо должно быть доставлено.
    Эта строка должна содержать ровно один адрес E-mail. Чтобы добавить несколько адресов, используйте несколько ключей ADDROUTE.
    Текст адреса должен быть помещён в строку ответа в формате Строка.

    Примеры:
    1077 OK
    1078 ADDHEADER "X-SPAM-SCORE: 100\eX-SPAM-FILTER: CGateProSpamFilter(r)" OK
    1079 ADDHEADER "X-SPAM-SCORE: 100" MIRRORTO "spamreport@mydomain.com" MIRRORTO "abuse@mydomain.com" OK
  • Если сообщение должно быть отвергнуто, то строка с ответом должна иметь следующий формат:
    seqNum ERROR report
    где report - текстовая строка, объясняющая, почему сообщение было отвергнуто.
    Этот текст (возможно - из нескольких строк) должен быть помещён в строку ответа в формате Строка.

  • Если сообщение должно быть выкинуто, то строка с ответом должна иметь следующий формат:
    seqNum DISCARD

  • Если обработка сообщения должна быть отложена (из-за лицензионных ограничений, например), то строка с ответом должна иметь следующий формат:
    seqNum REJECTED report
    где report - текстовая строка, объясняющая, почему обработка сообщения должна быть отложена.

  • Если программа получает запрос, который она не может обработать, то она должна возвращать ответ FAILURE:
    seqNum FAILURE
    Если программа отправила ответ FAILURE или любой другой ответ, то Сервер помещает запись в Журнал работы Сервера и обрабатывает его как ответ OK.
  • Программа ДОЛЖНА быть готова обрабатывать несколько запросов одновременно (используя несколько нитей). Так как Программа Внешнего Фильтра используется вместе с Общесерверными правилами (и обрабатывается компонентом Сервера Установка в Очередь), то программа должна быть готова обрабатывать N параллельных запросов, где N - число процессоров (нитей) компонента Установка в Очередь.
  • Программа МОЖЕТ быть реализована с использованием одной нити - так, что она будет читать следующий запрос только после того, как ею был обработан предыдущий. Однако, такой дизайн может существенно уменьшить производительность всего Сервера: пока программа Внешнего Фильтра сканирует большое сообщение, другие сообщения не могут быть установлены в очередь.

Если внешняя программа заканчивает свою работу аварийно, то CommuniGate Pro приостанавливает процесс Установки в Очередь до тех пор, пока внешняя программа не будет перезапущена.


Внешние Помощники RADIUS

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

Протокол Интерфейса Внешнего RADIUS основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 2 Интерфейса Внешнего RADIUS.

Если Внешняя программа RADIUS включена, то она используется после того, как пароль пользователя прошёл проверку. Сервер отправляет ей следующие команды:
nnnnnn LOGIN name@domain attributes settings
где:

nnnnnn
уникальный последовательный номер этого запроса
name
имя Пользователя
domain
имя Домена Пользователя
attributes
словарь со всеми затребованными атрибутами.
settings
словарь с настройками Пользователя.

Если запрос на вход принимается, то программа - Помощник должна вернуть положительный ответ:
nnnnnn ACCEPT attributes
где:

nnnnnn
последовательный номер запроса
attributes
словарь с атрибутами, добавляемыми в ответ RADIUS.

Если пароль не принимается, то должен возвращаться отрицательный ответ:
nnnnnn REJECT optional-error-message

Если Внешняя программа RADIUS включена, то она используется для обработки запросов Start, Stop и Interim-Update. Сервер отправляет следующие команды:
nnnnnn ACCNT command name@domain attributes
где:

nnnnnn
уникальный последовательный номер этого запроса
command
команда (started, ended, updated)
name
имя Пользователя
domain
имя Домена Пользователя
attributes
словарь с требуемыми атрибутами.

Программа - Помощник должна возвращать положительный ответ:
nnnnnn OK
где:

nnnnnn
последовательный номер запроса

Атрибуты в словаре должны использовать цифровые значения как ключи (например, 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.
Формат Блока Данных должен использоваться, если значение содержит байты с двоичными нулями.

Если атрибут имеет несколько значений, то значение атрибута кодируется как Массив.

Следующие атрибуты добавляются к атрибутам словаря, передаваемым Помощнику:

0
Идентификатор запроса протокола RADIUS. Он может использоваться для обнаружения переданных повторно пакетов (дублирующихся запросов).
secretKey (только в запросах на аутентификацию)
значение строки с настройкой модуля RADIUS "общий секрет"
authData (только в запросах на аутентификацию)
16-байтный Блок Данных, содержащий часть "данных аутентификации" запроса RADIUS.

Атрибуты, специфичные для Производителя, представляются при помощи ключей с отрицательными цифровыми значениями. Абсолютное значение ключа является значением "VendorID". Для каждого VendorID, связанный с ним элемент является словарём. Ключи этого словаря являются специфичными для Производителя "типами производителя", со связанными с ними "специфическими атрибутами". Значения "специфических атрибутов" могут храниться как Строка, Блоки Данных, Числа или Массивы Строк, Блоков Данных и/или Чисел.

Пример сессии (I: - команда сервера, отправленная на стандартный ввод программы, O: - ответы программы, записанные в её стандартный вывод):

I: 00001 INTF 1
O: 00001 OK 1
I: 00002 LOGIN user1@domain1.com {0=#15; 1="User1";4=10.0.0.1;32="NAS 1";31=4992713154;"-311"={9=#777;10="ZZZ";}; authData=[AbndghAbndgh1sjkjkss3T=]; secretKey=a123;} {RealName="User"; NATIP="192.168.1.3";}
O: 00002 ACCEPT {8=192.168.1.3; 9=255.255.255.0; 13=(0,3);}
I: 00003 LOGIN user1@domain1.com {0=#16; 1="uSEr1";32="NAS 2";31=415.5512.12; 8=192.168.1.3; authData=[Abnd278sjkljsljkjksFG=]; secretKey=a123;} {NATIP="10.0.1.114";}
O: 00003 REJECT
I: 00004 ACCNT started user1@domain1.com {0=#17;1="uSEr1";32="NAS 2";31=415.5512.12; 8=192.168.1.3;}
O: 00004 OK

Обратите внимание: Сервер может отправлять несколько параллельных запросов для одного Пользователя.

Обратите внимание: Внешняя программа RADIUS вызывается, когда данные Пользователя открыты. В системе с Динамическим Кластером это означает, что Внешние программы RADIUS должны запускаться на Backend Серверах и такие Внешние программы RADIUS, запущенные на других Backend Серверах, никогда не получат одновременные запросы для одного и того же Пользователя.


Внешние Обработчики CDR

Программы - Внешние Обработчики CDR могут использоваться для обработки CDR (Call Detail Records, Детализированная Информация о Звонках), созданных компонентом Signal при попытках установления звонка и его дальнейшей обработке. Они также могут обрабатывать CDR записи, созданные CG/PL приложениями.

Протокол Интерфейса Внешнего Обработчика CDR основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 1 Интерфейса Внешнего Обработчика CDR.

Когда включена программа Внешний Обработчик CDR, то модуль Signal генерирует CDR и отправляет их в эту программу.

При создании CDR Сервер отправляет следующие команды:
nnnnnn CDR cdr_data
где:

nnnnnn
уникальный последовательный номер этого запроса
cdr_data
CDR данные в формате компонента Signal или в формате CG/PL приложения.

когда запись обработана, программа должна вернуть положительный ответ:
nnnnnn OK


Балансировщик Нагрузки DSR

Программы Внешнего Балансировщика Нагрузки используются для управления программными балансировщиками нагрузки в Динамических Кластерах. Эти программы должны быть установлены и запущены на членах Кластера, которые могут выступать в качестве балансировщиков нагрузки. Для каждой "группы балансировки" Контроллер Кластера выбирает один из доступных балансировщиков и запускает его, в то время как остальные члены группы работают в режиме "горячей замены".

Протокол Интерфейса Внешнего Балансировщика основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 1 Интерфейса Внешнего Балансировщика.

Когда Контроллер Кластера детектирует изменения состояния членов кластера, принадлежащих определённой группе балансировки, программа-помощник получает следующую команду:
nnnnnn MEMBERS (ip-address [,ip-address...] ) (ip-address [,ip-address...] )
где:

nnnnnn
уникальный последовательный номер этого запроса
ip-addresses
Два набора сетевых адресов. Первый перечисляет все существующие члены кластера, второй перечисляет все отключённые (но всё ещё запущенные) члены кластера. Каждый набор может быть пустым или содержать несколько адресов, разделённых запятой. Каждый адрес - общесерверный адрес WAN члена кластера, согласно его Настройкам Сети.

Когда программа стартует, или при изменении в настройке "Общесерверный WAN адрес IPv4", программа получает команду:
nnnnnn LOCAL ip-address
где:

nnnnnn
уникальный последовательный номер этого запроса
ip-address
текущий "Общесерверный WAN адрес IPv4" настроек Сети этого сервера.

Когда балансировщик должен быть запущен, программа получает команду:
nnnnnn STARTBALANCER

Когда балансировщик должен быть остановлен, программа получает команду:
nnnnnn STOPBALANCER


Помощники Приложений

Помощники Приложений могут быть использованы из приложений на языке CG/PL для обмена произвольными данными.

Протокол Помощников Приложений основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 2 Интерфейса Помощникa Приложений.

Когда приложение запрашивает данные, Сервер отправляет следующие команды:
nnnnnn USER user@domain REQ requestData
где:

nnnnnn
уникальный последовательный номер этого запроса
user@domain
имя Пользователя, от имени которого делается обращение к помощнику.
requestData
данные запроса из приложения, которые могут быть строкой, массивом или словарём.

Когда запрос обработан, программа должна вернуть положительный ответ:
nnnnnn RESP responseData
где:

responseData
текстовое представление возвращаемых данных.

Пример сессии (I: - команда сервера, отправленная на стандартный ввод программы, O: - ответы программы, записанные в её стандартный вывод):

I: 00001 INTF 2
O: 00001 INTF 2
I: 00010 USER tester@dev.dom REQ "Сколько времени?"
O: 00010 RESP "11:18 вечера"

Если программа Помощника Приложения не запущена, то любой запрос возвращает пустой ответ.


Программы Внешней Рекламной Системы могут использоваться для обеспечения XIMSS клиентов "рекламными" данными (рекламной информацией, демонстрируемой клиентом пользователю).

Протокол Интерфейса Внешней Рекламной Системы основывается на обычном Протоколе Помощников.
В этом руководстве описывается Версия 1 Интерфейса Внешней Рекламной Системы.

Когда клиент запрашивает рекламное сообщение, Сервер отправляет следующие команды:
nnnnnn BANNER bannerType [ accountName@domainName ] [ INFO bannerSetting ] [ PREFS bannerPreference ] [ PARAM paramData ]
где:

nnnnnn
уникальный последовательный номер этого запроса
bannerType
если строка с типом рекламного сообщения указана клиентским приложением (указано клиентское приложение и тип рекламного сообщения, например, samowareEmailTop, myClientLeftBanner).
accountName@domainName
полное имя Пользователя, затребовавшего рекламное сообщение.
bannerSetting
(необязательно) значение Установки Пользователя BannerInfo (Параметры Рекламы).
bannerPreference
(необязательно) значение Настройки Пользователя BannerClass.
paramData
(необязательно) текстовое представление объекта с параметрами, указанными клиентским приложением.

Когда запись обработана, программа должна вернуть положительный ответ:
nnnnnn RESULT resultData
где:

resultData
текстовое представление рекламной информации.

Программа также может вернуть блокирующий ответ:
nnnnnn BLOCK
Указанный bannerType добавляется в список "заблокированных" типов. Если клиент запрашивает рекламу "заблокированного" типа, то ему немедленно возвращается пустой ответ, при этом вызова программы Внешней Рекламной Системы не происходит.

Если программа Внешней Рекламной Системы не запущена, то любой запрос на рекламу возвращает пустой ответ.


Руководство CommuniGate Pro. Copyright © 2020-2023, АО СталкерСофт