fix port check alert
# Conflicts: # ClashX/goClash/main.go
This commit is contained in:
parent
5349a279ce
commit
3e6c937008
@ -44,6 +44,7 @@
|
||||
499A486522EEA3FD00F6C675 /* Array+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A486422EEA3FC00F6C675 /* Array+Safe.swift */; };
|
||||
49ABB749236B0F9E00535CD7 /* UnsafePointer+bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */; };
|
||||
49B1086A216A356D0064FFCE /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B10869216A356D0064FFCE /* String+Extension.swift */; };
|
||||
49B445162457CDF000B27E3E /* ClashStatusTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B445152457CDF000B27E3E /* ClashStatusTool.swift */; };
|
||||
49B4575D244F4A2A00463C39 /* PrivilegedHelperManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4575C244F4A2A00463C39 /* PrivilegedHelperManager.swift */; };
|
||||
49B4575F244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4575E244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift */; };
|
||||
49BC061C212931F4005A0FE7 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BC061B212931F4005A0FE7 /* AboutViewController.swift */; };
|
||||
@ -155,6 +156,7 @@
|
||||
499A486422EEA3FC00F6C675 /* Array+Safe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Safe.swift"; sourceTree = "<group>"; };
|
||||
49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UnsafePointer+bridge.swift"; sourceTree = "<group>"; };
|
||||
49B10869216A356D0064FFCE /* String+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
|
||||
49B445152457CDF000B27E3E /* ClashStatusTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashStatusTool.swift; sourceTree = "<group>"; };
|
||||
49B4575C244F4A2A00463C39 /* PrivilegedHelperManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivilegedHelperManager.swift; sourceTree = "<group>"; };
|
||||
49B4575E244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PrivilegedHelperManager+Legacy.swift"; sourceTree = "<group>"; };
|
||||
49BC061B212931F4005A0FE7 /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
|
||||
@ -254,6 +256,7 @@
|
||||
4960A6DA2136529200B940C9 /* JSBridgeHandler.swift */,
|
||||
493AEAE2221AE3420016FE98 /* AppVersionUtil.swift */,
|
||||
49D176A62355FE680093DD7B /* NetworkChangeNotifier.swift */,
|
||||
49B445152457CDF000B27E3E /* ClashStatusTool.swift */,
|
||||
);
|
||||
path = Utils;
|
||||
sourceTree = "<group>";
|
||||
@ -704,6 +707,7 @@
|
||||
49862FA0218418C600A1D5EC /* ClashRule.swift in Sources */,
|
||||
49C9EF64223E78F5005D8B6A /* ClashProxy.swift in Sources */,
|
||||
F9E8F34623A12B89002DE5E8 /* String+Encode.swift in Sources */,
|
||||
49B445162457CDF000B27E3E /* ClashStatusTool.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -115,7 +115,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
|
||||
let group = DispatchGroup()
|
||||
var shouldWait = false
|
||||
|
||||
|
||||
if ConfigManager.shared.proxyPortAutoSet && !ConfigManager.shared.isProxySetByOtherVariable.value {
|
||||
Logger.log("ClashX quit need clean proxy setting")
|
||||
shouldWait = true
|
||||
@ -132,7 +132,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
return .terminateNow
|
||||
}
|
||||
|
||||
statusItem.menu = nil
|
||||
if statusItem != nil, statusItem.menu != nil {
|
||||
statusItem.menu = nil
|
||||
}
|
||||
disposeBag = DisposeBag()
|
||||
|
||||
DispatchQueue.global(qos: .default).async {
|
||||
let res = group.wait(timeout: .now() + 5)
|
||||
@ -142,9 +145,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
case .timedOut:
|
||||
Logger.log("ClashX quit after clean up timeout")
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
NSApp.reply(toApplicationShouldTerminate: true)
|
||||
}
|
||||
NSApp.reply(toApplicationShouldTerminate: true)
|
||||
}
|
||||
|
||||
Logger.log("ClashX quit wait for clean up")
|
||||
@ -232,9 +233,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
self.apiPortMenuItem.title = "Api Port: \(ConfigManager.shared.apiPort)"
|
||||
self.ipMenuItem.title = "IP: \(NetworkChangeNotifier.getPrimaryIPAddress() ?? "")"
|
||||
|
||||
if config.port == 0 || config.socketPort == 0 {
|
||||
self.showClashPortErrorAlert()
|
||||
}
|
||||
ClashStatusTool.checkPortConfig(cfg: config)
|
||||
|
||||
}.disposed(by: disposeBag)
|
||||
}
|
||||
@ -811,13 +810,3 @@ extension AppDelegate {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Alerts
|
||||
|
||||
extension AppDelegate {
|
||||
func showClashPortErrorAlert() {
|
||||
let alert = NSAlert()
|
||||
alert.messageText = NSLocalizedString("ClashX Start Error!", comment: "")
|
||||
alert.informativeText = NSLocalizedString("Ports Open Fail, Please try to restart ClashX", comment: "")
|
||||
}
|
||||
}
|
||||
|
28
ClashX/General/Utils/ClashStatusTool.swift
Normal file
28
ClashX/General/Utils/ClashStatusTool.swift
Normal file
@ -0,0 +1,28 @@
|
||||
//
|
||||
// ClashStatusTool.swift
|
||||
// ClashX Pro
|
||||
//
|
||||
// Created by yicheng on 2020/4/28.
|
||||
// Copyright © 2020 west2online. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
|
||||
class ClashStatusTool {
|
||||
static func checkPortConfig(cfg: ClashConfig?) {
|
||||
guard let cfg = cfg else { return }
|
||||
Logger.log("checkPortConfig: \(cfg.port) \(cfg.socketPort)", level: .debug)
|
||||
if cfg.port == 0 || cfg.socketPort == 0 {
|
||||
let alert = NSAlert()
|
||||
alert.messageText = NSLocalizedString("ClashX Start Error!", comment: "")
|
||||
alert.informativeText = NSLocalizedString("Ports Open Fail, Please try to restart ClashX", comment: "")
|
||||
alert.addButton(withTitle: NSLocalizedString("Quit", comment: ""))
|
||||
alert.addButton(withTitle: "Edit Config")
|
||||
let ret = alert.runModal()
|
||||
if ret == .alertSecondButtonReturn {
|
||||
NSWorkspace.shared.openFile(Paths.configPath(for: "config"))
|
||||
}
|
||||
NSApp.terminate(nil)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"C"
|
||||
"encoding/json"
|
||||
"net"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/Dreamacro/clash/config"
|
||||
"github.com/Dreamacro/clash/constant"
|
||||
"github.com/Dreamacro/clash/hub/executor"
|
||||
@ -9,10 +15,6 @@ import (
|
||||
"github.com/Dreamacro/clash/log"
|
||||
"github.com/oschwald/geoip2-golang"
|
||||
"github.com/phayes/freeport"
|
||||
"net"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func isAddrValid(addr string) bool {
|
||||
@ -20,7 +22,7 @@ func isAddrValid(addr string) bool {
|
||||
comps := strings.Split(addr, ":")
|
||||
v := comps[len(comps)-1]
|
||||
if port, err := strconv.Atoi(v); err == nil {
|
||||
if port > 0 && port < 65535 && checkPortAvailable(port, false) {
|
||||
if port > 0 && port < 65535 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@ -28,24 +30,6 @@ func isAddrValid(addr string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func checkPortAvailable(port int, lan bool) bool {
|
||||
var addr string
|
||||
if port < 1 || port > 65534 {
|
||||
return false
|
||||
}
|
||||
if lan {
|
||||
addr = ":"
|
||||
} else {
|
||||
addr = "127.0.0.1:"
|
||||
}
|
||||
l, err := net.Listen("tcp", addr+strconv.Itoa(port))
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
_ = l.Close()
|
||||
return true
|
||||
}
|
||||
|
||||
//export initClashCore
|
||||
func initClashCore() {
|
||||
configFile := filepath.Join(constant.Path.HomeDir(), constant.Path.Config())
|
||||
@ -66,19 +50,6 @@ func parseConfig(checkPort bool) (*config.Config, error) {
|
||||
cfg.General.ExternalController = "127.0.0.1:" + strconv.Itoa(port)
|
||||
cfg.General.Secret = ""
|
||||
}
|
||||
lan := cfg.General.AllowLan
|
||||
|
||||
if !checkPortAvailable(cfg.General.Port, lan) {
|
||||
if port, err := freeport.GetFreePort(); err == nil {
|
||||
cfg.General.Port = port
|
||||
}
|
||||
}
|
||||
|
||||
if !checkPortAvailable(cfg.General.SocksPort, lan) {
|
||||
if port, err := freeport.GetFreePort(); err == nil {
|
||||
cfg.General.SocksPort = port
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
go route.Start(cfg.General.ExternalController, cfg.General.Secret)
|
||||
@ -151,13 +122,13 @@ func clashGetConfigs() *C.char {
|
||||
func verifyGEOIPDataBase() bool {
|
||||
mmdb, err := geoip2.Open(constant.Path.MMDB())
|
||||
if err != nil {
|
||||
log.Warnln("mmdb fail:%s",err.Error())
|
||||
log.Warnln("mmdb fail:%s", err.Error())
|
||||
return false
|
||||
}
|
||||
|
||||
_,err = mmdb.Country(net.ParseIP("114.114.114.114"))
|
||||
if err!=nil {
|
||||
log.Warnln("mmdb lookup fail:%s",err.Error())
|
||||
_, err = mmdb.Country(net.ParseIP("114.114.114.114"))
|
||||
if err != nil {
|
||||
log.Warnln("mmdb lookup fail:%s", err.Error())
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
Loading…
Reference in New Issue
Block a user