diff --git a/infra/conf/common.go b/infra/conf/common.go index cc439c3dd..b97a200ac 100644 --- a/infra/conf/common.go +++ b/infra/conf/common.go @@ -195,8 +195,11 @@ func (list *PortList) Build() *net.PortList { // UnmarshalJSON implements encoding/json.Unmarshaler.UnmarshalJSON func (list *PortList) UnmarshalJSON(data []byte) error { var listStr string + var number uint32 if err := json.Unmarshal(data, &listStr); err != nil { - return newError("invalid port list: ", string(data)).Base(err) + if err2 := json.Unmarshal(data, &number); err2 != nil { + return newError("invalid port: ", string(data)).Base(err2) + } } rangelist := strings.Split(listStr, ",") for _, rangeStr := range rangelist { @@ -217,6 +220,9 @@ func (list *PortList) UnmarshalJSON(data []byte) error { } } } + if number != 0 { + list.Range = append(list.Range, PortRange{From: uint32(number), To: uint32(number)}) + } return nil } diff --git a/infra/conf/router_test.go b/infra/conf/router_test.go index 52676ad25..ac4284dc8 100644 --- a/infra/conf/router_test.go +++ b/infra/conf/router_test.go @@ -48,6 +48,10 @@ func TestRouterConfig(t *testing.T) { "type": "field", "port": "53, 443, 1000-2000", "outboundTag": "test" + },{ + "type": "field", + "port": 123, + "outboundTag": "test" } ] }, @@ -114,6 +118,16 @@ func TestRouterConfig(t *testing.T) { Tag: "test", }, }, + { + PortList: &net.PortList{ + Range: []*net.PortRange{ + {From: 123, To: 123}, + }, + }, + TargetTag: &router.RoutingRule_Tag{ + Tag: "test", + }, + }, }, }, },