summaryrefslogtreecommitdiff
path: root/src/de/blinkt/openvpn/core
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2013-09-27 22:57:30 +0200
committerArne Schwabe <arne@rfc2549.org>2013-09-27 22:57:30 +0200
commit911f3855f184ecdb1339c1d8383ea19e86fe918e (patch)
tree8799a9b78e0a7f5c7e4162a410ce256135f535f4 /src/de/blinkt/openvpn/core
parent4d9f6e5358b97ab104bc6c26b862ab290161568f (diff)
Implement changing log level on the fly in the log window, still needs some UI design love
--HG-- extra : rebase_source : 207343cea3b74cd07ebdf00f8ef443465d12c966
Diffstat (limited to 'src/de/blinkt/openvpn/core')
-rw-r--r--src/de/blinkt/openvpn/core/ConfigParser.java1
-rw-r--r--src/de/blinkt/openvpn/core/OpenVPNThread.java36
-rw-r--r--src/de/blinkt/openvpn/core/OpenVpnManagementThread.java16
-rw-r--r--src/de/blinkt/openvpn/core/VpnStatus.java41
4 files changed, 78 insertions, 16 deletions
diff --git a/src/de/blinkt/openvpn/core/ConfigParser.java b/src/de/blinkt/openvpn/core/ConfigParser.java
index 01a92bd7..dcbd636f 100644
--- a/src/de/blinkt/openvpn/core/ConfigParser.java
+++ b/src/de/blinkt/openvpn/core/ConfigParser.java
@@ -247,6 +247,7 @@ public class ConfigParser {
"management",
"management-query-passwords",
"pause-exit",
+ "parsable-output",
"persist-key",
"register-dns",
"route-delay",
diff --git a/src/de/blinkt/openvpn/core/OpenVPNThread.java b/src/de/blinkt/openvpn/core/OpenVPNThread.java
index 930d2614..0807b33d 100644
--- a/src/de/blinkt/openvpn/core/OpenVPNThread.java
+++ b/src/de/blinkt/openvpn/core/OpenVPNThread.java
@@ -10,11 +10,17 @@ import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
public class OpenVPNThread implements Runnable {
- private static final String DUMP_PATH_STRING = "Dump path: ";
+ private static final String DUMP_PATH_STRING = "Dump path: ";
private static final String TAG = "OpenVPN";
- private String[] mArgv;
+ public static final int M_FATAL = (1 << 4);
+ public static final int M_NONFATAL = (1 << 5);
+ public static final int M_WARN = (1 << 6);
+ public static final int M_DEBUG = (1 << 7);
+ private String[] mArgv;
private Process mProcess;
private String mNativeDir;
private OpenVpnService mService;
@@ -111,7 +117,31 @@ public class OpenVPNThread implements Runnable {
mDumpPath = logline.substring(DUMP_PATH_STRING.length());
- VpnStatus.logInfo("P:" + logline);
+ // 1380308330.240114 18000002 Send to HTTP proxy: 'X-Online-Host: bla.blabla.com'
+
+ Pattern p = Pattern.compile("(\\d+).(\\d+) ([0-9a-f])+ (.*)");
+ Matcher m = p.matcher(logline);
+ if(m.matches()) {
+ int flags = Integer.parseInt(m.group(3),16);
+ String msg = m.group(4);
+ int logLevel = flags & 0x0F;
+
+ VpnStatus.LogLevel logStatus = VpnStatus.LogLevel.INFO;
+
+ if ((flags & M_FATAL) != 0)
+ logStatus = VpnStatus.LogLevel.ERROR;
+ else if ((flags & M_NONFATAL)!=0)
+ logStatus = VpnStatus.LogLevel.WARNING;
+ else if ((flags & M_WARN)!=0)
+ logStatus = VpnStatus.LogLevel.WARNING;
+ else if ((flags & M_DEBUG)!=0)
+ logStatus = VpnStatus.LogLevel.VERBOSE;
+
+
+ VpnStatus.logMessageOpenVPN(logStatus,logLevel,msg);
+ } else {
+ VpnStatus.logInfo("P:" + logline);
+ }
}
diff --git a/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java b/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java
index 23c6cff6..03b36144 100644
--- a/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java
+++ b/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java
@@ -202,7 +202,10 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
private void processCommand(String command) {
- if (command.startsWith(">") && command.contains(":")) {
+ Log.i(TAG, "Line from managment" + command);
+
+
+ if (command.startsWith(">") && command.contains(":")) {
String[] parts = command.split(":",2);
String cmd = parts[0].substring(1);
String argument = parts[1];
@@ -241,7 +244,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
}
private void processLogMessage(String argument) {
- String[] args = argument.split(",",3);
+ String[] args = argument.split(",",4);
// 0 unix time stamp
// 1 log level N,I,E etc.
/*
@@ -254,6 +257,8 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
*/
// 2 log message
+ Log.d("OpenVPN", argument);
+
VpnStatus.LogLevel level;
if (args[1].equals("I")) {
level = VpnStatus.LogLevel.INFO;
@@ -267,7 +272,9 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
level = VpnStatus.LogLevel.INFO;
}
- VpnStatus.logMessage(level,"P:", args[2]);
+ int ovpnlevel = Integer.parseInt(args[2]) & 0x0F;
+
+ VpnStatus.logMessageOpenVPN(level,ovpnlevel, args[3]);
}
private void handleHold() {
@@ -294,7 +301,8 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
mLastHoldRelease = System.currentTimeMillis();
managmentCommand("hold release\n");
managmentCommand("bytecount " + mBytecountInterval + "\n");
- managmentCommand("state on\n");
+ managmentCommand("state on\n");
+ //managmentCommand("log on all\n");
}
public void releaseHold() {
diff --git a/src/de/blinkt/openvpn/core/VpnStatus.java b/src/de/blinkt/openvpn/core/VpnStatus.java
index c8e5a8b1..002b6fc9 100644
--- a/src/de/blinkt/openvpn/core/VpnStatus.java
+++ b/src/de/blinkt/openvpn/core/VpnStatus.java
@@ -42,6 +42,7 @@ public class VpnStatus {
private static long mlastByteCount[]={0,0,0,0};
+
public enum ConnectionStatus {
LEVEL_CONNECTED,
LEVEL_VPNPAUSED,
@@ -55,10 +56,10 @@ public class VpnStatus {
}
public enum LogLevel {
- INFO(1),
- ERROR(2),
- WARNING(3),
- VERBOSE(4);
+ INFO(2),
+ ERROR(-2),
+ WARNING(1),
+ VERBOSE(3);
protected int mValue;
LogLevel(int value) {
@@ -103,13 +104,20 @@ public class VpnStatus {
// Default log priority
LogLevel mLevel = LogLevel.INFO;
private long logtime = System.currentTimeMillis();
+ private int mVerbosityLevel = -1;
private LogItem(int ressourceId, Object[] args) {
mRessourceId = ressourceId;
mArgs = args;
}
- @Override
+ public LogItem(LogLevel level, int verblevel, String message) {
+ mMessage=message;
+ mLevel = level;
+ mVerbosityLevel = verblevel;
+ }
+
+ @Override
public int describeContents() {
return 0;
}
@@ -121,6 +129,8 @@ public class VpnStatus {
dest.writeString(mMessage);
dest.writeInt(mRessourceId);
dest.writeInt(mLevel.getInt());
+ dest.writeInt(mVerbosityLevel);
+
dest.writeLong(logtime);
}
@@ -129,6 +139,7 @@ public class VpnStatus {
mMessage = in.readString();
mRessourceId = in.readInt();
mLevel = LogLevel.getEnumByValue(in.readInt());
+ mVerbosityLevel = in.readInt();
logtime = in.readLong();
}
@@ -247,7 +258,15 @@ public class VpnStatus {
}
- }
+ public int getVerbosityLevel() {
+ if (mVerbosityLevel==-1) {
+ // Hack:
+ // For message not from OpenVPN, report the status level as log level
+ return mLevel.getInt();
+ }
+ return mVerbosityLevel;
+ }
+ }
private static final int MAXLOGENTRIES = 500;
@@ -278,8 +297,6 @@ public class VpnStatus {
}
private static void logInformation() {
-
-
logInfo(R.string.mobile_info,Build.MODEL, Build.BOARD,Build.BRAND,Build.VERSION.SDK_INT);
}
@@ -452,7 +469,13 @@ public class VpnStatus {
newLogItem(new LogItem(LogLevel.ERROR, resourceId, args));
}
- public static synchronized void updateByteCount(long in, long out) {
+ public static void logMessageOpenVPN(LogLevel level, int ovpnlevel, String message) {
+ newLogItem(new LogItem(level, ovpnlevel, message));
+
+ }
+
+
+ public static synchronized void updateByteCount(long in, long out) {
long lastIn = mlastByteCount[0];
long lastOut = mlastByteCount[1];
long diffIn = mlastByteCount[2] = in - lastIn;