summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2012-06-13 23:23:49 +0200
committerArne Schwabe <arne@rfc2549.org>2012-06-13 23:23:49 +0200
commit6709f66650ec4cc4a22d7bb4d0e809eab119cbe9 (patch)
treee67897cf3097900838ba68296b8a9a6be941b593
parent7dfa673e931656924ce4a85bec84441c46c5a5f5 (diff)
Correct network state message
Improve logging framework a bit Add logging of certificates received from Keystore
-rw-r--r--res/values/strings.xml3
-rw-r--r--src/de/blinkt/openvpn/LogWindow.java9
-rw-r--r--src/de/blinkt/openvpn/NetworkSateReceiver.java12
-rw-r--r--src/de/blinkt/openvpn/OpenVPN.java85
-rw-r--r--src/de/blinkt/openvpn/VpnProfile.java8
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);