Mod_dav: Работа с хранилищем ресурсов
Для взаимодействия с хранилищем (репозитарием) ресурсов в mod_dav существует группа хуков dav_hooks_repository. Основное ее предназначение - это обработка входных и выходных потоков хранилища ресурсов. Обработчики этих хуков также обеспечивают выполнение основных файловых операций над ресурсами, например: копирование/перемещение ресурсов, создание коллекции, удаление ресурса и т.п.
Рассмотрим все хуки этой группы подробнее:
get_resource
Один из главных хуков данной группы. Обработчик хука get_resource связывает ресурс с URI запроса. Он должен возвращать структуру dav_resource, описывающую запрошенный ресурс. Структура dav_resource возвращается даже в случае, если запрошенный ресурс не существует.
get_parent_resource
Обработчик этого хука возвращает описатель (дескриптор) родительского ресурса для запрошенного URI. Если URI запроса указывает на корневую коллекцию, тогда возвращается NULL.
is_same_resource
Определяет, ссылаются ли два дескриптора на один и тот же ресурс.
is_parent_resource
Служит для определения, является ли один ресурс родительским для другого.
open_stream
Создает структуру потока - dav_stream, необходимую при заливке ресурса. Обработчик вызывается каждый раз, когда в хранилище добавляется новый ресурс.
close_stream
Закрывает открытый поток. Вызывается после того, как ресурс полностью залит.
write_stream Вызывается циклически для блочной обработки данных закачиваемого ресурса. seek_stream Абсолютное смещение в потоке. Используется для поддержки заголовка Content-Range в методах GET/PUT. set_headers Вызывается перед отправкой ответа клиенту для установки заголовков. Обработчик хука deliver не вызывается, если используется метод HEAD. deliver Одни из главных хуков группы. Используется для отправки ресурса в заданный фильтр. Используется как для ресурсов, так и для коллекций. create_collection Создает коллекцию. В случае, если коллекция создана успешно, обработчик должен вернуть NULL. copy_resource Хук копирования ресурса или коллекции. Свойства ресурсов также копируются. move_resource Перенос ресурса. remove_resource Хук удаления ресурса или коллекции. При удалении ресурса также удаляются и его свойства. walk Хук обхода иерархии коллекций и ресурсов. Используется, когда запрос поступил на коллекцию и глубина обхода больше 0 (т.е. необходимо обработать вложенные объекты). getetag Получить ETag для ресурса.