From 7bfd830078268c010fdc65ccb2ef4980bf6c8e4d Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Fri, 4 May 2012 00:28:52 +0200 Subject: Get vpn list working again, not yet perfect but at least delete works http://code.google.com/p/android/issues/detail?id=3414 is hunting me :( --- openvpn/config.h | 4 +- openvpn/src/openvpn/jniglue.c | 9 ++++ openvpn/src/openvpn/tun.c | 3 +- res/layout/vpn_list_item.xml | 70 +++++++++++++++++++++++++++++ res/menu/vpn_context.xml | 10 ++++- src/de/blinkt/openvpn/LaunchVPN.java | 6 +-- src/de/blinkt/openvpn/ProfileManager.java | 31 +++++++++---- src/de/blinkt/openvpn/Settings_Obscure.java | 4 ++ src/de/blinkt/openvpn/VPNProfileList.java | 27 +++++++---- 9 files changed, 138 insertions(+), 26 deletions(-) create mode 100644 res/layout/vpn_list_item.xml diff --git a/openvpn/config.h b/openvpn/config.h index 3dfeffc2..65193a6b 100644 --- a/openvpn/config.h +++ b/openvpn/config.h @@ -24,7 +24,7 @@ #define EMPTY_ARRAY_SIZE 0 /* Enable client capability only */ -/* #undef ENABLE_CLIENT_ONLY */ +#define ENABLE_CLIENT_ONLY 1 /* Enable client/server capability */ #define ENABLE_CLIENT_SERVER 1 @@ -42,7 +42,7 @@ #define ENABLE_MANAGEMENT 1 /* Enable multi-homed UDP server capability */ -#define ENABLE_MULTIHOME 1 +#define ENABLE_MULTIHOME 0 /* Allow --askpass and --auth-user-pass passwords to be read from a file */ #define ENABLE_PASSWORD_SAVE 1 diff --git a/openvpn/src/openvpn/jniglue.c b/openvpn/src/openvpn/jniglue.c index c0fff12b..b7167051 100644 --- a/openvpn/src/openvpn/jniglue.c +++ b/openvpn/src/openvpn/jniglue.c @@ -136,6 +136,15 @@ int android_open_tun () { } + +unsigned char android_protect_socket(int sockfd) { + jmethodID aMethodID = (*openvpnjenv)->GetStaticMethodID(openvpnjenv, openvpnclass, "protectSocket", + "(I)Z"); + return (*openvpnjenv)->CallStaticBooleanMethod(openvpnjenv,openvpnclass,aMethodID,sockfd); + +} + + void android_set_dns(const char* dns) { jmethodID aMethodID = (*openvpnjenv)->GetStaticMethodID(openvpnjenv, openvpnclass, "addDns", "(Ljava/lang/String;)V"); diff --git a/openvpn/src/openvpn/tun.c b/openvpn/src/openvpn/tun.c index 14ec2b85..238d9fba 100644 --- a/openvpn/src/openvpn/tun.c +++ b/openvpn/src/openvpn/tun.c @@ -1386,7 +1386,8 @@ open_tun (const char *dev, const char *dev_type, const char *dev_node, struct tu if(tt->options.domain) android_set_domain(tt->options.domain); - if((tt->fd = android_open_tun()< 0){ + + if((tt->fd = android_open_tun())< 0){ msg (M_ERR, "ERROR: Cannot open TUN"); } } diff --git a/res/layout/vpn_list_item.xml b/res/layout/vpn_list_item.xml new file mode 100644 index 00000000..dc6254e5 --- /dev/null +++ b/res/layout/vpn_list_item.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/menu/vpn_context.xml b/res/menu/vpn_context.xml index ab681379..477c6a8a 100644 --- a/res/menu/vpn_context.xml +++ b/res/menu/vpn_context.xml @@ -3,18 +3,24 @@ - + \ No newline at end of file diff --git a/src/de/blinkt/openvpn/LaunchVPN.java b/src/de/blinkt/openvpn/LaunchVPN.java index 7a034e4c..e0832f21 100644 --- a/src/de/blinkt/openvpn/LaunchVPN.java +++ b/src/de/blinkt/openvpn/LaunchVPN.java @@ -80,10 +80,8 @@ public class LaunchVPN extends ListActivity implements OnItemClickListener { final Intent intent = getIntent(); final String action = intent.getAction(); - mPM =ProfileManager.getInstance(); - if(mPM.getNumberOfProfiles() == 0) { - mPM.loadVPNList(this); - } + mPM =ProfileManager.getInstance(this); + // If the intent is a request to create a shortcut, we'll do that and exit diff --git a/src/de/blinkt/openvpn/ProfileManager.java b/src/de/blinkt/openvpn/ProfileManager.java index 9e5b1602..f8193003 100644 --- a/src/de/blinkt/openvpn/ProfileManager.java +++ b/src/de/blinkt/openvpn/ProfileManager.java @@ -24,20 +24,25 @@ public class ProfileManager { private HashMap profiles=new HashMap(); public static VpnProfile get(String key) { - checkInstance(); + if(instance==null) + return null; return instance.profiles.get(key); } + + private ProfileManager() { } - private static void checkInstance() { - if(instance == null) + private static void checkInstance(Context context) { + if(instance == null) { instance = new ProfileManager(); + instance.loadVPNList(context); + } } - public static ProfileManager getInstance() { - checkInstance(); + public static ProfileManager getInstance(Context context) { + checkInstance(context); return instance; } @@ -56,8 +61,8 @@ public class ProfileManager { return null; } - public void saveProfileList(Activity activity) { - SharedPreferences sharedprefs = activity.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); + public void saveProfileList(Context context) { + SharedPreferences sharedprefs = context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); Editor editor = sharedprefs.edit(); editor.putStringSet("vpnlist", profiles.keySet()); editor.commit(); @@ -89,7 +94,7 @@ public class ProfileManager { } - void loadVPNList(Context context) { + private void loadVPNList(Context context) { profiles = new HashMap(); SharedPreferences settings =context.getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); Set vlist = settings.getStringSet("vpnlist", null); @@ -120,4 +125,14 @@ public class ProfileManager { return profiles.size(); } + + + public void removeProfile(Context context,VpnProfile profile) { + String vpnentry = profile.getUUID().toString(); + profiles.remove(vpnentry); + saveProfileList(context); + context.deleteFile(vpnentry + ".vp"); + + } + } diff --git a/src/de/blinkt/openvpn/Settings_Obscure.java b/src/de/blinkt/openvpn/Settings_Obscure.java index 65d1c400..91c6170b 100644 --- a/src/de/blinkt/openvpn/Settings_Obscure.java +++ b/src/de/blinkt/openvpn/Settings_Obscure.java @@ -67,6 +67,10 @@ public class Settings_Obscure extends PreferenceFragment implements OnPreference @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if(preference==mLogverbosity) { + // Catch old version problem + if(newValue==null){ + newValue=1; + } mLogverbosity.setDefaultValue(newValue); //This is idiotic. int i =Integer.parseInt((String) newValue); diff --git a/src/de/blinkt/openvpn/VPNProfileList.java b/src/de/blinkt/openvpn/VPNProfileList.java index c9ff9805..56cc7ae1 100644 --- a/src/de/blinkt/openvpn/VPNProfileList.java +++ b/src/de/blinkt/openvpn/VPNProfileList.java @@ -21,11 +21,22 @@ import android.widget.ListView; import android.widget.Toast; public class VPNProfileList extends ListFragment { + class VPNArrayAdapter extends ArrayAdapter { + + public VPNArrayAdapter(Context context, int resource, + int textViewResourceId) { + super(context, resource, textViewResourceId); + + } + + } + + + private static final int MENU_ADD_PROFILE = Menu.FIRST; private static final int START_VPN_CONFIG = 92; - private ArrayAdapter mArrayadapter; protected Object mActionMode; @@ -78,12 +89,10 @@ public class VPNProfileList extends ListFragment { }); - if(getPM().getNumberOfProfiles() == 0) { - getPM().loadVPNList(getActivity()); - } - +// mArrayadapter = new ArrayAdapter(getActivity(),R.layout.vpn_list_item,R.id.vpn_item_title); mArrayadapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_activated_1); mArrayadapter.addAll(getPM().getProfiles()); + setListAdapter(mArrayadapter); } @@ -127,7 +136,7 @@ public class VPNProfileList extends ListFragment { protected void removeProfile(VpnProfile profile) { mArrayadapter.remove(profile); - + getPM().removeProfile(getActivity(),profile); } private void onAddProfileClicked() { @@ -181,7 +190,7 @@ public class VPNProfileList extends ListFragment { private ProfileManager getPM() { - return ProfileManager.getInstance(); + return ProfileManager.getInstance(getActivity()); } @@ -240,10 +249,10 @@ public class VPNProfileList extends ListFragment { askProfileRemoval(); mode.finish(); // Action picked, so close the CAB return true; - case R.id.connect_vpn: +/* case R.id.connect_vpn: startVPN(mEditProfile); mode.finish(); - return true; + return true; */ case R.id.edit_vpn: editVPN(mEditProfile); mode.finish(); -- cgit v1.2.3