command_system_proxy.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. defer conn.Close()
  35. status := s.handler.GetSystemProxyStatus()
  36. err := binary.Write(conn, binary.BigEndian, status.Available)
  37. if err != nil {
  38. return err
  39. }
  40. if status.Available {
  41. err = binary.Write(conn, binary.BigEndian, status.Enabled)
  42. if err != nil {
  43. return err
  44. }
  45. }
  46. return nil
  47. }
  48. func (c *CommandClient) SetSystemProxyEnabled(isEnabled bool) error {
  49. conn, err := c.directConnect()
  50. if err != nil {
  51. return err
  52. }
  53. defer conn.Close()
  54. err = binary.Write(conn, binary.BigEndian, uint8(CommandSetSystemProxyEnabled))
  55. if err != nil {
  56. return err
  57. }
  58. err = binary.Write(conn, binary.BigEndian, isEnabled)
  59. if err != nil {
  60. return err
  61. }
  62. return readError(conn)
  63. }
  64. func (s *CommandServer) handleSetSystemProxyEnabled(conn net.Conn) error {
  65. defer conn.Close()
  66. var isEnabled bool
  67. err := binary.Read(conn, binary.BigEndian, &isEnabled)
  68. if err != nil {
  69. return err
  70. }
  71. err = s.handler.SetSystemProxyEnabled(isEnabled)
  72. if err != nil {
  73. return writeError(conn, err)
  74. }
  75. return writeError(conn, nil)
  76. }