package net.i2p.router; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.content.res.Resources.NotFoundException; import android.os.Bundle; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.IOException; import java.util.List; import net.i2p.router.Router; import net.i2p.router.RouterLaunch; // import net.i2p.util.NativeBigInteger; public class I2PAndroid extends Activity { static Context _context; private static final String DIR = "/data/data/net.i2p.router/files"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _context = this; // Activity extends Context debugStuff(); initialize(); // 300ms per run // 5x slower than java on my server and 50x slower than native on my server // NativeBigInteger.main(null); } public void onRestart() { System.err.println("onRestart called"); super.onRestart(); } public void onStart() { System.err.println("onStart called"); super.onStart(); RouterLaunch.main(null); System.err.println("Router.main finished"); } public void onResume() { System.err.println("onResume called"); super.onResume(); } public void onPause() { System.err.println("onPause called"); super.onPause(); } public void onStop() { System.err.println("onStop called"); super.onStop(); // from routerconsole ContextHelper List contexts = RouterContext.listContexts(); if ( (contexts == null) || (contexts.isEmpty()) ) throw new IllegalStateException("No contexts. This is usually because the router is either starting up or shutting down."); RouterContext ctx = (RouterContext)contexts.get(0); // shutdown() doesn't return so use shutdownGracefully() ctx.router().shutdownGracefully(Router.EXIT_HARD); System.err.println("shutdown complete"); } public void onDestroy() { System.err.println("onDestroy called"); super.onDestroy(); } public static Context getContext() { return _context; } private void debugStuff() { System.err.println("java.io.tmpdir" + ": " + System.getProperty("java.io.tmpdir")); System.err.println("java.vendor" + ": " + System.getProperty("java.vendor")); System.err.println("java.version" + ": " + System.getProperty("java.version")); System.err.println("os.arch" + ": " + System.getProperty("os.arch")); System.err.println("os.name" + ": " + System.getProperty("os.name")); System.err.println("os.version" + ": " + System.getProperty("os.version")); System.err.println("user.dir" + ": " + System.getProperty("user.dir")); System.err.println("user.home" + ": " + System.getProperty("user.home")); System.err.println("user.name" + ": " + System.getProperty("user.name")); } private void initialize() { // Until we can edit the router.config on the device, // copy it from the resource every time. // File f = new I2PFile("router.config"); // if (!f.exists()) { copyResourceToFile(R.raw.router_config, "router.config"); copyResourceToFile(R.raw.logger_config, "logger.config"); copyResourceToFile(R.raw.blocklist_txt, "blocklist.txt"); // } // Set up the locations so Router and WorkingDir can find them System.setProperty("i2p.dir.base", DIR); System.setProperty("i2p.dir.config", DIR); System.setProperty("wrapper.logfile", DIR + "/wrapper.log"); } private void copyResourceToFile(int resID, String f) { InputStream in = null; FileOutputStream out = null; System.err.println("Creating file " + f + " from resource"); byte buf[] = new byte[4096]; try { // Context methods in = getResources().openRawResource(resID); out = openFileOutput(f, 0); int read = 0; while ( (read = in.read(buf)) != -1) out.write(buf, 0, read); } catch (IOException ioe) { } catch (Resources.NotFoundException nfe) { } finally { if (in != null) try { in.close(); } catch (IOException ioe) {} if (out != null) try { out.close(); } catch (IOException ioe) {} } } }