I2P позволяет работать через интерфейс JSONRPC2 с помощью плагина I2PControl. Цель интерфейса - обеспечить простой метод взаимодействия с работающим узлом I2P. Клиент, itoopie, разрабатывался параллельно. Реализация JSONRPC2 для клиента, так же как и для плагина, обеспечивается java библиотеками JSON-RPC 2.0. Список реализаций протокола JSON-RPC для разных языков программирования доступен на вики-странице JSON-RPC.

I2PControl по умолчанию слушает на https://localhost:7650

API, версия 1.

Parameters are only provided in a named way (maps).

Формат JSON-RPC 2

Запрос:
{
  "id": "id",
  "method": "Method-name",
  "params": {
    "Param-key-1": "param-value-1",
    "Param-key-2": "param-value-2",
    "Token": "**actual token**"
  },
  "jsonrpc": "2.0"
}
Ответ:
{
  "id": "id",
  "result": {
    "Result-key-1": "result-value-1",
    "Result-key-2": "result-value-2"
  },
  "jsonrpc": "2.0"
}
    method-name – Описание
      Запрос:
    • Param-key-1 – Описание
    • Param-key-2 – Описание
    • Token – Токен, использующийся для аутентификации каждого запроса (исключая метод 'Authenticate')
      Ответ:
    • Result-key-1 – Описание
    • Result-key-2 – Описание

