I2P permet une interface JSONRPC2 via le plugin I2PControl. Le but de l'interface est de fournir une façon simple d'interfacer avec une noeud I2P en cours de fonctionnement. Un client, itoopie, a été développé en parallèle. L'implémentation JSONRPC2 pour le client ainsi que le plugin sont fournies par les bibliothèques Java JSON-RPC 2.0. Une liste des implémentations de JSON-RPC pour divers langages peut être trouvée sur le wiki JSON-RPC.

I2PControl écoute par défaut sur https://localhost:7650

API, version 1.

Les paramètres sont seulement fournis selon la façon nommée (maps).

Format JSON-RPC 2

Requête :
{
  "id": "id",
  "method": "Method-name",
  "params": {
    "Param-key-1": "param-value-1",
    "Param-key-2": "param-value-2",
    "Token": "**actual token**"
  },
  "jsonrpc": "2.0"
}
Réponse :
{
  "id": "id",
  "result": {
    "Result-key-1": "result-value-1",
    "Result-key-2": "result-value-2"
  },
  "jsonrpc": "2.0"
}
    method-name – Description
      Requête :
    • Param-key-1 – Description
    • Param-key-2 – Description
    • Token – Le jeton utilisé pour authentifier chaque requête (excluant la méthode 'Authenticate' de RPC)
      Réponse :
    • Result-key-1 – Description
    • Result-key-2 – Description

