Для взаимодействия с хранилищем (репозитарием) ресурсов в 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 для ресурса.