diff --git a/app/router/rules/json/fieldrule.go b/app/router/rules/json/fieldrule.go index 2369f6a3..dfcf108f 100644 --- a/app/router/rules/json/fieldrule.go +++ b/app/router/rules/json/fieldrule.go @@ -8,7 +8,6 @@ import ( "strings" v2net "github.com/v2ray/v2ray-core/common/net" - v2netjson "github.com/v2ray/v2ray-core/common/net/json" ) type StringList []string @@ -83,7 +82,7 @@ type FieldRule struct { Domain []DomainMatcher IP []*net.IPNet Port *v2net.PortRange - Network v2net.NetworkList + Network *v2net.NetworkList } func (this *FieldRule) Apply(dest v2net.Destination) bool { @@ -139,10 +138,10 @@ func (this *FieldRule) Apply(dest v2net.Destination) bool { func (this *FieldRule) UnmarshalJSON(data []byte) error { type RawFieldRule struct { Rule - Domain *StringList `json:"domain"` - IP *StringList `json:"ip"` - Port *v2net.PortRange `json:"port"` - Network *v2netjson.NetworkList `json:"network"` + Domain *StringList `json:"domain"` + IP *StringList `json:"ip"` + Port *v2net.PortRange `json:"port"` + Network *v2net.NetworkList `json:"network"` } rawFieldRule := RawFieldRule{} err := json.Unmarshal(data, &rawFieldRule) diff --git a/common/net/json/network.go b/common/net/json/network.go deleted file mode 100644 index de990f1a..00000000 --- a/common/net/json/network.go +++ /dev/null @@ -1,36 +0,0 @@ -package json - -import ( - "strings" - - v2net "github.com/v2ray/v2ray-core/common/net" - serialjson "github.com/v2ray/v2ray-core/common/serial/json" -) - -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 { - strlist, err := serialjson.UnmarshalStringList(data) - if err != nil { - return err - } - *this = NewNetworkList(strlist) - return nil -} - -func (this *NetworkList) HasNetwork(network v2net.Network) bool { - for _, value := range *this { - if value == string(network) { - return true - } - } - return false -} diff --git a/common/net/network.go b/common/net/network.go index bfc57e6d..b5fb610d 100644 --- a/common/net/network.go +++ b/common/net/network.go @@ -1,5 +1,9 @@ package net +import ( + "strings" +) + const ( TCPNetwork = Network("tcp") UDPNetwork = Network("udp") @@ -7,6 +11,21 @@ const ( type Network string -type NetworkList interface { - HasNetwork(Network) bool +type NetworkList []Network + +func NewNetworkList(networks []string) NetworkList { + list := NetworkList(make([]Network, len(networks))) + for idx, network := range networks { + list[idx] = Network(strings.ToLower(strings.TrimSpace(network))) + } + return list +} + +func (this *NetworkList) HasNetwork(network Network) bool { + for _, value := range *this { + if string(value) == string(network) { + return true + } + } + return false } diff --git a/common/net/network_json.go b/common/net/network_json.go new file mode 100644 index 00000000..1d720a16 --- /dev/null +++ b/common/net/network_json.go @@ -0,0 +1,16 @@ +// +build json + +package net + +import ( + serialjson "github.com/v2ray/v2ray-core/common/serial/json" +) + +func (this *NetworkList) UnmarshalJSON(data []byte) error { + strlist, err := serialjson.UnmarshalStringList(data) + if err != nil { + return err + } + *this = NewNetworkList(strlist) + return nil +} diff --git a/common/net/json/network_test.go b/common/net/network_json_test.go similarity index 61% rename from common/net/json/network_test.go rename to common/net/network_json_test.go index cf7064c9..b0d0f81d 100644 --- a/common/net/json/network_test.go +++ b/common/net/network_json_test.go @@ -1,9 +1,12 @@ -package json +// +build json + +package net_test import ( "encoding/json" "testing" + . "github.com/v2ray/v2ray-core/common/net" v2testing "github.com/v2ray/v2ray-core/testing" "github.com/v2ray/v2ray-core/testing/assert" ) @@ -14,8 +17,8 @@ func TestArrayNetworkList(t *testing.T) { var list NetworkList err := json.Unmarshal([]byte("[\"Tcp\"]"), &list) assert.Error(err).IsNil() - assert.Bool(list.HasNetwork("tcp")).IsTrue() - assert.Bool(list.HasNetwork("udp")).IsFalse() + assert.Bool(list.HasNetwork(Network("tcp"))).IsTrue() + assert.Bool(list.HasNetwork(Network("udp"))).IsFalse() } func TestStringNetworkList(t *testing.T) { @@ -24,6 +27,6 @@ func TestStringNetworkList(t *testing.T) { var list NetworkList err := json.Unmarshal([]byte("\"TCP, ip\""), &list) assert.Error(err).IsNil() - assert.Bool(list.HasNetwork("tcp")).IsTrue() - assert.Bool(list.HasNetwork("udp")).IsFalse() + assert.Bool(list.HasNetwork(Network("tcp"))).IsTrue() + assert.Bool(list.HasNetwork(Network("udp"))).IsFalse() } diff --git a/proxy/dokodemo/config.go b/proxy/dokodemo/config.go index 4416d71b..44d02e28 100644 --- a/proxy/dokodemo/config.go +++ b/proxy/dokodemo/config.go @@ -7,6 +7,6 @@ import ( type Config struct { Address v2net.Address Port v2net.Port - Network v2net.NetworkList + Network *v2net.NetworkList Timeout int } diff --git a/proxy/dokodemo/config_json.go b/proxy/dokodemo/config_json.go index d5f6ada4..4e170db1 100644 --- a/proxy/dokodemo/config_json.go +++ b/proxy/dokodemo/config_json.go @@ -6,7 +6,6 @@ import ( "encoding/json" v2net "github.com/v2ray/v2ray-core/common/net" - v2netjson "github.com/v2ray/v2ray-core/common/net/json" "github.com/v2ray/v2ray-core/proxy/internal/config" ) @@ -14,10 +13,10 @@ func init() { config.RegisterInboundConnectionConfig("dokodemo-door", func(data []byte) (interface{}, error) { type DokodemoConfig struct { - Host *v2net.AddressJson `json:"address"` - PortValue v2net.Port `json:"port"` - NetworkList *v2netjson.NetworkList `json:"network"` - TimeoutValue int `json:"timeout"` + Host *v2net.AddressJson `json:"address"` + PortValue v2net.Port `json:"port"` + NetworkList *v2net.NetworkList `json:"network"` + TimeoutValue int `json:"timeout"` } rawConfig := new(DokodemoConfig) if err := json.Unmarshal(data, rawConfig); err != nil {