Содержание
Данный раздел описывает протокол Manjary Management
Protocol (MMP
) предназначенный
для получения информации и управления серверами
Manjary. Этот протокол позволяет пользователям
изменять свои данные, менять пароли, производить поиск в адресной книге.
Администраторам и операторам доменов предоставляется функционал для
выполнения различных задач по администрированию сервера и доступ к
последним записям журнала.
MMP
имеет много общего с
протоколом ManageSieve
(RFC 5804), а
также похож на IMAP4
(RFC 9051).
Сеанс MMP состоит из из установления клиент-серверного соединения, начального приветствия от сервера и клент-серверного взаимодействия. Эти клиент-серверные взаимодействия состоят из команды от клиента, серии ответов сервера с данными (необязательно) и серверного ответа с результатом выполнения.
Все взаимодействия передаваемые клиентом и сервером имеют форму строк которые заканчиваются CRLF. Приёмник протокола клиента или сервера MMP либо считывает строку, либо считывает последовательность известного количества октетов, за которой следует строка.
MMP
- это протокол
ориентированный на строки и работающий над TCP
.
Каждая команда посылаемая клиентом состоит из имени, за которым
следует ноль или более аргументов, завершающихся символами CRLF
(0x0D
0x0A
). Аргументы
отделяются символом пробела (0x20
).
В ответ на команду сервер возвращает ноль или
более строк[2] данных и одну
строку[2] с результатом
выполнения команды. Строки данных начинаются с символа '*'
(0x2A
) и пробела (0x20
) за
которыми следуют аргументы специфичные для выполняемой команды. Далее
в тексте для обозначения таких строк используется выражение
*-строка или *-ответ.
Последняя строка ответа начинается с результата выполнения OK, NO или
BYE за которым следует ноль или более аргументов. Результат OK
сообщает клиенту об успешном выполнении команды. Результаты NO и BYE
обычно сопровождаются одним или двумя аргументами - если первый
аргумент заключён в круглые скобки, он содержит информацию об отказе
предназначенную для машинного разбора. В настоящей версии протокола
это только одно из ключевых слов. Далее, в ответе указывается
текстовая строка в кавычках которая может быть прочитана человеком для
понимания причин отказа.[2]
Ответ BYE означает завершение сессии по инициативе клиента, либо если клиент бездействует слишком долго. Этот ответ может быть дан в любое время, после него всегда следует закрытие транспортного соединения.
Аргументы команд посылаемых клиентом и аргументы ответов сервера разделяются пробелами и могут быть представлены в трёх видах: 1. Последовательность символов не являющихся пробелами, табуляциями или переводами строк. 2. Строка заключённая в двойные кавычки. В этом виде строка может содержать пробелы и табуляции, но не переводы строк. Символ двойных кавычек являющийся частью строки и символ "\" экранируются предшествующим символом "\". 3. В виде данных объявленной длинны - литералов. Литералы могут использоваться для передачи любых данных. Такой аргумент состоит из указания количества окетов в фигурных скобках, CRLF и последовательности окетов. При передаче летерала от клиента серверу выполняется следующий сценарий: клиент посылает число означающее количество окетов в фигурных скобках и CRLF, дожидается ответа сервера в виде строки начинающейся с символа "+" и заканчивающейся CRLF, затем клиент отправляет содержимое литерала. Возможен другой сценарий при котором клиент указывает количество окетов завершающееся символом "+" перед закрывающей фигурной скобкой. При этом сервер не отвечает строкой начинающейся с символа "+" и сразу готов принять содержимое. Литералы отправляемые сервером не содержат символа "+" перед закрывающей скобкой и содержимое следует сразу после CRLF. Работа с данными в виде литералов показана в примерах.
Имена команд содержат только 7-ми битные символы ASCII. Аргументы представленные в любом виде могут содержать символы uncode в кодировке UTF-8.
Список возможностей отправляется сразу после подключения клиента или после успешного выполнения команды STARTTLS. Возможности могут измениться после успешного выполнения STARTTLS, AUTHENTICATE и UNAUTHENTICATE. Клиент может запросить текущие возможности послав команду CAPABILITY.
Возможности перечисляются в *-строках. Первый аргумент каждой строки - регистронезависимое название возможности. Остальные агрументы в строке необязательны и являются значениями связанными с возможностью.
В настоящее время определены следующие возможности:
Версия протокола MMP
. Номер версии указывается в
аргументе представленном строкой в кавычках. Текущая версия
протокола - 1.0
Доступно согласование безопасного соединения командой STARTTLS. Эта возможность объявляется только если безопасное соединение ещё не установлено. Не имеет аргументов.
Названия доступных наборов команд. Второй аргумент - строка в кавычках в которой перечислены названия наборов команд разделённые пробелом.
Список доступных механизмов SASL. Второй аргумент - строка в кавычках в которой перечислены названия механизмов.
[2] Строка ответа может содержать литерал, который в свою очередь может содержать переводы строк. Ответ всегда заканчивается переводом строки который не относится к литералу.