fix port field parsing. fixes #1684

This commit is contained in:
eric 2019-05-11 23:14:38 +08:00
parent d66c3896ed
commit 778767a125
2 changed files with 21 additions and 1 deletions

View File

@ -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
}

View File

@ -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",
},
},
},
},
},