command_shared.go 698 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package libbox
  2. import (
  3. "encoding/binary"
  4. "io"
  5. E "github.com/sagernet/sing/common/exceptions"
  6. "github.com/sagernet/sing/common/rw"
  7. )
  8. func readError(reader io.Reader) error {
  9. var hasError bool
  10. err := binary.Read(reader, binary.BigEndian, &hasError)
  11. if err != nil {
  12. return err
  13. }
  14. if hasError {
  15. errorMessage, err := rw.ReadVString(reader)
  16. if err != nil {
  17. return err
  18. }
  19. return E.New(errorMessage)
  20. }
  21. return nil
  22. }
  23. func writeError(writer io.Writer, wErr error) error {
  24. err := binary.Write(writer, binary.BigEndian, wErr != nil)
  25. if err != nil {
  26. return err
  27. }
  28. if wErr != nil {
  29. err = rw.WriteVString(writer, wErr.Error())
  30. if err != nil {
  31. return err
  32. }
  33. }
  34. return nil
  35. }