ICQCorp
Навигатор О проекте Новости Ссылки Установка ФАКи Скриншоты Благодарности Документы PostgreSQL Скачать Об авторе Гостевая книга Russian English Проект IServerd

--- Формат файла actions.conf

Данные устарели. Ждите обновления. Некоторая информация есть в дистрибутиве.

Чтобы обеспечить возможность настраивать реакцию iserverd на различные события (например подключение/отключение пользователя, регистрационный запрос, смена статуса, изменение данных о пользователе) был спроектирован парсер конфигурационного файла actions.conf. В devel версии этот парсер отключен и пока не работает. В stable ветви его нет.

Конфигурационный файл actions.conf жестко структурирован и состоит из трех компонентов: декларации переменных, секции и директивы включения (include). Комментарии не являются частью actions.conf и игнорируются еще на стадии лексического анализа. Каждая конструкция должна заканчиваться символом ';'.

Допускаются комментарии в стиле C, C++ и Perl. Вложение блочных комментариев /* */ запрещено и приводит к синтаксической ошибке.

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

log, to, var, event, for, msg, message, stop, mail, run, with, using, Online, Offline, SaveBasicInfo, Search, StatusChange, any, Registration, RDBMS_fail, Internal_err, PPHung, Options, S_ONLINE, S_OFFLINE, S_FFCH, S_PRIVACY, S_DND, S_AWAY, S_OCCUPIED, S_NA, S_ANY.

Примеры верных идентификаторов: main_email1, email_2, _uin_range_, Online_Log, INTRUDERS.

Декларации переменных состоят из ключевого слова var, идентификатора переменной и ее значения. Тип переменной определяется автоматически по ее значению. Имеются следующие типы переменных: строка (string), номер (unsigned long), список. Значение строки заключается в двойные кавычки, список заключается в квадратные скобки [] и может содержать в себе номера и диапазоны номеров, разделенные запятыми, вместо номера можно использовать целочисленную переменную. При использовании переменных в тексте конфигурационного файла к строковым и целочисленным переменным добавляется символ '$', к списковым переменным символ '@'. Текстовые переменные можно использовать в качестве целочисленных, если они содержать текстовое представление целого числа. Примеры декларации различных переменных:

VAR  main_email1  "admin@host.xxx"; // строковая переменная
VAR  email_2  "coadmin@mail.com"; /* строковая переменная */
VAR  admin_uin  6218895; # целочисленная переменная
VAR  INTRUDERS  [1017,$admin_uin,6009-7000,1201]; // списковая переменная

Директива include используется для включения в конфигурационный файл других файлов. Таким образом конфигурационный файл можно разделить на несолько логических частей. Эта директива обрабатывается на уровне лексического анализатора, т.е. ее можно использовать и внутри секций и вне их (синтаксический анализ проводится после выполнения включения файла). Директива состоит из ключевого слова include и строкового параметра, представляющего собой полный путь к включаемому файлу. Пример: include "/etc/iserverd/online.conf";

Секции представляют собой блоки конструкций, заключенные в фигурные скобки {}. Секции могут быть двух типов: секции событий и секция опций. Секции событий начинаются с ключевого слова event за которым следует идентификатор секции:

 Название    Описание  
 Online   Секция набора правил для реакции на подключение пользователя к серверу ICQ
 Offline   Секция правил для реакции на отключение пользователя от сервера ICQ (переход в режим Offline) сделанное добровольно или принудительно (по таймауту)  
 SaveBasicInfo   Секция правил для реакции на изменение пользователем информации о себе
 Search   Секция правил для реакции на выполняемое действие поиска в базе данных 
 StatusChange   Секция правил для реакции на изменение статуса ICQ пользователем 
 Registration   Секция правил для реакции на регистрацию/получение запроса на регистрацию 
 RDBMS_fail   Секция правил для реакции на неисправимую ошибку сервера базы данных. 
 Internal_err   Секция правил для реакции на внутреннюю ошибку сервера IServerd. 
 PPHung   Секция правил для реакции на зависание дочерних процессов IServerd. 

