router.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package json
  2. import (
  3. "encoding/json"
  4. v2routerjson "github.com/v2ray/v2ray-core/app/router/json"
  5. "github.com/v2ray/v2ray-core/app/router/rules"
  6. "github.com/v2ray/v2ray-core/common/log"
  7. )
  8. type RouterRuleConfig struct {
  9. RuleList []json.RawMessage `json:"rules"`
  10. }
  11. func parseRule(msg json.RawMessage) rules.Rule {
  12. rule := new(Rule)
  13. err := json.Unmarshal(msg, rule)
  14. if err != nil {
  15. log.Error("Invalid router rule: %v", err)
  16. return nil
  17. }
  18. if rule.Type == "field" {
  19. fieldrule := new(FieldRule)
  20. err = json.Unmarshal(msg, fieldrule)
  21. if err != nil {
  22. log.Error("Invalid field rule: %v", err)
  23. return nil
  24. }
  25. return fieldrule
  26. }
  27. log.Error("Unknown router rule type: %s", rule.Type)
  28. return nil
  29. }
  30. func (this *RouterRuleConfig) Rules() []rules.Rule {
  31. rules := make([]rules.Rule, len(this.RuleList))
  32. for idx, rawRule := range this.RuleList {
  33. rules[idx] = parseRule(rawRule)
  34. }
  35. return rules
  36. }
  37. func init() {
  38. v2routerjson.RegisterRouterConfig("rules", func() interface{} {
  39. return new(RouterRuleConfig)
  40. })
  41. }