I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 0d97d92c authored by zzz's avatar zzz
Browse files

- Beginnings of a local Binder

- Change min API to 7 (2.1), to make things a little easier.
  This covers 95% of active devices and older ones are likely
  too crappy to run I2P anyway.
parent 3f62eded
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ export NDK=$(realpath ../../android-ndk-r5b/) ...@@ -13,7 +13,7 @@ export NDK=$(realpath ../../android-ndk-r5b/)
# #
# API level, must match that in ../AndroidManifest.xml # API level, must match that in ../AndroidManifest.xml
# #
LEVEL=3 LEVEL=7
ARCH=arm ARCH=arm
export SYSROOT=$NDK/platforms/android-$LEVEL/arch-$ARCH/ export SYSROOT=$NDK/platforms/android-$LEVEL/arch-$ARCH/
export AABI=arm-linux-androideabi-4.4.3 export AABI=arm-linux-androideabi-4.4.3
......
...@@ -3,10 +3,26 @@ package net.i2p.android.router.activity; ...@@ -3,10 +3,26 @@ package net.i2p.android.router.activity;
import android.app.Activity; import android.app.Activity;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder;
import net.i2p.android.router.binder.RouterBinder;
import net.i2p.android.router.service.RouterService;
import net.i2p.router.CommSystemFacade;
import net.i2p.router.NetworkDatabaseFacade;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.TunnelManagerFacade;
import net.i2p.router.peermanager.ProfileOrganizer;
import net.i2p.router.transport.FIFOBandwidthLimiter;
import net.i2p.stat.StatManager;
public abstract class I2PActivityBase extends Activity { public abstract class I2PActivityBase extends Activity {
protected String _myDir; protected String _myDir;
protected boolean _isBound;
protected ServiceConnection _connection;
protected RouterService _routerService;
/** Called when the activity is first created. */ /** Called when the activity is first created. */
@Override @Override
...@@ -32,7 +48,12 @@ public abstract class I2PActivityBase extends Activity { ...@@ -32,7 +48,12 @@ public abstract class I2PActivityBase extends Activity {
intent.setClassName(this, "net.i2p.android.router.service.RouterService"); intent.setClassName(this, "net.i2p.android.router.service.RouterService");
System.err.println(this + " calling startService"); System.err.println(this + " calling startService");
ComponentName name = startService(intent); ComponentName name = startService(intent);
if (name == null)
System.err.println(this + " XXXXXXXXXXXXXXXXXXXX got from startService: " + name);
System.err.println(this + " got from startService: " + name); System.err.println(this + " got from startService: " + name);
boolean success = bindRouter();
if (!success)
System.err.println(this + " Bind router failed");
} }
@Override @Override
...@@ -60,6 +81,7 @@ public abstract class I2PActivityBase extends Activity { ...@@ -60,6 +81,7 @@ public abstract class I2PActivityBase extends Activity {
public void onStop() public void onStop()
{ {
System.err.println(this + " onStop called"); System.err.println(this + " onStop called");
unbindRouter();
super.onStop(); super.onStop();
} }
...@@ -69,4 +91,89 @@ public abstract class I2PActivityBase extends Activity { ...@@ -69,4 +91,89 @@ public abstract class I2PActivityBase extends Activity {
System.err.println(this + "onDestroy called"); System.err.println(this + "onDestroy called");
super.onDestroy(); super.onDestroy();
} }
protected boolean bindRouter() {
Intent intent = new Intent();
intent.setClassName(this, "net.i2p.android.router.service.RouterService");
System.err.println(this + " calling bindService");
_connection = new RouterConnection();
boolean success = bindService(intent, _connection, BIND_AUTO_CREATE);
System.err.println(this + " got from bindService: " + success);
return success;
}
protected void unbindRouter() {
if (_isBound) {
unbindService(_connection);
_isBound = false;
}
}
protected class RouterConnection implements ServiceConnection {
public void onServiceConnected(ComponentName name, IBinder service) {
RouterBinder binder = (RouterBinder) service;
_routerService = binder.getService();
_isBound = true;
}
public void onServiceDisconnected(ComponentName name) {
_isBound = false;
}
}
protected RouterContext getRouterContext() {
if (_routerService == null || !_isBound)
return null;
return _routerService.getRouterContext();
}
protected Router getRouter() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.router();
}
protected NetworkDatabaseFacade getNetDb() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.netDb();
}
protected ProfileOrganizer getProfileOrganizer() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.profileOrganizer();
}
protected TunnelManagerFacade getTunnelManager() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.tunnelManager();
}
protected CommSystemFacade getCommSystem() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.commSystem();
}
protected FIFOBandwidthLimiter getBandwidthLimiter() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.bandwidthLimiter();
}
protected StatManager getStatManager() {
RouterContext ctx = getRouterContext();
if (ctx == null)
return null;
return ctx.statManager();
}
} }
package net.i2p.android.router.binder;
import android.os.Binder;
import net.i2p.android.router.service.RouterService;
public class RouterBinder extends Binder {
private final RouterService _routerService;
public RouterBinder(RouterService service) {
super();
_routerService = service;
}
public RouterService getService() {
return _routerService;
}
}
package net.i2p.android.router.receiver; package net.i2p.android.router.receiver;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.os.IBinder;
import net.i2p.android.router.R; import net.i2p.android.router.binder.RouterBinder;
import net.i2p.android.router.service.RouterService;
public class I2PReceiver extends BroadcastReceiver { public class I2PReceiver extends BroadcastReceiver {
private final Context _context; private final Context _context;
private boolean _isBound;
private RouterService _routerService;
/** /**
* Registers itself * Registers itself
...@@ -26,6 +32,9 @@ public class I2PReceiver extends BroadcastReceiver { ...@@ -26,6 +32,9 @@ public class I2PReceiver extends BroadcastReceiver {
intents.addAction(Intent.ACTION_SCREEN_ON); intents.addAction(Intent.ACTION_SCREEN_ON);
intents.addAction(ConnectivityManager.CONNECTIVITY_ACTION); intents.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(this, intents); context.registerReceiver(this, intents);
boolean success = bindRouter();
if (!success)
System.err.println(this + " Bind router failed");
} }
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
...@@ -76,4 +85,26 @@ public class I2PReceiver extends BroadcastReceiver { ...@@ -76,4 +85,26 @@ public class I2PReceiver extends BroadcastReceiver {
" failover: " + ni.isFailover()); " failover: " + ni.isFailover());
} }
private boolean bindRouter() {
Intent intent = new Intent();
intent.setClassName(_context, "net.i2p.android.router.service.RouterService");
System.err.println(this + " calling bindService");
boolean success = _context.bindService(intent, new RouterConnection(), Context.BIND_AUTO_CREATE);
System.err.println(this + " got from bindService: " + success);
return success;
}
private class RouterConnection implements ServiceConnection {
public void onServiceConnected(ComponentName name, IBinder service) {
RouterBinder binder = (RouterBinder) service;
_routerService = binder.getService();
_isBound = true;
}
public void onServiceDisconnected(ComponentName name) {
_isBound = false;
}
}
} }
...@@ -12,6 +12,7 @@ import java.text.DecimalFormat; ...@@ -12,6 +12,7 @@ import java.text.DecimalFormat;
import java.util.List; import java.util.List;
import net.i2p.android.router.R; import net.i2p.android.router.R;
import net.i2p.android.router.binder.RouterBinder;
import net.i2p.android.router.receiver.I2PReceiver; import net.i2p.android.router.receiver.I2PReceiver;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.router.Job; import net.i2p.router.Job;
...@@ -24,7 +25,9 @@ import net.i2p.util.NativeBigInteger; ...@@ -24,7 +25,9 @@ import net.i2p.util.NativeBigInteger;
* Runs the router * Runs the router
*/ */
public class RouterService extends Service { public class RouterService extends Service {
private enum State {INIT, WAITING, STARTING, RUNNING, STOPPING, STOPPED} private enum State {INIT, WAITING, STARTING, RUNNING, STOPPING, STOPPED,
MANUAL_STOPPING, MANUAL_STOPPED,
NETWORK_STOPPING, NETWORK_STOPPED, RESTARTING}
private RouterContext _context; private RouterContext _context;
private String _myDir; private String _myDir;
...@@ -34,6 +37,7 @@ public class RouterService extends Service { ...@@ -34,6 +37,7 @@ public class RouterService extends Service {
private Thread _statusThread; private Thread _statusThread;
private StatusBar _statusBar; private StatusBar _statusBar;
private I2PReceiver _receiver; private I2PReceiver _receiver;
private IBinder _binder;
private final Object _stateLock = new Object(); private final Object _stateLock = new Object();
private static final String MARKER = "************************************** "; private static final String MARKER = "************************************** ";
...@@ -49,6 +53,7 @@ public class RouterService extends Service { ...@@ -49,6 +53,7 @@ public class RouterService extends Service {
init.initialize(); init.initialize();
//_apkPath = init.getAPKPath(); //_apkPath = init.getAPKPath();
_statusBar = new StatusBar(this); _statusBar = new StatusBar(this);
_binder = new RouterBinder(this);
} }
@Override @Override
...@@ -191,9 +196,36 @@ public class RouterService extends Service { ...@@ -191,9 +196,36 @@ public class RouterService extends Service {
{ {
System.err.println("onBind called" + System.err.println("onBind called" +
"Current state is: " + _state); "Current state is: " + _state);
return null; return _binder;
} }
// ******** following methods may be accessed from Activities and Receivers ************
public RouterContext getRouterContext() {
RouterContext rv = _context;
if (rv == null)
return null;
if (!rv.router().isAlive())
return null;
if (_state != State.RUNNING &&
_state != State.STOPPING &&
_state != State.MANUAL_STOPPING &&
_state != State.NETWORK_STOPPING)
return null;
return rv;
}
public void manualStop() {
}
public void networkStop() {
}
public void restart() {
}
// ******** end methods accessed from Activities and Receivers ************
@Override @Override
public void onDestroy() { public void onDestroy() {
System.err.println("onDestroy called" + System.err.println("onDestroy called" +
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment