HARD обрабатывает RADIUS-запросы, которые приходят на URL вида http://server/plugin/instance. plugin - соответствует одному из плагинов HARD, instance - экземпляр плагина. В системе может существовать несколько зкземпляров одного плагина, которые имеют различные настройки и соответствеено различные URL. Каждый экземпляр плагина имеет цепочку вызова (например plugins.base.main.call_stack) - список фильтров, которые будут выполнены до или после обработки запроса плагином.
Для плагина могут быть определены настройки по умолчанию - plugins.plugin.default, которые наследуются всеми экземплярами данного плагина. При необходимости настройки по умолчанию могут быть переопределены в секции plugins.plugin.instance конфигурационного файла.
Принцип обработки RADIUS-запросов :
- Поступает запрос на URL вида http://server/plugin/instance, по которому определяются соотвутствующие плагин и экземпляр.
- Выполняется поиск цепочки вызова в plugins.plugin.instance.call_stack, если такая цепочка не найдена, используется plugins.plugin.default.call_stack.
- Запрос последовательно обрабатывается фильтрами из цепочки вызова в прямом порядке. При этом некоторые фильтры могут завершить обработку запроса и сформировать ответ, без обращения к экземпляру плагина, например check_attr_before.
- Запрос обрабатывается экземпляром плагина и формируется ответ.
- Ответ последовательно обрабатывается фильтрами из цепочки вызова в обратном порядке.
- Ответ полученный после обработки последним фильтром, отправляется RADIUS-серверу.