Skip to content

Commit

Permalink
fix network switching
Browse files Browse the repository at this point in the history
  • Loading branch information
clowwindy committed Aug 10, 2015
1 parent d503e13 commit a116ce8
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
2 changes: 2 additions & 0 deletions tunnel/ChinaDNSRunner.m
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ + (BOOL)checkWiFiNetwork {
if (temp_addr->ifa_addr->sa_family == AF_INET)
{
NSString* name = [NSString stringWithUTF8String:temp_addr->ifa_name];
NSString* address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
// NSLog(@"%@ %@", name, address);
if ([name rangeOfString:@"en"].location == 0) {
found = YES;
break;
Expand Down
33 changes: 23 additions & 10 deletions tunnel/PacketTunnelProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
var chinaDNS: ChinaDNSRunner?
var routeManager: RouteManager?
var wifi = ChinaDNSRunner.checkWiFiNetwork()
var queue: dispatch_queue_t?

override func startTunnelWithOptions(options: [String : NSObject]?, completionHandler: (NSError?) -> Void) {
queue = dispatch_queue_create("shadowvpn.queue", nil)
conf = (self.protocolConfiguration as! NETunnelProviderProtocol).providerConfiguration!
self.pendingStartCompletion = completionHandler
chinaDNS = ChinaDNSRunner(DNS: conf["dns"] as? String)
Expand All @@ -29,20 +31,31 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
NSLog("setPassword")
SVCrypto.setPassword(conf["password"] as! String)
self.recreateUDP()
self.updateNetwork()
}

func recreateUDP() {
self.reasserting = true
if session != nil {
self.session = nil
// var t = dispatch_time_t(0)
if self.session != nil {
// t = 10000000000
self.reasserting = true
}
if let serverAddress = self.protocolConfiguration.serverAddress {
if let port = conf["port"] as? String {
NSLog("recreateUDP")
self.session = self.createUDPSessionToEndpoint(NWHostEndpoint(hostname: serverAddress, port: port), fromEndpoint: nil)
self.updateNetwork()
self.reasserting = false
dispatch_async(queue!) { () -> Void in
self.session = nil
if let serverAddress = self.protocolConfiguration.serverAddress {
if let port = self.conf["port"] as? String {
self.setTunnelNetworkSettings(nil) { (error: NSError?) -> Void in
if let error = error {
NSLog("%@", error)
exit(1)
}
dispatch_async(self.queue!) { () -> Void in
NSLog("recreateUDP")
self.session = self.createUDPSessionToEndpoint(NWHostEndpoint(hostname: serverAddress, port: port), fromEndpoint: nil)
self.updateNetwork()
self.reasserting = false
}
}
}
}
}
}
Expand Down

0 comments on commit a116ce8

Please sign in to comment.