network.go 773 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package option
  2. import (
  3. "github.com/goccy/go-json"
  4. C "github.com/sagernet/sing-box/constant"
  5. E "github.com/sagernet/sing/common/exceptions"
  6. )
  7. type NetworkList []string
  8. func (v *NetworkList) UnmarshalJSON(data []byte) error {
  9. var networkList []string
  10. err := json.Unmarshal(data, &networkList)
  11. if err != nil {
  12. var networkItem string
  13. err = json.Unmarshal(data, &networkItem)
  14. if err != nil {
  15. return err
  16. }
  17. networkList = []string{networkItem}
  18. }
  19. for _, networkName := range networkList {
  20. switch networkName {
  21. case "tcp", "udp":
  22. default:
  23. return E.New("unknown network: " + networkName)
  24. }
  25. }
  26. *v = networkList
  27. return nil
  28. }
  29. func (v *NetworkList) Build() []string {
  30. if len(*v) == 0 {
  31. return []string{C.NetworkTCP, C.NetworkUDP}
  32. }
  33. return *v
  34. }