Add ability to enter a .b32.i2p address for a node to sync. Requires that user has set up their own SOCKS proxy in their I2P app

This commit is contained in:
pokkst 2022-11-06 22:15:13 -06:00
parent b66c81cedc
commit c23879f3b6
No known key found for this signature in database
GPG key ID: 90C2ED85E67A50FF
4 changed files with 49 additions and 8 deletions

View file

@ -230,6 +230,10 @@ public class Node {
return OnionHelper.isOnionHost(host);
}
public boolean isI2P() {
return OnionHelper.isI2PHost(host);
}
public String toNodeString() {
return toString();
}
@ -240,7 +244,10 @@ public class Node {
if (!username.isEmpty() && !password.isEmpty()) {
sb.append(username).append(":").append(password).append("@");
}
sb.append(host).append(":").append(rpcPort);
sb.append(host);
if(!isI2P()) {
sb.append(":").append(rpcPort);
}
sb.append("/");
switch (networkType) {
case NetworkType_Mainnet:
@ -263,6 +270,14 @@ public class Node {
}
public String getAddress() {
String port = "";
if(!isI2P()) {
port = ":" + rpcPort;
}
return getHost() + port;
}
public String getDaemonAddress() {
return getHost() + ":" + rpcPort;
}

View file

@ -47,10 +47,11 @@ public class AddNodeBottomSheetDialog extends BottomSheetDialogFragment {
addNodeButton.setOnClickListener(view1 -> {
String node = addressEditText.getText().toString();
String name = nodeNameEditText.getText().toString();
try {
if (node.contains(":") && !name.isEmpty()) {
String[] nodeParts = node.split(":");
if (nodeParts.length == 2) {
try {
String address = nodeParts[0];
int port = Integer.parseInt(nodeParts[1]);
String newNodeString = address + ":" + port + "/mainnet/" + name;
@ -69,6 +70,29 @@ public class AddNodeBottomSheetDialog extends BottomSheetDialogFragment {
jsonArray.put(newNodeString);
}
PrefService.getInstance().edit().putString(Constants.PREF_CUSTOM_NODES, jsonArray.toString()).apply();
if (listener != null) {
listener.onNodeAdded();
}
dismiss();
}
}
} else if(node.endsWith(".b32.i2p")) {
String newNodeString = node + "/mainnet/" + name;
String nodesArray = PrefService.getInstance().getString(Constants.PREF_CUSTOM_NODES, "[]");
JSONArray jsonArray = new JSONArray(nodesArray);
boolean exists = false;
for (int i = 0; i < jsonArray.length(); i++) {
String nodeString = jsonArray.getString(i);
if (nodeString.equals(newNodeString))
exists = true;
}
if (!exists) {
jsonArray.put(newNodeString);
}
PrefService.getInstance().edit().putString(Constants.PREF_CUSTOM_NODES, jsonArray.toString()).apply();
if (listener != null) {
listener.onNodeAdded();
@ -78,8 +102,6 @@ public class AddNodeBottomSheetDialog extends BottomSheetDialogFragment {
} catch (NumberFormatException | JSONException e) {
e.printStackTrace();
}
}
}
});
}

View file

@ -258,7 +258,7 @@ public class WalletManager {
// this should not be called on the main thread as it connects to the node (and takes a long time)
public void setDaemon(Node node) {
if (node != null) {
this.daemonAddress = node.getAddress();
this.daemonAddress = node.getDaemonAddress();
if (networkType != node.getNetworkType())
throw new IllegalArgumentException("network type does not match");
this.daemonUsername = node.getUsername();

View file

@ -21,4 +21,8 @@ public class OnionHelper {
public static boolean isOnionHost(String hostname) {
return hostname.endsWith(".onion");
}
public static boolean isI2PHost(String hostname) {
return hostname.endsWith(".b32.i2p");
}
}