| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- package json
 
- import (
 
- 	"encoding/json"
 
- 	v2routerjson "github.com/v2ray/v2ray-core/app/router/json"
 
- 	"github.com/v2ray/v2ray-core/app/router/rules"
 
- 	"github.com/v2ray/v2ray-core/common/log"
 
- )
 
- type RouterRuleConfig struct {
 
- 	RuleList []json.RawMessage `json:"rules"`
 
- }
 
- func parseRule(msg json.RawMessage) rules.Rule {
 
- 	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
 
- 	}
 
- 	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
 
- 	}
 
- 	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
 
- 	}
 
- 	log.Error("Unknown router rule type: %s", rule.Type)
 
- 	return nil
 
- }
 
- func (this *RouterRuleConfig) Rules() []rules.Rule {
 
- 	rules := make([]rules.Rule, len(this.RuleList))
 
- 	for idx, rawRule := range this.RuleList {
 
- 		rules[idx] = parseRule(rawRule)
 
- 	}
 
- 	return rules
 
- }
 
- func init() {
 
- 	v2routerjson.RegisterRouterConfig("rules", func() interface{} {
 
- 		return new(RouterRuleConfig)
 
- 	})
 
- }
 
 
  |