fix: issue with singbox 1.8.9

This commit is contained in:
Hiddify
2024-03-18 10:53:54 +01:00
parent aba593322e
commit aab998fae9
5 changed files with 51 additions and 38 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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()
}

View File

@@ -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,

View File

@@ -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
}