From aab998fae98d47abf8531e5ed8a736c62bd0f3dc Mon Sep 17 00:00:00 2001 From: Hiddify Date: Mon, 18 Mar 2024 10:53:54 +0100 Subject: [PATCH] fix: issue with singbox 1.8.9 --- v2/custom.go | 33 ++++++++++++++++++++------------- v2/old_command_client.go | 19 ++++++++++--------- v2/old_command_server.go | 16 ++++++++-------- v2/old_commands.go | 12 ++++++------ v2/service.go | 9 +++++++-- 5 files changed, 51 insertions(+), 38 deletions(-) diff --git a/v2/custom.go b/v2/custom.go index 9430e41..21151cb 100644 --- a/v2/custom.go +++ b/v2/custom.go @@ -18,20 +18,20 @@ import ( var Box *libbox.BoxService var configOptions *config.ConfigOptions var activeConfigPath *string -var logFactory *log.Factory +var coreLogFactory log.Factory func StopAndAlert(msgType pb.MessageType, message string) { SetCoreStatus(pb.CoreState_STOPPED, msgType, message) config.DeactivateTunnelService() - if commandServer != nil { - commandServer.SetService(nil) + if oldCommandServer != nil { + oldCommandServer.SetService(nil) } if Box != nil { Box.Close() Box = nil } - if commandServer != nil { - commandServer.Close() + if oldCommandServer != nil { + oldCommandServer.Close() } if EnableBridge { alert := msgType.String() @@ -79,6 +79,7 @@ func StartService(in *pb.StartRequest) (*pb.CoreInfoResponse, error) { if err != nil { Log(pb.LogLevel_FATAL, pb.LogType_CORE, err.Error()) resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_ERROR_READING_CONFIG, err.Error()) + StopAndAlert(pb.MessageType_UNEXPECTED_ERROR, err.Error()) return &resp, err } content = string(fileContent) @@ -91,6 +92,7 @@ func StartService(in *pb.StartRequest) (*pb.CoreInfoResponse, error) { if err != nil { Log(pb.LogLevel_FATAL, pb.LogType_CORE, err.Error()) resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_ERROR_PARSING_CONFIG, err.Error()) + StopAndAlert(pb.MessageType_UNEXPECTED_ERROR, err.Error()) return &resp, err } if !in.EnableRawConfig { @@ -100,16 +102,19 @@ func StartService(in *pb.StartRequest) (*pb.CoreInfoResponse, error) { if err != nil { Log(pb.LogLevel_FATAL, pb.LogType_CORE, err.Error()) resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_ERROR_BUILDING_CONFIG, err.Error()) + StopAndAlert(pb.MessageType_UNEXPECTED_ERROR, err.Error()) return &resp, err } } Log(pb.LogLevel_INFO, pb.LogType_CORE, "Saving Contnet") config.SaveCurrentConfig(filepath.Join(sWorkingPath, "current-config.json"), parsedContent) if in.EnableOldCommandServer { - err = startCommandServer(*logFactory) + Log(pb.LogLevel_INFO, pb.LogType_CORE, "Starting Command Server") + err = startCommandServer() if err != nil { Log(pb.LogLevel_FATAL, pb.LogType_CORE, err.Error()) resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_START_COMMAND_SERVER, err.Error()) + StopAndAlert(pb.MessageType_UNEXPECTED_ERROR, err.Error()) return &resp, err } } @@ -120,6 +125,7 @@ func StartService(in *pb.StartRequest) (*pb.CoreInfoResponse, error) { if err != nil { Log(pb.LogLevel_FATAL, pb.LogType_CORE, err.Error()) resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_CREATE_SERVICE, err.Error()) + StopAndAlert(pb.MessageType_UNEXPECTED_ERROR, err.Error()) return &resp, err } Log(pb.LogLevel_INFO, pb.LogType_CORE, "Service.. started") @@ -131,11 +137,12 @@ func StartService(in *pb.StartRequest) (*pb.CoreInfoResponse, error) { if err != nil { Log(pb.LogLevel_FATAL, pb.LogType_CORE, err.Error()) resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_START_SERVICE, err.Error()) + StopAndAlert(pb.MessageType_UNEXPECTED_ERROR, err.Error()) return &resp, err } Box = instance if in.EnableOldCommandServer { - commandServer.SetService(Box) + oldCommandServer.SetService(Box) } resp := SetCoreStatus(pb.CoreState_STARTED, pb.MessageType_EMPTY, "") @@ -263,8 +270,8 @@ func Stop() (*pb.CoreInfoResponse, error) { } SetCoreStatus(pb.CoreState_STOPPING, pb.MessageType_EMPTY, "") config.DeactivateTunnelService() - if commandServer != nil { - commandServer.SetService(nil) + if oldCommandServer != nil { + oldCommandServer.SetService(nil) } err := Box.Close() @@ -276,16 +283,16 @@ func Stop() (*pb.CoreInfoResponse, error) { }, fmt.Errorf("Error while stopping the service.") } Box = nil - if commandServer != nil { - err = commandServer.Close() + if oldCommandServer != nil { + err = oldCommandServer.Close() if err != nil { return &pb.CoreInfoResponse{ CoreState: CoreState, MessageType: pb.MessageType_UNEXPECTED_ERROR, Message: "Error while Closing the comand server.", - }, fmt.Errorf("Error while Closing the comand server.") + }, fmt.Errorf("error while Closing the comand server.") } - commandServer = nil + oldCommandServer = nil } resp := SetCoreStatus(pb.CoreState_STOPPED, pb.MessageType_EMPTY, "") return &resp, nil diff --git a/v2/old_command_client.go b/v2/old_command_client.go index 1655c1c..41d5528 100644 --- a/v2/old_command_client.go +++ b/v2/old_command_client.go @@ -6,6 +6,7 @@ import ( "github.com/hiddify/libcore/bridge" "github.com/sagernet/sing-box/experimental/libbox" + "github.com/sagernet/sing-box/log" ) var ( @@ -13,24 +14,24 @@ var ( ) type OldCommandClientHandler struct { - port int64 - // logger log.Logger + port int64 + logger log.Logger } func (cch *OldCommandClientHandler) Connected() { - // cch.logger.Debug("CONNECTED") + cch.logger.Debug("CONNECTED") } func (cch *OldCommandClientHandler) Disconnected(message string) { - // cch.logger.Debug("DISCONNECTED: ", message) + cch.logger.Debug("DISCONNECTED: ", message) } func (cch *OldCommandClientHandler) ClearLog() { - // cch.logger.Debug("clear log") + cch.logger.Debug("clear log") } func (cch *OldCommandClientHandler) WriteLog(message string) { - // cch.logger.Debug("log: ", message) + cch.logger.Debug("log: ", message) } func (cch *OldCommandClientHandler) WriteStatus(message *libbox.StatusMessage) { @@ -44,7 +45,7 @@ func (cch *OldCommandClientHandler) WriteStatus(message *libbox.StatusMessage) { "downlink-total": message.DownlinkTotal, }, ) - // cch.logger.Debug("Memory: ", libbox.FormatBytes(message.Memory), ", Goroutines: ", message.Goroutines) + cch.logger.Debug("Memory: ", libbox.FormatBytes(message.Memory), ", Goroutines: ", message.Goroutines) if err != nil { bridge.SendStringToPort(cch.port, fmt.Sprintf("error: %e", err)) } else { @@ -83,11 +84,11 @@ func (cch *OldCommandClientHandler) WriteGroups(message libbox.OutboundGroupIter } func (cch *OldCommandClientHandler) InitializeClashMode(modeList libbox.StringIterator, currentMode string) { - // cch.logger.Debug("initial clash mode: ", currentMode) + cch.logger.Debug("initial clash mode: ", currentMode) } func (cch *OldCommandClientHandler) UpdateClashMode(newMode string) { - // cch.logger.Debug("update clash mode: ", newMode) + cch.logger.Debug("update clash mode: ", newMode) } type OutboundGroup struct { diff --git a/v2/old_command_server.go b/v2/old_command_server.go index 285c32a..922afea 100644 --- a/v2/old_command_server.go +++ b/v2/old_command_server.go @@ -7,7 +7,7 @@ import ( "github.com/sagernet/sing-box/log" ) -var commandServer *libbox.CommandServer +var oldCommandServer *libbox.CommandServer type CommandServerHandler struct { logger log.Logger @@ -17,9 +17,9 @@ func (csh *CommandServerHandler) ServiceReload() error { csh.logger.Trace("Reloading service") SetCoreStatus(pb.CoreState_STARTING, pb.MessageType_EMPTY, "") - if commandServer != nil { - commandServer.SetService(nil) - commandServer = nil + if oldCommandServer != nil { + oldCommandServer.SetService(nil) + oldCommandServer = nil } if Box != nil { Box.Close() @@ -45,9 +45,9 @@ func (csh *CommandServerHandler) SetSystemProxyEnabled(isEnabled bool) error { func (csh *CommandServerHandler) PostServiceClose() { } -func startCommandServer(logFactory log.Factory) error { - logger := logFactory.NewLogger("[Command Server Handler]") +func startCommandServer() error { + logger := coreLogFactory.NewLogger("[Command Server Handler]") logger.Trace("Starting command server") - commandServer = libbox.NewCommandServer(&CommandServerHandler{logger: logger}, 300) - return commandServer.Start() + oldCommandServer = libbox.NewCommandServer(&CommandServerHandler{logger: logger}, 300) + return oldCommandServer.Start() } diff --git a/v2/old_commands.go b/v2/old_commands.go index 1a2655f..f7505d9 100644 --- a/v2/old_commands.go +++ b/v2/old_commands.go @@ -15,8 +15,8 @@ func StartCommand(command int32, port int64) error { case libbox.CommandStatus: oldStatusClient = libbox.NewCommandClient( &OldCommandClientHandler{ - port: port, - // logger: logFactory.NewLogger("[Status Command Client]"), + port: port, + logger: coreLogFactory.NewLogger("[Status Command Client]"), }, &libbox.CommandClientOptions{ Command: libbox.CommandStatus, @@ -27,8 +27,8 @@ func StartCommand(command int32, port int64) error { case libbox.CommandGroup: oldGroupClient = libbox.NewCommandClient( &OldCommandClientHandler{ - port: port, - // logger: logFactory.NewLogger("[Group Command Client]"), + port: port, + logger: coreLogFactory.NewLogger("[Group Command Client]"), }, &libbox.CommandClientOptions{ Command: libbox.CommandGroup, @@ -39,8 +39,8 @@ func StartCommand(command int32, port int64) error { case libbox.CommandGroupInfoOnly: oldGroupInfoOnlyClient = libbox.NewCommandClient( &OldCommandClientHandler{ - port: port, - // logger: logFactory.NewLogger("[GroupInfoOnly Command Client]"), + port: port, + logger: coreLogFactory.NewLogger("[GroupInfoOnly Command Client]"), }, &libbox.CommandClientOptions{ Command: libbox.CommandGroupInfoOnly, diff --git a/v2/service.go b/v2/service.go index 7848d8a..9ac6412 100644 --- a/v2/service.go +++ b/v2/service.go @@ -45,9 +45,14 @@ func Setup(basePath string, workingPath string, tempPath string, statusPort int6 log.Options{ DefaultWriter: defaultWriter, BaseTime: time.Now(), - Observable: false, + Observable: true, + // Options: option.LogOptions{ + // Disabled: false, + // Level: "trace", + // Output: "stdout", + // }, }) - logFactory = &factory + coreLogFactory = factory return err }