Протокол обмена с драйвером VCV

Назад



Содержание

Описание

Для обмена данными с программной оболочкой Linux написан драйвер, который работает как сервис операционной системы.

Драйвер использует для обмена данными именованные каналы (named pipes). Один - на прием команд, другой - на отображение ответа. Протокол обмена состоит из пары запрос- ответ. Форматы запроса и ответа описаны ниже. В качестве транспорта используется JSON.

Драйвер может находиться в следующих состояниях:

  • 0 Свободен
  • 1 В процессе выполнения команды
  • 2 Выполнение команды завершено
  • -1 Ошибка

Ниже будут приведены алгоритм обработки запроса на стороне сервера и на стороне клиента. Поскольку драйвер реализован в качестве однопоточного приложения, и может выполнять команды только по очереди, протокол обмена предполагает наличие очереди на стороне клиента, а так же контроль состояния на стороне сервера. Проще говоря, драйвер следует принципу:

  1. Если я свободен - могу выполнять все команды кроме break
  2. Если я в процессе выполнения - могу выполнять только команду break
  3. Если я в состоянии отличном от первых двух - могу исполнять только команду reset

Естественно, что перед посылкой следующей команды необходимо получить состояние драйвера, поэтому AJAX интерфейс имеет команду getstate, которая показывает состояние драйвера, если используется прямое чтение из канала, то данная команда не имеет смысла.

Алгоритм обработки запроса в очереди на клиенте

Алгоритм обработки запроса в очереди на клиенте.gif

Алгоритм обработки запроса на сервере

Ниже приведен алгоритм обработки запроса на сервере: Алгоритм обработки запроса на сервере.gif

Требования к интерфейсу

Для обеспечения устойчивой работы интерфейса необходимо:

  1. Генерировать reqID случайным образом так, чтобы при открытии с разных клиентов не могло быть одинаковых значений
  2. Заставка, которая показывается пока обрабатывается очередь должна иметь кнопки
    1. Прервать команду - тогда очищается вся очередь и состояние драйвера сбрасывается в свободен.
    2. В случае, когда команда завершилась ошибкой, в заставке должно быть описание ошибки и кнопка повторить
    3. Перезагрузить апач и драйвер
    4. На каждой закладке нужна кнопка Обновить
  3. Обработчик ответа на команду должен содержать код, который вновь ставит в очередь команду в случае, если предыдущая попытка завершилась ошибкой

Запрос

Запрос состоит из тела запроса и признака конца запроса: {Тело запроса}<<<eof>>>

  • Тело запроса - строка содержащая объект JSON
  • <<<eof>>> - признак конца запроса. Данная последовательность обязательна и обозначает конец запроса.

Тело запроса: {"command":"команда", "request":[null | параметры команды в виде списка {"Имя параметра":"значение параметра",...} ], "reqID":Целое число}<<<eof>>>

  • command - имя команды
  • request - null или список параметров
  • reqID - идентификатор запроса в очереди запросов на клиенте. Имеет смысл только для случая, когда клиент использует очередь запросов. В остальных случаях

может быть равен нулю Все поля обязательны

Ответ

{"resp":"Ответ драйвера в JSON формате","reqID":Целое число,"state":"1 | 2 | 0 | -1","description":"Строка","percent":Целое число [0-100]}

  • resp - Ответ драйвера в JSON формате
  • reqID - идентификатор запроса в очереди запросов на клиенте. Имеет смысл только для случая, когда клиент использует очередь запросов. В остальных случаях может быть равен нулю
  • description - Описание ошибки, или состояния, или просто пустая строка
  • percent - Процент выполнения команды - целое число в диапазоне от 0 до 100
  • state - Статус драйвера:

Все поля обязательны

Формат вывода для плагинов

Формат вывода для плагина: {"data": json | null, "description": str, "result": true | false, "percent":int(0-100)}

где:

  • data - данные в формате json, которые плагин возвращает
  • description - описание ошибки, если ошибка произошла, либо комментарий
  • result - результат выполнения операции true/false, в зависимости от успешного, или неуспешного завершения операции
  • percent - процент выполнения задачи. Число от 0 до 100

Формат вывода для встроенных команд

Формат вывода для плагина: {"data": json | null, "description": str, "result": true | false, "percent":int(0-100)}

