|
@@ -2,6 +2,7 @@ package json
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"encoding/json"
|
|
"encoding/json"
|
|
|
|
|
+ "errors"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
|
|
|
v2net "github.com/v2ray/v2ray-core/common/net"
|
|
v2net "github.com/v2ray/v2ray-core/common/net"
|
|
@@ -9,17 +10,30 @@ import (
|
|
|
|
|
|
|
|
type NetworkList []string
|
|
type NetworkList []string
|
|
|
|
|
|
|
|
|
|
+func NewNetworkList(networks []string) NetworkList {
|
|
|
|
|
+ list := NetworkList(make([]string, len(networks)))
|
|
|
|
|
+ for idx, network := range networks {
|
|
|
|
|
+ list[idx] = strings.ToLower(strings.TrimSpace(network))
|
|
|
|
|
+ }
|
|
|
|
|
+ return list
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (this *NetworkList) UnmarshalJSON(data []byte) error {
|
|
func (this *NetworkList) UnmarshalJSON(data []byte) error {
|
|
|
var strList []string
|
|
var strList []string
|
|
|
err := json.Unmarshal(data, &strList)
|
|
err := json.Unmarshal(data, &strList)
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ *this = NewNetworkList(strList)
|
|
|
|
|
+ return nil
|
|
|
}
|
|
}
|
|
|
- *this = make([]string, len(strList))
|
|
|
|
|
- for idx, str := range strList {
|
|
|
|
|
- (*this)[idx] = strings.ToLower(str)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ var str string
|
|
|
|
|
+ err = json.Unmarshal(data, &str)
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ strList := strings.Split(str, ",")
|
|
|
|
|
+ *this = NewNetworkList(strList)
|
|
|
|
|
+ return nil
|
|
|
}
|
|
}
|
|
|
- return nil
|
|
|
|
|
|
|
+ return errors.New("Unknown format of network list: " + string(data))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (this *NetworkList) HasNetwork(network v2net.Network) bool {
|
|
func (this *NetworkList) HasNetwork(network v2net.Network) bool {
|