Méthodes implémentées

    Authenticate – Crée et retourne un jeton d'identification utilisé pour une future communication.
      Requête :
    • API – [long] La version de l'API I2PControl utilisée par le client.
    • Password – [String] Le mot de passe utilisé pour authentifier envers le serveur distant.
      Réponse :
    • API – [long] La version d'API I2PControl primaire implémentée par le serveur.
    • Token – [String] Le jeton utilisé pour une future communication.
    Echo – Renvoie en écho la valeur de la clé echo, utilisée pour déboguer et tester.
      Requête :
    • Echo – [String] La valeur sera rendue en réponse.
    • Token – [String] Jeton utilisé pour authentifier le client. Il est fournit par le serveur via la méthode RPC 'Authenticate'.
      Réponse :
    • Result – [String] Valeur de la clé 'echo' dans la requête.
    GetRate – Va chercher rateStat depuis le statManager du routeur. Crée stat s'il n'est pas déjà créé.
      Requête :
    • Stat – [String] Détermine à quel rateStat récupérer, voir ratestats.
    • Period – [long] Détermine durant quelle période une stat est récupérée. Mesuré en ms.
    • Token – [String] Jeton utilisé pour authentifier le client. Il est fournit par le serveur via la méthode RPC 'Authenticate'.
      Réponse :
    • Result – [double] Rend la valeur moyenne pour la rateStat demandée et la période.
    I2PControl – Gère I2PControl. Ports, mots de passe et d'autres de ce genre
      Requête :
    • *i2pcontrol.address – [String] Met en place une nouvelle adresse d'écoute pour I2PControl (seules 127.0.0.1 et 0.0.0.0 est actuellement mises en œuvre dans I2PControl).
    • *i2pcontrol.password – [String] Met un nouveau mot de passe à I2PControl, tous les jetons d'authentification seront révoqués.
    • *i2pcontrol.port – [String] Bascule le port sur lequel I2PControl écoutera les connexions.
    • Token – [String] Jeton utilisé pour authentifier le client. Il est fournit par le serveur via la méthode RPC 'Authenticate'.
      Réponse :
    • **i2pcontrol.address – [null] Rendu si l'adresse a été changée
    • **i2pcontrol.password – [null] Rendu si l'arrangement a été changé
    • **i2pcontrol.port – [null] Rendu si l'arrangement a été changé
    • SettingsSaved – [Boolean] Retourne vrai si un quelconque changement a été fait.
    • RestartNeeded – [Boolean] Retourne vrai si un quelconque changement nécessitant un redémarrage pour prendre effet a été fait.
    RouterInfo – Va chercher des informations de base au sujet du routeur I2P. Temps de fonctionnement, version etc.
      Requête :
    • *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] Jeton utilisé pour authentifier le client. Il est fournit par le serveur via la méthode RPC 'Authenticate'.
      Réponse :
    • **i2p.router.status – [String] Quel est le statut du routeur.
    • **i2p.router.uptime – [long] Quel est le temps de fonctionnement du routeur en ms.
    • **i2p.router.version – [String] Quelle version d'I2P le routeur exécute.
    • **i2p.router.net.bw.inbound.1s – [double] La moyenne sur 1 seconde de bande passante arrivante en Bps.
    • **i2p.router.net.bw.inbound.15s – [double] La moyenne sur 15 secondes de bande passante arrivante en Bps.
    • **i2p.router.net.bw.outbound.1s – [double] La moyenne sur 1 seconde de bande passante sortante en Bps.
    • **i2p.router.net.bw.outbound.15s – [double] La moyenne sur 15 secondes de bande passante sortante en Bps.
    • **i2p.router.net.status – [long] Quel est le statut actuel du réseau. Selon l'enum ci-dessous :
      • 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] À combien de tunnels participons-nous sur le réseau I2P.
    • **i2p.router.netdb.activepeers – [long] Avec combien de pairs avons-nous communiqué récemment.
    • **i2p.router.netdb.fastpeers &ndasg; [long] Combien de pairs sont considérés 'rapides'.
    • **i2p.router.netdb.highcapacitypeers – [long] Combien de pairs sont considérés 'haute capacité'.
    • **i2p.router.netdb.isreseeding – [boolean] Le routeur ré-essaime-t-il des hôtes vers son NetDB ?
    • **i2p.router.netdb.knownpeers – [long] Combien de pairs nous sont connus (listés dans notre NetDB).
    RouterManager – Gère le redémarrage/arrêt du routeur I2P.
      Requête :
    • *FindUpdates – [n/a] Blocking. Initiates a search for signed updates.
    • *Reseed – [n/a] Amorce un ré-essaimage de routeur, en récupérant des pairs depuis un hôte distant vers notre NetDB.
    • *Restart – [n/a] Redémarre le routeur.
    • *RestartGraceful – [n/a] Redémarre le routeur gracieusement (attend l'expiration des tunnels de participation).
    • *Shutdown – [n/a] Arrête le routeur.
    • *ShutdownGraceful – [n/a] Arrête le routeur gracieusement (attend l'expiration des tunnels de participation).
    • *Update – [n/a] Initiates a router update from signed sources.
    • Token – [String] Jeton utilisé pour authentifier le client. Il est fournit par le serveur via la méthode RPC 'Authenticate'.
      Réponse :
    • **FindUpdates – [boolean] Blocking. Returns true iff a signed update has been found.
    • **Reseed – [null] Si demandé, vérifie qu'un ré-essaimage a été amorcé.
    • **Restart – [null] Si demandé, vérifie qu'un redémarrage a été amorcé.
    • **RestartGraceful – [null] Si demandé, vérifie qu'un redémarrage gracieux a été amorcé.
    • **Shutdown – [null] Si demandé, vérifie qu'un arrêt a été amorcé.
    • **ShutdownGraceful – [null] Si demandé, vérifie qu'un arrêt gracieux a été amorcé.
    • **Update – [String] Blocking. If requested, returns the status of the the update
    NetworkSetting – Récupère ou met divers paramètres liés au réseau. Ports, adresses etc.
      Requête :
    • *i2p.router.net.ntcp.port – [String] Quel port est utilisé pour le transport de TCP. Si nul est soumis, le réglage actuel sera rendu.
    • *i2p.router.net.ntcp.hostname – [String] Quel nom d'hôte est utilisé pour le transport de TCP. Si nul est soumis, le réglage courant sera rendu.
    • *i2p.router.net.ntcp.autoip – [String] Utilise l'IP détectée automatiquement pour le transport de TCP. Si une valeur nulle est soumise, c'est le réglage actuel sera rendu.
    • *i2p.router.net.ssu.port – [String] Quel port est utilisé pour le transport d'UDP. Si une valeur nulle est soumise, c'est le réglage actuel qui sera rendu.
    • *i2p.router.net.ssu.hostname – [String] Quel est lke nom d'hôte utilisé pour le transport d'UDP. Si une valeur nulle est soumise, c'est le réglage actuel qui sera rendu.
    • *i2p.router.net.ssu.autoip – [String] Quelles sont les méthodes qui devraient être utilisées pour détecter l'adresse IP du transport UDP. Si une valeur nulle est soumise, c'est le réglage actuel qui sera rendu.
    • *i2p.router.net.ssu.detectedip – [null] Quelle IP a été détectée par le transport UDP.
    • *i2p.router.net.upnp – [String] UPnP est-il permis. Si une valeur nulle est soumise, c'est le réglage actuel qui sera rendu.
    • *i2p.router.net.bw.share – [String] Quel est le pourcentage de bande passante utilisable pour des tunnels de participation. Si une valeur nulle est soumise, c'est le réglage courant qui sera rendu.
    • *i2p.router.net.bw.in – [String] Combien de KO/s de bande passante entrante sont autorisés. Si une valeur nulle est soumise, c'est le réglage courant qui sera rendu.
    • *i2p.router.net.bw.out – [String] Combien de KO/s de bande passante sortante sont autorisés. Si une valeur nulle est soumise, c'est le réglage courant qui sera rendu.
    • *i2p.router.net.laptopmode – [String] Le mode ordinateur portable est-il activé (change l'identité routeur et le port UDP lorsque l'IP change). Si une valeur nulle est soumise, c'est le réglage courant qui sera rendu.
    • Token – [String] Token used for authenticating the client. Is provided by the server via the 'Authenticate' RPC method. If null is submitted, current setting will be returned.
      Réponse :
    • **i2p.router.net.ntcp.port – [String] If requested, returns the port used for the TCP transport.
    • **i2p.router.net.ntcp.hostname – [String] If requested, returns the hostname used for the TCP transport.
    • **i2p.router.net.ntcp.autoip – [String] If requested, returns the method used for automatically detecting ip for the TCP transport.
    • **i2p.router.net.ssu.port – [String] If requested, returns the port used for the UDP transport.
    • **i2p.router.net.ssu.hostname – [String] If requested, returns the hostname used for the UDP transport.
    • **i2p.router.net.ssu.autoip – [String] If requested, returns methods used for detecting the ip address of the UDP transport.
    • **i2p.router.net.ssu.detectedip – [String] If requested, returns what ip has been detected by the UDP transport.
    • **i2p.router.net.upnp – [String] If requested, returns the UPNP setting.
    • **i2p.router.net.bw.share – [String] If requested, returns how many percent of bandwidth is usable for participating tunnels.
    • **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] If requested, returns the laptop mode.
    • SettingsSaved – [boolean] Have the provided settings been saved.
    • RestartNeeded – [boolean] Is a restart needed for the new settings to be used.
    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:

* denotes an optional value.

** denotes a possibly occuring return value

Codes d'erreur

    Standard JSON-RPC2 error codes.
  • -32700 – JSON erreur d'analyse syntaxique.
  • -32600 – Requête invalide.
  • -32601 – Méthode non trouvée.
  • -32602 – Paramètres invalides.
  • -32603 – Erreur interne.
    I2PControl codes d'erreur spécifiques.
  • -32001 – Mot de passe fourni invalide.
  • -32002 – Aucun jeton d'identification présenté.
  • -32003 – Le jeton d'identification n'existe pas.
  • -32004 – The provided authentication token was expired and will be removed.
  • -32005 – The version of the I2PControl API used wasn't specified, but is required to be specified.
  • -32006 – The version of the I2PControl API specified is not supported by I2PControl.