diff options
author | Arne Schwabe <arne@rfc2549.org> | 2015-10-01 17:14:27 +0200 |
---|---|---|
committer | Arne Schwabe <arne@rfc2549.org> | 2015-10-01 17:14:27 +0200 |
commit | a74cce3c5a31c39e785fea672b8369d8738a8357 (patch) | |
tree | 5f9ec800f1c18078dac87a7b661a4b860d434715 /main | |
parent | 1f131f79fafbb9bc9e3b93a7f5c5964bbe156960 (diff) |
Implement connect-timeout logic in OpenVPN and in the UI.
Diffstat (limited to 'main')
m--------- | main/openvpn | 0 | ||||
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/VpnProfile.java | 2 | ||||
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java | 11 | ||||
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/core/Connection.java | 5 | ||||
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/fragments/ConnectionsAdapter.java | 44 | ||||
-rw-r--r-- | main/src/main/res/layout/server_card.xml | 197 | ||||
-rw-r--r-- | main/src/main/res/layout/server_layout | 172 | ||||
-rwxr-xr-x | main/src/main/res/values/strings.xml | 1 |
8 files changed, 172 insertions, 260 deletions
diff --git a/main/openvpn b/main/openvpn -Subproject 701e103d16c09c73ed5ccc28687d9faf7212daf +Subproject bdd72d23fc3bd1def7d58e79d79b7731ee205ad diff --git a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java index 5afb1fe5..01ee3d82 100644 --- a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java +++ b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java @@ -159,8 +159,6 @@ public class VpnProfile implements Serializable, Cloneable { public String mServerPort = "1194"; public boolean mUseUdp = true; - - public VpnProfile(String name) { mUuid = UUID.randomUUID(); mName = name; diff --git a/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java b/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java index 028c8816..6ba80e66 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java +++ b/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java @@ -37,6 +37,8 @@ public class ConfigParser { public void parseConfig(Reader reader) throws IOException, ConfigParseError { + HashMap<String, String> optionAliases = new HashMap<>(); + optionAliases.put("server-poll-timeout", "timeout-connect"); BufferedReader br = new BufferedReader(reader); @@ -76,6 +78,9 @@ public class ConfigParser { checkinlinefile(args, br); String optionname = args.get(0); + if (optionAliases.get(optionname)!=null) + optionname = optionAliases.get(optionname); + if (!options.containsKey(optionname)) { options.put(optionname, new Vector<Vector<String>>()); } @@ -715,8 +720,12 @@ public class ConfigParser { conn.mUseUdp = isUdpProto(proto.get(1)); } + Vector<String> connectTimeout = getOption("connect-timeout", 1, 1); + if (connectTimeout != null) + conn.mConnectTimeout = Integer.parseInt(connectTimeout.get(0)); + - // Parse remote config + // Parse remote config Vector<Vector<String>> remotes = getAllOption("remote", 1, 3); diff --git a/main/src/main/java/de/blinkt/openvpn/core/Connection.java b/main/src/main/java/de/blinkt/openvpn/core/Connection.java index b10664ce..46ee4c36 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/Connection.java +++ b/main/src/main/java/de/blinkt/openvpn/core/Connection.java @@ -16,6 +16,7 @@ public class Connection implements Serializable, Cloneable { public String mCustomConfiguration=""; public boolean mUseCustomConfig=false; public boolean mEnabled=true; + public int mConnectTimeout = 0; private static final long serialVersionUID = 92031902903829089L; @@ -33,6 +34,10 @@ public class Connection implements Serializable, Cloneable { else cfg += " tcp-client\n"; + if (mConnectTimeout!=0) + cfg += String.format(" connect-timeout %d\n" , mConnectTimeout); + + if (!TextUtils.isEmpty(mCustomConfiguration) && mUseCustomConfig) { cfg += mCustomConfiguration; cfg += "\n"; diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/ConnectionsAdapter.java b/main/src/main/java/de/blinkt/openvpn/fragments/ConnectionsAdapter.java index 14c089f5..c0bda8d1 100644 --- a/main/src/main/java/de/blinkt/openvpn/fragments/ConnectionsAdapter.java +++ b/main/src/main/java/de/blinkt/openvpn/fragments/ConnectionsAdapter.java @@ -19,6 +19,7 @@ import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageButton; import android.widget.RadioGroup; +import android.widget.SeekBar; import android.widget.Switch; import java.util.Arrays; @@ -55,6 +56,8 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter. private final CheckBox mCustomOptionCB; private final View mCustomOptionsLayout; private final ImageButton mDeleteButton; + private final EditText mConnectText; + private final SeekBar mConnectSlider; public ConnectionsHolder(View card) { super(card); @@ -66,6 +69,8 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter. mProtoGroup = (RadioGroup) card.findViewById(R.id.udptcpradiogroup); mCustomOptionsLayout = card.findViewById(R.id.custom_options_layout); mDeleteButton = (ImageButton) card.findViewById(R.id.remove_connection); + mConnectSlider = (SeekBar) card.findViewById(R.id.connect_silder); + mConnectText = (EditText) card.findViewById(R.id.connect_timeout); } } @@ -109,6 +114,13 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter. cH.mServerNameView.setText(connection.mServerName); cH.mPortNumberView.setText(connection.mServerPort); cH.mRemoteSwitch.setChecked(connection.mEnabled); + if (connection.mConnectTimeout==0) { + cH.mConnectText.setText(""); + } else { + cH.mConnectText.setText(String.valueOf(connection.mConnectTimeout)); + } + cH.mConnectSlider.setProgress(connection.mConnectTimeout); + cH.mRemoteSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -182,6 +194,38 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter. } }); + cH.mConnectSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (fromUser) { + cH.mConnectText.setText(String.valueOf(progress)); + connection.mConnectTimeout = progress; + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + }); + cH.mConnectText.addTextChangedListener(new OnTextChangedWatcher() { + @Override + public void afterTextChanged(Editable s) { + try { + int t = Integer.valueOf(String.valueOf(s)); + cH.mConnectSlider.setProgress(t); + connection.mConnectTimeout = t; + } catch (Exception ignored) { + + } + } + }); + } private void removeRemote(int idx) { diff --git a/main/src/main/res/layout/server_card.xml b/main/src/main/res/layout/server_card.xml index 690a27bd..bad9a3c6 100644 --- a/main/src/main/res/layout/server_card.xml +++ b/main/src/main/res/layout/server_card.xml @@ -1,85 +1,82 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (c) 2012-2014 Arne Schwabe ~ Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt --> -<FrameLayout xmlns:tools="http://schemas.android.com/tools" - xmlns:android="http://schemas.android.com/apk/res/android" +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="@dimen/stdpadding" - > + android:layout_margin="@dimen/stdpadding"> <!-- A CardView that contains a TextView --> <android.support.v7.widget.CardView android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" - card_view:cardCornerRadius="10dp" - > + card_view:cardCornerRadius="10dp"> <RelativeLayout - android:animateLayoutChanges="true" - android:padding="5dp" + xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" - xmlns:android="http://schemas.android.com/apk/res/android"> + android:animateLayoutChanges="true" + android:padding="5dp"> <TextView - style="@style/item" android:id="@+id/port_label" - android:text="@string/port" + style="@style/item" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentRight="true" android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:text="@string/port" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView + android:id="@+id/server_label" style="@style/item" android:text="@string/address" - android:id="@+id/server_label" android:textAppearance="?android:attr/textAppearanceSmall" /> <EditText android:id="@+id/portnumber" - android:layout_alignParentRight="true" - android:layout_alignParentEnd="true" - android:layout_below="@id/port_label" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + + android:layout_below="@id/port_label" android:inputType="numberDecimal" - android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium" - android:text="1194" /> + android:text="1194" + android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium" /> <EditText android:id="@+id/servername" - android:singleLine="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" - android:inputType="textUri" android:layout_below="@id/server_label" android:layout_toLeftOf="@id/portnumber" android:layout_toStartOf="@id/portnumber" - android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium" - android:text="openvpn.blinkt.de" /> + android:inputType="textUri" + android:singleLine="true" + android:text="openvpn.blinkt.de" + android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium" /> <TextView - android:paddingTop="10dp" + android:id="@+id/protocol" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/servername" - android:id="@+id/protocol" + android:paddingTop="10dp" android:text="Protocol" /> <RadioGroup @@ -106,103 +103,133 @@ android:layout_height="wrap_content" android:text="TCP" /> </RadioGroup> - <!-- <TextView - android:paddingTop="10dp" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/udptcpradiogroup" - android:id="@+id/proxytext" - android:text="Proxy" /> - <RadioGroup - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:id="@+id/proxygroup" - android:paddingLeft="20dp" - android:layout_below="@id/proxytext"> - <RadioButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="None" /> + <!-- <TextView + android:paddingTop="10dp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/udptcpradiogroup" + android:id="@+id/proxytext" + android:text="Proxy" /> + + <RadioGroup + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:id="@+id/proxygroup" + android:paddingLeft="20dp" + android:layout_below="@id/proxytext"> + + <RadioButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="None" /> + + <Space + android:layout_width="10dp" + android:layout_height="wrap_content" /> + + <RadioButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="HTTP" /> + + <Space + android:layout_width="10dp" + android:layout_height="wrap_content" /> + + <RadioButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Socks" /> + </RadioGroup> --> - <Space - android:layout_width="10dp" - android:layout_height="wrap_content" /> + <TextView + android:id="@+id/connect_timeout_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/udptcpradiogroup" + android:paddingTop="10dp" + android:text="@string/connect_timeout" /> - <RadioButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="HTTP" /> + <EditText + android:id="@+id/connect_timeout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" + android:layout_below="@+id/connect_timeout_label" + android:ems="3" + android:inputType="numberDecimal" /> - <Space - android:layout_width="10dp" - android:layout_height="wrap_content" /> + <SeekBar + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/connect_silder" + android:max="300" + android:layout_alignBottom="@id/connect_timeout" + android:layout_toLeftOf="@id/connect_timeout" + android:layout_toStartOf="@id/connect_timeout" + android:layout_below="@id/connect_timeout_label" /> - <RadioButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Socks" /> - </RadioGroup> --> <CheckBox - android:paddingTop="10dp" + android:id="@+id/use_customoptions" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@id/udptcpradiogroup" - android:id="@+id/use_customoptions" + android:layout_below="@id/connect_timeout" + android:paddingTop="10dp" android:text="@string/custom_connection_options" /> <LinearLayout - android:paddingLeft="10dp" - android:paddingStart="10dp" android:id="@+id/custom_options_layout" - android:layout_below="@id/use_customoptions" android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/use_customoptions" android:orientation="vertical" - android:layout_height="wrap_content"> + android:paddingLeft="10dp" + android:paddingStart="10dp"> + <TextView android:id="@+id/warnung_custom" - android:text="@string/custom_connection_options_warng" android:layout_width="wrap_content" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:text="@string/custom_connection_options_warng" /> <EditText - android:inputType="textMultiLine" android:id="@+id/customoptions" - android:lines="5" android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:inputType="textMultiLine" + android:lines="5" /> </LinearLayout> <Switch + android:id="@+id/remoteSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Enable" - android:id="@+id/remoteSwitch" - android:layout_gravity="right|bottom" - android:layout_below="@+id/portnumber" + android:layout_alignEnd="@+id/portnumber" android:layout_alignRight="@+id/portnumber" - android:layout_alignEnd="@+id/portnumber" /> + android:layout_below="@+id/portnumber" + android:layout_gravity="right|bottom" + android:text="Enable" /> + <ImageButton - android:layout_margin="12dp" + android:id="@+id/remove_connection" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:padding="12dp" - android:layout_alignRight="@+id/portnumber" android:layout_alignEnd="@+id/portnumber" + android:layout_alignRight="@+id/portnumber" android:layout_below="@id/remoteSwitch" + android:layout_margin="12dp" android:background="@drawable/ic_menu_delete_grey" - android:id="@+id/remove_connection" - android:contentDescription="@string/remove_connection_entry" /> + android:contentDescription="@string/remove_connection_entry" + android:padding="12dp" /> </RelativeLayout> </android.support.v7.widget.CardView> - - - </FrameLayout>
\ No newline at end of file diff --git a/main/src/main/res/layout/server_layout b/main/src/main/res/layout/server_layout deleted file mode 100644 index c6d11fe6..00000000 --- a/main/src/main/res/layout/server_layout +++ /dev/null @@ -1,172 +0,0 @@ -<!-- - ~ Copyright (c) 2012-2014 Arne Schwabe - ~ Distributed under the GNU GPL v2. For full terms see the file doc/LICENSE.txt - --> - -<RelativeLayout - android:padding="5dp" - android:layout_width="match_parent" - android:layout_height="wrap_content" - xmlns:android="http://schemas.android.com/apk/res/android"> - - - <TextView - style="@style/item" - android:id="@+id/port_label" - android:text="@string/port" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_alignParentEnd="true" - android:textAppearance="?android:attr/textAppearanceSmall" /> - - - <TextView - style="@style/item" - android:text="@string/address" - android:id="@+id/server_label" - android:textAppearance="?android:attr/textAppearanceSmall" /> - - - <EditText - android:id="@+id/portnumber" - android:layout_alignParentRight="true" - android:layout_alignParentEnd="true" - android:layout_below="@id/port_label" - android:layout_width="wrap_content" - - android:layout_height="wrap_content" - android:inputType="numberDecimal" - android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium" - android:text="1194" /> - - - <EditText - android:id="@+id/servername" - android:singleLine="true" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_alignParentStart="true" - android:inputType="textUri" - android:layout_below="@id/server_label" - android:layout_toLeftOf="@id/portnumber" - android:layout_toStartOf="@id/portnumber" - android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium" - android:text="openvpn.blinkt.de" /> - - <TextView - android:paddingTop="10dp" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/servername" - android:id="@+id/protocol" - android:text="Protocol" /> - - <RadioGroup - android:id="@+id/udptcpradiogroup" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/protocol" - android:orientation="horizontal" - android:paddingLeft="20dp"> - - <RadioButton - android:id="@+id/udp_proto" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="UDP" /> - - <Space - android:layout_width="20dp" - android:layout_height="wrap_content" /> - - <RadioButton - android:id="@+id/tcp_proto" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="TCP" /> - </RadioGroup> - -<!-- <TextView - android:paddingTop="10dp" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/udptcpradiogroup" - android:id="@+id/proxytext" - android:text="Proxy" /> - - <RadioGroup - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:id="@+id/proxygroup" - android:paddingLeft="20dp" - android:layout_below="@id/proxytext"> - - <RadioButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="None" /> - - <Space - android:layout_width="10dp" - android:layout_height="wrap_content" /> - - <RadioButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="HTTP" /> - - <Space - android:layout_width="10dp" - android:layout_height="wrap_content" /> - - <RadioButton - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Socks" /> - </RadioGroup> --> - - - <CheckBox - android:paddingTop="10dp" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/udptcpradiogroup" - android:id="@+id/use_customoptions" - android:text="Custom Options" /> - - <LinearLayout - android:paddingLeft="10dp" - android:paddingStart="10dp" - android:layout_below="@id/use_customoptions" - android:layout_width="wrap_content" - android:orientation="vertical" - android:layout_height="wrap_content"> - <TextView - android:id="@+id/warnung_custom" - android:text="Specify custom connection specific options. Use with care" - android:layout_width="wrap_content" - android:layout_height="wrap_content" /> - - <EditText - android:inputType="textMultiLine" - android:id="@+id/customoptions" - android:lines="5" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - </LinearLayout> - - <Switch - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Enable" - android:id="@+id/remoteSwitch" - android:layout_gravity="right|bottom" - android:layout_below="@+id/portnumber" - android:layout_alignRight="@+id/portnumber" - android:layout_alignEnd="@+id/portnumber" /> - - -</RelativeLayout>
\ No newline at end of file diff --git a/main/src/main/res/values/strings.xml b/main/src/main/res/values/strings.xml index ee4f76ef..a4424277 100755 --- a/main/src/main/res/values/strings.xml +++ b/main/src/main/res/values/strings.xml @@ -385,5 +385,6 @@ <string name="Search">Search</string> <string name="lastdumpdate">(Last dump is %1$d:%2$dh old (%3$s))</string> <string name="clear_log_on_connect">Clear log on new connection</string> + <string name="connect_timeout">Connect Timeout</string> </resources> |