Обзор
Это предложение описывает API2 для I2PControl.
Это предложение было отклонено и не будет реализовано, так как нарушает обратную совместимость. См. ссылку на обсуждение в теме для деталей.
Внимание разработчикам!
Все RPC параметры теперь будут в нижнем регистре. Это нарушит обратную совместимость с реализациями API1. Причина этого - предоставление пользователям API версии >=API2 самой простой и последовательной API.
Спецификация API 2
{
"id": "id",
"method": "method_name",
"params": {
"token": "auth_token",
"method_param": "method_parameter_value",
},
"jsonrpc": "2.0"
}
{
"id": "id",
"result": "result_value",
"jsonrpc": "2.0"
}
Параметры
"id"
Идентификационный номер или идентификатор запроса. Используется для идентификации, какой ответ соответствует какому запросу.
"method_name"
Имя вызываемого RPC.
"auth_token"
Токен аутентификации сессии. Должен быть предоставлен для каждого RPC, за исключением вызова ‘authenticate’.
"method_parameter_value"
Параметр метода. Используется для предложений разных вариантов метода. Как, например, ‘get’, ‘set’ и тому подобные варианты.
"result_value"
Значение, которое возвращает RPC. Его тип и содержание зависят от метода и конкретного метода.
Префиксы
Схема именования RPC аналогична той, что используется в CSS, с префиксами вендора для различных реализаций API (i2p, kovri, i2pd):
XXX.YYY.ZZZ
i2p.XXX.YYY.ZZZ
i2pd.XXX.YYY.ZZZ
kovri.XXX.YYY.ZZZ
Общая идея использования специфичных для вендора префиксов заключается в предоставлении некоторой свободы действий и возможности для нововведений, без необходимости ожидания, пока все другие реализации догонят. Если RPC реализован во всех реализациях, его можно будет освободить от множественных префиксов и включить как основной RPC в следующей версии API.
Руководство по чтению методов
rpc.method
- parameter [тип параметра]: [null], [number], [string], [boolean], [array] или [object]. [object] представляет собой карту {ключ:значение}.
Возвращает:
"return_value" [string] // Это значение, возвращаемое вызовом RPC
Методы
authenticate - При условии, что предоставлен правильный пароль, этот метод предоставляет вам токен для дальнейшего доступа и список поддерживаемых уровней API.
password [string]: Пароль для этой реализации i2pcontrol
Возвращает:
[object]
{
"token" : [string], // Токен, который нужно предоставить со всеми другими методами RPC
"api" : [[int],[int], ...] // Список поддерживаемых уровней API.
}
control. - Управление i2p
control.reseed - Начать перенасеивание
- [nil]: Параметр не требуется
Возвращает:
[nil]
control.restart - Перезапустить экземпляр i2p
- [nil]: Параметр не требуется
Возвращает:
[nil]
control.restart.graceful - Благоприятно перезапустить экземпляр i2p
- [nil]: Параметр не требуется
Возвращает:
[nil]
control.shutdown - Остановить экземпляр i2p
- [nil]: Параметр не требуется
Возвращает:
[nil]
control.shutdown.graceful - Благоприятно остановить экземпляр i2p
- [nil]: Параметр не требуется
Возвращает:
[nil]
control.update.find - Блокирующий Поиск подписанных обновлений
- [nil]: Параметр не требуется
Возвращает:
true [boolean] // Истина, если доступно подписанное обновление
control.update.start - Начать процесс обновления
- [nil]: Параметр не требуется
Возвращает:
[nil]
i2pcontrol. - Настройка i2pcontrol
i2pcontrol.address - Получить/установить IP-адрес, на котором i2pcontrol ожидает подключений.
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
"0.0.0.0" [string]
* *set* [string]: Это будет IP-адрес, например, "0.0.0.0" или "192.168.0.1"
Возвращает:
[nil]
i2pcontrol.password - Изменить пароль i2pcontrol.
- set [string]: Установить новый пароль на эту строку
Возвращает:
[nil]
i2pcontrol.port - Получить/установить порт, на который i2pcontrol ожидает подключений.
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
7650 [number]
* *set* [number]: Изменить порт, на который i2pcontrol ожидает на этот порт
Возвращает:
[nil]
settings. - Получить/установить настройки экземпляра i2p
settings.advanced - Расширенные настройки
- get [string]: Получить значение этой настройки
Возвращает:
"значение-настройки" [string]
* *getAll* [null]:
Возвращает:
```text
[object]
{
"имя-настройки" : "значение-настройки", [string]
".." : ".."
}
* *set* [string]: Установить значение для этой настройки
* *setAll* [object] {"имя-настройки" : "значение-настройки", ".." : ".." }
Возвращает:
```text
[nil]
settings.bandwidth.in - Настройки входящей пропускной способности
settings.bandwidth.out - Настройки исходящей пропускной способности
- get [nil]: Этот параметр не нужно устанавливать.
Возвращает:
0 [number]
* *set* [number]: Установить лимит пропускной способности
Возвращает:
[nil]
settings.ntcp.autoip - Получить настройку автодетекции IP для NTCP
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
true [boolean]
settings.ntcp.hostname - Получить имя хоста NTCP
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
"0.0.0.0" [string]
* *set* [string]: Установить новое имя хоста
Возвращает:
[nil]
settings.ntcp.port - Порт NTCP
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
0 [number]
* *set* [number]: Установить новый порт NTCP.
Возвращает:
[nil]
* *set* [boolean]: Установить автодетекцию IP NTCP
Возвращает:
[nil]
settings.ssu.autoip - Настройка автодетекции IP для SSU
- get [nil]: Этот параметр не нужно устанавливать.
Возвращает:
true [boolean]
settings.ssu.hostname - Настройка имени хоста SSU
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
"0.0.0.0" [string]
* *set* [string]: Установить новое имя хоста SSU
Возвращает:
[nil]
settings.ssu.port - Порт SSU
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
0 [number]
* *set* [number]: Установить новый порт SSU.
Возвращает:
[nil]
* *set* [boolean]: Установить автодетекцию IP SSU
Возвращает:
[nil]
settings.share - Получить процентное соотношение использования пропускной способности
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
0 [number] // Процентное соотношение использования пропускной способности (0-100)
* *set* [number]: Установить процентное соотношение использования пропускной способности (0-100)
Возвращает:
[nil]
settings.upnp - Включить или отключить UPNP
- get [nil]: Этот параметр не нужно устанавливать.
Возвращает:
true [boolean]
* *set* [boolean]: Установить автодетекцию IP SSU
Возвращает:
[nil]
stats. - Получить статистику из экземпляра i2p
stats.advanced - Этот метод предоставляет доступ ко всем статистическим данным в пределах экземпляра.
- get [string]: Имя углубленной статистики, которая должна быть предоставлена
- Optional: period [number]: Период для запрашиваемой статистики
stats.knownpeers - Возвращает количество известных узлов
stats.uptime - Возвращает время в мс с момента запуска маршрутизатора
stats.bandwidth.in - Возвращает входящую пропускную способность (в идеале за последнюю секунду)
stats.bandwidth.in.total - Возвращает количество байтов, полученных с момента последнего перезапуска
stats.bandwidth.out - Возвращает исходящую пропускную способность (в идеале за последнюю секунду)
stats.bandwidth.out.total - Возвращает количество байтов, отправленных с момента последнего перезапуска
stats.tunnels.participating - Возвращает количество туннелей, в которых участвуют в данный момент
stats.netdb.peers.active - Возвращает количество узлов, с которыми недавно велось общение
stats.netdb.peers.fast - Возвращает количество “быстрых” узлов
stats.netdb.peers.highcapacity - Возвращает количество узлов с “высокой пропускной способностью”
stats.netdb.peers.known - Возвращает количество известных узлов
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
0.0 [number]
status. - Получить статус экземпляра i2p
status.router - Получить статус маршрутизатора
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
"status" [string]
status.net - Получить статус сети маршрутизатора
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
0 [number]
/**
* 0 – ОК
* 1 – ТЕСТИРОВАНИЕ
* 2 – ЗАИНДУСТРИРОВАН
* 3 – СКРЫТ
* 4 – ПРЕДУПРЕЖДЕНИЕ: ЗАИНДУСТРИРОВАН И БЫСТРЫЙ
* 5 – ПРЕДУПРЕЖДЕНИЕ: ЗАИНДУСТРИРОВАН И ПЕРЕПОЛНЕН
* 6 – ПРЕДУПРЕЖДЕНИЕ: ЗАИНДУСТРИРОВАН С ВХОДЯЩИМ TCP
* 7 – ПРЕДУПРЕЖДЕНИЕ: ЗАИНДУСТРИРОВАН С ОТКЛЮЧЕННЫМ UDP
* 8 – ОШИБКА: I2CP
* 9 – ОШИБКА: СМЕЩЕНИЕ ЧАСОВ
* 10 – ОШИБКА: ЧАСТНЫЙ TCP-АДРЕС
* 11 – ОШИБКА: СИММЕТРИЧНЫЙ NAT
* 12 – ОШИБКА: ПОРТ UDP ЗАНЯТ
* 13 – ОШИБКА: НЕТ АКТИВНЫХ ПИРОВ, ПРОВЕРЬТЕ ПОДКЛЮЧЕНИЕ И ФАЙРВОЛ
* 14 – ОШИБКА: ОТКЛЮЧЕН UDP И НЕ УСТАНОВЛЕН TCP
*/
status.isfloodfill - Является ли экземпляр i2p в данный момент “floodfill”
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
true [boolean]
status.isreseeding - Является ли экземпляр i2p в данный момент перенасеиваемым
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
true [boolean]
status.ip - Обнаруженный публичный IP этого экземпляра i2p
- get [null]: Этот параметр не нужно устанавливать.
Возвращает:
"0.0.0.0" [string]