diff --git a/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib b/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib
index 45a77df..4908f50 100644
--- a/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib
+++ b/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib
@@ -150,7 +150,10 @@
-
+
+
+
+
@@ -264,6 +267,7 @@
+
@@ -273,28 +277,26 @@
-
-
+
-
+
-
-
+
-
-
+
+
@@ -404,7 +406,7 @@
-
+
diff --git a/ShadowsocksX-NG/PACUtils.swift b/ShadowsocksX-NG/PACUtils.swift
index df6e923..6977895 100644
--- a/ShadowsocksX-NG/PACUtils.swift
+++ b/ShadowsocksX-NG/PACUtils.swift
@@ -21,6 +21,13 @@ let GFWListFilePath = PACRulesDirPath + "gfwlist.txt"
func SyncPac() {
var needGenerate = false
+ let nowSocks5Address = UserDefaults.standard.string(forKey: "LocalSocks5.ListenAddress")
+ let oldSocks5Address = UserDefaults.standard.string(forKey: "LocalSocks5.ListenAddress.Old")
+ if nowSocks5Address != oldSocks5Address {
+ needGenerate = true
+ UserDefaults.standard.set(nowSocks5Address, forKey: "LocalSocks5.ListenAddress.Old")
+ }
+
let nowSocks5Port = UserDefaults.standard.integer(forKey: "LocalSocks5.ListenPort")
let oldSocks5Port = UserDefaults.standard.integer(forKey: "LocalSocks5.ListenPort.Old")
if nowSocks5Port != oldSocks5Port {
@@ -65,6 +72,7 @@ func GeneratePACFile() -> Bool {
try! fileMgr.copyItem(atPath: src!, toPath: PACUserRuleFilePath)
}
+ let socks5Address = UserDefaults.standard.string(forKey: "LocalSocks5.ListenAddress")!
let socks5Port = UserDefaults.standard.integer(forKey: "LocalSocks5.ListenPort")
do {
@@ -109,11 +117,20 @@ func GeneratePACFile() -> Bool {
jsStr = jsStr!.replacingOccurrences(of: "__RULES__"
, with: rulesJsonStr!)
// Replace __SOCKS5PORT__ palcholder in pac js
- let result = jsStr!.replacingOccurrences(of: "__SOCKS5PORT__"
+ jsStr = jsStr!.replacingOccurrences(of: "__SOCKS5PORT__"
, with: "\(socks5Port)")
+ // Replace __SOCKS5ADDR__ palcholder in pac js
+ var sin6 = sockaddr_in6()
+ if socks5Address.withCString({ cstring in inet_pton(AF_INET6, cstring, &sin6.sin6_addr) }) == 1 {
+ jsStr = jsStr!.replacingOccurrences(of: "__SOCKS5ADDR__"
+ , with: "[\(socks5Address)]")
+ } else {
+ jsStr = jsStr!.replacingOccurrences(of: "__SOCKS5ADDR__"
+ , with: socks5Address)
+ }
// Write the pac js to file.
- try result.data(using: String.Encoding.utf8)?
+ try jsStr!.data(using: String.Encoding.utf8)?
.write(to: URL(fileURLWithPath: PACFilePath), options: .atomic)
return true
diff --git a/ShadowsocksX-NG/abp.js b/ShadowsocksX-NG/abp.js
index 4437afb..119c462 100644
--- a/ShadowsocksX-NG/abp.js
+++ b/ShadowsocksX-NG/abp.js
@@ -1,7 +1,7 @@
// Generated by gfwlist2pac in precise mode
// https://github.com/clowwindy/gfwlist2pac
-var proxy = "SOCKS5 127.0.0.1:__SOCKS5PORT__; SOCKS 127.0.0.1:__SOCKS5PORT__; DIRECT;";
+var proxy = "SOCKS5 __SOCKS5ADDR__:__SOCKS5PORT__; SOCKS __SOCKS5ADDR__:__SOCKS5PORT__; DIRECT;";
var rules = __RULES__;