diff options
| author | Arne Schwabe <arne@rfc2549.org> | 2013-02-23 12:23:36 +0100 | 
|---|---|---|
| committer | Arne Schwabe <arne@rfc2549.org> | 2013-02-23 12:23:36 +0100 | 
| commit | 3e9846e7f4172926b1de2e16c20d8956f4f5cf98 (patch) | |
| tree | b6bd623b1b88af2a740f14387880c2dba284294e | |
| parent | 409df8373d9a06553d1d297428b272260db8aed4 (diff) | |
Allow more remotes for special internal API use cases.
--HG--
extra : rebase_source : dbe2f5929d246ece4f7de71022e96c2455aff3c3
| -rw-r--r-- | src/de/blinkt/openvpn/ConfigParser.java | 44 | 
1 files changed, 34 insertions, 10 deletions
| diff --git a/src/de/blinkt/openvpn/ConfigParser.java b/src/de/blinkt/openvpn/ConfigParser.java index 99e7ec93..e5713c3f 100644 --- a/src/de/blinkt/openvpn/ConfigParser.java +++ b/src/de/blinkt/openvpn/ConfigParser.java @@ -7,6 +7,8 @@ import java.util.HashMap;  import java.util.Locale;  import java.util.Vector; +import android.text.TextUtils; +  //! Openvpn Config FIle Parser, probably not 100% accurate but close enough  // And rember, this is valid :) @@ -17,8 +19,11 @@ public class ConfigParser {  	private HashMap<String, Vector<Vector<String>>> options = new HashMap<String, Vector<Vector<String>>>(); +	 +	private boolean extraRemotesAsCustom=false; +	  	public void parseConfig(Reader reader) throws IOException, ConfigParseError { - +	  		BufferedReader br =new BufferedReader(reader); @@ -340,8 +345,10 @@ public class ConfigParser {  		}  		// Parse remote config -		Vector<String> remote = getOption("remote",1,3); -		if(remote != null){ +		Vector<Vector<String>> remotes = getAllOption("remote",1,3); + +		if(remotes!=null && remotes.size()>1 && extraRemotesAsCustom) { +			Vector<String> remote = remotes.get(0);  			switch (remote.size()) {  			case 4:  				np.mUseUdp=isUdpProto(remote.get(3)); @@ -351,6 +358,8 @@ public class ConfigParser {  				np.mServerName = remote.get(1);  			}  		} +		 +  		Vector<Vector<String>> dhcpoptions = getAllOption("dhcp-option", 2, 2);  		if(dhcpoptions!=null) { @@ -468,12 +477,22 @@ public class ConfigParser {  		// Check the other options +		if(remotes !=null && remotes.size()>1 && extraRemotesAsCustom) { +			// first is already added +			remotes.remove(0); +			np.mCustomConfigOptions += getOptionStrings(remotes); +			np.mUseCustomConfig=true; +		}  		checkIgnoreAndInvalidOptions(np);  		fixup(np);  		return np;  	} +	 +	public void useExtraRemotesAsCustom(boolean b) { +		this.extraRemotesAsCustom = b; +	}  	private boolean isUdpProto(String proto) throws ConfigParseError {  		boolean isudp; @@ -509,22 +528,27 @@ public class ConfigParser {  			options.remove(option);  		if(options.size()> 0) { -			String custom = "# These Options were found in the config file do not map to config settings:\n"; +			np.mCustomConfigOptions += "# These Options were found in the config file do not map to config settings:\n";  			for(Vector<Vector<String>> option:options.values()) { -				for(Vector<String> optionsline: option) { -					for (String arg : optionsline) -						custom+= VpnProfile.openVpnEscape(arg) + " "; -				} -				custom+="\n"; +				np.mCustomConfigOptions += getOptionStrings(option);  			} -			np.mCustomConfigOptions = custom;  			np.mUseCustomConfig=true;  		}  	} +	private String getOptionStrings( Vector<Vector<String>> option) { +		String custom=""; +		for(Vector<String> optionsline: option) { +			for (String arg : optionsline) +				custom+= VpnProfile.openVpnEscape(arg) + " "; +			custom+="\n"; +		} +		return custom; +	} +  	private void fixup(VpnProfile np) {  		if(np.mRemoteCN.equals(np.mServerName)) { | 