Каждая секция может содержать неограниченное число правил, каждое из которых выполняет какое-либо действие из списка возможных в зависимости от параметров события (например от номера uin подключившегося пользователя). Возможные действия следующие: посылка почтового сообщения (email) используя шаблон, посылка ICQ сообщения на заданный номер или список номеров (список может включать в себя диапазоны), запись информации о событии в файл, запуск заданной программы, остановка обработки события. Можно задавать степень информативности этих действий используя опции и шаблоны. Другими словами iserverd может при подключении определенного пользователя послать письмо, содержашее uin этого пользователя либо произвести поис дополнительных данных в базе данных и отослать письмо с uin, именем, фамилией, email адресом этого пользователя. Второй вариант соответственно отнимает больше вычислительных ресурсов и может быть недопустим для высокозагруженного сервера.

Секция Options содержит опции процесса AP (actions processor) записываемые как имя_опции = значение.

Правила секций событий строятся по следующему принципу: вначале задаются условия на выполнение правила, затем ключевое слово выполняемого действия и параметры этого действия. Условие задается ключевыми словами for и with. Условие является необязательным и его можно опустить. В качестве любого параметра можно использовать переменные. Синтаксис условия следующий:

[for any|uin-number|uin-range|uin-list] [with status_keyword]

Ключевые слова действия могут быть следующими: log, message, mail, run, stop. Их назначение параметры приведены в следующей таблице:

 Действие    Описание    Параметры  
 stop    остановка обработки события на этом правиле нет

 message    посылка сообщения ICQ номер ICQ/список номеров,
путь до файла-шаблона
 mail    посылка Email сообщения email адрес,
путь до файла-шаблона
 run   запуск внешней программы путь до файла программы,
аргументы (передаются через STD)

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

event Online  { 
for 6213949 msg $ADM_UIN "/etc/isd/mess.ptt";
for 6213949 message $ADM_UIN "/etc/isd/mess.ptt";
for $uin6213949 msg to $ADM_UIN using "/etc/isd/mess.ptt";
for 6213949 message to $ADM_UIN using "/etc/isd/mess.ptt";
for @INTRUDERS mail to $ADMIN_EMAIL using "/etc/isd/intrud.ptt";
for any run $ONLINE_PROG with "%u,%f,%e1,%e2";
for [1012-1017] log to "/var/log/iserverd/1012-1017.log";
for [1012-1017] stop;
log $main_log;
 } 

Рассмотрим приведенный выше пример. Первые 4 правила абсолютно идентичны (это сделано для того, чтобы показать насколько гибки синтаксические правила). Их действие следующее - при подключении пользователя 6213949 отправляется сообщение на номер uin, содержащийся в переменной $ADM_UIN с использованием шаблона "/etc/isd/mess.ptt". Шаблоны загружаются при старте сервера и после их редактирования вам потребуется произвести рестарт AP.

Пятое правило служит для отправки email администратору на адрес, заданный в строковой переменной $ADMIN_EMAIL при подключении какого-либо пользователя из списка @INTRUDERS.

Шестое правило запускает программу $ONLINE_PROG при подключении любого пользователя и отправляет на STD этой программы параметры %u - uin, %f - имя, %e1 %e2 - email1 и email2. При этом условие for any можно опустить - оно не обязательно. Если в секции опций запрещено получение дополнительных данных, то вместо всех параметров кроме uin будут передаваться пустые строки.

Седьмое правило записывает в лог информацию о подключении пользователей 1012-1017. В лог также записывается ip адрес пользователя и версия его клиента.

Восьмое правило прекращает обработку события для клиентов 1012-1017. В самом деле, зачем журналировать одно и тоже событие дважды. Последнее правило записывает в лог информацию обо всех подключениях пользователей.

Правила обрабатываются в том же порядке, в каком они появляются в конфигурационном файле. Допускается размещение нескольких секций с одним и тем же идентификатором. При этом правила будут добавляться в список последовательно из каждой секции. После обработки правила AP приступает к обработке следующего. Прервать обработку можно командой stop. Изменить такое поведение можно параметром "stop_rule = yes" в секции options.

About  ] Install  ] Credits  ] Screens  ] Postgres  ] Download  ]
News  ] FAQs  ] Author  ] Links  ] Documents  ] Guestbook  ]
Webmaster
A.V.Shutko