Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. - (void)startTunnelWithOptions:(NSDictionary *)options completionHandler:(void (^)(BOOL * error))completionHandler {
  2.  
  3.  
  4. vpnAdapter = [[OpenAdapter alloc] init];
  5. vpnAdapter.delegate = self;
  6.  
  7. // get config
  8.  
  9. config = [[NSDictionary alloc] init];
  10.  
  11. NETunnelProviderProtocol *protocol = (NETunnelProviderProtocol *)self.protocolConfiguration;
  12. config = protocol.providerConfiguration;
  13.  
  14. host = config[@"server"];
  15.  
  16. // Load config data
  17. username = config[@"username"];
  18. password = config[@"password"];
  19.  
  20.  
  21. if(option != nil){
  22. [vpnAdapter connect:host user:username pass:password add:YES completionHandler:^(BOOL success){
  23. // return success;
  24. completionHandler(&success); // Thread 2: EXC_BAD_ACCESS (code=1, address=0xbcc68f020)
  25. }];
  26.  
  27. }else{
  28. [vpnAdapter connect:host user:username pass:password add:NO completionHandler:^(BOOL success){
  29.  
  30. completionHandler(&success);
  31.  
  32. }];
  33. }
  34.  
  35. - (void)connect: (NSString *) host user:(NSString *)username pass:(NSString *) password add:(Boolean) isAdd completionHandler:(void (^)(BOOL success)) completionHandler{
  36.  
  37. dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, 0);
  38. dispatch_queue_t connectQueue = dispatch_queue_create("me.ss-abramchuk.open-adapter.connection", attributes);
  39. dispatch_async(connectQueue, ^{
  40. // Call connect
  41. //int ret=1;
  42. NSArray* options = [NSArray arrayWithObjects:
  43. @"--user", username,
  44. host,
  45. nil];
  46.  
  47. if(isAdd){
  48. options = [NSArray arrayWithObjects:
  49. @"--user", username,
  50. @"--protocol", @"ad",
  51. host,
  52. nil];
  53. }
  54. //NSArray *paths = NSSearchPathForDirectoriesInDomains
  55. (NSDocumentDirectory, NSUserDomainMask, YES);
  56. //NSString *documentsDirectory = [paths objectAtIndex:0];
  57.  
  58. NSMutableArray *arguments = [NSMutableArray arrayWithCapacity:1+[options count]];
  59. [arguments addObject:@"connect"];
  60. [arguments addObjectsFromArray:options];
  61.  
  62. int argc = [arguments count];
  63. char **argv = (char **)malloc(sizeof(char*) * (argc + 1));
  64.  
  65. [arguments enumerateObjectsUsingBlock:^(NSString *option, NSUInteger i, BOOL *stop) {
  66. const char * c_string = [option UTF8String];
  67. int length = (int)strlen(c_string);
  68. char *c_string_copy = (char *) malloc(sizeof(char) * (length + 1));
  69. strcpy(c_string_copy, c_string);
  70. argv[i] = c_string_copy;
  71. }];
  72. argv[argc] = NULL;
  73. const char *cfPass=[password UTF8String];
  74. int ret = self.vpnClient->start2connect(argc, argv, cfPass);
  75. BOOL result;
  76. if (ret!=0){
  77. result=false;
  78. }
  79. else {result = true;}
  80. completionHandler(result);
  81. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement