1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-08-25 05:44:16 -04:00
v2fly/app/router/rules/json/router.go

64 lines
1.4 KiB
Go
Raw Normal View History

2015-11-22 06:05:21 -05:00
package json
import (
"encoding/json"
2015-12-07 16:47:47 -05:00
v2routerjson "github.com/v2ray/v2ray-core/app/router/json"
"github.com/v2ray/v2ray-core/app/router/rules"
2015-11-22 06:05:21 -05:00
"github.com/v2ray/v2ray-core/common/log"
)
type RouterRuleConfig struct {
RuleList []json.RawMessage `json:"rules"`
}
2015-12-07 16:47:47 -05:00
func parseRule(msg json.RawMessage) rules.Rule {
2015-11-22 06:05:21 -05:00
rule := new(Rule)
err := json.Unmarshal(msg, rule)
if err != nil {
log.Error("Invalid router rule: %v", err)
return nil
}
if rule.Type == "field" {
fieldrule := new(FieldRule)
err = json.Unmarshal(msg, fieldrule)
if err != nil {
log.Error("Invalid field rule: %v", err)
return nil
}
return fieldrule
}
2015-12-08 11:31:31 -05:00
if rule.Type == "chinaip" {
chinaiprule := new(ChinaIPRule)
if err := json.Unmarshal(msg, chinaiprule); err != nil {
log.Error("Invalid chinaip rule: %v", err)
return nil
}
return chinaiprule
}
2015-12-13 19:01:57 -05:00
if rule.Type == "chinasites" {
chinasitesrule := new(ChinaSitesRule)
if err := json.Unmarshal(msg, chinasitesrule); err != nil {
log.Error("Invalid chinasites rule: %v", err)
return nil
}
return chinasitesrule
}
2015-11-22 06:05:21 -05:00
log.Error("Unknown router rule type: %s", rule.Type)
return nil
}
2015-12-07 16:47:47 -05:00
func (this *RouterRuleConfig) Rules() []rules.Rule {
rules := make([]rules.Rule, len(this.RuleList))
2015-11-22 06:05:21 -05:00
for idx, rawRule := range this.RuleList {
rules[idx] = parseRule(rawRule)
}
return rules
}
func init() {
2015-12-07 16:47:47 -05:00
v2routerjson.RegisterRouterConfig("rules", func() interface{} {
2015-11-22 06:05:21 -05:00
return new(RouterRuleConfig)
})
}