Added support for the RouterInfo API call.
Added support for the RouterRunner API call.
This commit is contained in:
@ -242,8 +242,8 @@ public class Main {
|
|||||||
System.out.println("Connection failed..");
|
System.out.println("Connection failed..");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test restart
|
// Test restart - worked at one point :) Possibly now as well.
|
||||||
|
/*
|
||||||
System.out.println("\nSetRouterRunner: Restart");
|
System.out.println("\nSetRouterRunner: Restart");
|
||||||
try {
|
try {
|
||||||
SetRouterRunner.execute(ROUTER_RUNNER.RESTART);
|
SetRouterRunner.execute(ROUTER_RUNNER.RESTART);
|
||||||
@ -251,9 +251,9 @@ public class Main {
|
|||||||
System.out.println("Invalid password..");
|
System.out.println("Invalid password..");
|
||||||
} catch (JSONRPC2SessionException e) {
|
} catch (JSONRPC2SessionException e) {
|
||||||
System.out.println("Connection failed..");
|
System.out.println("Connection failed..");
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Test restart graceful
|
// Test restart graceful - worked at one point :) Possibly now as well.
|
||||||
/*
|
/*
|
||||||
System.out.println("\nSetRouterRunner: Restart Graceful");
|
System.out.println("\nSetRouterRunner: Restart Graceful");
|
||||||
try {
|
try {
|
||||||
@ -263,5 +263,16 @@ public class Main {
|
|||||||
} catch (JSONRPC2SessionException e) {
|
} catch (JSONRPC2SessionException e) {
|
||||||
System.out.println("Connection failed..");
|
System.out.println("Connection failed..");
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
System.out.println("\nSetRouterRunner: Shutdown ");
|
||||||
|
try {
|
||||||
|
SetRouterRunner.execute(ROUTER_RUNNER.SHUTDOWN);
|
||||||
|
} catch (InvalidPasswordException e1) {
|
||||||
|
System.out.println("Invalid password..");
|
||||||
|
} catch (JSONRPC2SessionException e) {
|
||||||
|
System.out.println("Connection failed..");
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,12 +261,12 @@ public class ConfigurationTab extends TabLogoPanel {
|
|||||||
} catch (NumberFormatException e){
|
} catch (NumberFormatException e){
|
||||||
JOptionPane.showConfirmDialog(
|
JOptionPane.showConfirmDialog(
|
||||||
this,
|
this,
|
||||||
Transl._("' "+tcpPort + " ' can not be interpreted as a TCP port.\r\n" +
|
Transl._("' "+udpPort + " ' can not be interpreted as a UDP port.\r\n" +
|
||||||
"\r\nA port has to be a number in the range 1-65535." +
|
"\r\nA port has to be a number in the range 1-65535."),
|
||||||
"\r\n\r\nWould you like to ignore that the TCP port isn't set?"),
|
|
||||||
Transl._("Invalid port."),
|
Transl._("Invalid port."),
|
||||||
JOptionPane.YES_NO_OPTION,
|
JOptionPane.DEFAULT_OPTION,
|
||||||
JOptionPane.ERROR_MESSAGE);
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
return SAVE_STATUS.SAVE_FAILED_LOCALLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Check UDP port
|
//Check UDP port
|
||||||
|
70
src/net/i2p/itoopie/i2pcontrol/methods/GetRouterInfo.java
Normal file
70
src/net/i2p/itoopie/i2pcontrol/methods/GetRouterInfo.java
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package net.i2p.itoopie.i2pcontrol.methods;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import net.i2p.itoopie.i2pcontrol.InvalidParametersException;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.InvalidPasswordException;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.JSONRPC2Interface;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.UnrecoverableFailedRequestException;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.methods.RouterInfo.ROUTER_INFO;
|
||||||
|
|
||||||
|
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
|
||||||
|
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
|
||||||
|
import com.thetransactioncompany.jsonrpc2.client.JSONRPC2SessionException;
|
||||||
|
|
||||||
|
public class GetRouterInfo {
|
||||||
|
private final static Log _log = LogFactory.getLog(GetRouterInfo.class);
|
||||||
|
|
||||||
|
public static EnumMap<ROUTER_INFO, Object> execute(ROUTER_INFO ... info)
|
||||||
|
throws InvalidPasswordException, JSONRPC2SessionException{
|
||||||
|
|
||||||
|
JSONRPC2Request req = new JSONRPC2Request("RouterInfo", JSONRPC2Interface.incrNonce());
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
Map outParams = new HashMap();
|
||||||
|
List<ROUTER_INFO> list = Arrays.asList(info);
|
||||||
|
|
||||||
|
for (ROUTER_INFO e : list){
|
||||||
|
if(e.isReadable()){
|
||||||
|
outParams.put(e.toString(), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
req.setParams(outParams);
|
||||||
|
|
||||||
|
JSONRPC2Response resp = null;
|
||||||
|
try {
|
||||||
|
resp = JSONRPC2Interface.sendReq(req);
|
||||||
|
HashMap map = (HashMap) resp.getResult();
|
||||||
|
if (map != null){
|
||||||
|
Set<Entry> set = map.entrySet();
|
||||||
|
EnumMap<ROUTER_INFO, Object> output = new EnumMap<ROUTER_INFO, Object>(ROUTER_INFO.class);
|
||||||
|
// Present the result as an <Enum,Object> map.
|
||||||
|
for (Entry e: set){
|
||||||
|
String key = (String) e.getKey();
|
||||||
|
ROUTER_INFO RI = RouterInfo.getEnum(key);
|
||||||
|
// If the enum exists. They should exists, but safety first.
|
||||||
|
if (RI != null){
|
||||||
|
output.put(RI, e.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
} else {
|
||||||
|
return new EnumMap<ROUTER_INFO, Object>(ROUTER_INFO.class);
|
||||||
|
}
|
||||||
|
} catch (UnrecoverableFailedRequestException e) {
|
||||||
|
_log.error("getRouterInfo failed.", e);
|
||||||
|
} catch (InvalidParametersException e) {
|
||||||
|
_log.error("Remote host rejected provided parameters: " + req.toJSON().toJSONString());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
46
src/net/i2p/itoopie/i2pcontrol/methods/RouterInfo.java
Normal file
46
src/net/i2p/itoopie/i2pcontrol/methods/RouterInfo.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package net.i2p.itoopie.i2pcontrol.methods;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes very basic I2P router information.
|
||||||
|
* @author hottuna
|
||||||
|
*/
|
||||||
|
public class RouterInfo{
|
||||||
|
private final static HashMap<String,ROUTER_INFO> enumMap;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes very basic I2P router information.
|
||||||
|
* @author hottuna
|
||||||
|
*/
|
||||||
|
public enum ROUTER_INFO implements Remote{
|
||||||
|
VERSION { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "i2p.router.version"; }},
|
||||||
|
|
||||||
|
UPTIME { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "i2p.router.uptime"; }},
|
||||||
|
|
||||||
|
STATUS { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "i2p.router.status"; }},
|
||||||
|
|
||||||
|
NETWORK_STATUS { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "i2p.router.net.status"; }}
|
||||||
|
};
|
||||||
|
|
||||||
|
static {
|
||||||
|
enumMap = new HashMap<String,ROUTER_INFO>();
|
||||||
|
for (ROUTER_INFO n : ROUTER_INFO.values()){
|
||||||
|
enumMap.put(n.toString(), n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ROUTER_INFO getEnum(String key){
|
||||||
|
return enumMap.get(key);
|
||||||
|
}
|
||||||
|
}
|
46
src/net/i2p/itoopie/i2pcontrol/methods/RouterRunner.java
Normal file
46
src/net/i2p/itoopie/i2pcontrol/methods/RouterRunner.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package net.i2p.itoopie.i2pcontrol.methods;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the ways a I2P router can be restarted.
|
||||||
|
* @author hottuna
|
||||||
|
*/
|
||||||
|
public class RouterRunner{
|
||||||
|
private final static HashMap<String,ROUTER_RUNNER> enumMap;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the ways a I2P router can be restarted.
|
||||||
|
* @author hottuna
|
||||||
|
*/
|
||||||
|
public enum ROUTER_RUNNER implements Remote{
|
||||||
|
RESTART { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "Restart"; }},
|
||||||
|
|
||||||
|
SHUTDOWN { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "Shutdown"; }},
|
||||||
|
|
||||||
|
RESTART_GRACEFUL { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "RestartGraceful"; }},
|
||||||
|
|
||||||
|
SHUTDOWN_GRACEFUL { public boolean isReadable(){ return true;}
|
||||||
|
public boolean isWritable(){ return false;}
|
||||||
|
public String toString() { return "ShutdownGraceful"; }}
|
||||||
|
};
|
||||||
|
|
||||||
|
static {
|
||||||
|
enumMap = new HashMap<String,ROUTER_RUNNER>();
|
||||||
|
for (ROUTER_RUNNER n : ROUTER_RUNNER.values()){
|
||||||
|
enumMap.put(n.toString(), n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ROUTER_RUNNER getEnum(String key){
|
||||||
|
return enumMap.get(key);
|
||||||
|
}
|
||||||
|
}
|
65
src/net/i2p/itoopie/i2pcontrol/methods/SetRouterRunner.java
Normal file
65
src/net/i2p/itoopie/i2pcontrol/methods/SetRouterRunner.java
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package net.i2p.itoopie.i2pcontrol.methods;
|
||||||
|
|
||||||
|
import java.security.InvalidParameterException;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import net.i2p.itoopie.i2pcontrol.InvalidParametersException;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.InvalidPasswordException;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.JSONRPC2Interface;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.UnrecoverableFailedRequestException;
|
||||||
|
import net.i2p.itoopie.i2pcontrol.methods.RouterRunner.ROUTER_RUNNER;
|
||||||
|
|
||||||
|
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
|
||||||
|
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
|
||||||
|
import com.thetransactioncompany.jsonrpc2.client.JSONRPC2SessionException;
|
||||||
|
|
||||||
|
public class SetRouterRunner {
|
||||||
|
private final static Log _log = LogFactory.getLog(SetRouterRunner.class);
|
||||||
|
|
||||||
|
|
||||||
|
public static EnumMap<ROUTER_RUNNER, Object> execute(ROUTER_RUNNER cmd)
|
||||||
|
throws InvalidPasswordException, JSONRPC2SessionException{
|
||||||
|
|
||||||
|
JSONRPC2Request req = new JSONRPC2Request("RouterRunner", JSONRPC2Interface.incrNonce());
|
||||||
|
|
||||||
|
Map outParams = new HashMap();
|
||||||
|
|
||||||
|
|
||||||
|
outParams.put(cmd.toString(), null);
|
||||||
|
req.setParams(outParams);
|
||||||
|
|
||||||
|
JSONRPC2Response resp = null;
|
||||||
|
try {
|
||||||
|
resp = JSONRPC2Interface.sendReq(req);
|
||||||
|
HashMap map = (HashMap) resp.getResult();
|
||||||
|
if (map != null){
|
||||||
|
Set<Entry> inputSet = map.entrySet();
|
||||||
|
EnumMap<ROUTER_RUNNER, Object> output = new EnumMap<ROUTER_RUNNER, Object>(ROUTER_RUNNER.class);
|
||||||
|
// Present the result as an <Enum,Object> map.
|
||||||
|
for (Entry e: inputSet){
|
||||||
|
String key = (String) e.getKey();
|
||||||
|
ROUTER_RUNNER RR = RouterRunner.getEnum(key);
|
||||||
|
// If the enum exists. They should exists, but safety first.
|
||||||
|
if (RR != null){
|
||||||
|
output.put(RR, e.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
} else {
|
||||||
|
return new EnumMap<ROUTER_RUNNER, Object>(ROUTER_RUNNER.class);
|
||||||
|
}
|
||||||
|
} catch (UnrecoverableFailedRequestException e) {
|
||||||
|
_log.error("setRouterRunner failed.", e);
|
||||||
|
} catch (InvalidParametersException e) {
|
||||||
|
_log.error("Remote host rejected provided parameters: " + req.toJSON().toJSONString());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user