|
@@ -0,0 +1,50 @@
|
|
|
+//go:build darwin
|
|
|
+
|
|
|
+package libbox
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/binary"
|
|
|
+ "net"
|
|
|
+ "runtime/debug"
|
|
|
+
|
|
|
+ E "github.com/sagernet/sing/common/exceptions"
|
|
|
+ "github.com/sagernet/sing/common/rw"
|
|
|
+)
|
|
|
+
|
|
|
+func ClientServiceStop(sharedDirectory string) error {
|
|
|
+ conn, err := clientConnect(sharedDirectory)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ defer conn.Close()
|
|
|
+ err = binary.Write(conn, binary.BigEndian, uint8(CommandServiceStop))
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ var hasError bool
|
|
|
+ err = binary.Read(conn, binary.BigEndian, &hasError)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if hasError {
|
|
|
+ errorMessage, err := rw.ReadVString(conn)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return E.New(errorMessage)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *CommandServer) handleServiceStop(conn net.Conn) error {
|
|
|
+ rErr := s.handler.ServiceStop()
|
|
|
+ err := binary.Write(conn, binary.BigEndian, rErr != nil)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if rErr != nil {
|
|
|
+ return rw.WriteVString(conn, rErr.Error())
|
|
|
+ }
|
|
|
+ debug.FreeOSMemory()
|
|
|
+ return nil
|
|
|
+}
|