From d59415d8e46bea16c70a5b6819c46a8cc4139483 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 14 May 2012 19:34:03 +0200 Subject: Add more error logging --- src/de/blinkt/openvpn/LaunchVPN.java | 1 + src/de/blinkt/openvpn/OpenVPNThread.java | 1 + src/de/blinkt/openvpn/OpenVpnManagementThread.java | 63 ++++++++++++++-------- src/de/blinkt/openvpn/ProfileManager.java | 15 ++++-- 4 files changed, 53 insertions(+), 27 deletions(-) diff --git a/src/de/blinkt/openvpn/LaunchVPN.java b/src/de/blinkt/openvpn/LaunchVPN.java index c50a1767..b084b19d 100644 --- a/src/de/blinkt/openvpn/LaunchVPN.java +++ b/src/de/blinkt/openvpn/LaunchVPN.java @@ -237,6 +237,7 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener { minivpnwritten=true; return true; } catch (IOException e) { + OpenVPN.logMessage(0, "",e.getLocalizedMessage()); e.printStackTrace(); return false; } diff --git a/src/de/blinkt/openvpn/OpenVPNThread.java b/src/de/blinkt/openvpn/OpenVPNThread.java index 4c00707b..89cd0a59 100644 --- a/src/de/blinkt/openvpn/OpenVPNThread.java +++ b/src/de/blinkt/openvpn/OpenVPNThread.java @@ -106,6 +106,7 @@ public class OpenVPNThread implements Runnable { } catch (IOException e) { + OpenVPN.logMessage(0, "", "Error reading from output of OpenVPN process"+ e.getLocalizedMessage()); e.printStackTrace(); stopProcess(); } diff --git a/src/de/blinkt/openvpn/OpenVpnManagementThread.java b/src/de/blinkt/openvpn/OpenVpnManagementThread.java index ce6f718f..753cd98a 100644 --- a/src/de/blinkt/openvpn/OpenVpnManagementThread.java +++ b/src/de/blinkt/openvpn/OpenVpnManagementThread.java @@ -38,7 +38,7 @@ public class OpenVpnManagementThread implements Runnable { mSocket.getOutputStream().write(cmd.getBytes()); mSocket.getOutputStream().flush(); } catch (IOException e) { - e.printStackTrace(); + // Ignore socket stack traces } } @@ -68,6 +68,7 @@ public class OpenVpnManagementThread implements Runnable { try { fds = mSocket.getAncillaryFileDescriptors(); } catch (IOException e) { + OpenVPN.logMessage(0, "", "Error reading fds from socket" + e.getLocalizedMessage()); e.printStackTrace(); } if(fds!=null){ @@ -95,30 +96,35 @@ public class OpenVpnManagementThread implements Runnable { //! Hack O Rama 2000! private void protectFileDescriptor(FileDescriptor fd) { + Exception exp=null; try { Method getInt = FileDescriptor.class.getDeclaredMethod("getInt$"); int fdint = (Integer) getInt.invoke(fd); // You can even get more evil by parsing toString() and extract the int from that :) - + Log.d("Openvpn", "Got FD from socket: " + fd + " " + fdint); mOpenVPNService.protect(fdint); - + //ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFd(fdint); //pfd.close(); jniclose(fdint); return; } catch (NoSuchMethodException e) { - e.printStackTrace(); + exp =e; } catch (IllegalArgumentException e) { - e.printStackTrace(); + exp =e; } catch (IllegalAccessException e) { - e.printStackTrace(); + exp =e; } catch (InvocationTargetException e) { - e.printStackTrace(); + exp =e; + } + if(exp!=null) { + exp.printStackTrace(); + Log.d("Openvpn", "Failed to retrieve fd from socket: " + fd); + OpenVPN.logMessage(0, "", "Failed to retrieve fd from socket: " + exp.getLocalizedMessage()); } - Log.d("Openvpn", "Failed to retrieve fd from socket: " + fd); } private String processInput(String pendingInput) { @@ -200,7 +206,7 @@ public class OpenVpnManagementThread implements Runnable { mOpenVPNService.setLocalIP(ifconfigparts[0], ifconfigparts[1],mtu); } else if (needed.equals("IFCONFIG6")) { mOpenVPNService.setLocalIPv6(extra); - + } else if (needed.equals("OPENTUN")) { if(sendTunFD(needed,extra)) return; @@ -218,11 +224,12 @@ public class OpenVpnManagementThread implements Runnable { } private boolean sendTunFD (String needed, String extra) { + Exception exp = null; if(!extra.equals("tun")) { // We only support tun String errmsg = String.format("Devicetype %s requested, but only tun is possible with the Android API, sorry!",extra); OpenVPN.logMessage(0, "", errmsg ); - + return false; } ParcelFileDescriptor pfd = mOpenVPNService.openTun(); @@ -236,33 +243,37 @@ public class OpenVpnManagementThread implements Runnable { FileDescriptor fdtosend = new FileDescriptor(); setInt.invoke(fdtosend,fdint); - + FileDescriptor[] fds = {fdtosend}; mSocket.setFileDescriptorsForSend(fds); - + Log.d("Openvpn", "Sending FD tosocket: " + fdtosend + " " + fdint + " " + pfd); // Trigger a send so we can close the fd on our side of the channel // The API documentation fails to mention that it will not reset the file descriptor to // be send and will happily send the file descriptor on every write ... String cmd = String.format("needok '%s' %s\n", needed, "ok"); managmentCommand(cmd); - + // Set the FileDescriptor to null to stop this mad behavior mSocket.setFileDescriptorsForSend(null); - + pfd.close(); return true; } catch (NoSuchMethodException e) { - e.printStackTrace(); + exp =e; } catch (IllegalArgumentException e) { - e.printStackTrace(); + exp =e; } catch (IllegalAccessException e) { - e.printStackTrace(); + exp =e; } catch (InvocationTargetException e) { - e.printStackTrace(); + exp =e; } catch (IOException e) { - e.printStackTrace(); + exp =e; + } + if(exp!=null) { + OpenVPN.logMessage(0,"", "Could not send fd over socket:" + exp.getLocalizedMessage()); + exp.printStackTrace(); } return false; } @@ -274,9 +285,15 @@ public class OpenVpnManagementThread implements Runnable { private void processPWCommand(String argument) { //argument has the form Need 'Private Key' password - int p1 =argument.indexOf('\''); - int p2 = argument.indexOf('\'',p1+1); - //String needed = argument.replace("Need '", "").replace("' password", ""); + int p1,p2; + try{ + p1 =argument.indexOf('\''); + p2 = argument.indexOf('\'',p1+1); + //String needed = argument.replace("Need '", "").replace("' password", ""); + } catch (StringIndexOutOfBoundsException sioob) { + OpenVPN.logMessage(0, "", "Could not parse management Password command: " + argument); + return; + } String needed = argument.substring(p1+1, p2); String pw=null; @@ -313,7 +330,7 @@ public class OpenVpnManagementThread implements Runnable { try { mt.mSocket.close(); } catch (IOException e) { - e.printStackTrace(); + // Ignore close error on maybe already closed socket } } return sendCMD; diff --git a/src/de/blinkt/openvpn/ProfileManager.java b/src/de/blinkt/openvpn/ProfileManager.java index f8193003..d34bdbec 100644 --- a/src/de/blinkt/openvpn/ProfileManager.java +++ b/src/de/blinkt/openvpn/ProfileManager.java @@ -87,9 +87,12 @@ public class ProfileManager { } catch (FileNotFoundException e) { e.printStackTrace(); + throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); + throw new RuntimeException(e); + } } @@ -98,6 +101,7 @@ public class ProfileManager { profiles = new HashMap(); SharedPreferences settings =context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); Set vlist = settings.getStringSet("vpnlist", null); + Exception exp =null; if(vlist==null){ vlist = new HashSet(); } @@ -110,13 +114,16 @@ public class ProfileManager { profiles.put(vp.getUUID().toString(), vp); } catch (StreamCorruptedException e) { - e.printStackTrace(); + exp=e; } catch (FileNotFoundException e) { - e.printStackTrace(); + exp=e; } catch (IOException e) { - e.printStackTrace(); + exp=e; } catch (ClassNotFoundException e) { - e.printStackTrace(); + exp=e; + } + if(exp!=null) { + exp.printStackTrace(); } } } -- cgit v1.2.3