diff options
author | Arne Schwabe <arne@rfc2549.org> | 2012-06-13 23:23:49 +0200 |
---|---|---|
committer | Arne Schwabe <arne@rfc2549.org> | 2012-06-13 23:23:49 +0200 |
commit | 6709f66650ec4cc4a22d7bb4d0e809eab119cbe9 (patch) | |
tree | e67897cf3097900838ba68296b8a9a6be941b593 | |
parent | 7dfa673e931656924ce4a85bec84441c46c5a5f5 (diff) |
Correct network state message
Improve logging framework a bit
Add logging of certificates received from Keystore
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/LogWindow.java | 9 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/NetworkSateReceiver.java | 12 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/OpenVPN.java | 85 | ||||
-rw-r--r-- | src/de/blinkt/openvpn/VpnProfile.java | 8 |
5 files changed, 97 insertions, 20 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 76d71ce3..08bb0a27 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -209,4 +209,7 @@ <string name="building_configration">Building configration…</string> <string name="netchange_summary">Turning this option on will force a reconnet if the network state is change (WIFI to/from mobile)</string> <string name="netchange">Reconnect on Network change</string> + <string name="keychain_nocacert">No CA Certificate returned while reading from Android keystore. Auhtentication will probably fail.</string> + <string name="cert_from_keystore">Got certificate \'%s\' from Keystore</string> + <string name="netstatus">Network Status: %s</string> </resources> diff --git a/src/de/blinkt/openvpn/LogWindow.java b/src/de/blinkt/openvpn/LogWindow.java index b38951df..6060e7ad 100644 --- a/src/de/blinkt/openvpn/LogWindow.java +++ b/src/de/blinkt/openvpn/LogWindow.java @@ -27,6 +27,7 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; +import de.blinkt.openvpn.OpenVPN.LogItem; import de.blinkt.openvpn.OpenVPN.LogListener; import de.blinkt.openvpn.OpenVPN.StateListener; @@ -59,8 +60,8 @@ public class LogWindow extends ListActivity implements StateListener { private void initLogBuffer() { myEntries.clear(); - for (String litem : OpenVPN.getlogbuffer()) { - myEntries.add(litem); + for (LogItem litem : OpenVPN.getlogbuffer()) { + myEntries.add(litem.getString(getBaseContext())); } } @@ -149,11 +150,11 @@ public class LogWindow extends ListActivity implements StateListener { } @Override - public void newLog(String logmessage) { + public void newLog(LogItem logmessage) { Message msg = Message.obtain(); msg.what=MESSAGE_NEWLOG; Bundle mbundle=new Bundle(); - mbundle.putString("logmessage", logmessage); + mbundle.putString("logmessage", logmessage.getString(getBaseContext())); msg.setData(mbundle); mHandler.sendMessage(msg); } diff --git a/src/de/blinkt/openvpn/NetworkSateReceiver.java b/src/de/blinkt/openvpn/NetworkSateReceiver.java index 77e25acf..a8d69896 100644 --- a/src/de/blinkt/openvpn/NetworkSateReceiver.java +++ b/src/de/blinkt/openvpn/NetworkSateReceiver.java @@ -29,10 +29,14 @@ public class NetworkSateReceiver extends BroadcastReceiver { String netstatestring;
if(networkInfo==null)
- netstatestring = "null";
- else
+ netstatestring = "not connected";
+ else {
+ String subtype = networkInfo.getSubtypeName();
+ if(subtype==null)
+ subtype = "";
netstatestring = String.format("%2$s %4$s to %1$s %3$s",networkInfo.getTypeName(),
- networkInfo.getDetailedState(),networkInfo.getExtraInfo(), networkInfo.getSubtypeName());
+ networkInfo.getDetailedState(),networkInfo.getExtraInfo(),subtype );
+ }
if(networkInfo!=null && networkInfo.getState() == State.CONNECTED) {
int newnet = networkInfo.getType();
@@ -43,7 +47,7 @@ public class NetworkSateReceiver extends BroadcastReceiver { lastNetwork = newnet;
}
if(!netstatestring.equals(lastStateMsg))
- OpenVPN.logMessage(0, "Network:", netstatestring);
+ OpenVPN.logInfo(R.string.netstatus, netstatestring);
lastStateMsg=netstatestring;
}
diff --git a/src/de/blinkt/openvpn/OpenVPN.java b/src/de/blinkt/openvpn/OpenVPN.java index 55e15abc..39533db3 100644 --- a/src/de/blinkt/openvpn/OpenVPN.java +++ b/src/de/blinkt/openvpn/OpenVPN.java @@ -3,21 +3,67 @@ package de.blinkt.openvpn; import java.util.LinkedList; import java.util.Vector; +import android.content.Context; + public class OpenVPN { + + static class LogItem { + public static final int ERROR = 1; + public static final int INFO = 2; + public static final int VERBOSE = 3; + + private Object [] mArgs = null; + private String mMessage = null; + private int mRessourceId; + // Default log priority + int mLevel = INFO; + + public LogItem(int ressourceId, Object[] args) { + mRessourceId = ressourceId; + mArgs = args; + } + + + public LogItem(int loglevel,int ressourceId, Object[] args) { + mRessourceId = ressourceId; + mArgs = args; + mLevel = loglevel; + } + + + public LogItem(String message) { + mMessage = message; + } + + String getString(Context c) { + if(mMessage !=null) { + return mMessage; + } else { + if(mArgs == null) + return c.getString(mRessourceId); + else + return c.getString(mRessourceId,mArgs); + } + } + } + private static final int MAXLOGENTRIES = 200; public static final String MANAGMENT_PREFIX = "M:"; - public static LinkedList<String> logbuffer = new LinkedList<String>(); + + + + public static LinkedList<LogItem> logbuffer = new LinkedList<LogItem>(); private static Vector<LogListener> logListener=new Vector<OpenVPN.LogListener>(); private static Vector<StateListener> stateListener=new Vector<OpenVPN.StateListener>(); private static String[] mBconfig; public interface LogListener { - void newLog(String logmessage); + void newLog(LogItem logItem); } public interface StateListener { @@ -26,13 +72,7 @@ public class OpenVPN { synchronized static void logMessage(int level,String prefix, String message) { - logbuffer.addLast(prefix + message); - if(logbuffer.size()>MAXLOGENTRIES) - logbuffer.removeFirst(); - - for (LogListener ll : logListener) { - ll.newLog(prefix + message); - } + newlogItem(new LogItem(prefix + message)); } @@ -59,15 +99,15 @@ public class OpenVPN { - synchronized public static String[] getlogbuffer() { + synchronized public static LogItem[] getlogbuffer() { // The stoned way of java to return an array from a vector // brought to you by eclipse auto complete - return (String[]) logbuffer.toArray(new String[logbuffer.size()]); + return (LogItem[]) logbuffer.toArray(new LogItem[logbuffer.size()]); } public static void logBuilderConfig(String[] bconfig) { - mBconfig =bconfig; + mBconfig = bconfig; } public static void triggerLogBuilderConfig() { if(mBconfig==null) { @@ -85,4 +125,25 @@ public class OpenVPN { sl.updateState(msg); } } + + public static void logInfo(String message) { + + } + + public static void logInfo(int ressourceId, Object... args) { + newlogItem(new LogItem(LogItem.INFO, ressourceId, args)); + } + + private static void newlogItem(LogItem logItem) { + logbuffer.addLast(logItem); + if(logbuffer.size()>MAXLOGENTRIES) + logbuffer.removeFirst(); + + for (LogListener ll : logListener) { + ll.newLog(logItem); + } + } + + + } diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java index d74701f5..e9cb994a 100644 --- a/src/de/blinkt/openvpn/VpnProfile.java +++ b/src/de/blinkt/openvpn/VpnProfile.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.security.KeyChain; import android.security.KeyChainException; +import android.util.Log; public class VpnProfile implements Serializable{ // Parcable @@ -473,7 +474,14 @@ public class VpnProfile implements Serializable{ try { privateKey = KeyChain.getPrivateKey(context,mAlias); cachain = KeyChain.getCertificateChain(context, mAlias); + if(cachain.length <= 1) + OpenVPN.logMessage(0, "", context.getString(R.string.keychain_nocacert)); + + for(X509Certificate cert:cachain) { + OpenVPN.logInfo(R.string.cert_from_keystore,cert.getSubjectDN()); + } + KeyStore ks = KeyStore.getInstance("PKCS12"); ks.load(null, null); ks.setKeyEntry("usercert", privateKey, null, cachain); |