diff --git a/OpenVPN Adapter/OpenVPNConfiguration.h b/OpenVPN Adapter/OpenVPNConfiguration.h index 1779657..76f1c71 100644 --- a/OpenVPN Adapter/OpenVPNConfiguration.h +++ b/OpenVPN Adapter/OpenVPNConfiguration.h @@ -10,16 +10,23 @@ // TODO: Wrap ClientAPI::Config into Objective-C class +typedef NS_ENUM(NSInteger, OpenVPNTransportProtocol) { + OpenVPNTransportProtocolUDP, + OpenVPNTransportProtocolTCP, + OpenVPNTransportProtocolAdaptive, + OpenVPNTransportProtocolDefault +}; + /** IPv6 preference options */ -typedef NS_ENUM(NSInteger, IPv6Preference) { +typedef NS_ENUM(NSInteger, OpenVPNIPv6Preference) { /// Request combined IPv4/IPv6 tunnel - IPv6PreferenceEnabled, + OpenVPNIPv6PreferenceEnabled, /// Disable IPv6, so tunnel will be IPv4-only - IPv6PreferenceDisabled, + OpenVPNIPv6PreferenceDisabled, /// Leave decision to server - IPv6PreferenceDefault + OpenVPNIPv6PreferenceDefault }; @interface OpenVPNConfiguration : NSObject @@ -46,18 +53,17 @@ typedef NS_ENUM(NSInteger, IPv6Preference) { Use a different server than that specified in "remote" option of profile */ -@property (nullable, nonatomic) NSString *serverOverride; +@property (nullable, nonatomic) NSString *server; /** Force a given transport protocol - Should be tcp, udp, or adaptive. */ -@property (nullable, nonatomic) NSString *protoOverride; +@property (nonatomic) OpenVPNTransportProtocol proto; /** IPv6 preference */ -@property (nonatomic) IPv6Preference ipv6; +@property (nonatomic) OpenVPNIPv6Preference ipv6; /** Connection timeout in seconds, or 0 to retry indefinitely @@ -75,4 +81,9 @@ typedef NS_ENUM(NSInteger, IPv6Preference) { */ @property (nonatomic) BOOL googleDNSFallback; +/** + Enable autologin sessions + */ +@property (nonatomic) BOOL autologinSessions; + @end diff --git a/OpenVPN Adapter/OpenVPNConfiguration.mm b/OpenVPN Adapter/OpenVPNConfiguration.mm index 0f9a04e..a8df275 100644 --- a/OpenVPN Adapter/OpenVPNConfiguration.mm +++ b/OpenVPN Adapter/OpenVPNConfiguration.mm @@ -73,28 +73,56 @@ using namespace openvpn; _config.guiVersion = guiVersion ? std::string([guiVersion UTF8String]) : ""; } -- (NSString *)serverOverride { +- (NSString *)server { return _config.serverOverride.size() != 0 ? [NSString stringWithUTF8String:_config.serverOverride.c_str()] : nil; } -- (void)setServerOverride:(NSString *)serverOverride { +- (void)setServer:(NSString *)serverOverride { _config.serverOverride = serverOverride ? std::string([serverOverride UTF8String]) : ""; } -- (NSString *)protoOverride { - return _config.protoOverride.size() != 0 ? [NSString stringWithUTF8String:_config.protoOverride.c_str()] : nil; -} - -- (void)setProtoOverride:(NSString *)protoOverride { - _config.protoOverride = protoOverride ? std::string([protoOverride UTF8String]) : ""; -} - -- (IPv6Preference)ipv6 { +- (OpenVPNTransportProtocol)proto { NSDictionary *options = @{ - @"yes": @(IPv6PreferenceEnabled), - @"no": @(IPv6PreferenceDisabled), - @"default": @(IPv6PreferenceDefault), - @"": @(IPv6PreferenceDefault) + @"udp": @(OpenVPNTransportProtocolUDP), + @"tcp": @(OpenVPNTransportProtocolTCP), + @"adaptive": @(OpenVPNTransportProtocolAdaptive), + @"": @(OpenVPNTransportProtocolDefault) + }; + + NSString *currentValue = [NSString stringWithUTF8String:_config.protoOverride.c_str()]; + + NSNumber *transportProtocol = options[currentValue]; + NSAssert(transportProtocol != nil, @"Incorrect ipv6 value"); + + return (OpenVPNTransportProtocol)[transportProtocol integerValue]; +} + +- (void)setProto:(OpenVPNTransportProtocol)proto { + switch (proto) { + case OpenVPNTransportProtocolUDP: + _config.protoOverride = "udp"; + break; + + case OpenVPNTransportProtocolTCP: + _config.protoOverride = "tcp"; + break; + + case OpenVPNTransportProtocolAdaptive: + _config.protoOverride = "adaptive"; + break; + + default: + _config.protoOverride = ""; + break; + } +} + +- (OpenVPNIPv6Preference)ipv6 { + NSDictionary *options = @{ + @"yes": @(OpenVPNIPv6PreferenceEnabled), + @"no": @(OpenVPNIPv6PreferenceDisabled), + @"default": @(OpenVPNIPv6PreferenceDefault), + @"": @(OpenVPNIPv6PreferenceDefault) }; NSString *currentValue = [NSString stringWithUTF8String:_config.ipv6.c_str()]; @@ -102,20 +130,20 @@ using namespace openvpn; NSNumber *preference = options[currentValue]; NSAssert(preference != nil, @"Incorrect ipv6 value"); - return (IPv6Preference)[preference integerValue]; + return (OpenVPNIPv6Preference)[preference integerValue]; } -- (void)setIpv6:(IPv6Preference)ipv6 { +- (void)setIpv6:(OpenVPNIPv6Preference)ipv6 { switch (ipv6) { - case IPv6PreferenceEnabled: + case OpenVPNIPv6PreferenceEnabled: _config.ipv6 = "yes"; break; - case IPv6PreferenceDisabled: + case OpenVPNIPv6PreferenceDisabled: _config.ipv6 = "no"; break; - case IPv6PreferenceDefault: + case OpenVPNIPv6PreferenceDefault: _config.ipv6 = "default"; break; @@ -149,4 +177,12 @@ using namespace openvpn; _config.googleDnsFallback = googleDNSFallback; } +- (BOOL)autologinSessions { + return _config.autologinSessions; +} + +- (void)setAutologinSessions:(BOOL)autologinSessions { + _config.autologinSessions = autologinSessions; +} + @end