diff --git a/OpenVPN Adapter/OpenVPNConfiguration.h b/OpenVPN Adapter/OpenVPNConfiguration.h index 76f1c71..5885bf7 100644 --- a/OpenVPN Adapter/OpenVPNConfiguration.h +++ b/OpenVPN Adapter/OpenVPNConfiguration.h @@ -10,10 +10,17 @@ // TODO: Wrap ClientAPI::Config into Objective-C class +/** + Transport protocol options + */ typedef NS_ENUM(NSInteger, OpenVPNTransportProtocol) { + /// OpenVPNTransportProtocolUDP, + /// OpenVPNTransportProtocolTCP, + /// OpenVPNTransportProtocolAdaptive, + /// Use a transport protocol specified in the profile OpenVPNTransportProtocolDefault }; @@ -29,6 +36,20 @@ typedef NS_ENUM(NSInteger, OpenVPNIPv6Preference) { OpenVPNIPv6PreferenceDefault }; +/** + Compression mode options + */ +typedef NS_ENUM(NSInteger, OpenVPNCompressionMode) { + /// Allow compression on both uplink and downlink + OpenVPNCompressionModeEnabled, + /// Support compression stubs only + OpenVPNCompressionModeDisabled, + /// Allow compression on downlink only (i.e. server -> client) + OpenVPNCompressionModeAsym, + /// Default behavior (support compression stubs only) + OpenVPNCompressionModeDefault +}; + @interface OpenVPNConfiguration : NSObject /** @@ -86,4 +107,19 @@ typedef NS_ENUM(NSInteger, OpenVPNIPv6Preference) { */ @property (nonatomic) BOOL autologinSessions; +/** + If YES, don't send client cert/key to peer + */ +@property (nonatomic) BOOL disableClientCert; + +/** + SSL library debug level + */ +@property (nonatomic) NSInteger sslDebugLevel; + +/** + Compression mode + */ +@property (nonatomic) OpenVPNCompressionMode compressionMode; + @end diff --git a/OpenVPN Adapter/OpenVPNConfiguration.mm b/OpenVPN Adapter/OpenVPNConfiguration.mm index fa74a3a..223b13d 100644 --- a/OpenVPN Adapter/OpenVPNConfiguration.mm +++ b/OpenVPN Adapter/OpenVPNConfiguration.mm @@ -28,7 +28,7 @@ using namespace openvpn; @implementation OpenVPNConfiguration - (NSData *)fileContent { - return _config.content.size() != 0 ? [NSData dataWithBytes:_config.content.data() length:_config.content.size()] : nil; + return !_config.content.empty() ? [NSData dataWithBytes:_config.content.data() length:_config.content.size()] : nil; } - (void)setFileContent:(NSData *)fileContent { @@ -66,7 +66,7 @@ using namespace openvpn; } - (NSString *)guiVersion { - return _config.guiVersion.size() != 0 ? [NSString stringWithUTF8String:_config.guiVersion.c_str()] : nil; + return !_config.guiVersion.empty() ? [NSString stringWithUTF8String:_config.guiVersion.c_str()] : nil; } - (void)setGuiVersion:(NSString *)guiVersion { @@ -74,7 +74,7 @@ using namespace openvpn; } - (NSString *)server { - return _config.serverOverride.size() != 0 ? [NSString stringWithUTF8String:_config.serverOverride.c_str()] : nil; + return !_config.serverOverride.empty() ? [NSString stringWithUTF8String:_config.serverOverride.c_str()] : nil; } - (void)setServer:(NSString *)serverOverride { @@ -189,4 +189,60 @@ using namespace openvpn; _config.autologinSessions = autologinSessions; } +- (BOOL)disableClientCert { + return _config.disableClientCert; +} + +- (void)setDisableClientCert:(BOOL)disableClientCert { + _config.disableClientCert = disableClientCert; +} + +- (NSInteger)sslDebugLevel { + return _config.sslDebugLevel; +} + +- (void)setSslDebugLevel:(NSInteger)sslDebugLevel { + _config.sslDebugLevel = sslDebugLevel; +} + +- (OpenVPNCompressionMode)compressionMode { + NSDictionary *options = @{ + @"yes": @(OpenVPNCompressionModeEnabled), + @"no": @(OpenVPNCompressionModeDisabled), + @"asym": @(OpenVPNCompressionModeAsym), + @"": @(OpenVPNCompressionModeDefault) + }; + + NSString *currentValue = [NSString stringWithUTF8String:_config.compressionMode.c_str()]; + + NSNumber *preference = options[currentValue]; + NSAssert(preference != nil, @"Incorrect compressionMode value"); + + return (OpenVPNCompressionMode)[preference integerValue]; +} + +- (void)setCompressionMode:(OpenVPNCompressionMode)compressionMode { + switch (compressionMode) { + case OpenVPNCompressionModeEnabled: + _config.compressionMode = "yes"; + break; + + case OpenVPNCompressionModeDisabled: + _config.compressionMode = "no"; + break; + + case OpenVPNCompressionModeAsym: + _config.compressionMode = "asym"; + break; + + case OpenVPNCompressionModeDefault: + _config.compressionMode = ""; + break; + + default: + NSAssert(NO, @"Incorrect OpenVPNCompressionMode value"); + break; + } +} + @end