I2PControl API 2

Proposal 118
Rejected
Author hottuna
Created 2016-01-23
Last Updated 2018-03-22

Обзор

Это предложение описывает 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]