diff --git a/ShadowsocksX-NG/AppDelegate.swift b/ShadowsocksX-NG/AppDelegate.swift
index 354d0a9..3aa9f0c 100644
--- a/ShadowsocksX-NG/AppDelegate.swift
+++ b/ShadowsocksX-NG/AppDelegate.swift
@@ -65,7 +65,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
"AutoConfigureNetworkServices": NSNumber(value: true as Bool),
"LocalHTTP.ListenAddress": "127.0.0.1",
"LocalHTTP.ListenPort": NSNumber(value: 1087 as UInt16),
- "LocalHTTPOn": true
+ "LocalHTTPOn": true,
+ "LocalHTTP.FollowGlobel": true
])
statusItem = NSStatusBar.system().statusItem(withLength: 20)
@@ -107,6 +108,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
, using: {
(note) in
SyncPrivoxy()
+ self.applyConfig()
}
)
notifyCenter.addObserver(forName: NSNotification.Name(rawValue: "NOTIFY_FOUND_SS_URL"), object: nil, queue: nil) {
diff --git a/ShadowsocksX-NG/Base.lproj/HTTPPreferencesWindowController.xib b/ShadowsocksX-NG/Base.lproj/HTTPPreferencesWindowController.xib
index 36e83d5..a3cd38c 100644
--- a/ShadowsocksX-NG/Base.lproj/HTTPPreferencesWindowController.xib
+++ b/ShadowsocksX-NG/Base.lproj/HTTPPreferencesWindowController.xib
@@ -10,12 +10,32 @@
-
-
+
+
-
+
+
+
@@ -55,36 +75,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/ShadowsocksX-NG/ProxyConfHelper.m b/ShadowsocksX-NG/ProxyConfHelper.m
index c716e93..6089ae0 100644
--- a/ShadowsocksX-NG/ProxyConfHelper.m
+++ b/ShadowsocksX-NG/ProxyConfHelper.m
@@ -134,6 +134,13 @@ GCDWebServer *webServer =nil;
NSMutableArray* args = [@[@"--mode", @"global", @"--port"
, [NSString stringWithFormat:@"%lu", (unsigned long)port]]mutableCopy];
+ if ([[NSUserDefaults standardUserDefaults] boolForKey:@"LocalHTTPOn"] && [[NSUserDefaults standardUserDefaults] boolForKey:@"LocalHTTP.FollowGlobel"]) {
+ NSUInteger privoxyPort = [[NSUserDefaults standardUserDefaults]integerForKey:@"LocalHTTP.ListenPort"];
+
+ [args addObject:@"--privoxy-port"];
+ [args addObject:[NSString stringWithFormat:@"%lu", (unsigned long)privoxyPort]];
+ }
+
[self addArguments4ManualSpecifyNetworkServices:args];
[self callHelper:args];
[self stopPACServer];
diff --git a/ShadowsocksX-NG/proxy_conf_helper_version.h b/ShadowsocksX-NG/proxy_conf_helper_version.h
index da95803..959f3c9 100644
--- a/ShadowsocksX-NG/proxy_conf_helper_version.h
+++ b/ShadowsocksX-NG/proxy_conf_helper_version.h
@@ -9,6 +9,6 @@
#ifndef proxy_conf_helper_version_h
#define proxy_conf_helper_version_h
-#define kProxyConfHelperVersion @"1.3.1"
+#define kProxyConfHelperVersion @"1.3.2"
#endif /* proxy_conf_helper_version_h */
diff --git a/ShadowsocksX-NG/zh-Hans.lproj/AdvPreferencesWindowController.strings b/ShadowsocksX-NG/zh-Hans.lproj/AdvPreferencesWindowController.strings
index bcde501..f01ad9b 100644
--- a/ShadowsocksX-NG/zh-Hans.lproj/AdvPreferencesWindowController.strings
+++ b/ShadowsocksX-NG/zh-Hans.lproj/AdvPreferencesWindowController.strings
@@ -18,10 +18,22 @@
"cwr-n0-zwn.title" = "本地 Socks5 监听地址:";
/* Class = "NSTextFieldCell"; title = "GFW List URL:"; ObjectID = "dg0-gS-z5V"; */
-"dg0-gS-z5V.title" = "GFW List URL:";
+"dg0-gS-z5V.title" = "GFW LIST URL:";
/* Class = "NSTextFieldCell"; title = "Timeout:"; ObjectID = "i4l-2S-gOQ"; */
"i4l-2S-gOQ.title" = "超时:";
/* Class = "NSTextFieldCell"; title = "本地 Socks5 监听端口:"; ObjectID = "qRs-ow-vVB"; */
"qRs-ow-vVB.title" = "本地 Socks5 监听端口:";
+
+/* Class = "NSTextFieldCell"; title = "Local PAC Listen Address:"; ObjectID = "dvL-Ic-Wae"; */
+"dvL-Ic-Wae.title" = "本地 PAC 监听地址:";
+
+/* Class = "NSTextFieldCell"; title = "Local PAC Listen Port:"; ObjectID = "PSg-XK-qhl"; */
+"PSg-XK-qhl.title" = "本地 PAC 监听端口:";
+
+/* Class = "NSTextFieldCell"; title = "White List URL:"; ObjectID = "aif-uV-Lxk"; */
+"aif-uV-Lxk.title" = "白名单列表 URL:";
+
+/* Class = "NSTextFieldCell"; title = "White IP List URL:"; ObjectID = "qhu-d1-qgq"; */
+"qhu-d1-qgq.title" = "白名单IP列表 URL:";
diff --git a/ShadowsocksX-NG/zh-Hans.lproj/HTTPPreferencesWindowController.strings b/ShadowsocksX-NG/zh-Hans.lproj/HTTPPreferencesWindowController.strings
index df2f7a1..7a2e9e9 100644
--- a/ShadowsocksX-NG/zh-Hans.lproj/HTTPPreferencesWindowController.strings
+++ b/ShadowsocksX-NG/zh-Hans.lproj/HTTPPreferencesWindowController.strings
@@ -10,3 +10,6 @@
/* Class = "NSWindow"; title = "HTTP Proxy Preferences"; ObjectID = "vS3-DL-Nq3"; */
"vS3-DL-Nq3.title" = "HTTP 代理 设置";
+
+/* Class = "NSButtonCell"; title = "Follow Globel Mode"; ObjectID = "ofk-Pc-c8f"; */
+"ofk-Pc-c8f.title" = "跟随全局模式";
diff --git a/proxy_conf_helper/main.m b/proxy_conf_helper/main.m
index 039846b..e1f39db 100644
--- a/proxy_conf_helper/main.m
+++ b/proxy_conf_helper/main.m
@@ -22,9 +22,10 @@ int main(int argc, const char * argv[])
NSString* mode;
NSString* pacURL;
NSString* portString;
+ NSString* privoxyPortString;
BRLOptionParser *options = [BRLOptionParser new];
- [options setBanner:@"Usage: %s [-v] [-m auto|global|off] [-u ] [-p ]", argv[0]];
+ [options setBanner:@"Usage: %s [-v] [-m auto|global|off] [-u ] [-p ] [-r ]", argv[0]];
// Version
[options addOption:"version" flag:'v' description:@"Print the version number." block:^{
@@ -40,11 +41,13 @@ int main(int argc, const char * argv[])
}];
// Mode
- [options addOption:"mode" flag:'m' description:@"Proxy mode, may be: auto,blobal,off" argument:&mode];
+ [options addOption:"mode" flag:'m' description:@"Proxy mode, may be: auto,global,off" argument:&mode];
[options addOption:"pac-url" flag:'u' description:@"PAC file url for auto mode." argument:&pacURL];
[options addOption:"port" flag:'p' description:@"Listen port for global mode." argument:&portString];
+ [options addOption:"privoxy-port" flag:'r' description:@"Privoxy Port for global mode." argument:&privoxyPortString];
+
NSMutableSet* networkServiceKeys = [NSMutableSet set];
[options addOption:"network-service" flag:'n' description:@"Manual specify the network profile need to set proxy." blockWithArgument:^(NSString* value){
[networkServiceKeys addObject:value];
@@ -57,7 +60,6 @@ int main(int argc, const char * argv[])
exit(EXIT_FAILURE);
}
- NSInteger port = 0;
if (mode) {
if ([@"auto" isEqualToString:mode]) {
if (!pacURL) {
@@ -75,6 +77,7 @@ int main(int argc, const char * argv[])
return 0;
}
+ NSInteger port = 0;
if (portString) {
port = [portString integerValue];
if (0 == port) {
@@ -82,6 +85,14 @@ int main(int argc, const char * argv[])
}
}
+ NSInteger privoxyPort = 0;
+ if (privoxyPortString) {
+ privoxyPort = [privoxyPortString integerValue];
+ if (0 == privoxyPort) {
+ return 1;
+ }
+ }
+
static AuthorizationRef authRef;
static AuthorizationFlags authFlags;
authFlags = kAuthorizationFlagDefaults
@@ -149,6 +160,22 @@ int main(int argc, const char * argv[])
kCFNetworkProxiesSOCKSEnable];
[proxies setObject:@[@"127.0.0.1", @"localhost"] forKey:(NSString *)kCFNetworkProxiesExceptionsList];
+ if (privoxyPort != 0) {
+ [proxies setObject:@"127.0.0.1" forKey:(NSString *)
+ kCFNetworkProxiesHTTPProxy];
+ [proxies setObject:[NSNumber numberWithInteger:privoxyPort] forKey:(NSString*)
+ kCFNetworkProxiesHTTPPort];
+ [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString*)
+ kCFNetworkProxiesHTTPEnable];
+
+ [proxies setObject:@"127.0.0.1" forKey:(NSString *)
+ kCFNetworkProxiesHTTPSProxy];
+ [proxies setObject:[NSNumber numberWithInteger:privoxyPort] forKey:(NSString*)
+ kCFNetworkProxiesHTTPSPort];
+ [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString*)
+ kCFNetworkProxiesHTTPSEnable];
+ }
+
SCPreferencesPathSetValue(prefRef, (__bridge CFStringRef)prefPath
, (__bridge CFDictionaryRef)proxies);
} else if ([mode isEqualToString:@"off"]) {