command_system_proxy.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package libbox
  2. import (
  3. "encoding/binary"
  4. "net"
  5. )
  6. type SystemProxyStatus struct {
  7. Available bool
  8. Enabled bool
  9. }
  10. func (c *CommandClient) GetSystemProxyStatus() (*SystemProxyStatus, error) {
  11. conn, err := c.directConnectWithRetry()
  12. if err != nil {
  13. return nil, err
  14. }
  15. defer conn.Close()
  16. err = binary.Write(conn, binary.BigEndian, uint8(CommandGetSystemProxyStatus))
  17. if err != nil {
  18. return nil, err
  19. }
  20. var status SystemProxyStatus
  21. err = binary.Read(conn, binary.BigEndian, &status.Available)
  22. if err != nil {
  23. return nil, err
  24. }
  25. if status.Available {
  26. err = binary.Read(conn, binary.BigEndian, &status.Enabled)
  27. if err != nil {
  28. return nil, err
  29. }
  30. }
  31. return &status, nil
  32. }
  33. func (s *CommandServer) handleGetSystemProxyStatus(conn net.Conn) error {
  34. status := s.handler.GetSystemProxyStatus()
  35. err := binary.Write(conn, binary.BigEndian, status.Available)
  36. if err != nil {
  37. return err
  38. }
  39. if status.Available {
  40. err = binary.Write(conn, binary.BigEndian, status.Enabled)
  41. if err != nil {
  42. return err
  43. }
  44. }
  45. return nil
  46. }
  47. func (c *CommandClient) SetSystemProxyEnabled(isEnabled bool) error {
  48. conn, err := c.directConnect()
  49. if err != nil {
  50. return err
  51. }
  52. defer conn.Close()
  53. err = binary.Write(conn, binary.BigEndian, uint8(CommandSetSystemProxyEnabled))
  54. if err != nil {
  55. return err
  56. }
  57. err = binary.Write(conn, binary.BigEndian, isEnabled)
  58. if err != nil {
  59. return err
  60. }
  61. return readError(conn)
  62. }
  63. func (s *CommandServer) handleSetSystemProxyEnabled(conn net.Conn) error {
  64. var isEnabled bool
  65. err := binary.Read(conn, binary.BigEndian, &isEnabled)
  66. if err != nil {
  67. return err
  68. }
  69. err = s.handler.SetSystemProxyEnabled(isEnabled)
  70. if err != nil {
  71. return writeError(conn, err)
  72. }
  73. return writeError(conn, nil)
  74. }