diff --git a/app/build.gradle b/app/build.gradle index 681545403..b4852bccb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -114,7 +114,7 @@ task copyI2PResources(type: Copy) { outputs.upToDateWhen { false } into 'src/main/res' into('drawable') { - from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png') + from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/i2plogo.png') } into('raw') { from(i2pbase + '/installer/resources/blocklist.txt') { rename { 'blocklist_txt' } } @@ -177,15 +177,15 @@ task copyI2PAssets(type: Copy) { outputs.upToDateWhen { false } into 'src/main/assets/themes/console' into('images') { - from file(i2pbase + '/installer/resources/themes/console/images/i2plogo.png') - from file(i2pbase + '/installer/resources/themes/console/images/inbound.png') - from file(i2pbase + '/installer/resources/themes/console/images/outbound.png') + from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/i2plogo.png') + from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/inbound.png') + from file(i2pbase + '/apps/routerconsole/jsp/themes/console/images/outbound.png') } into('light') { - from file(i2pbase + '/installer/resources/themes/console/light/console.css') + from file(i2pbase + '/apps/routerconsole/jsp/themes/console/light/console.css') } into('light/images') { - from file(i2pbase + '/installer/resources/themes/console/light/images/header.png') + from file(i2pbase + '/apps/routerconsole/jsp/themes/console/light/images/header.png') } } diff --git a/app/src/main/java/net/i2p/android/InitActivities.java b/app/src/main/java/net/i2p/android/InitActivities.java index 9f4ca8fcc..0aea7ed03 100644 --- a/app/src/main/java/net/i2p/android/InitActivities.java +++ b/app/src/main/java/net/i2p/android/InitActivities.java @@ -92,7 +92,7 @@ class InitActivities { File docsDir = new File(myDir, "docs"); docsDir.mkdir(); - copyResourceToFile(R.raw.ahelper_conflict_header_ht, "docs/ahelper-conflict-header.ht"); + /*copyResourceToFile(R.raw.ahelper_conflict_header_ht, "docs/ahelper-conflict-header.ht"); copyResourceToFile(R.raw.ahelper_new_header_ht, "docs/ahelper-new-header.ht"); copyResourceToFile(R.raw.ahelper_notfound_header_ht, "docs/ahelper-notfound-header.ht"); copyResourceToFile(R.raw.auth_header_ht, "docs/auth-header.ht"); @@ -110,7 +110,7 @@ class InitActivities { copyResourceToFile(R.raw.noproxy_header_ht, "docs/noproxy-header.ht"); copyResourceToFile(R.raw.protocol_header_ht, "docs/protocol-header.ht"); copyResourceToFile(R.raw.reset_header_ht, "docs/reset-header.ht"); - copyResourceToFile(R.raw.resetp_header_ht, "docs/resetp-header.ht"); + copyResourceToFile(R.raw.resetp_header_ht, "docs/resetp-header.ht");*/ File cssDir = new File(docsDir, "themes/console/light"); cssDir.mkdirs(); diff --git a/app/src/main/java/net/i2p/android/router/service/LoadClientsJob.java b/app/src/main/java/net/i2p/android/router/service/LoadClientsJob.java index cadb9bc4c..bd968a004 100644 --- a/app/src/main/java/net/i2p/android/router/service/LoadClientsJob.java +++ b/app/src/main/java/net/i2p/android/router/service/LoadClientsJob.java @@ -14,8 +14,11 @@ import net.i2p.router.JobImpl; import net.i2p.router.RouterContext; import net.i2p.router.startup.RouterAppManager; import net.i2p.util.I2PAppThread; +import net.i2p.sam.SAMBridge; +import java.io.File; import java.io.IOException; +import java.util.Properties; /** * Load the clients we want. @@ -41,6 +44,7 @@ class LoadClientsJob extends JobImpl { private final Context mCtx; private final Notifications _notif; private DaemonThread _addressbook; + public SAMBridge SAM_BRIDGE; //private BOB _bob; /** this is the delay to load (and start) the clients. */ @@ -57,8 +61,9 @@ class LoadClientsJob extends JobImpl { public String getName() { return "Start Clients"; } public void runJob() { - Job j = new RunI2PTunnel(getContext()); - getContext().jobQueue().addJob(j); + Job jtunnel = new RunI2PTunnel(getContext()); + getContext().jobQueue().addJob(jtunnel); + Thread t = new I2PAppThread(new StatSummarizer(), "StatSummarizer", true); t.setPriority(Thread.NORM_PRIORITY - 1); @@ -69,7 +74,16 @@ class LoadClientsJob extends JobImpl { //try { // _bob.startup(); //} catch (IOException ioe) {} - + String useSAM = System.getProperty("i2pandroid.client.sam"); + if (useSAM != null) { + Util.i("SAM API " + useSAM); + if (useSAM == "true") { + Job jsam = new RunI2PSAM(getContext()); + getContext().jobQueue().addJob(jsam); + }else{ + Util.i("SAM API disabled, not starting "+useSAM); + } + } getContext().addShutdownTask(new ClientShutdownHook()); } @@ -112,6 +126,46 @@ class LoadClientsJob extends JobImpl { } } + private class RunI2PSAM extends JobImpl { + + public RunI2PSAM(RouterContext ctx) { + super(ctx); + } + + public String getName() { return "Start SAM API"; } + + public void runJob() { + while (!getContext().router().isRunning()) { + try { Thread.sleep(1000); } catch (InterruptedException ie) { return; } + if (!getContext().router().isAlive()) { + Util.e("Router stopped before SAM API could start"); + return; + } + } + Util.d("Starting SAM"); + try { + Util.i("Starting the SAM API"); + SAM_BRIDGE = new SAMBridge("127.0.0.1", + 7656, + false, + SAM_PROPERTIES(), + "sam.keys", + new File("sam_config")); + SAM_BRIDGE.startup(); + } catch (IOException e) { + Util.e( e.toString()); + e.printStackTrace(); + } + + } + + public Properties SAM_PROPERTIES() throws IOException { + Util.i("Getting the default properties"); + Properties sam_properties = new Properties(); + return sam_properties; + } + } + private class ClientShutdownHook implements Runnable { public void run() { Util.d("client shutdown hook"); diff --git a/app/src/main/res/drawable/i2plogo.png b/app/src/main/res/drawable/i2plogo.png index 0e1c13407..7b74bd147 100644 Binary files a/app/src/main/res/drawable/i2plogo.png and b/app/src/main/res/drawable/i2plogo.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f70aa9efe..c283993e3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -182,7 +182,9 @@ Transports Max connections I2CP interface - Allow third-party apps to create tunnels (requires router restart) + Allow third-party apps to create tunnels using I2CP (requires router restart) + SAM interface + Allow third-party apps to create tunnels using SAM (requires router restart) Exploratory pool Tunnel parameters Inbound tunnels diff --git a/app/src/main/res/xml/settings_advanced.xml b/app/src/main/res/xml/settings_advanced.xml index a02ee6143..ce2ec892d 100644 --- a/app/src/main/res/xml/settings_advanced.xml +++ b/app/src/main/res/xml/settings_advanced.xml @@ -23,6 +23,13 @@ android:summary="@string/settings_desc_i2cp" /> + + - + - - - - - + + + + + diff --git a/gradle.properties b/gradle.properties index eebd55135..27f2f2cc0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ POM_DEVELOPER_ID=idk POM_DEVELOPER_NAME=idk POM_DEVELOPER_EMAIL=hankhill19580@gmail.com -I2P_VERSION=0.9.48 -ANDROID_BUILD_TARGET_SDK_VERSION=28 +I2P_VERSION=0.9.48-13 +ANDROID_BUILD_TARGET_SDK_VERSION=29 ANDROID_BUILD_SDK_VERSION=28 diff --git a/routerjars/build.gradle b/routerjars/build.gradle index 43ded1e0d..fa1959f3b 100644 --- a/routerjars/build.gradle +++ b/routerjars/build.gradle @@ -13,6 +13,7 @@ artifacts { routerjars file: file('libs/i2ptunnel.jar'), builtBy: buildRouter routerjars file: file('libs/i2ptunnel-ui.jar'), builtBy: buildRouter routerjars file: file('libs/addressbook.jar'), builtBy: buildRouter + routerjars file: file('libs/sam.jar'), builtBy: buildRouter //routerjars file: file('libs/BOB.jar'), builtBy: buildRouter } clean.dependsOn cleanBuildRouter diff --git a/routerjars/build.xml b/routerjars/build.xml index e22da6270..be6f79426 100644 --- a/routerjars/build.xml +++ b/routerjars/build.xml @@ -20,6 +20,7 @@ + @@ -36,7 +37,11 @@ - + + + + + @@ -50,10 +55,15 @@ - + + + +