summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2012-12-22 17:47:59 +0100
committerArne Schwabe <arne@rfc2549.org>2012-12-22 17:47:59 +0100
commit1fb9c1158ecb1df4499ccfef98fa71568a35fb90 (patch)
tree47d406eea17bb4aa703fcf75d1d1260eac049718
parent5ae6e66c76a8d7da2c22882d487576234ca21c26 (diff)
Add google-breakpad support to ics-openvpn
-rw-r--r--AndroidManifest.xml11
-rw-r--r--jni/Android.mk4
-rw-r--r--jni/Application.mk1
-rw-r--r--openvpn/Android.mk17
-rw-r--r--openvpn/src/openvpn/init.c5
-rw-r--r--openvpn/src/openvpn/openvpn.c6
-rw-r--r--res/menu/logmenu.xml12
-rw-r--r--src/de/blinkt/openvpn/LogWindow.java75
-rw-r--r--src/de/blinkt/openvpn/OpenVPN.java2
9 files changed, 122 insertions, 11 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a56ba309..8ccd1e96 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -24,10 +24,13 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.READ_LOGS" />
<!-- <uses-permission android:name="com.android.vending.BILLING" /> -->
- <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17"/>
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="14" />
<application
android:allowBackup="true"
@@ -114,6 +117,12 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
+
+ <provider
+ android:name=".FileProvider"
+ android:authorities="de.blinkt.openvpn.FileProvider"
+ android:grantUriPermissions="true"
+ android:exported="true" />
</application>
</manifest> \ No newline at end of file
diff --git a/jni/Android.mk b/jni/Android.mk
index 3514b920..283be302 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -5,6 +5,10 @@ include lzo/Android.mk
include openssl/Android.mk
+ifneq ($(TARGET_ARCH),mips)
+include google-breakpad/android/google_breakpad/Android.mk
+endif
+
include openvpn/Android.mk
diff --git a/jni/Application.mk b/jni/Application.mk
index 38ce95f3..5670b6e3 100644
--- a/jni/Application.mk
+++ b/jni/Application.mk
@@ -1,6 +1,7 @@
APP_ABI := all
NDK_TOOLCHAIN_VERSION=4.4.3
#APP_PLATFORM := android-14
+APP_STL:=stlport_static
#APP_OPTIM := release
diff --git a/openvpn/Android.mk b/openvpn/Android.mk
index b27ef794..6307e5e0 100644
--- a/openvpn/Android.mk
+++ b/openvpn/Android.mk
@@ -1,17 +1,21 @@
-# Android openvpn JNI
LOCAL_PATH:= $(call my-dir)/
include $(CLEAR_VARS)
LOCAL_LDLIBS := -lz
-LOCAL_C_INCLUDES := openssl/include lzo/include openssl/crypto openssl openvpn/src/compat openvpn/src/openvpn openvpn/include
+LOCAL_C_INCLUDES := openssl/include lzo/include openssl/crypto openssl openvpn/src/compat openvpn/src/openvpn openvpn/include google-breakpad/src google-breakpad/src/common/android/include
LOCAL_SHARED_LIBRARIES := libssl libcrypto
#LOCAL_STATIC_LIBRARIES := libssl_static libcrypto_static liblzo-static
+
+LOCAL_CFLAGS= -DHAVE_CONFIG_H -DTARGET_ABI=\"${TARGET_ABI}\"
LOCAL_STATIC_LIBRARIES := liblzo-static
+ifneq ($(TARGET_ARCH),mips)
+LOCAL_STATIC_LIBRARIES += breakpad_client
+LOCAL_CFLAGS += -DGOOGLE_BREAKPAD=1
+endif
-LOCAL_CFLAGS= -DHAVE_CONFIG_H -DTARGET_ABI=\"${TARGET_ABI}\"
LOCAL_MODULE = openvpn
LOCAL_SRC_FILES:= \
@@ -85,7 +89,12 @@ LOCAL_SRC_FILES:= \
src/openvpn/ssl_verify_openssl.c \
src/openvpn/ssl_verify_polarssl.c \
src/openvpn/status.c \
- src/openvpn/tun.c
+ src/openvpn/tun.c
+ifneq ($(TARGET_ARCH),mips)
+LOCAL_SRC_FILES+=../jni/icsandroid.cpp
+endif
+
+
include $(BUILD_SHARED_LIBRARY)
#include $(BUILD_EXECUTABLE)
diff --git a/openvpn/src/openvpn/init.c b/openvpn/src/openvpn/init.c
index 6a1ed02d..e2942c00 100644
--- a/openvpn/src/openvpn/init.c
+++ b/openvpn/src/openvpn/init.c
@@ -3704,7 +3704,10 @@ close_context (struct context *c, int sig, unsigned int flags)
{
if ((flags & CC_USR1_TO_HUP)
|| (c->sig->source == SIG_SOURCE_HARD && (flags & CC_HARD_USR1_TO_HUP)))
- c->sig->signal_received = SIGHUP;
+ {
+ c->sig->signal_received = SIGHUP;
+ c->sig->signal_text = "close_context usr1 to hup";
+ }
}
if (!(flags & CC_NO_CLOSE))
diff --git a/openvpn/src/openvpn/openvpn.c b/openvpn/src/openvpn/openvpn.c
index 104c9e93..4bae5274 100644
--- a/openvpn/src/openvpn/openvpn.c
+++ b/openvpn/src/openvpn/openvpn.c
@@ -321,6 +321,12 @@ wmain (int argc, wchar_t *wargv[]) {
#else
int
main (int argc, char *argv[]) {
+#ifdef TARGET_ANDROID
+#ifdef GOOGLE_BREAKPAD
+#include "../jni/icsandroid.h"
+ setup_breakpad();
+#endif
+#endif
return openvpn_main(argc, argv);
}
#endif
diff --git a/res/menu/logmenu.xml b/res/menu/logmenu.xml
index 4b55e73b..ec2997b0 100644
--- a/res/menu/logmenu.xml
+++ b/res/menu/logmenu.xml
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
-
+ <item
+ android:id="@+id/minidump"
+ android:icon="@android:drawable/ic_menu_upload"
+ android:showAsAction="ifRoom|withText"
+ android:title="Send Minidump to developer"
+ android:titleCondensed="Send Minidump"/>
<item
android:id="@+id/clearlog"
android:icon="@drawable/ic_menu_trash_holo_light"
@@ -19,17 +24,18 @@
android:showAsAction="ifRoom|withText"
android:title="@string/show_connection_details"
android:titleCondensed="@string/info"/>
+
<item
android:id="@+id/send"
android:icon="@android:drawable/ic_menu_share"
android:showAsAction="ifRoom|withText"
android:title="@string/send_logfile"
android:titleCondensed="@string/send"/>
- <item
+ <item
android:id="@+id/edit_vpn"
android:alphabeticShortcut="e"
android:icon="@android:drawable/ic_menu_edit"
android:showAsAction="withText|ifRoom"
android:title="@string/edit_vpn"/>
-
+
</menu> \ No newline at end of file
diff --git a/src/de/blinkt/openvpn/LogWindow.java b/src/de/blinkt/openvpn/LogWindow.java
index 8d228cf1..3c0f7246 100644
--- a/src/de/blinkt/openvpn/LogWindow.java
+++ b/src/de/blinkt/openvpn/LogWindow.java
@@ -1,5 +1,9 @@
package de.blinkt.openvpn;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.Vector;
import android.app.AlertDialog;
@@ -12,6 +16,7 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.DataSetObserver;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
@@ -76,6 +81,7 @@ public class LogWindow extends ListActivity implements StateListener {
return str;
}
+
private void shareLog() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, getLogStr());
@@ -215,12 +221,15 @@ public class LogWindow extends ListActivity implements StateListener {
OpenVpnManagementThread.stopOpenVPN();
}
});
-
+
builder.show();
return true;
} else if(item.getItemId()==R.id.info) {
if(mBconfig==null)
OpenVPN.triggerLogBuilderConfig();
+ } else if(item.getItemId()==R.id.minidump) {
+ emailMiniDumps();
+
} else if(item.getItemId()==R.id.send) {
ladapter.shareLog();
} else if(item.getItemId()==R.id.edit_vpn) {
@@ -249,9 +258,73 @@ public class LogWindow extends ListActivity implements StateListener {
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.logmenu, menu);
+
+
+
+ if(getLastestDump()==null)
+ menu.removeItem(R.id.minidump);
+
return true;
}
+ private File getLastestDump() {
+ long newestDumpTime=0;
+ File newestDumpFile=null;
+
+ for(File f:getCacheDir().listFiles()) {
+ if(!f.getName().endsWith(".dmp"))
+ continue;
+
+ if (newestDumpTime < f.lastModified()) {
+ newestDumpTime = f.lastModified();
+ newestDumpFile=f;
+ }
+ }
+ return newestDumpFile;
+ }
+
+
+ public void emailMiniDumps()
+ {
+ //need to "send multiple" to get more than one attachment
+ final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
+ emailIntent.setType("*/*");
+ emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
+ new String[]{"Arne Schwabe <arne@rfc2549.org>"});
+ emailIntent.putExtra(Intent.EXTRA_SUBJECT, "OpenVPN Minidump");
+
+
+ ArrayList<CharSequence> textarraylist = new ArrayList<CharSequence>();
+ textarraylist.add("Please describe the issue you have experienced");
+ emailIntent.putExtra(Intent.EXTRA_TEXT, textarraylist);
+
+
+ ArrayList<Uri> uris = new ArrayList<Uri>();
+
+ File ldump = getLastestDump();
+ if(ldump==null) {
+ OpenVPN.logError("No Minidump found!");
+ }
+
+ uris.add(Uri.parse("content://de.blinkt.openvpn.FileProvider/" + ldump.getName()));
+ uris.add(Uri.parse("content://de.blinkt.openvpn.FileProvider/openvpn.log"));
+
+
+ try {
+ FileWriter logout = new FileWriter(new File(getCacheDir(),"openvpn.log"));
+ logout.write(ladapter.getLogStr());
+ logout.close();
+
+ } catch (IOException e1) {
+ OpenVPN.logError("Error writing log: " + e1.getLocalizedMessage());
+ }
+
+ //emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
+ startActivity(emailIntent);
+ }
+
+
@Override
protected void onResume() {
super.onResume();
diff --git a/src/de/blinkt/openvpn/OpenVPN.java b/src/de/blinkt/openvpn/OpenVPN.java
index 6b65c22e..48623865 100644
--- a/src/de/blinkt/openvpn/OpenVPN.java
+++ b/src/de/blinkt/openvpn/OpenVPN.java
@@ -163,7 +163,7 @@ public class OpenVPN {
}
public static void logInfo(String message) {
-
+ newlogItem(new LogItem(LogItem.INFO, message));
}
public static void logInfo(int ressourceId, Object... args) {