# RPC Functions The following functions are available via the RPC ## queryInstances() Returns an array containing information on the instances currently running under the router. ## queryInstanceByName(instance_name: String) Returns information on an instance identified by name ## queryInstancesByGroup(instance_name: String) Returns an array containing information on the instances within a group. ## queryInstanceAt(instance_index: Integer) Returns information on an instance identified by index. ## queryInstanceNames() Returns a list of all instance names. ## queryGroupNames() Returns a list of all instance groups. ## addInstanceToGroupByName(group: String, instance_name: String) Adds an instance, identified by name, to a group ## addInstanceToGroupAt(group: String, instance_index: Integer) Adds an instance, identified by index, to a group ## removeInstanceFromGroupByName(group: String, instance_name: String) Removes an instance, identified by name, from a group ## removeInstanceFromGroupAt(group: String, instance_index: Integer) Removes an instance, identified by index, from a group ## createInstances(instances: Array or Integer) If passed an Integer, creates that many Tor instances. An array can also be passed describing the names, weights and configurations of prospective instances. : ``` var rpcRequest = { "method": "createInstances", "params": [ { "Config": { }, "Name": "instance-1", "Weight": 10 }, ... ], "jsonrpc":"2.0", "id": 1 }; ``` Will wait until the Tor Instance has fully connected to the network before returning ## addInstances(instances: Array) Serves the same purpose as "createInstances" but only takes an Array ## removeInstances(instances: Integer) Removes a number of instances ## removeInstanceAt(instance_index: Integer) Remove a specific instance from the pool by its index ## removeInstanceByName(instance_name: String) Remove a specific instance from the pool by its name ## newIdentites() Get new identites for all instances ## newIdentityAt(instance_index: Integer) Get a new identity for a specific instance by its index ## newIdentityByName(instance_name: String) Get a new identity for a specific instance by its name ## newIdentitiesByGroup(group: String) Get new identities for all instances in a group ## nextInstance() Cycle to the next instance using the load balancing method ## closeInstances() Shutdown all Tor instances ## setTorConfig(config: Object) Apples the provided configuration to all instances using the control protocol. Changes will be applied immediately. ## setTorConfigByGroup(group: String, config: Object) Apples the provided configuration to all instances in a group using the control protocol. Changes will be applied immediately. ## getDefaultTorConfig() Retrieve the default Tor Config for all future instances ## setDefaultTorConfig(config: Object) Set the default Tor Config for all future instances ## getLoadBalanceMethod() Get the current load balance method ## setLoadBalanceMethod(load_balance_method: String) Set the current load balance method ## getInstanceConfigAt(instance_index: Integer, keyword: String) Retrieves the current value of an option set in the configuration by the index of the instance using the control protocol. Example: The following would retrieve the path to the data directory of the instance ``` var rpcRequest = { "method": "getInstanceConfigAt", "params": [0, "DataDirectory"], "jsonrpc":"2.0", "id": 1 }; ``` ## getInstanceConfigByName(name: String, keyword: String) Works the same way as `getInstanceConfigAt` except takes an instance name instead of an index ## setInstanceConfigAt(index: Integer, keyword: String, value: String) Sets the value in the configuration of an instance using the control protocol. Changes will be applied immediately. ## setInstanceConfigByName(index: Integer, keyword: String, value: String) Works the same way as `setInstanceConfigAt` except takes an instance name instead of an index ## signalAllInstances(signal: String) Sends a signal using the control protocol to all instances A list of all signals can be [found here](https://gitweb.torproject.org/torspec.git/tree/control-spec.txt) ## signalInstancesByGroup(group: String, signal: String) Sends a signal using the control protocol to all instances in a group ## signalInstanceAt(index: Integer, signal: String) Sends a signal using the control protocol to an instance identified by its index ## signalInstanceByName(name: String, signal: String) Sends a signal using the control protocol to an instance identified by its name