command_stop.go 954 B

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