diff --git a/ShadowsocksX-NG/AppDelegate.swift b/ShadowsocksX-NG/AppDelegate.swift
index 9ed542e..40f58ff 100755
--- a/ShadowsocksX-NG/AppDelegate.swift
+++ b/ShadowsocksX-NG/AppDelegate.swift
@@ -58,7 +58,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
"ShadowsocksRunningMode": "auto",
"LocalSocks5.ListenPort": NSNumber(value: 1086 as UInt16),
"LocalSocks5.ListenAddress": "127.0.0.1",
- "PacServer.ListenAddress": "127.0.0.1",
"PacServer.ListenPort":NSNumber(value: 8090 as UInt16),
"LocalSocks5.Timeout": NSNumber(value: 60 as UInt),
"LocalSocks5.EnableUDPRelay": NSNumber(value: false as Bool),
@@ -171,10 +170,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
// Insert code here to tear down your application
StopSSLocal()
StopPrivoxy()
- ProxyConfHelper.disableProxy("hi")
+ ProxyConfHelper.disableProxy()
let defaults = UserDefaults.standard
defaults.set(false, forKey: "ShadowsocksOn")
- ProxyConfHelper.stopPACServer()
}
func applyConfig() {
@@ -186,16 +184,16 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
StartSSLocal()
StartPrivoxy()
if mode == "auto" {
- ProxyConfHelper.enablePACProxy("hi")
+ ProxyConfHelper.enablePACProxy()
} else if mode == "global" {
ProxyConfHelper.enableGlobalProxy()
} else if mode == "manual" {
- ProxyConfHelper.disableProxy("hi")
+ ProxyConfHelper.disableProxy()
}
} else {
StopSSLocal()
StopPrivoxy()
- ProxyConfHelper.disableProxy("hi")
+ ProxyConfHelper.disableProxy()
}
}
diff --git a/ShadowsocksX-NG/Base.lproj/AdvPreferencesWindowController.xib b/ShadowsocksX-NG/Base.lproj/AdvPreferencesWindowController.xib
index 35784f1..9e90f71 100644
--- a/ShadowsocksX-NG/Base.lproj/AdvPreferencesWindowController.xib
+++ b/ShadowsocksX-NG/Base.lproj/AdvPreferencesWindowController.xib
@@ -14,30 +14,19 @@
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
@@ -53,7 +42,7 @@
-
+
@@ -61,10 +50,10 @@
-
+
-
+
@@ -72,7 +61,7 @@
-
+
@@ -80,7 +69,7 @@
-
+
@@ -95,7 +84,7 @@
-
+
@@ -103,7 +92,7 @@
-
+
@@ -119,7 +108,7 @@
-
+
-
+
@@ -148,10 +137,7 @@
-
-
-
-
+
@@ -168,18 +154,16 @@
-
-
-
+
+
-
-
-
+
+
@@ -194,22 +178,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -217,51 +191,57 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/ShadowsocksX-NG/ProxyConfHelper.h b/ShadowsocksX-NG/ProxyConfHelper.h
index c00ade2..0f0dfa0 100644
--- a/ShadowsocksX-NG/ProxyConfHelper.h
+++ b/ShadowsocksX-NG/ProxyConfHelper.h
@@ -14,14 +14,14 @@
+ (void)install;
-+ (void)enablePACProxy:(NSString*) PACFilePath;
++ (void)enablePACProxy;
+ (void)enableGlobalProxy;
-+ (void)disableProxy:(NSString*) PACFilePath;
++ (void)disableProxy;
-+ (NSString*)startPACServer:(NSString*) PACFilePath;
-
-+ (void)stopPACServer;
+//+ (void)startPACServer:(NSString*) PACFilePath;
+//
+//+ (void)stopPACServer;
@end
diff --git a/ShadowsocksX-NG/ProxyConfHelper.m b/ShadowsocksX-NG/ProxyConfHelper.m
index 6089ae0..dbe0128 100644
--- a/ShadowsocksX-NG/ProxyConfHelper.m
+++ b/ShadowsocksX-NG/ProxyConfHelper.m
@@ -114,14 +114,14 @@ GCDWebServer *webServer =nil;
}
}
-+ (void)enablePACProxy:(NSString*) PACFilePath {
++ (void)enablePACProxy {
//start server here and then using the string next line
//next two lines can open gcdwebserver and work around pac file
- NSString *PACURLString = [self startPACServer: PACFilePath];//hi 可以切换成定制pac文件路径来达成使用定制文件路径
- NSURL* url = [NSURL URLWithString: PACURLString];
-// NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
-// NSURL* url = [NSURL fileURLWithPath:urlString];
-
+ NSString* PACFilePath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"];
+ [self startPACServer: PACFilePath];
+
+ NSURL* url = [NSURL URLWithString: [self getHttpPACUrl]];
+
NSMutableArray* args = [@[@"--mode", @"auto", @"--pac-url", [url absoluteString]]mutableCopy];
[self addArguments4ManualSpecifyNetworkServices:args];
@@ -146,12 +146,9 @@ GCDWebServer *webServer =nil;
[self stopPACServer];
}
-+ (void)disableProxy:(NSString*) PACFilePath {
-// 带上所有参数是为了判断是否原有代理设置是否由ssx-ng设置的。如果是用户手工设置的其他配置,则不进行清空。
-// NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
-// NSURL* url = [NSURL fileURLWithPath:urlString];
- NSString *PACURLString = [self startPACServer: PACFilePath];//hi 可以切换成定制pac文件路径来达成使用定制文件路径
- NSURL* url = [NSURL URLWithString: PACURLString];
++ (void)disableProxy {
+ // 带上所有参数是为了判断是否原有代理设置是否由ssx-ng设置的。如果是用户手工设置的其他配置,则不进行清空。
+ NSURL* url = [NSURL URLWithString: [self getHttpPACUrl]];
NSUInteger port = [[NSUserDefaults standardUserDefaults]integerForKey:@"LocalSocks5.ListenPort"];
NSMutableArray* args = [@[@"--mode", @"off"
@@ -163,28 +160,43 @@ GCDWebServer *webServer =nil;
[self stopPACServer];
}
-+ (NSString*)startPACServer:(NSString*) PACFilePath {
- //接受参数为以后使用定制PAC文件
- NSData * originalPACData;
++ (NSString*)getHttpPACUrl {
NSString * routerPath = @"/proxy.pac";
- if ([PACFilePath isEqual: @"hi"]) {//用默认路径来代替
- PACFilePath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"];
- originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"]];
- }else{//用定制路径来代替
- originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG", PACFilePath]];
- routerPath = [NSString stringWithFormat:@"/%@",PACFilePath];
- }
+
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+
+ NSString * address = @"127.0.0.1";
+ int port = (short)[defaults integerForKey:@"PacServer.ListenPort"];
+
+ return [NSString stringWithFormat:@"%@%@:%d%@",@"http://",address,port,routerPath];
+}
+
++ (void)startPACServer:(NSString*) PACFilePath {
+ //接受参数为以后使用定制PAC文件
+
+ NSString * routerPath = @"/proxy.pac";
+
[self stopPACServer];
webServer = [[GCDWebServer alloc] init];
- [webServer addHandlerForMethod:@"GET" path:routerPath requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
- return [GCDWebServerDataResponse responseWithData: originalPACData contentType:@"application/x-ns-proxy-autoconfig"];
+ [webServer addHandlerForMethod:@"GET"
+ path:routerPath
+ requestClass:[GCDWebServerRequest class]
+ processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request)
+ {
+ NSLog(@"get proxy.pac");
+ NSData* originalPACData = [NSData dataWithContentsOfFile:PACFilePath];
+ GCDWebServerDataResponse* resp = [GCDWebServerDataResponse responseWithData:originalPACData
+ contentType:@"application/x-ns-proxy-autoconfig"];
+ resp.cacheControlMaxAge = 0;
+ return resp;
}
];
+
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- NSString * address = [defaults stringForKey:@"PacServer.ListenAddress"];
+
int port = (short)[defaults integerForKey:@"PacServer.ListenPort"];
+
[webServer startWithOptions:@{@"BindToLocalhost":@YES, @"Port":@(port)} error:nil];
- return [NSString stringWithFormat:@"%@%@:%d%@",@"http://",address,port,routerPath];
}
+ (void)stopPACServer {
diff --git a/ShadowsocksX-NG/ProxyPreferencesController.swift b/ShadowsocksX-NG/ProxyPreferencesController.swift
index 4c215d6..82bab46 100644
--- a/ShadowsocksX-NG/ProxyPreferencesController.swift
+++ b/ShadowsocksX-NG/ProxyPreferencesController.swift
@@ -37,7 +37,7 @@ class ProxyPreferencesController: NSWindowController, NSTableViewDataSource, NST
}
@IBAction func ok(_ sender: NSObject){
- ProxyConfHelper.disableProxy("hi")
+ ProxyConfHelper.disableProxy()
let defaults = UserDefaults.standard
defaults.setValue(selectedNetworkServices.allObjects, forKeyPath: "Proxy4NetworkServices")