Application Configuration Access Protocol

Протокол доступа к конфигурационным данным приложения (, ACAP) — сетевой протокол, позволяющий пользователю иметь доступ к конфигурационным данным приложений, поддерживающих ACAP, с любого компьютера, подключенного к сети. Протокол основан на IMAP4.

Описание протокола 
Сессия протокола ACAP включает в себя установку TCP-соединения, начальное приветствие от сервера и взаимодействие клиента и сервера, которое включает в себя команды клиента, результаты выполнения и данные от сервера. Протокол ACAP является текстовым протоколом, передаваемые между клиентом и сервером команды и данные представляют собой последовательность символов, оканчивающуюся символами конца строки (CR LF), либо последовательность октетов известной длины.

Команды клиента начинаются с идентификатора (алфавитно-цифровой строки длиной до 32 символов), называемого отметкой. Каждая передаваемая команда должна иметь уникальную отметку. Команды могут передаваться клиентом, не дожидаясь ответа сервера на предыдущую команду.

Ответ сервера может представлять собой:
 запрос на продолжение команды, начинается с символа «+»;
 результат выполнения команды, начинается с той же отметки, что и команда клиента, начавшая операцию, за которой следует код ответа сервера:
 OK — успешное выполнение;
 NO — команда не выполнена;
 BAD — команда не распознана или ошибка синтаксиса;
 промежуточный ответ, начинается с той же отметки, что и вызвавшая его команда, за которой следует код ответа (исключая OK, NO, BAD);
 неотмеченный ответ, начинается с символа «*» и возвращает сообщение или данные, которые могут быть интерпретированы вне контекста выполняемых команд.

Данные хранятся на сервере в виде иерархического дерева. Каждый уровень иерархии называется набор данных и состоит из списка узлов. Узлы имеют уникальное имя и могут содержать любое количество именованных атрибутов. Атрибуты имеют одно или несколько значений и ассоциированные метаданные.

Формат данных 
Передаваемые данные могут иметь один из пяти форматов: 
 атом — состоит из не специальных символов (от 1 до 1024) и должен начинаться с буквы, используется для ключевых слов протокола;
 число — состоит из цифровых символов, размер ограничен беззнаковым 32-битным числом;
 строка — может иметь две формы представления:
 литерал:
 синхронизированный литерал — начинается с передачи количества октетов в фигурных скобках и символов конца строки, после получения запроса от сервера на продолжение посылаются данные;
 не синхронизированный литерал — количество октетов в фигурных скобках, со знаком плюс между числом и закрывающей скобкой, далее следуют данные, оканчивающиеся концом строки;
 строка в кавычках — строка длиной от нуля до 1024 октета, исключая символ с кодом ноль и конец строки, заключённая в двойные кавычки;
 список — последовательность элементов, разделённых пробелами, заключённая в круглые скобки, список может быть пустым или иметь несколько уровней вложенности;
 пустой элемент — специальный атом NIL.

Узлы и их атрибуты 
Для формирования полного пути к узлу имена узлов разного уровня разделяются наклонной чертой. Атрибуты имеют иерархические имена, состоящие из компонентов, разделённых точками. Имена атрибутов, не содержащие точку, зарезервированы для стандартных атрибутов, которые имеют значение в любом наборе данных. Значением атрибута может быть NIL (атрибут не имеет значений), строка (одно значение) или набор строк (много значений).

Протоколом определены следующие атрибуты:
 entry — имя атрибута;
 modtime — дата и время последней модификации метаданных в узле, 14 или больше цифр в формате ASCII;
 subdataset — устанавливается, если узел имеет нижележащий набор данных, значение атрибута является списком относительных URL, указывающих расположение набора данных (точка «.» означает набор данных, лежащий непосредственно под данным узлом).

Метаданные описывают атрибут, его значения и управление доступом. Протоколом определены следующие элементы метаданных:
 acl — список прав доступа к атрибуту;
 attribute — имя атрибута;
 myrights — набор прав клиента;
 size — длина значения атрибута; если атрибут имеет несколько значений, то набор длин для каждого значения;
 value — значение атрибута или набор значений.

Команды 
Команды протокола включают в себя:
 команда аутентификации;
 команды поиска;
 команды контекста (управление набором узлов, отобранных по определённым критериям и существующим в течение сессии);
 команды модификации набора данных;
 команды изменения прав доступа;
 команды управления квотами
 прочие команды (нет операции, выбор предпочитаемого языка, завершение сеанса).

Схема URL 
URL ACAP имеет формат: acap:// url-server / url-enc-entry [url-filter] [url-extension]
 url-server — включает в себя имя сервера и, необязательно, имя пользователя, механизм аутентификации и номер порта;
 url-enc-entry — имя узла;
 url-filter — список имён атрибутов; если отсутствует, то URL относится ко всем атрибутам;
 url-extension — зарезервировано для будущих расширений.

Стандарты RFC 
 RFC 2244

TCP/IP
Сетевые протоколы