From 1e710399e226b4b18ea29e20c32c1aa7d5293dd4 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Sun, 15 Dec 2013 16:42:28 +0100 Subject: Always log Exception to log --- res/values/strings.xml | 2 ++ src/de/blinkt/openvpn/FileProvider.java | 5 ++-- src/de/blinkt/openvpn/LaunchVPN.java | 5 ++-- src/de/blinkt/openvpn/VpnProfile.java | 6 ++-- .../blinkt/openvpn/api/ExternalOpenVPNService.java | 5 ++-- src/de/blinkt/openvpn/core/OpenVPNThread.java | 5 ++-- .../openvpn/core/OpenVpnManagementThread.java | 15 ++++------ src/de/blinkt/openvpn/core/OpenVpnService.java | 10 +++---- src/de/blinkt/openvpn/core/ProfileManager.java | 8 ++---- src/de/blinkt/openvpn/core/VPNLaunchHelper.java | 6 ++-- src/de/blinkt/openvpn/core/VpnStatus.java | 32 ++++++++++++++++++---- src/de/blinkt/openvpn/core/X509Utils.java | 13 +++++---- src/de/blinkt/openvpn/fragments/AboutFragment.java | 9 +++--- 13 files changed, 70 insertions(+), 51 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index e0294988..e0665d7b 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -307,4 +307,6 @@ Download Vpn Status View options + Unhandled exception: %1$s\n\n%2$s + %3$s: %1$s\n\n%2$s diff --git a/src/de/blinkt/openvpn/FileProvider.java b/src/de/blinkt/openvpn/FileProvider.java index 671d6446..9ffd6545 100644 --- a/src/de/blinkt/openvpn/FileProvider.java +++ b/src/de/blinkt/openvpn/FileProvider.java @@ -18,6 +18,7 @@ import android.os.Bundle; import android.os.ParcelFileDescriptor; import android.provider.OpenableColumns; import android.util.Log; +import de.blinkt.openvpn.core.VpnStatus; /** * A very simple content provider that can serve arbitrary asset files from @@ -51,8 +52,8 @@ implements PipeDataWriter { c.addRow(row); return c; } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; + VpnStatus.logException(e); + return null; } diff --git a/src/de/blinkt/openvpn/LaunchVPN.java b/src/de/blinkt/openvpn/LaunchVPN.java index 10dd3e99..20683805 100644 --- a/src/de/blinkt/openvpn/LaunchVPN.java +++ b/src/de/blinkt/openvpn/LaunchVPN.java @@ -273,9 +273,10 @@ public class LaunchVPN extends Activity { if(ret ==0) mCmfixed=true; } catch (InterruptedException e) { - e.printStackTrace(); + VpnStatus.logException("SU command", e); + } catch (IOException e) { - e.printStackTrace(); + VpnStatus.logException("SU command", e); } } diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java index abf8d87c..f4389f0b 100644 --- a/src/de/blinkt/openvpn/VpnProfile.java +++ b/src/de/blinkt/openvpn/VpnProfile.java @@ -421,7 +421,7 @@ public class VpnProfile implements Serializable { PackageInfo packageinfo = c.getPackageManager().getPackageInfo(c.getPackageName(), 0); version = packageinfo.versionName; } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); + VpnStatus.logException(e); } return String.format(Locale.US, "setenv IV_OPENVPN_GUI_VERSION \"%s %s\"\n", c.getPackageName(), version); @@ -543,7 +543,7 @@ public class VpnProfile implements Serializable { cfg.flush(); cfg.close(); } catch (IOException e) { - e.printStackTrace(); + VpnStatus.logException(e); } return intent; @@ -651,7 +651,7 @@ public class VpnProfile implements Serializable { try { Thread.sleep(3000); } catch (InterruptedException e1) { - e1.printStackTrace(); + VpnStatus.logException(e1); } return getKeyStoreCertificates(context, tries-1); } diff --git a/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java b/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java index 765bc23d..c42ac065 100644 --- a/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java +++ b/src/de/blinkt/openvpn/api/ExternalOpenVPNService.java @@ -90,7 +90,6 @@ public class ExternalOpenVPNService extends Service implements StateListener { } catch (NameNotFoundException e) { // App not found. Remove it from the list mExtAppDb.removeApp(apppackage); - e.printStackTrace(); } } @@ -156,10 +155,10 @@ public class ExternalOpenVPNService extends Service implements StateListener { ProfileManager pm = ProfileManager.getInstance(getBaseContext()); pm.addProfile(vp); } catch (IOException e) { - e.printStackTrace(); + VpnStatus.logException(e); return false; } catch (ConfigParseError e) { - e.printStackTrace(); + VpnStatus.logException(e); return false; } diff --git a/src/de/blinkt/openvpn/core/OpenVPNThread.java b/src/de/blinkt/openvpn/core/OpenVPNThread.java index f814ff29..dacd41c9 100644 --- a/src/de/blinkt/openvpn/core/OpenVPNThread.java +++ b/src/de/blinkt/openvpn/core/OpenVPNThread.java @@ -48,7 +48,7 @@ public class OpenVPNThread implements Runnable { startOpenVPNThreadArgs(mArgv, mProcessEnv); Log.i(TAG, "Giving up"); } catch (Exception e) { - e.printStackTrace(); + VpnStatus.logException("Starting OpenVPN Thread" ,e); Log.e(TAG, "OpenVPNThread Got " + e.toString()); } finally { int exitvalue = 0; @@ -149,8 +149,7 @@ public class OpenVPNThread implements Runnable { } catch (IOException e) { - VpnStatus.logError("Error reading from output of OpenVPN process" + e.getLocalizedMessage()); - e.printStackTrace(); + VpnStatus.logException("Error reading from output of OpenVPN process" , e); stopProcess(); } diff --git a/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java b/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java index abca275a..59c9dfa2 100644 --- a/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java +++ b/src/de/blinkt/openvpn/core/OpenVpnManagementThread.java @@ -73,7 +73,6 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { // wait 300 ms before retrying try { Thread.sleep(300); } catch (InterruptedException e1) { - e1.printStackTrace(); } } @@ -85,7 +84,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { mServerSocket = new LocalServerSocket(mServerSocketLocal.getFileDescriptor()); return true; } catch (IOException e) { - e.printStackTrace(); + VpnStatus.logException(e); } return false; @@ -131,8 +130,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { try { fds = mSocket.getAncillaryFileDescriptors(); } catch (IOException e) { - VpnStatus.logError("Error reading fds from socket" + e.getLocalizedMessage()); - e.printStackTrace(); + VpnStatus.logException("Error reading fds from socket", e); } if(fds!=null){ Collections.addAll(mFDList, fds); @@ -148,7 +146,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { } } catch (IOException e) { - e.printStackTrace(); + VpnStatus.logException(e); } active.remove(this); } @@ -180,9 +178,8 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { exp =e; } - exp.printStackTrace(); Log.d("Openvpn", "Failed to retrieve fd from socket: " + fd); - VpnStatus.logError("Failed to retrieve fd from socket: " + exp.getLocalizedMessage()); + VpnStatus.logException("Failed to retrieve fd from socket", exp); } private String processInput(String pendingInput) { @@ -297,7 +294,6 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { try { Thread.sleep(3000); } catch (InterruptedException e) { - e.printStackTrace(); } } @@ -457,8 +453,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement { } catch (IOException e) { exp =e; } - VpnStatus.logError("Could not send fd over socket:" + exp.getLocalizedMessage()); - exp.printStackTrace(); + VpnStatus.logException("Could not send fd over socket" , exp); return false; } diff --git a/src/de/blinkt/openvpn/core/OpenVpnService.java b/src/de/blinkt/openvpn/core/OpenVpnService.java index 43bf702b..3de701b1 100644 --- a/src/de/blinkt/openvpn/core/OpenVpnService.java +++ b/src/de/blinkt/openvpn/core/OpenVpnService.java @@ -209,13 +209,13 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac //ignore exception } catch (NoSuchMethodException nsm) { - nsm.printStackTrace(); + VpnStatus.logException(nsm); } catch (IllegalArgumentException e) { - e.printStackTrace(); + VpnStatus.logException(e); } catch (IllegalAccessException e) { - e.printStackTrace(); + VpnStatus.logException(e); } catch (InvocationTargetException e) { - e.printStackTrace(); + VpnStatus.logException(e); } } @@ -312,7 +312,6 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac try { Thread.sleep(1000); } catch (InterruptedException e) { - e.printStackTrace(); } @@ -321,7 +320,6 @@ public class OpenVpnService extends VpnService implements StateListener, Callbac try { Thread.sleep(1000); } catch (InterruptedException e) { - e.printStackTrace(); } } // An old running VPN should now be exited diff --git a/src/de/blinkt/openvpn/core/ProfileManager.java b/src/de/blinkt/openvpn/core/ProfileManager.java index 27b64b90..a1dd8da5 100644 --- a/src/de/blinkt/openvpn/core/ProfileManager.java +++ b/src/de/blinkt/openvpn/core/ProfileManager.java @@ -145,13 +145,11 @@ public class ProfileManager { vpnfile.close(); } catch (FileNotFoundException e) { - e.printStackTrace(); + VpnStatus.logException("saving VPN profile", e); throw new RuntimeException(e); } catch (IOException e) { - - e.printStackTrace(); + VpnStatus.logException("saving VPN profile", e); throw new RuntimeException(e); - } } @@ -186,7 +184,7 @@ public class ProfileManager { exp=e; } if(exp!=null) { - exp.printStackTrace(); + VpnStatus.logException("Loading VPN List",exp); } } } diff --git a/src/de/blinkt/openvpn/core/VPNLaunchHelper.java b/src/de/blinkt/openvpn/core/VPNLaunchHelper.java index a8770a69..5f1efb5f 100644 --- a/src/de/blinkt/openvpn/core/VPNLaunchHelper.java +++ b/src/de/blinkt/openvpn/core/VPNLaunchHelper.java @@ -53,9 +53,9 @@ public class VPNLaunchHelper { return true; } catch (IOException e) { if(e2!=null) - VpnStatus.logError( e2.getLocalizedMessage()); - VpnStatus.logError(e.getLocalizedMessage()); - e.printStackTrace(); + VpnStatus.logException(e2); + VpnStatus.logException(e); + return false; } } diff --git a/src/de/blinkt/openvpn/core/VpnStatus.java b/src/de/blinkt/openvpn/core/VpnStatus.java index d6a86246..f1445f77 100644 --- a/src/de/blinkt/openvpn/core/VpnStatus.java +++ b/src/de/blinkt/openvpn/core/VpnStatus.java @@ -12,6 +12,9 @@ import android.os.Parcelable; import de.blinkt.openvpn.R; import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; @@ -41,6 +44,25 @@ public class VpnStatus { private static long mlastByteCount[]={0,0,0,0}; + public static void logException(LogLevel ll, String context, Exception e) { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw)); + LogItem li; + if (context !=null) { + li = new LogItem(ll, R.string.unhandled_exception_context, e.getMessage(), sw.toString(), context); + } else { + li = new LogItem(ll, R.string.unhandled_exception, e.getMessage(), sw.toString()); + } + newLogItem(li); + } + + public static void logException(Exception e) { + logException(LogLevel.ERROR, null, e); + } + + public static void logException(String context, Exception e) { + logException(LogLevel.ERROR, context, e); + } public enum ConnectionStatus { @@ -154,11 +176,11 @@ public class VpnStatus { } }; - public LogItem(LogLevel loglevel,int ressourceId, Object[] args) { - mRessourceId = ressourceId; - mArgs = args; - mLevel = loglevel; - } + public LogItem(LogLevel loglevel,int ressourceId, Object... args) { + mRessourceId = ressourceId; + mArgs =args; + mLevel = loglevel; + } public LogItem(LogLevel loglevel, String msg) { diff --git a/src/de/blinkt/openvpn/core/X509Utils.java b/src/de/blinkt/openvpn/core/X509Utils.java index f6bd7774..5781cbf5 100644 --- a/src/de/blinkt/openvpn/core/X509Utils.java +++ b/src/de/blinkt/openvpn/core/X509Utils.java @@ -79,6 +79,7 @@ public class X509Utils { String friendlyName=null; /* Hack so we do not have to ship a whole Spongy/bouncycastle */ + Exception exp=null; try { Class X509NameClass = Class.forName("com.android.org.bouncycastle.asn1.x509.X509Name"); Method getInstance = X509NameClass.getMethod("getInstance",Object.class); @@ -95,16 +96,18 @@ public class X509Utils { friendlyName= (String) toString.invoke(subjectName,true,defaultSymbols); } catch (ClassNotFoundException e) { - e.printStackTrace(); + exp =e ; } catch (NoSuchMethodException e) { - e.printStackTrace(); + exp =e; } catch (InvocationTargetException e) { - e.printStackTrace(); + exp =e; } catch (IllegalAccessException e) { - e.printStackTrace(); + exp =e; } catch (NoSuchFieldException e) { - e.printStackTrace(); + exp =e; } + if (exp!=null) + VpnStatus.logException("Getting X509 Name from certificate", exp); /* Fallback if the reflection method did not work */ if(friendlyName==null) diff --git a/src/de/blinkt/openvpn/fragments/AboutFragment.java b/src/de/blinkt/openvpn/fragments/AboutFragment.java index ac7943db..61fcb581 100644 --- a/src/de/blinkt/openvpn/fragments/AboutFragment.java +++ b/src/de/blinkt/openvpn/fragments/AboutFragment.java @@ -23,6 +23,7 @@ import android.webkit.WebView; import android.widget.TextView; import com.android.vending.billing.IInAppBillingService; import de.blinkt.openvpn.R; +import de.blinkt.openvpn.core.VpnStatus; import org.json.JSONException; import org.json.JSONObject; @@ -123,7 +124,7 @@ public class AboutFragment extends Fragment implements View.OnClickListener { } } catch (RemoteException e) { - e.printStackTrace(); + VpnStatus.logException(e); } } @@ -196,7 +197,7 @@ public class AboutFragment extends Fragment implements View.OnClickListener { } } catch (JSONException e) { - e.printStackTrace(); + VpnStatus.logException("Parsing Play Store IAP",e); } } @@ -230,9 +231,9 @@ public class AboutFragment extends Fragment implements View.OnClickListener { } } catch (RemoteException e) { - e.printStackTrace(); + VpnStatus.logException(e); } catch (IntentSender.SendIntentException e) { - e.printStackTrace(); + VpnStatus.logException(e); } } -- cgit v1.2.3