我正在尝试设置自定义的VPN隧道
- (void) openTunnel{
[vpnManager loadFromPreferencesWithCompletionHandler:^(NSError *error){
if(error != nil){
NSLog(@"%@", error);
}else{
NSError *startError = nil;
[self->vpnManager.connection startVPNTunnelWithOptions:nil andReturnError:&startError];
if(startError != nil){
NSLog(@"viewcontroller: startError: %@", startError);
}else{
NSLog(@"Complete");
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveNotification:)
name:NEVPNStatusDidChangeNotification
object:nil];
}
}
}];}
startVPNTunnelWithOptions 如下启动自定义隧道
- (void)startTunnelWithOptions:(NSDictionary *)options completionHandler:(void (^)(NSError *error))completion{
NSLog(@"===> ");
NSError *error = nil;
vpnAdapter = [[OpenAdapter alloc] init];
vpnAdapter.delegate = self;
// get config
config = [[NSDictionary alloc] init];
NETunnelProviderProtocol *protocol = (NETunnelProviderProtocol *)self.protocolConfiguration;
config = protocol.providerConfiguration;
host = config[@"server"];
// Load config data
username = config[@"username"];
password = config[@"password"];
option = config[@"option"];
NSError *newError = [NSError errorWithDomain:VPNTunnelProviderErrorDomain
code:TunnelProviderErrorCodeInvalidConfiguration
userInfo:@{NSLocalizedDescriptionKey: @"Settings validation failed!"}];
if(option != nil){
[vpnAdapter connect:host user:username pass:password add:YES completionHandler:^(int success) {
if(success == 0)
{NSLog(@"packettunnel: newerror: %d", 0);
completion(error);}
else {
NSLog(@"packettunnel: newerror: %@", newError);
completion(newError);
}
}];
}else{
[vpnAdapter connect:host user:username pass:password add:NO completionHandler:^(int success) {
if(success == 0){
{NSLog(@"packettunnel: newerror: %d", 0);
completion(error);}
else
{
NSLog(@"packettunnel: newerror: %@", newError);
completion(newError);
}
}];
}
}
使用伪造的凭据进行测试时(正确的凭据可以正常工作),它应该打印startError,但不会。我可以确认 startTunnelWithOptions 实际上从NSLog返回 newError ,但是 startVPNTunnelWithOptions 不返回任何错误。
有人可以帮忙吗?
谢谢