From 4c295965f2abd88331349457a9e31fed22d2197b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=A8?= Date: Sun, 9 Oct 2016 14:31:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20HTTP=E4=BB=A3=E7=90=86=20?= =?UTF-8?q?=E8=B7=9F=E9=9A=8F=E5=85=A8=E5=B1=80=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShadowsocksX-NG/AppDelegate.swift | 4 +- .../HTTPPreferencesWindowController.xib | 64 +++++++++++-------- ShadowsocksX-NG/ProxyConfHelper.m | 7 ++ ShadowsocksX-NG/proxy_conf_helper_version.h | 2 +- .../AdvPreferencesWindowController.strings | 14 +++- .../HTTPPreferencesWindowController.strings | 3 + proxy_conf_helper/main.m | 33 +++++++++- 7 files changed, 95 insertions(+), 32 deletions(-) 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"]) {