From 370fa3686c7bfa74ed4b26c253ad0ba391bd34c4 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 30 Apr 2012 22:56:09 +0200 Subject: Version 0.4.6 - Codename "Welcome to the world people in 2012, where we use CIDR" --- AndroidManifest.xml | 4 +- res/menu/logmenu.xml | 2 +- res/values/strings.xml | 2 + src/de/blinkt/openvpn/LogWindow.java | 105 ++++++++++++++++++++---------- src/de/blinkt/openvpn/OpenVpnService.java | 9 ++- 5 files changed, 85 insertions(+), 37 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7b600181..3541f6c5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -17,8 +17,8 @@ + android:versionCode="14" + android:versionName="0.4.6" > diff --git a/res/menu/logmenu.xml b/res/menu/logmenu.xml index f97418a1..5fcadae0 100644 --- a/res/menu/logmenu.xml +++ b/res/menu/logmenu.xml @@ -1,7 +1,7 @@ diff --git a/res/values/strings.xml b/res/values/strings.xml index 58137810..7bc7ab95 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -111,4 +111,6 @@ adds 6 random chars in front of hostname Enable Custom Options Specify custom options. Use with care! + Route rejected by Android + Cannot make sense of %s and %s as IP and CIDR netmask, assuming P2P for local address (/32) diff --git a/src/de/blinkt/openvpn/LogWindow.java b/src/de/blinkt/openvpn/LogWindow.java index 16f54b12..f6004882 100644 --- a/src/de/blinkt/openvpn/LogWindow.java +++ b/src/de/blinkt/openvpn/LogWindow.java @@ -10,6 +10,7 @@ import android.os.Handler.Callback; import android.os.Message; import android.view.Menu; import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; @@ -18,33 +19,42 @@ import android.widget.TextView; import de.blinkt.openvpn.OpenVPN.LogListener; public class LogWindow extends ListActivity { - + class LogWindowListAdapter implements ListAdapter,LogListener, Callback { + private static final int MESSAGE_NEWLOG = 0; + + private static final int MESSAGE_CLEARLOG = 1; + private Vector myEntries=new Vector(); - + private Handler mHandler; private Vector observers=new Vector(); public LogWindowListAdapter() { + initLogBuffer(); + + if (mHandler == null) { + mHandler = new Handler(this); + } + + OpenVPN.addLogListener(this); + } + + private void initLogBuffer() { + myEntries.clear(); for (String litem : OpenVPN.getlogbuffer()) { myEntries.add(litem); } - - if (mHandler == null) { - mHandler = new Handler(this); - } - - OpenVPN.addLogListener(this); } - + @Override public void registerDataSetObserver(DataSetObserver observer) { observers.add(observer); - + } - + @Override public void unregisterDataSetObserver(DataSetObserver observer) { observers.remove(observer); @@ -94,7 +104,7 @@ public class LogWindow extends ListActivity { @Override public boolean isEmpty() { return myEntries.isEmpty(); - + } @Override @@ -110,6 +120,7 @@ public class LogWindow extends ListActivity { @Override public void newLog(String logmessage) { Message msg = Message.obtain(); + msg.what=MESSAGE_NEWLOG; Bundle mbundle=new Bundle(); mbundle.putString("logmessage", logmessage); msg.setData(mbundle); @@ -119,39 +130,67 @@ public class LogWindow extends ListActivity { @Override public boolean handleMessage(Message msg) { // We have been called - String logmessage = msg.getData().getString("logmessage"); - myEntries.add(logmessage); + if(msg.what==MESSAGE_NEWLOG) { + + String logmessage = msg.getData().getString("logmessage"); + myEntries.add(logmessage); - for (DataSetObserver observer : observers) { - observer.onChanged(); + for (DataSetObserver observer : observers) { + observer.onChanged(); + } + } else if (msg.what == MESSAGE_CLEARLOG) { + initLogBuffer(); + for (DataSetObserver observer : observers) { + observer.onInvalidated(); + } } - - + return true; } - + + void clearLog() { + OpenVPN.clearLog(); + OpenVPN.logMessage(0,"","Log cleared."); + mHandler.sendEmptyMessage(MESSAGE_CLEARLOG); + } + + } + + + + private LogWindowListAdapter ladapter; + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if(item.getItemId()==R.id.clearlog) { + ladapter.clearLog(); + return true; + } + + return super.onOptionsItemSelected(item); + } @Override public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.logmenu, menu); - return true; + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.logmenu, menu); + return true; } - - + + @Override public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - ListView lv = getListView(); - //lv.setTextFilterEnabled(true); - LogWindowListAdapter adapter = new LogWindowListAdapter(); - lv.setAdapter(adapter); + super.onCreate(savedInstanceState); + + ListView lv = getListView(); + //lv.setTextFilterEnabled(true); + ladapter = new LogWindowListAdapter(); + lv.setAdapter(ladapter); + + } + - } - - } diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index 8da49bad..442fd94c 100644 --- a/src/de/blinkt/openvpn/OpenVpnService.java +++ b/src/de/blinkt/openvpn/OpenVpnService.java @@ -202,7 +202,11 @@ public class OpenVpnService extends VpnService implements Handler.Callback { for (CIDRIP route:mRoutes) { - builder.addRoute(route.mIp, route.len); + try { + builder.addRoute(route.mIp, route.len); + } catch (IllegalArgumentException ia) { + OpenVPN.logMessage(0, "", getString(R.string.route_rejected) + route + " " + ia.getLocalizedMessage()); + } } if(mDomain!=null) @@ -243,6 +247,9 @@ public class OpenVpnService extends VpnService implements Handler.Callback { public void setLocalIP(String local, String netmask) { mLocalIP = new CIDRIP(local, netmask); + if(mLocalIP.len == 32 && !netmask.equals("255.255.255.255")) { + OpenVPN.logMessage(0, "", String.format(getString(R.string.ip_not_cidr, local,netmask))); + } } -- cgit v1.2.3