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

       

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 для ресурса.

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