mirror of
https://github.com/deneraraujo/OpenVPNAdapter.git
synced 2026-02-11 00:00:08 +08:00
Light refactoring: line breaking and classes/vars renaming
This commit is contained in:
@@ -11,10 +11,10 @@
|
||||
ABD6EF0A1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */; };
|
||||
ABD6EF0B1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */; };
|
||||
ABD6EF0C1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */; };
|
||||
ABD6EF101F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h */; };
|
||||
ABD6EF111F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h */; };
|
||||
ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm */; };
|
||||
ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm */; };
|
||||
ABD6EF101F8F93AB007D3D90 /* OpenVPNPacketFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlow.h */; };
|
||||
ABD6EF111F8F93AB007D3D90 /* OpenVPNPacketFlow.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlow.h */; };
|
||||
ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlow.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlow.mm */; };
|
||||
ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlow.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlow.mm */; };
|
||||
ABD6EF171F8F9C38007D3D90 /* OpenVPNAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
ABD6EF181F8F9C38007D3D90 /* OpenVPNAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */; };
|
||||
ABD6EF191F8F9C3B007D3D90 /* OpenVPNAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
@@ -168,8 +168,8 @@
|
||||
/* Begin PBXFileReference section */
|
||||
ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNNetworkSettingsBuilder.h; sourceTree = "<group>"; };
|
||||
ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OpenVPNNetworkSettingsBuilder.m; sourceTree = "<group>"; };
|
||||
ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNPacketFlowAdapter.h; sourceTree = "<group>"; };
|
||||
ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNPacketFlowAdapter.mm; sourceTree = "<group>"; };
|
||||
ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenVPNPacketFlow.h; sourceTree = "<group>"; };
|
||||
ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlow.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNPacketFlow.mm; sourceTree = "<group>"; };
|
||||
ABD6EF151F8F9C37007D3D90 /* OpenVPNAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenVPNAdapter.h; sourceTree = "<group>"; };
|
||||
ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenVPNAdapter.mm; sourceTree = "<group>"; };
|
||||
C90BAD261E73F47E00DEFB32 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = "<group>"; };
|
||||
@@ -436,8 +436,8 @@
|
||||
ABD6EF161F8F9C38007D3D90 /* OpenVPNAdapter.mm */,
|
||||
ABD6EF071F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.h */,
|
||||
ABD6EF081F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m */,
|
||||
ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h */,
|
||||
ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm */,
|
||||
ABD6EF0E1F8F93AB007D3D90 /* OpenVPNPacketFlow.h */,
|
||||
ABD6EF0F1F8F93AB007D3D90 /* OpenVPNPacketFlow.mm */,
|
||||
);
|
||||
name = Adapter;
|
||||
sourceTree = "<group>";
|
||||
@@ -586,7 +586,7 @@
|
||||
C98467AB1EAA5BE100272A9A /* OpenVPNConfiguration+Internal.h in Headers */,
|
||||
C98467A61EAA5B7700272A9A /* OpenVPNConfiguration.h in Headers */,
|
||||
C9B7956B1F1D26C900CF35FE /* OpenVPNReachability+Internal.h in Headers */,
|
||||
ABD6EF101F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h in Headers */,
|
||||
ABD6EF101F8F93AB007D3D90 /* OpenVPNPacketFlow.h in Headers */,
|
||||
C9657A2B1EB0B6FA00EFF210 /* OpenVPNTransportStats+Internal.h in Headers */,
|
||||
C9BB47601E71663A00F3F98C /* Umbrella-Header.h in Headers */,
|
||||
C9657A5E1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */,
|
||||
@@ -629,7 +629,7 @@
|
||||
C98467AC1EAA5BE200272A9A /* OpenVPNConfiguration+Internal.h in Headers */,
|
||||
C98467A71EAA5B7700272A9A /* OpenVPNConfiguration.h in Headers */,
|
||||
C9B7956C1F1D26C900CF35FE /* OpenVPNReachability+Internal.h in Headers */,
|
||||
ABD6EF111F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.h in Headers */,
|
||||
ABD6EF111F8F93AB007D3D90 /* OpenVPNPacketFlow.h in Headers */,
|
||||
C9657A2F1EB0B79500EFF210 /* OpenVPNTransportStats+Internal.h in Headers */,
|
||||
C9D2ABE61EA20F99007EDF9D /* Umbrella-Header.h in Headers */,
|
||||
C9657A5F1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */,
|
||||
@@ -862,7 +862,7 @@
|
||||
C9BCE25A1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */,
|
||||
ABD6EF0B1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */,
|
||||
C98467A81EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */,
|
||||
ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm in Sources */,
|
||||
ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlow.mm in Sources */,
|
||||
C9E4401F1F6086A1001D7C41 /* NSError+Message.m in Sources */,
|
||||
C9657A311EB0B7A900EFF210 /* OpenVPNTransportStats.mm in Sources */,
|
||||
C9B795661F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */,
|
||||
@@ -901,7 +901,7 @@
|
||||
C9BCE25B1EB3C0D9009D6AC1 /* OpenVPNSessionToken.mm in Sources */,
|
||||
ABD6EF0C1F8F8CCD007D3D90 /* OpenVPNNetworkSettingsBuilder.m in Sources */,
|
||||
C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */,
|
||||
ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlowAdapter.mm in Sources */,
|
||||
ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlow.mm in Sources */,
|
||||
C9E440201F6086A1001D7C41 /* NSError+Message.m in Sources */,
|
||||
C9657A301EB0B7A600EFF210 /* OpenVPNTransportStats.mm in Sources */,
|
||||
C9B795671F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */,
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#import "OpenVPNError.h"
|
||||
#import "OpenVPNInterfaceStats+Internal.h"
|
||||
#import "OpenVPNNetworkSettingsBuilder.h"
|
||||
#import "OpenVPNPacketFlowAdapter.h"
|
||||
#import "OpenVPNPacketFlow.h"
|
||||
#import "OpenVPNProperties+Internal.h"
|
||||
#import "OpenVPNSessionToken+Internal.h"
|
||||
#import "OpenVPNTransportStats+Internal.h"
|
||||
@@ -34,7 +34,7 @@ class Client;
|
||||
|
||||
@property (nonatomic) OpenVPNNetworkSettingsBuilder *networkSettingsBuilder;
|
||||
|
||||
@property (nonatomic) OpenVPNPacketFlowAdapter *packetFlowAdapter;
|
||||
@property (nonatomic) OpenVPNPacketFlow *packetFlow;
|
||||
|
||||
- (OpenVPNAdapterError)errorByName:(NSString *)errorName;
|
||||
- (OpenVPNAdapterEvent)eventByName:(NSString *)errorName;
|
||||
@@ -46,13 +46,13 @@ using namespace openvpn;
|
||||
|
||||
class Client : public ClientAPI::OpenVPNClient {
|
||||
public:
|
||||
Client(OpenVPNAdapter *client) {
|
||||
this->client = client;
|
||||
Client(OpenVPNAdapter *adapter) {
|
||||
this->adapter = adapter;
|
||||
}
|
||||
|
||||
bool tun_builder_set_remote_address(const std::string& address, bool ipv6) override {
|
||||
NSString *remoteAddress = [[NSString alloc] initWithUTF8String:address.c_str()];
|
||||
client.networkSettingsBuilder.remoteAddress = remoteAddress;
|
||||
adapter.networkSettingsBuilder.remoteAddress = remoteAddress;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -61,14 +61,14 @@ public:
|
||||
NSString *gatewayAddress = [[NSString alloc] initWithUTF8String:gateway.c_str()];
|
||||
NSString *defaultGateway = gatewayAddress.length == 0 || [gatewayAddress isEqualToString:@"UNSPEC"] ? nil : gatewayAddress;
|
||||
if (ipv6) {
|
||||
client.networkSettingsBuilder.ipv6DefaultGateway = defaultGateway;
|
||||
[client.networkSettingsBuilder.ipv6LocalAddresses addObject:localAddress];
|
||||
[client.networkSettingsBuilder.ipv6NetworkPrefixLengths addObject:@(prefix_length)];
|
||||
adapter.networkSettingsBuilder.ipv6DefaultGateway = defaultGateway;
|
||||
[adapter.networkSettingsBuilder.ipv6LocalAddresses addObject:localAddress];
|
||||
[adapter.networkSettingsBuilder.ipv6NetworkPrefixLengths addObject:@(prefix_length)];
|
||||
} else {
|
||||
NSString *subnetMask = [[NSString alloc] initWithUTF8String:IPv4::Addr::netmask_from_prefix_len(prefix_length).to_string().c_str()];
|
||||
client.networkSettingsBuilder.ipv4DefaultGateway = defaultGateway;
|
||||
[client.networkSettingsBuilder.ipv4LocalAddresses addObject:localAddress];
|
||||
[client.networkSettingsBuilder.ipv4SubnetMasks addObject:subnetMask];
|
||||
adapter.networkSettingsBuilder.ipv4DefaultGateway = defaultGateway;
|
||||
[adapter.networkSettingsBuilder.ipv4LocalAddresses addObject:localAddress];
|
||||
[adapter.networkSettingsBuilder.ipv4SubnetMasks addObject:subnetMask];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -76,13 +76,13 @@ public:
|
||||
bool tun_builder_reroute_gw(bool ipv4, bool ipv6, unsigned int flags) override {
|
||||
if (ipv4) {
|
||||
NEIPv4Route *includedRoute = [NEIPv4Route defaultRoute];
|
||||
includedRoute.gatewayAddress = client.networkSettingsBuilder.ipv4DefaultGateway;
|
||||
[client.networkSettingsBuilder.ipv4IncludedRoutes addObject:includedRoute];
|
||||
includedRoute.gatewayAddress = adapter.networkSettingsBuilder.ipv4DefaultGateway;
|
||||
[adapter.networkSettingsBuilder.ipv4IncludedRoutes addObject:includedRoute];
|
||||
}
|
||||
if (ipv6) {
|
||||
NEIPv6Route *includedRoute = [NEIPv6Route defaultRoute];
|
||||
includedRoute.gatewayAddress = client.networkSettingsBuilder.ipv6DefaultGateway;
|
||||
[client.networkSettingsBuilder.ipv6IncludedRoutes addObject:includedRoute];
|
||||
includedRoute.gatewayAddress = adapter.networkSettingsBuilder.ipv6DefaultGateway;
|
||||
[adapter.networkSettingsBuilder.ipv6IncludedRoutes addObject:includedRoute];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -91,13 +91,13 @@ public:
|
||||
NSString *route = [[NSString alloc] initWithUTF8String:address.c_str()];
|
||||
if (ipv6) {
|
||||
NEIPv6Route *includedRoute = [[NEIPv6Route alloc] initWithDestinationAddress:route networkPrefixLength:@(prefix_length)];
|
||||
includedRoute.gatewayAddress = client.networkSettingsBuilder.ipv6DefaultGateway;
|
||||
[client.networkSettingsBuilder.ipv6IncludedRoutes addObject:includedRoute];
|
||||
includedRoute.gatewayAddress = adapter.networkSettingsBuilder.ipv6DefaultGateway;
|
||||
[adapter.networkSettingsBuilder.ipv6IncludedRoutes addObject:includedRoute];
|
||||
} else {
|
||||
NSString *subnetMask = [[NSString alloc] initWithUTF8String:IPv4::Addr::netmask_from_prefix_len(prefix_length).to_string().c_str()];
|
||||
NEIPv4Route *includedRoute = [[NEIPv4Route alloc] initWithDestinationAddress:route subnetMask:subnetMask];
|
||||
includedRoute.gatewayAddress = client.networkSettingsBuilder.ipv4DefaultGateway;
|
||||
[client.networkSettingsBuilder.ipv4IncludedRoutes addObject:includedRoute];
|
||||
includedRoute.gatewayAddress = adapter.networkSettingsBuilder.ipv4DefaultGateway;
|
||||
[adapter.networkSettingsBuilder.ipv4IncludedRoutes addObject:includedRoute];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -106,61 +106,61 @@ public:
|
||||
NSString *route = [[NSString alloc] initWithUTF8String:address.c_str()];
|
||||
if (ipv6) {
|
||||
NEIPv6Route *excludedRoute = [[NEIPv6Route alloc] initWithDestinationAddress:route networkPrefixLength:@(prefix_length)];
|
||||
[client.networkSettingsBuilder.ipv6ExcludedRoutes addObject:excludedRoute];
|
||||
[adapter.networkSettingsBuilder.ipv6ExcludedRoutes addObject:excludedRoute];
|
||||
} else {
|
||||
NSString *subnetMask = [[NSString alloc] initWithUTF8String:IPv4::Addr::netmask_from_prefix_len(prefix_length).to_string().c_str()];
|
||||
NEIPv4Route *excludedRoute = [[NEIPv4Route alloc] initWithDestinationAddress:route subnetMask:subnetMask];
|
||||
[client.networkSettingsBuilder.ipv4ExcludedRoutes addObject:excludedRoute];
|
||||
[adapter.networkSettingsBuilder.ipv4ExcludedRoutes addObject:excludedRoute];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_add_dns_server(const std::string& address, bool ipv6) override {
|
||||
NSString *dnsAddress = [[NSString alloc] initWithUTF8String:address.c_str()];
|
||||
[client.networkSettingsBuilder.dnsServers addObject:dnsAddress];
|
||||
[adapter.networkSettingsBuilder.dnsServers addObject:dnsAddress];
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_add_search_domain(const std::string& domain) override {
|
||||
NSString *searchDomain = [[NSString alloc] initWithUTF8String:domain.c_str()];
|
||||
[client.networkSettingsBuilder.searchDomains addObject:searchDomain];
|
||||
[adapter.networkSettingsBuilder.searchDomains addObject:searchDomain];
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_set_mtu(int mtu) override {
|
||||
client.networkSettingsBuilder.mtu = @(mtu);
|
||||
adapter.networkSettingsBuilder.mtu = @(mtu);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_set_session_name(const std::string& name) override {
|
||||
client.sessionName = [[NSString alloc] initWithUTF8String:name.c_str()];
|
||||
adapter.sessionName = [[NSString alloc] initWithUTF8String:name.c_str()];
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_add_proxy_bypass(const std::string& bypass_host) override {
|
||||
NSString *bypassHost = [[NSString alloc] initWithUTF8String:bypass_host.c_str()];
|
||||
[client.networkSettingsBuilder.proxyExceptionList addObject:bypassHost];
|
||||
[adapter.networkSettingsBuilder.proxyExceptionList addObject:bypassHost];
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_set_proxy_auto_config_url(const std::string& urlString) override {
|
||||
NSURL *url = [[NSURL alloc] initWithString:[[NSString alloc] initWithUTF8String:urlString.c_str()]];
|
||||
client.networkSettingsBuilder.autoProxyConfigurationEnabled = url != nil;
|
||||
client.networkSettingsBuilder.proxyAutoConfigurationURL = url;
|
||||
adapter.networkSettingsBuilder.autoProxyConfigurationEnabled = url != nil;
|
||||
adapter.networkSettingsBuilder.proxyAutoConfigurationURL = url;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_set_proxy_http(const std::string& host, int port) override {
|
||||
NSString *address = [[NSString alloc] initWithUTF8String:host.c_str()];
|
||||
client.networkSettingsBuilder.httpProxyServerEnabled = YES;
|
||||
client.networkSettingsBuilder.httpProxyServer = [[NEProxyServer alloc] initWithAddress:address port:port];
|
||||
adapter.networkSettingsBuilder.httpProxyServerEnabled = YES;
|
||||
adapter.networkSettingsBuilder.httpProxyServer = [[NEProxyServer alloc] initWithAddress:address port:port];
|
||||
return true;
|
||||
}
|
||||
|
||||
bool tun_builder_set_proxy_https(const std::string& host, int port) override {
|
||||
NSString *address = [[NSString alloc] initWithUTF8String:host.c_str()];
|
||||
client.networkSettingsBuilder.httpsProxyServerEnabled = YES;
|
||||
client.networkSettingsBuilder.httpsProxyServer = [[NEProxyServer alloc] initWithAddress:address port:port];
|
||||
adapter.networkSettingsBuilder.httpsProxyServerEnabled = YES;
|
||||
adapter.networkSettingsBuilder.httpsProxyServer = [[NEProxyServer alloc] initWithAddress:address port:port];
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -174,20 +174,20 @@ public:
|
||||
}
|
||||
|
||||
int tun_builder_establish() override {
|
||||
NEPacketTunnelNetworkSettings *networkSettings = client.networkSettingsBuilder.networkSettings;
|
||||
NEPacketTunnelNetworkSettings *networkSettings = adapter.networkSettingsBuilder.networkSettings;
|
||||
if (!networkSettings) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
||||
[client.delegate openVPNAdapter:client configureTunnelWithNetworkSettings:networkSettings completionHandler:^(NEPacketTunnelFlow * _Nullable flow) {
|
||||
client.packetFlowAdapter = [[OpenVPNPacketFlowAdapter alloc] initWithPacketFlow:flow];
|
||||
[adapter.delegate openVPNAdapter:adapter configureTunnelWithNetworkSettings:networkSettings completionHandler:^(NEPacketTunnelFlow * _Nullable flow) {
|
||||
adapter.packetFlow = [[OpenVPNPacketFlow alloc] initWithPacketFlow:flow];
|
||||
dispatch_semaphore_signal(semaphore);
|
||||
}];
|
||||
dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 30 * NSEC_PER_SEC));
|
||||
|
||||
if (client.packetFlowAdapter) {
|
||||
return client.packetFlowAdapter.socketHandle;
|
||||
if (adapter.packetFlow) {
|
||||
return adapter.packetFlow.socketHandle;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
@@ -222,35 +222,42 @@ public:
|
||||
NSString *message = [[NSString alloc] initWithUTF8String:event.info.c_str()];
|
||||
|
||||
if (event.error) {
|
||||
OpenVPNAdapterError errorCode = [client errorByName:name];
|
||||
NSString *errorReason = [client reasonForError:errorCode];
|
||||
NSError *error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:errorCode userInfo:@{NSLocalizedDescriptionKey: @"OpenVPN error occured.", NSLocalizedFailureReasonErrorKey: errorReason, OpenVPNAdapterErrorMessageKey: message != nil ? message : @"", OpenVPNAdapterErrorFatalKey: @(event.fatal)}];
|
||||
[client.delegate openVPNAdapter:client handleError:error];
|
||||
OpenVPNAdapterError errorCode = [adapter errorByName:name];
|
||||
NSString *errorReason = [adapter reasonForError:errorCode];
|
||||
|
||||
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: @"OpenVPN error occured.",
|
||||
NSLocalizedFailureReasonErrorKey: errorReason,
|
||||
OpenVPNAdapterErrorMessageKey: message != nil ? message : @"",
|
||||
OpenVPNAdapterErrorFatalKey: @(event.fatal) };
|
||||
|
||||
NSError *error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:errorCode userInfo:userInfo];
|
||||
[adapter.delegate openVPNAdapter:adapter handleError:error];
|
||||
} else {
|
||||
OpenVPNAdapterEvent eventIdentifier = [client eventByName:name];
|
||||
[client.delegate openVPNAdapter:client handleEvent:eventIdentifier message:message.length ? message : nil];
|
||||
OpenVPNAdapterEvent eventIdentifier = [adapter eventByName:name];
|
||||
[adapter.delegate openVPNAdapter:adapter handleEvent:eventIdentifier message:message.length ? message : nil];
|
||||
}
|
||||
}
|
||||
|
||||
void log(const ClientAPI::LogInfo& log) override {
|
||||
if ([client.delegate respondsToSelector:@selector(openVPNAdapter:handleLogMessage:)]) {
|
||||
[client.delegate openVPNAdapter:client handleLogMessage:[[NSString alloc] initWithUTF8String:log.text.c_str()]];
|
||||
if ([adapter.delegate respondsToSelector:@selector(openVPNAdapter:handleLogMessage:)]) {
|
||||
[adapter.delegate openVPNAdapter:adapter handleLogMessage:[[NSString alloc] initWithUTF8String:log.text.c_str()]];
|
||||
}
|
||||
}
|
||||
|
||||
void clock_tick() override {
|
||||
if ([client.delegate respondsToSelector:@selector(openVPNAdapterDidReceiveClockTick:)]) {
|
||||
[client.delegate openVPNAdapterDidReceiveClockTick:client];
|
||||
if ([adapter.delegate respondsToSelector:@selector(openVPNAdapterDidReceiveClockTick:)]) {
|
||||
[adapter.delegate openVPNAdapterDidReceiveClockTick:adapter];
|
||||
}
|
||||
}
|
||||
|
||||
void reset_tun() {
|
||||
client.packetFlowAdapter = nil;
|
||||
client.networkSettingsBuilder = nil;
|
||||
client.sessionName = nil;
|
||||
adapter.packetFlow = nil;
|
||||
adapter.networkSettingsBuilder = nil;
|
||||
adapter.sessionName = nil;
|
||||
}
|
||||
|
||||
private:
|
||||
OpenVPNAdapter *client;
|
||||
OpenVPNAdapter *adapter;
|
||||
};
|
||||
|
||||
@implementation OpenVPNAdapter
|
||||
@@ -272,7 +279,13 @@ private:
|
||||
if (eval.error) {
|
||||
if (error) {
|
||||
NSString *errorReason = [self reasonForError:OpenVPNAdapterErrorConfigurationFailure];
|
||||
*error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:OpenVPNAdapterErrorConfigurationFailure userInfo:@{NSLocalizedDescriptionKey: @"Failed to apply OpenVPN configuration.", NSLocalizedFailureReasonErrorKey: errorReason, OpenVPNAdapterErrorMessageKey: [[NSString alloc] initWithUTF8String:eval.message.c_str()], OpenVPNAdapterErrorFatalKey: @YES}];
|
||||
|
||||
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: @"Failed to apply OpenVPN configuration.",
|
||||
NSLocalizedFailureReasonErrorKey: errorReason,
|
||||
OpenVPNAdapterErrorMessageKey: [[NSString alloc] initWithUTF8String:eval.message.c_str()],
|
||||
OpenVPNAdapterErrorFatalKey: @YES };
|
||||
|
||||
*error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:OpenVPNAdapterErrorConfigurationFailure userInfo: userInfo];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
@@ -285,10 +298,20 @@ private:
|
||||
|
||||
if (status.error) {
|
||||
if (error) {
|
||||
OpenVPNAdapterError errorCode = !status.status.empty() ? [self errorByName:[[NSString alloc] initWithUTF8String:status.status.c_str()]] : OpenVPNAdapterErrorCredentialsFailure;
|
||||
OpenVPNAdapterError errorCode = !status.status.empty() ?
|
||||
[self errorByName:[[NSString alloc] initWithUTF8String:status.status.c_str()]] :
|
||||
OpenVPNAdapterErrorCredentialsFailure;
|
||||
|
||||
NSString *errorReason = [self reasonForError:errorCode];
|
||||
*error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:errorCode userInfo:@{NSLocalizedDescriptionKey: @"Failed to provide OpenVPN credentials.", NSLocalizedFailureReasonErrorKey: errorReason, OpenVPNAdapterErrorMessageKey: [[NSString alloc] initWithUTF8String:status.message.c_str()], OpenVPNAdapterErrorFatalKey: @YES}];
|
||||
|
||||
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: @"Failed to provide OpenVPN credentials.",
|
||||
NSLocalizedFailureReasonErrorKey: errorReason,
|
||||
OpenVPNAdapterErrorMessageKey: [[NSString alloc] initWithUTF8String:status.message.c_str()],
|
||||
OpenVPNAdapterErrorFatalKey: @YES };
|
||||
|
||||
*error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:errorCode userInfo:userInfo];
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
@@ -329,7 +352,13 @@ private:
|
||||
|
||||
OpenVPNAdapterError errorCode = !status.status.empty() ? [self errorByName:[[NSString alloc] initWithUTF8String:status.status.c_str()]] : OpenVPNAdapterErrorUnknown;
|
||||
NSString *errorReason = [self reasonForError:errorCode];
|
||||
NSError *error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:errorCode userInfo:@{NSLocalizedDescriptionKey: @"Failed to establish connection with OpenVPN server.", NSLocalizedFailureReasonErrorKey: errorReason, OpenVPNAdapterErrorMessageKey: [[NSString alloc] initWithUTF8String:status.message.c_str()], OpenVPNAdapterErrorFatalKey: @YES}];
|
||||
|
||||
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: @"Failed to establish connection with OpenVPN server.",
|
||||
NSLocalizedFailureReasonErrorKey: errorReason,
|
||||
OpenVPNAdapterErrorMessageKey: [[NSString alloc] initWithUTF8String:status.message.c_str()],
|
||||
OpenVPNAdapterErrorFatalKey: @YES };
|
||||
|
||||
NSError *error = [NSError errorWithDomain:OpenVPNAdapterErrorDomain code:errorCode userInfo:userInfo];
|
||||
[self.delegate openVPNAdapter:self handleError:error];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// OpenVPNPacketFlowAdapter.h
|
||||
// OpenVPNPacketFlow.h
|
||||
// OpenVPN Adapter
|
||||
//
|
||||
// Created by Jonathan Downing on 12/10/2017.
|
||||
@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class NEPacketTunnelFlow;
|
||||
|
||||
@interface OpenVPNPacketFlowAdapter : NSObject
|
||||
@interface OpenVPNPacketFlow : NSObject
|
||||
|
||||
@property (nonatomic, readonly) CFSocketNativeHandle socketHandle;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// OpenVPNPacketFlowAdapter.mm
|
||||
// OpenVPNPacketFlow.mm
|
||||
// OpenVPN Adapter
|
||||
//
|
||||
// Created by Jonathan Downing on 12/10/2017.
|
||||
@@ -7,16 +7,22 @@
|
||||
|
||||
#import <NetworkExtension/NetworkExtension.h>
|
||||
#import <openvpn/ip/ip.hpp>
|
||||
#import "OpenVPNPacketFlowAdapter.h"
|
||||
#import "OpenVPNPacketFlow.h"
|
||||
|
||||
@interface OpenVPNPacketFlowAdapter () {
|
||||
@interface OpenVPNPacketFlow () {
|
||||
CFSocketRef _openVPNClientSocket;
|
||||
CFSocketRef _packetFlowSocket;
|
||||
}
|
||||
|
||||
@property (nonatomic) NEPacketTunnelFlow *packetFlow;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OpenVPNPacketFlowAdapter
|
||||
@implementation OpenVPNPacketFlow
|
||||
|
||||
- (CFSocketNativeHandle)socketHandle {
|
||||
return CFSocketGetNative(_openVPNClientSocket);
|
||||
}
|
||||
|
||||
- (instancetype)initWithPacketFlow:(NEPacketTunnelFlow *)packetFlow {
|
||||
if ((self = [super init])) {
|
||||
@@ -31,12 +37,8 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (CFSocketNativeHandle)socketHandle {
|
||||
return CFSocketGetNative(_openVPNClientSocket);
|
||||
}
|
||||
|
||||
static inline void PacketFlowSocketCallback(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *adapter) {
|
||||
[(__bridge OpenVPNPacketFlowAdapter *)adapter writeDataToPacketFlow:(__bridge NSData *)data];
|
||||
[(__bridge OpenVPNPacketFlow *)adapter writeDataToPacketFlow:(__bridge NSData *)data];
|
||||
}
|
||||
|
||||
- (BOOL)configureSockets {
|
||||
@@ -84,20 +86,16 @@ static inline void PacketFlowSocketCallback(CFSocketRef socket, CFSocketCallBack
|
||||
return NO;
|
||||
}
|
||||
|
||||
CFOptionFlags sockopt = CFSocketGetSocketFlags(socket);
|
||||
|
||||
sockopt |= kCFSocketCloseOnInvalidate | kCFSocketAutomaticallyReenableDataCallBack;
|
||||
CFSocketSetSocketFlags(socket, sockopt);
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)readPacketFlowPackets {
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[self.packetFlow readPacketObjectsWithCompletionHandler:^(NSArray<NEPacket *> * _Nonnull packets) {
|
||||
typeof(self) strongSelf = weakSelf;
|
||||
[strongSelf writeVPNPacketObjects:packets];
|
||||
[strongSelf readPacketFlowPackets];
|
||||
__strong typeof(self) self = weakSelf;
|
||||
|
||||
[self writeVPNPacketObjects:packets];
|
||||
[self readPacketFlowPackets];
|
||||
}];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user