Сервер - статьи

       

Структура dav - провайдера


Совет: Нижеизложенный код изучать лучше с конца. // структура модуля для хранения директив typedef struct { const char *test_dav_directive; }test_dav_server_conf; // Обработчик хука post_config static int test_dav_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { // Выполняем действия, необходимые для инициализации // Данный обработчик вызывается после загрузки модуля и // после обработки конфигурации // (Примечание: Данный обработчик выполняется при загрузке дважды. // Способ обойти такое поведение читайте в статье // «Проблемы при создании модуля») return OK; } // Создать структуру конфигурации модуля static void *create_server_config(apr_pool_t *p, server_rec *s){ test_dav_server_conf *conf = NULL; conf = (test_dav_server_conf*)apr_palloc(p, sizeof(*conf)); return (void*)conf; } // Обработчик директивы static const char *test_dav_cmd(cmd_parms *cmd, void *config, const char *arg1){ test_dav_server_conf *conf; // Получить указатель на структуру конфигурации модуля conf = ap_get_module_config(cmd->server->module_config, &test_dav_provider_module); // Сохранить значение директивы conf->test_dav_directive = apr_pstrdup(cmd->pool, arg1); return NULL; } // Директивы модуля static const command_rec test_dav_cmds[] = { // Декларация директивы и ее обработчика AP_INIT_TAKE1("tes_dav_directive", test_dav_cmd, NULL, ACCESS_CONF|RSRC_CONF, "Тестовая директива с одним аргументом"), {NULL} }; // Структура DAV провайдера static dav_provider test_dav_provider = { &test_dav_hooks_repos, // Работа с хранилищем &test_dav_hooks_propdb, // Работа со свойствами &test_dav_hooks_locks, // Блокировка NULL, // Версионность NULL, // Связывание NULL // Поиск }; // Регистрация обработчиков хуков static void register_hooks(apr_pool_t *pconf){ ap_hook_post_config(test_dav_post_config, NULL, NULL, APR_HOOK_MIDDLE); // Регистрация DAV провайдера dav_register_provider(pconf, "test_dav_provider", &test_dav_provider); } // Главная структура модуля Apache module AP_MODULE_DECLARE_DATA test_dav_provider_module = { STANDARD20_MODULE_STUFF, NULL, NULL, create_server_config, // создание конфигурации модуля NULL, test_dav_cmds, // список директив модуля register_hooks, // регистрация обработчиков };

Данный код, а также код обработчиков test_dav_hooks_repos, test_dav_hooks_propdb и test_dav_hooks_locks можно скачать в виде .

Содержание раздела