Реализованные методы

    Authenticate – Создаёт и возвращает токен для дальнейшего использования.
      Запрос:
    • API – [long] Версия I2PControl API, используемая клиентом.
    • Password – [String] Пароль, использующийся для авторизации на удалённом сервере.
      Ответ:
    • API – [long] Основная версия I2PControl API, реализованная сервером.
    • Token – [String] Токен, используемый для последующего информационного обмена.
    Echo – Выводит значение ключа 'echo'. Используется для отладки и тестирования.
      Запрос:
    • Echo – [String] Значение будет возвращено в ответе.
    • Token – [String] Токен, использованный для аутентификации клиента. Предоставляется сервером при помощи RPC метода 'Authenticate'.
      Ответ:
    • Result – [String] Значение ключа 'echo' в запросе.
    GetRate – Fetches rateStat from router statManager. Creates stat if not already created.
      Запрос:
    • Stat – [String] Determines which rateStat to fetch, see ratestats.
    • Period – [long] Determines which period a stat is fetched for. Measured in ms.
    • Token – [String] Токен, использованный для аутентификации клиента. Предоставляется сервером при помощи RPC метода 'Authenticate'.
      Ответ:
    • Result – [double] Returns the average value for the reuested rateStat and period.
    I2PControl – Управляет I2PControl. Порты, пароли и тому подобное.
      Запрос:
    • *i2pcontrol.address – [String] Задаёт новый адрес для прослушивания для I2PControl (на данный момент реализованы только 127.0.0.1 и 0.0.0.0 адреса).
    • *i2pcontrol.password – [String] Устанавливает новый пароль для I2PControl, все токены для аутентификации будут сброшены.
    • *i2pcontrol.port – [String] Устанавливает, какой порт будет использовать I2P для прослушивания входящих соединений.
    • Token – [String] Токен, использованный для аутентификации клиента. Предоставляется сервером при помощи RPC метода 'Authenticate'.
      Ответ:
    • **i2pcontrol.address – [null] Возвращается, если адрес был изменён
    • **i2pcontrol.password – [null] Возвращается, если этот параметр был изменён
    • **i2pcontrol.port – [null] Возвращается, если этот параметр был изменён
    • SettingsSaved – [Boolean] Возвращает 'true', если были изменены какие-либо настройки.
    • RestartNeeded – [Boolean] Возвращает 'true', если были изменены какие-либо настройки, для применения которых требуется перезагрузка.
    RouterInfo – Получает базовую информацию о I2P маршрутизаторе. Время с начала загрузки, версию и т. д.
      Запрос:
    • *i2p.router.status – [n/a]
    • *i2p.router.uptime – [n/a]
    • *i2p.router.version – [n/a]
    • *i2p.router.net.bw.inbound.1s – [n/a]
    • *i2p.router.net.bw.inbound.15s – [n/a]
    • *i2p.router.net.bw.outbound.1s – [n/a]
    • *i2p.router.net.bw.outbound.15s – [n/a]
    • *i2p.router.net.status – [n/a]
    • *i2p.router.net.tunnels.participating – [n/a]
    • *i2p.router.netdb.activepeers – [n/a]
    • *i2p.router.netdb.fastpeers – [n/a]
    • *i2p.router.netdb.highcapacitypeers – [n/a]
    • *i2p.router.netdb.isreseeding – [n/a]
    • *i2p.router.netdb.knownpeers – [n/a]
    • Token – [String] Токен, использованный для аутентификации клиента. Предоставляется сервером при помощи RPC метода 'Authenticate'.
      Ответ:
    • **i2p.router.status – [String] Каков статус маршрутизатора I2P.
    • **i2p.router.uptime – [long] Каково время с начала загрузки маршрутизатора в мс.
    • **i2p.router.version – [String] I2P маршрутизатор какой версии запущен в данный момент.
    • **i2p.router.net.bw.inbound.1s – [double] Средний входящий трафик за 1 секунду в б/с.
    • **i2p.router.net.bw.inbound.15s – [double] Средний входящий трафик за 15 секунд в б/с.
    • **i2p.router.net.bw.outbound.1s – [double] Средний исходящий трафик за 1 секунду в б/с.
    • **i2p.router.net.bw.outbound.15s – [double] Средний исходящий трафик за 15 секунд в б/с.
    • **i2p.router.net.status – [long] Каков текущий статус сети. Согласно списку ниже:
      • 0 – OK
      • 1 – TESTING
      • 2 – FIREWALLED
      • 3 – HIDDEN
      • 4 – WARN_FIREWALLED_AND_FAST
      • 5 – WARN_FIREWALLED_AND_FLOODFILL
      • 6 – WARN_FIREWALLED_WITH_INBOUND_TCP
      • 7 – WARN_FIREWALLED_WITH_UDP_DISABLED
      • 8 – ERROR_I2CP
      • 9 – ERROR_CLOCK_SKEW
      • 10 – ERROR_PRIVATE_TCP_ADDRESS
      • 11 – ERROR_SYMMETRIC_NAT
      • 12 – ERROR_UDP_PORT_IN_USE
      • 13 – ERROR_NO_ACTIVE_PEERS_CHECK_CONNECTION_AND_FIREWALL
      • 14 – ERROR_UDP_DISABLED_AND_TCP_UNSET
    • **i2p.router.net.tunnels.participating – [long] Сколько туннелей в сети I2P участвуют в обмене.
    • **i2p.router.netdb.activepeers – [long] Между сколькими пирами недавно был обмен данными.
    • **i2p.router.netdb.fastpeers &ndasg; [long] Сколько пиров считаются 'быстрыми'.
    • **i2p.router.netdb.highcapacitypeers – [long] Сколько пиров считаются с 'высокой пропускной способностью'.
    • **i2p.router.netdb.isreseeding – [boolean] Is the router reseeding hosts to its NetDB?
    • **i2p.router.netdb.knownpeers – [long] Сколько пиров известны нам (перечислены в нашей Сетевой БД).
    RouterManager – Управляет перезагрузкой/выключением I2P маршрутизатора.
      Запрос:
    • *FindUpdates – [n/a] Blocking. Initiates a search for signed updates.
    • *Reseed – [n/a] Initiates a router reseed, fetching peers into our NetDB from a remote host.
    • *Restart – [n/a] Перезагружает I2P маршрутизатор.
    • *RestartGraceful – [n/a] "Мягко" перезагружает I2P маршрутизатор (ждёт, пока у участвующих в обмене туннелей истечёт время).
    • *Shutdown – [n/a] Выключает I2P маршрутизатор.
    • *ShutdownGraceful – [n/a] "Мягко" выключает I2P маршрутизатор (ждёт, пока у участвующих в обмене туннелей истечёт время).
    • *Update – [n/a] Initiates a router update from signed sources.
    • Token – [String] Токен, использованный для аутентификации клиента. Предоставляется сервером при помощи RPC метода 'Authenticate'.
      Ответ:
    • **FindUpdates – [boolean] Blocking. Returns true iff a signed update has been found.
    • **Reseed – [null] If requested, verifies that a reseed has been initiated.
    • **Restart – [null] Если запрошено, проверять что перезагрузка уже начата
    • **RestartGraceful – [null] If requested, verifies that a graceful restart has been initiated.
    • **Shutdown – [null] If requested, verifies that a shutdown has been initiated
    • **ShutdownGraceful – [null] If requested, verifies that a graceful shutdown has been initiated
    • **Update – [String] Blocking. If requested, returns the status of the the update
    NetworkSetting – Получает или устанавливает различные сетевые настройки. Порты, адреса и т. д.
      Запрос:
    • *i2p.router.net.ntcp.port – [String] Какой порт используется для TCP транспорта. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.ntcp.hostname – [String] Какое имя хоста используется для TCP транспорта. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.ntcp.autoip – [String] Использовать автоматически определённый IP адрес для TCP транспорта. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.ssu.port – [String] Какой порт используется для UDP транспорта. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.ssu.hostname – [String] Какое имя хоста используется для UDP транспорта. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.ssu.autoip – [String] Какие методы следует использовать для определения IP адреса UDP транспорта. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.ssu.detectedip – [null] IP адрес, автоматически определённый UDP транспортом.
    • *i2p.router.net.upnp – [String] Включен ли UPnP. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.bw.share – [String] Процент ширины канала, доступный для обмена данными туннелей. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.bw.in – [String] Разрешенный входящий трафик в Кб/с. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.bw.out – [String] Разрешенный исходящий трафик в Кб/с. Если передано пустое значение, то будет возвращено текущее значение.
    • *i2p.router.net.laptopmode – [String] Включен ли режим лэптопа (изменяет ID маршрутизатора и UDP порт, когда меняется IP адрес). Если передано пустое значение, то будет возвращено текущее значение.
    • Token – [String] Токен, используемый для аутентификации клиента. Предоставляется сервером при помощи RPC метода 'Authenticate'. Если передано пустое значение, то будет возвращено текущее значение.
      Ответ:
    • **i2p.router.net.ntcp.port – [String] Если запрошено, возвращает порт, используемый TCP транспортом.
    • **i2p.router.net.ntcp.hostname – [String] Если запрошено, возвращает имя хоста, используемое TCP транспортом.
    • **i2p.router.net.ntcp.autoip – [String] Если запрошено, возвращает метод, используемый для автоматического определения IP адреса для TCP транспорта.
    • **i2p.router.net.ssu.port – [String] Если запрошено, возвращает порт, используемый UDP транспортом.
    • **i2p.router.net.ssu.hostname – [String] Если запрошено, возвращает имя хоста, используемое UDP транспортом.
    • **i2p.router.net.ssu.autoip – [String] Если запрошено, возвращает метод, используемый для автоматического определения IP адреса UDP транспорта.
    • **i2p.router.net.ssu.detectedip – [String] Если запрошено, возвращает IP адрес, определённый UDP транспортом.
    • **i2p.router.net.upnp – [String] Если запрошено, возвращает значение настройки UPnP.
    • **i2p.router.net.bw.share – [String] Если запрошено, возвращает процент ширины канала, доступный для использования туннелями.
    • **i2p.router.net.bw.in – [String] If requested, returns how many KB/s of inbound bandwidth is allowed.
    • **i2p.router.net.bw.out – [String] If requested, returns how many KB/s of outbound bandwidth is allowed.
    • **i2p.router.net.laptopmode – [String] Если запрошено, возвращает значение настройки режима лэптопа.
    • SettingsSaved – [boolean] Have the provided settings been saved.
    • RestartNeeded – [boolean] Требуется ли перезапуск для вступления в силу новых настроек.
    AdvancedSettings – Allows for manipulation of advanced i2p settings
      Set: – Set the sent key-value pairs
    • {"setting-key": "setting-value", ...} – [Map]
      SetAll: – Set the sent key-value pairs, remove everything else
    • {"setting-key": "setting-value", ...} – [Map]
      Get: – Set the sent key-value pairs, remove everything else
    • "setting-key" – [String]
      GetAall:

* означает необязательный параметр

** означает возможно возвращаемое значение

Коды ошибок

    Стандартные коды ошибок JSON-RPC2.
  • -32700 – Ошибка разбора JSON.
  • -32600 – Некорректный запрос.
  • -32601 – Метод не найден.
  • -32602 – Некорректные параметры.
  • -32603 – Внутренняя ошибка.
    Коды ошибок I2PControl
  • -32001 – Указан неверный пароль.
  • -32002 – Не предоставлен аутентификационный токен.
  • -32003 – Аутентификационный токен не существует.
  • -32004 – Время действия предоставленного аутентификационного токена истекло и он будет удалён.
  • -32005 – Не указана используемая версия I2PControl API, необходимо её указать.
  • -32006 – Запрошенная версия I2PControl API не поддерживается I2PControl.