|
|
@@ -38,24 +38,19 @@ func (this *cacheEntry) Extend() {
|
|
|
}
|
|
|
|
|
|
type Router struct {
|
|
|
- rules []*Rule
|
|
|
- cache *collect.ValidityMap
|
|
|
+ config *RouterRuleConfig
|
|
|
+ cache *collect.ValidityMap
|
|
|
}
|
|
|
|
|
|
-func NewRouter() *Router {
|
|
|
+func NewRouter(config *RouterRuleConfig) *Router {
|
|
|
return &Router{
|
|
|
- rules: make([]*Rule, 0, 16),
|
|
|
- cache: collect.NewValidityMap(3600),
|
|
|
+ config: config,
|
|
|
+ cache: collect.NewValidityMap(3600),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (this *Router) AddRule(rule *Rule) *Router {
|
|
|
- this.rules = append(this.rules, rule)
|
|
|
- return this
|
|
|
-}
|
|
|
-
|
|
|
func (this *Router) takeDetourWithoutCache(dest v2net.Destination) (string, error) {
|
|
|
- for _, rule := range this.rules {
|
|
|
+ for _, rule := range this.config.Rules {
|
|
|
if rule.Apply(dest) {
|
|
|
return rule.Tag, nil
|
|
|
}
|
|
|
@@ -78,16 +73,7 @@ type RouterFactory struct {
|
|
|
}
|
|
|
|
|
|
func (this *RouterFactory) Create(rawConfig interface{}) (router.Router, error) {
|
|
|
- config := rawConfig.(*RouterRuleConfig)
|
|
|
- rules := config.Rules()
|
|
|
- router := NewRouter()
|
|
|
- for _, rule := range rules {
|
|
|
- if rule == nil {
|
|
|
- return nil, ErrorInvalidRule
|
|
|
- }
|
|
|
- router.AddRule(rule)
|
|
|
- }
|
|
|
- return router, nil
|
|
|
+ return NewRouter(rawConfig.(*RouterRuleConfig)), nil
|
|
|
}
|
|
|
|
|
|
func init() {
|