1
0

command_deprecated_report.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package libbox
  2. import (
  3. "encoding/binary"
  4. "net"
  5. "github.com/sagernet/sing-box/experimental/deprecated"
  6. "github.com/sagernet/sing/common"
  7. E "github.com/sagernet/sing/common/exceptions"
  8. "github.com/sagernet/sing/common/varbin"
  9. "github.com/sagernet/sing/service"
  10. )
  11. func (c *CommandClient) GetDeprecatedNotes() (DeprecatedNoteIterator, error) {
  12. conn, err := c.directConnect()
  13. if err != nil {
  14. return nil, err
  15. }
  16. defer conn.Close()
  17. err = binary.Write(conn, binary.BigEndian, uint8(CommandGetDeprecatedNotes))
  18. if err != nil {
  19. return nil, err
  20. }
  21. err = readError(conn)
  22. if err != nil {
  23. return nil, err
  24. }
  25. var features []deprecated.Note
  26. err = varbin.Read(conn, binary.BigEndian, &features)
  27. if err != nil {
  28. return nil, err
  29. }
  30. return newIterator(common.Map(features, func(it deprecated.Note) *DeprecatedNote { return (*DeprecatedNote)(&it) })), nil
  31. }
  32. func (s *CommandServer) handleGetDeprecatedNotes(conn net.Conn) error {
  33. boxService := s.service
  34. if boxService == nil {
  35. return writeError(conn, E.New("service not ready"))
  36. }
  37. err := writeError(conn, nil)
  38. if err != nil {
  39. return err
  40. }
  41. return varbin.Write(conn, binary.BigEndian, service.FromContext[deprecated.Manager](boxService.ctx).(*deprecatedManager).Get())
  42. }