где:

  • data - данные в формате json = {"data": json | null, "description": str, "result": true | false, "percent":int(0-100)} (при этом содержимое полей result, description и percent переносится в соответствующие поля верхнего уровня)
  • description - описание ошибки, если ошибка произошла, либо комментарий
  • result - результат выполнения операции true/false, в зависимости от успешного, или неуспешного завершения операции
  • percent - процент выполнения задачи. Число от 0 до 100

Примечание По сути формат вывода внутренней команды полностью аналогичен формату внешнего плагина и отличается только тем, что вовнутрь поля data встроен объект точно такой же как у внешнего плагина. При анализе ответа внутренний анализатор переносит встроенные в поле дата значения соответствующие поля объекта-владельца т.е.:
description = data.description;
result = data.result;
percent = data.percent;

Описание групп команд драйвера

Управление состоянием драйвера

Команды правления драйвером:

  • reset - сбрасывает драйвер в состояние в Свободен из состояний Ошибка, Выполнение команды завершено
  • break - прерывает выполнение команды, если драйвер находится в состоянии В процессе выполнения команды
  • quit - прерывает выполнение команды и выгружает драйвер из памяти

Основные функции криптографии

Создание пары ключ-сертификат для корневого центра сертификации

Для инициализации центра сертификации необходимо создать пару ключ-сертификат. Команда драйвера для создания пары:
{

"command":"create_ca_pair",
"request":{"format": | "pem" | "pkcs12","country":str,"province":str,"city":str,"org":str,"cn": str,"key_bits":int,"not_before":str,"life_time":int,"password":str},
"reqID":int

}

где:

  • format - формат, в котором будет возвращен результат может принимать строковые значения pem, или pkcs12
  • country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
  • province - строка с областью
  • city - строка с названием города
  • org - строка с названием фирмы
  • key_bits - целое число - количество бит ключа
  • not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
  • life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
  • password - строка, пароль для ключа центра сертификации

Возвращаемое значение:

  • В случае, когда значение параметра format равно pem :

