command_stop.go 973 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //go:build darwin
  2. package libbox
  3. import (
  4. "encoding/binary"
  5. "net"
  6. "runtime/debug"
  7. E "github.com/sagernet/sing/common/exceptions"
  8. "github.com/sagernet/sing/common/rw"
  9. )
  10. func ClientServiceStop(sharedDirectory string) error {
  11. conn, err := clientConnect(sharedDirectory)
  12. if err != nil {
  13. return err
  14. }
  15. defer conn.Close()
  16. err = binary.Write(conn, binary.BigEndian, uint8(CommandServiceStop))
  17. if err != nil {
  18. return err
  19. }
  20. var hasError bool
  21. err = binary.Read(conn, binary.BigEndian, &hasError)
  22. if err != nil {
  23. return err
  24. }
  25. if hasError {
  26. errorMessage, err := rw.ReadVString(conn)
  27. if err != nil {
  28. return err
  29. }
  30. return E.New(errorMessage)
  31. }
  32. return nil
  33. }
  34. func (s *CommandServer) handleServiceStop(conn net.Conn) error {
  35. rErr := s.handler.ServiceStop()
  36. err := binary.Write(conn, binary.BigEndian, rErr != nil)
  37. if err != nil {
  38. return err
  39. }
  40. if rErr != nil {
  41. return rw.WriteVString(conn, rErr.Error())
  42. }
  43. debug.FreeOSMemory()
  44. return nil
  45. }