{"response":{"key": str, "cert": str, "p12": null},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

  • В случае, когда значение параметра format равно pkcs12 :

{"response":{"key": null,"cert": str, "p12": str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

где:

key - строка с ключем:

  • в формате PEM, если значение свойства format в запросе было равно pem
  • пакет pkcs12 кодированный base64, если значение format в запросе было равно pkcs12.

cert - строка с сертификатом:

  • в формате PEM, если значение свойства format в запросе было равно pem
  • null, если значение format в запросе было равно pkcs12.

Создание пары ключ-сертификат

Команда драйвера для создания пары ключ-сертификат:

Вариант с использованием полного имени

{

"command":"create_pair",
"request":{"format": "pem"|"pkcs12","country":str,"province":str,"city":str,"org":str,"cn","key_bits":int,"serial":int,"not_before":str,"life_time":int, ("ca_cert": str, "ca_key": str) || "ca_p12": str , "ca_password": str, "password": str},
"reqID":int

}

где:

  • format - формат, в котором будет возвращен результат может принимать строковые значения pem, или pkcs12
  • country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
  • province - строка с областью
  • city - строка с названием города
  • org - строка с названием фирмы
  • cn - строка с информацией о том, для кого выдан сертификат
  • key_bits - целое число - количество бит ключа
  • serial - целое число - серийный номер сертификата
  • not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
  • life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
  • ca_cert - строка содержащая сертификат центра сертификации в формате PEM
  • ca_key - строка содержащая закрытый ключ центра сертификации в формате PEM
  • ca_p12 - перекодированный в base64 пакет PKCS12, содержащий СА сертификат и ключ для подписи
  • ca_password - пароль для ключа центра сертификации, либо пакета PKCS12
  • password - пароль для ключа клиента, либо пакета PKCS12
Вариант с использованием данных из сертификата СА

Параметры country, province, city, org могут быть опущены. В этом случае они будут взяты из сертификата центра сертификации. Т.е. запрос может иметь вид:
{

"command":"create_pair",
"request":{"format": "pem"|"pkcs12", "cn","bits":int,"serial":int,"not_before":str,"life_time":int, ["ca_cert": str, "ca_key": str || "ca_p12": str ], "ca_password": str, "password": str},
"reqID":int

}

Возвращаемое значение:

  • В случае, когда значение параметра format равно pem :

{"response":{"key": str, "cert": str, "p12": null},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

  • В случае, когда значение параметра format равно pkcs12 :

{"response":{"key": null,"cert": str, "p12": str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

где:

  • key - строка с ключем в формате PEM
  • cert - строка с сертификатом в формате PEM


Примечание: Если не указан хотя бы один из параметров country, province, city, org - будет использована краткая форма.

Генерация private ключа

Команда драйвера для генерации private ключа:
{"command":"create_key", "request":{"bits":int, "passwd": str}, "reqID":int}

где:

  • bits - количество бит ключа
  • passwd - пароль, может быть пустым

Возвращаемое значение: {"response":{"key":"cert"},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

Отзыв сертификата

Команда драйвера на отзыв сертификата(тов):
{"command":"revoke",

"request":{"ca_cert":str, "ca_key": str || "ca_p12":base64, "ca_password": str|null,
"bundle": [{"cert": str||null || "serial": int }], "rd": YYYY-MM-DD-HH-mm-ss,
["crl": str|null, "crl_serial": str | int | null], "next_update_offset": int}, "reqID":int}

где:

  • bundle - массив из объетов с полями cert и serial. В объекте должно присутствовать только одно из полей. По тому, какое поле присутствует будет выбран способ добавления с crl. В случае, если указан cert серийный номер будет взят из сертификата, если указан serial серийным номер будет будет записан из этого параметра напрямую.
  • cert - сертификат, который должен быть отозван
  • serial - серийный номер сертификата, который должен быть отозван
  • ca_pkey - приватный ключ центра сертификации
  • ca_password - пароль для ключа центра сертификации, либо null, если ключ без защиты паролем
  • ca_p12 - пакет pkcs12 содержащий ключ и сертификат цента авторизации
  • ca_cert - сертификат центра сертификации
  • crl - список отозванных сертификатов (crl) в формате PEM, либо null - в этом случае будет создан новый список
  • rd - дата, с которой будет отозван сертификат
  • next_update_offset - количество времени с секундах до следующего обновления crl
  • crl_serial - серийный номер для crl, который будет создан после отзыва сертификатов. Если отсутствует, или указан неправильно, то будет использован серийный номер предыдущего crl, указанного в одноименном параметре. Если параметр не указан и crl_serial указан неправильно, будет выдана ошибка.


Примечание: запрос может проходить в двух формах

  • с указанием непосредственно сертификата, который необходимо отозвать. В этом случае необходимо указать свойство cert
  • c указанием серийного номера. В этом случае необходимо указать свойство serial

Сертификат и ключ центра авторизации могут быть переданы в двух вариантах

  • каждый отдельно в формате PEM
  • в пакете PKCS12

Возвращаемое значение: {"response":{"crl": str},"reqID": int,"state": 1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

Изменение параметров сертификата

Команда драйвера на изменение параметров сертификата:
{"command:"}

Подпись файла

Команда драйвера для подписи файла:
{"command:"}

Подпись текста

Команда драйвера для подписи текста:
{"command":"sign_msg", "request":{"msg": str, "key": str || "p12": str, passwd: str}, "reqID":int}

где:

  • msg - текст, который будет подписан
  • key - private ключ, которым будет подписан текст
  • passwd - пароль к ключу, в случае, если указан key, или к пакету pkcs12, если указан p12

Возвращаемое значение: {"response":{"dig":str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

  • dig - текст подписи (digest-дайджест)

Проверка подписи текста

Команда драйвера для проверки подписи текста:
{"command":"verify_sign_msg", "request":{"msg": str, "sig": str, "cert": str || "p12": str, passwd: str}, "reqID":int}

где:

  • msg - текст, который был подписан
  • sig - подпись текста (digest)
  • cert - сертификат X509, содержащий public ключ, необходимый для расшифровки дайджеста
  • passwd - пароль к ключу, в случае, если указан key, или к пакету pkcs12, если указан p12

Возвращаемое значение: {"response":{"result":true|false},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

  • result - если проверка прошла успешно, то result будет равен true иначе - false.

Создание запроса на создание сертификата

Команда драйвера для создания запроса на создание сертификата драйвера

{

"command":"create_req",
"request":{"country":str, "province":str, "city":str, "org":str, "cn":str, ["key_bits":int | "key":str ]},
"reqID":int

}

где:

  • country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
  • province - строка с областью
  • city - строка с названием города
  • org - строка с названием фирмы
  • cn - строка с информацией о том, для кого выдан сертификат
  • key_bits - целое число - количество бит ключа
  • key - строка с ключем с формате PEM

Возвращаемое значение: {"response":{"key": str, "req": str}, "reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

где:

  • key - строка с ключем в формате PEM
  • req - строка с запросом на создание сертификата в формате PEM


Примечание: Параметры key_bits и key могут быть указаны только по отдельности. При этом наличие хотя бы одного из них обязательно.

Создание сертификата на основании запроса на создание сертификата

Команда драйвера для создания сертификата:

{

"command":"create_cert_from_req",
"request":{"req": str ,"serial": int ,"not_before": str ,"life_time": int , ("ca_cert": str, "ca_key": str) || "ca_p12": str , "ca_passwd": str},
"reqID":int

}

где:

  • req - строка содержащая запрос на создание сертификата в формате PEM
  • serial - целое число - серийный номер сертификата
  • not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
  • life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
  • ca_cert - строка содержащая сертификат центра сертификации в формате PEM
  • ca_key - строка содержащая закрытый ключ центра сертификации в формате PEM
  • ca_p12 - перекодированный в base64 пакет PKCS12, содержащий СА сертификат и ключ для подписи
  • ca_passwd - пароль для ключа центра сертификации, либо пакета PKCS12

Возвращаемое значение: {"response":{"cert":str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

где:

  • cert - строка с сертификатом в формате PEM

Создание запроса на получение сертификата для запуска драйвера

Команда драйвера для создания сертификата драйвера

{

"command":"create_drv_cert",
"request":{"format":pem|pkcs12,"hash": str, "key_bits":int, "serial":int, "not_before":str, "life_time":int, "ca_cert": str, "ca_key": str || "ca_p12": str , "ca_passwd": str},
"reqID":int

}

где:

  • format - формат, в котором будет возвращен результат может принимать строковые значения pem, или pkcs12
  • hash - строка с хешем для машины, для которой создается драйвер
  • key_bits - целое число - количество бит ключа
  • serial - целое число - серийный номер сертификата
  • not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
  • life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
  • ca_cert - строка содержащая сертификат центра сертификации в формате PEM
  • ca_key - строка содержащая закрытый ключ центра сертификации в формате PEM
  • ca_p12 - перекодированный в base64 пакет PKCS12, содержащий СА сертификат и ключ для подписи
  • ca_passwd - пароль для ключа центра сертификации, либо пакета PKCS12

Возвращаемое значение: {"response":{"cert":str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

где:

  • key - строка с ключем в формате PEM
  • cert - строка с сертификатом в формате PEM


Примечание: Если не указан хотя бы один из параметров country, province, city, org - будет использована краткая форма.

Инициализация сервера и корневого центра сертификации

Для инициализации сервера и корневого центра сертификации необходимо:

  • создать пару ключ-сертификат центра.
  • создать пару ключ-сертификат для web сервера
  • создать пару ключ-сертификат для пользователя
  • создать пустой список отозванных сертификатов, подписанный новым ключем

{

"command":"init_ca_srv",
"request":{"country":str,"province":str,"city":str,"org":str,"cn":str,"hostname":str, "username":str,
"key_bits":int,"ca_key_bits":int,"not_before":str,"ca_life_time":int,"life_time":int,
"password":str,"ca_password":str,"crl_next_update_offset":int},
"reqID":int

}

где:

  • country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
  • province - строка с областью
  • city - строка с названием города
  • org - строка с названием фирмы
  • cn - строка с названием центра сертификации
  • hostname - имя web-сервера
  • username - имя пользователя, для которого создается сертификат
  • key_bits - целое число - количество бит ключа
  • ca_key_bits - целое число - количество бит ключа центра сертификации
  • not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
  • ca_life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before для корневого сертификата
  • life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
  • password - строка, пароль для ключа пользователя
  • ca_password - строка, пароль для ключа центра сертификации
  • crl_next_update_offset - количество секунд от точки создания CRL до следующего CRL

Возвращаемое значение:

  • В случае, когда значение параметра format равно pkcs12 :

{"response":{"ca_pair": str,"user_pair": str, "srv_cert": str, "srv_key": str, "ca_cert": str, "crl": str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}

где:

  • ca_pair - пакет pkcs12 кодированный base64
  • user_pair - пакет pkcs12 кодированный base64
  • srv_cert - сертификат сервера в формате base64
  • srv_key - ключ сервера в формате base64
  • ca_cert - сертификат центра сертификации в формате base64
  • crl - пустой CRL кодированный в base64

Список команд

</tr>

КомандаОписание
rebootserverПерезагрузка сервера.
status1сserviceСтатус сервиса 1с.
start1сserviceЗапуск сервиса 1с.
stop1сserviceОстановка сервиса 1с.
reboot1сserviceПерезагрузка сервиса 1с.
sambastatusСтатус сервиса Samba.
sambastartЗапуск сервиса Samba.
sambastopОстановка сервиса Samba.
sambarestartПерезагрузка сервиса Samba.
resetСброс состояния. Переводит драйвер в состояние Свободен если до поступления команды, он не находился в состоянии В процессе выполнения команды
breakПревывает исполнение текущей команды. Если драйвер не находится в состоянии выполнения команды - просто игнорируется
getusersВозвращает список пользователей SAMBA.
Запрос : {"command":"getusers", "request":null, "reqID": Идентификатор запроса}.
Ответ драйвера : {"response" : { userRID : { "username" : username } } }
adduserДобавление нового пользователя.
Запрос : {"command":"adduser","request": {"username": Имя пользователя, "password": Пароль, "surname": Фамилия, "given_name": Отчество, "initials": Инициалы, "company": Компания, "mail_address": Почтовый адрес, "telephone_number": Номер телефона, "profile_path": Путь к профилю, "script_path": Путь к скрипту, "home_drive": Домашнее дисковое устройство, "home_directory": Домашняя директория }, "reqID":Идентификатор запроса}. Поле username и password являются обязательным для заполнения.
Ответ драйвера при удачном создании пользователя: { "response": "SID"}. Ответ драйвера при ошибке : {"description": Текст ошибки}.
upduserРедактирование пользователя.
Запрос : {"command":"upduser","request": {"username": Имя пользователя, "username_new": Новое имя пользователя, "password": Пароль, "surname": Фамилия, "given_name": Отчество, "initials": Инициалы, "company": Компания, "mail_address": Почтовый адрес, "telephone_number": Номер телефона, "profile_path": Путь к профилю, "script_path": Путь к скрипту, "home_drive": Домашнее дисковое устройство, "home_directory": Домашняя директория }, "reqID":Идентификатор запроса}. Поле username и password являются обязательным для заполнения. Ответ драйвера при удачном редактировании группы : { "response": "User updated"}. Ответ драйвера при ошибке : {"description": Текст ошибки}.
deluserУдаление пользователя.
Запрос : {"command": "deluser", "request": {"username": Имя пользователя }, "reqID":Идентификатор запроса}.
Ответ драйвера при удачном удалении : {"response" : "Deleted user 'username'"}.
Отвер драйвера при ошибке : {"description": Текст ошибки}
createusers
getgroupsВозвращает список групп SAMBA.
Запрос : {"command":"getgroups","request": null, "reqID": Идентификатор запроса}.
Ответ драйвера : {"response": { Название группы : { "group_rid" : РИД группы, "members" : { Список пользователей, состоящих в данной группе (аналогично ответу команды 'getusers') } } }}
addgroupДобавление новой группы.
Запрос : {"command":"addgroup","request": {"groupname": Название группы }, "reqID":Идентификатор запроса}.
Ответ драйвера при удачном создании пользователя : { "response": "Added group 'groupname'"}. Ответ драйвера при ошибке : {"description": Текст ошибки}.
updgroupРедактирование группы.
Запрос : {"command": "updgroup", "request": {"groupname": Название группы, "groupname_new": Новое название группы }, "reqID":Идентификатор запроса}.
Ответ драйвера при удачном редактировании : {"response" : "Group updated"}.
Отвер драйвера при ошибке : {"description": Текст ошибки}
delgroupУдаление группы.
Запрос : {"command": "delgroup", "request": {"groupname": Название группы }, "reqID":Идентификатор запроса}.
Ответ драйвера при удачном удалении : {"response" : "Deleted group 'groupname'"}.
Отвер драйвера при ошибке : {"description": Текст ошибки}
creategroups
lstgroupmembersВывод списка пользователей группы
Запрос : {"command":"lstgroupmembers","request": {"groupname": Название группы }, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": [ Список пользователей ]}. Ответ драйвера при ошибке : {"description": Текст ошибки}
addgroupmemberДобавление пользователя в группу
Запрос : {"command":"addgroupmember","request": {"groupname": Название группы, "username": Имя пользователя }, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": "Added members to group 'groupname'"}. Ответ драйвера при ошибке : {"description": Текст ошибки}
delgroupmemberУдаление пользователя из группы
Запрос : {"command":"delgroupmember","request": {"groupname": Название группы, "username": Имя пользователя }, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": "Removed members from group 'groupname'"}. Ответ драйвера при ошибке : {"description": Текст ошибки}
getdomainsidВозвращает SID домена
Запрос : {"command":"getdomainsid","request": null, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": SID домена}. Ответ драйвера при ошибке : {"description": Текст ошибки}
setdomainsidЗадает SID домену
Запрос : {"command":"setdomainsid","request": {"domainsid": SID}, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": ""}. Ответ драйвера при ошибке : {"description": Текст ошибки}
getfreedisksВозвращает список свободных дисков
Запрос : {"command":"getfreedisks","request": null, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": Cписок свободных дисков }. Ответ драйвера при ошибке : {"description": Текст ошибки}
getmddisksВозвращает список MD устройств
Запрос : {"command":"getmddisks","request": null, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": Cписок MD устройств }. Ответ драйвера при ошибке : {"description": Текст ошибки}
adddisk
removedisk
getsharesВозвращает список шар Самбы
Запрос : {"command":"getshares","request": null, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": ["body":{"Comment": комментарий, "GuestOk": Гостевой доступ(true/false), "GuestWrite": Права на запись для гостевого доступа(true/false), "Users":{Юзер/Группа: Права на запись(true/false)},"network_name": Имя шары},"share_id": ИД шары] }. Ответ драйвера при ошибке : {"description": Текст ошибки}
addshareДобавление шары Самбы
Запрос : {"command":"addshare","request": {"name": string(Имя шары) ,"comment": string(Комментарий) , "gOk": boolean(Гостевой доступ) ,"gWrite": boolean(Права на запись при гостевом доступе) ,"acl":{ "Имя пользователя/группы": boolean }}, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": {"body": {"Comment": string(Комментарий), "GuestOk": boolean(Гостевой доступ), "GuestWrite": boolean(Права на запись при гостевом доступе), "Users": { "Имя пользователя/группы": boolean}, "network_name": string(Имя шары)},"share_id": int(ИД шары) }. Ответ драйвера при ошибке : {"description": Текст ошибки}
removeshareУдаление шары Самбы
Запрос : {"command":"removeshare","request": {"share_id":int(ИД шары)}, "reqID":Идентификатор запроса}.
Ответ драйвера : { "description": Ответ}. Ответ драйвера при ошибке : {"description": Текст ошибки}
updshareРедактирование шары Самбы
Запрос : {"command":"updshare","request": {"share_id": int(ИД шары), "name": string(Имя шары) ,"comment": string(Комментарий) , "gOk": boolean(Гостевой доступ) ,"gWrite": boolean(Права на запись при гостевом доступе) ,"acl":{ "Имя пользователя/группы": boolean }}, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": {"body": {"Comment": string(Комментарий), "GuestOk": boolean(Гостевой доступ), "GuestWrite": boolean(Права на запись при гостевом доступе), "Users": { "Имя пользователя/группы": boolean}, "network_name": string(Имя шары)},"share_id": int(ИД шары) }. Ответ драйвера при ошибке : {"description": Текст ошибки}
destroydataspace
pingВозвращает результат выполнения команды ping в цикле. Процент выполнения вычисляется из 500 строк ответа команды.
Запрос : {"command":"ping","request":null, "reqID":Идентификатор запроса}.
Ответ драйвера : { "response": { "count": Номер результата по порядку, "out": Ответ команды, "percent": Процент выполнения команды} }. Ответ драйвера при ошибке : {"description": Текст ошибки}

Назад