mirror of https://github.com/v2ray/v2ray-core
				
				
				
			remove unnecessary code
							parent
							
								
									de77b89bb6
								
							
						
					
					
						commit
						09e5ae7a4b
					
				| 
						 | 
				
			
			@ -13,15 +13,13 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	ErrInvalidRule      = errors.New("Invalid Rule")
 | 
			
		||||
	ErrNoRuleApplicable = errors.New("No rule applicable")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Router struct {
 | 
			
		||||
	domainStrategy Config_DomainStrategy
 | 
			
		||||
	rules          []Rule
 | 
			
		||||
	//	cache          *RoutingTable
 | 
			
		||||
	dnsServer dns.Server
 | 
			
		||||
	dnsServer      dns.Server
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewRouter(ctx context.Context, config *Config) (*Router, error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -31,8 +29,7 @@ func NewRouter(ctx context.Context, config *Config) (*Router, error) {
 | 
			
		|||
	}
 | 
			
		||||
	r := &Router{
 | 
			
		||||
		domainStrategy: config.DomainStrategy,
 | 
			
		||||
		//cache:          NewRoutingTable(),
 | 
			
		||||
		rules: make([]Rule, len(config.Rule)),
 | 
			
		||||
		rules:          make([]Rule, len(config.Rule)),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	space.OnInitialize(func() error {
 | 
			
		||||
| 
						 | 
				
			
			@ -54,8 +51,7 @@ func NewRouter(ctx context.Context, config *Config) (*Router, error) {
 | 
			
		|||
	return r, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Private: Visible for testing.
 | 
			
		||||
func (v *Router) ResolveIP(dest net.Destination) []net.Address {
 | 
			
		||||
func (v *Router) resolveIP(dest net.Destination) []net.Address {
 | 
			
		||||
	ips := v.dnsServer.Get(dest.Address.Domain())
 | 
			
		||||
	if len(ips) == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +63,7 @@ func (v *Router) ResolveIP(dest net.Destination) []net.Address {
 | 
			
		|||
	return dests
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Router) takeDetourWithoutCache(ctx context.Context) (string, error) {
 | 
			
		||||
func (v *Router) TakeDetour(ctx context.Context) (string, error) {
 | 
			
		||||
	for _, rule := range v.rules {
 | 
			
		||||
		if rule.Apply(ctx) {
 | 
			
		||||
			return rule.Tag, nil
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +73,7 @@ func (v *Router) takeDetourWithoutCache(ctx context.Context) (string, error) {
 | 
			
		|||
	dest := proxy.DestinationFromContext(ctx)
 | 
			
		||||
	if v.domainStrategy == Config_IpIfNonMatch && dest.Address.Family().IsDomain() {
 | 
			
		||||
		log.Info("Router: Looking up IP for ", dest)
 | 
			
		||||
		ipDests := v.ResolveIP(dest)
 | 
			
		||||
		ipDests := v.resolveIP(dest)
 | 
			
		||||
		if ipDests != nil {
 | 
			
		||||
			ctx = proxy.ContextWithResolveIPs(ctx, ipDests)
 | 
			
		||||
			for _, rule := range v.rules {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,17 +87,6 @@ func (v *Router) takeDetourWithoutCache(ctx context.Context) (string, error) {
 | 
			
		|||
	return "", ErrNoRuleApplicable
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Router) TakeDetour(ctx context.Context) (string, error) {
 | 
			
		||||
	//destStr := dest.String()
 | 
			
		||||
	//found, tag, err := v.cache.Get(destStr)
 | 
			
		||||
	//if !found {
 | 
			
		||||
	tag, err := v.takeDetourWithoutCache(ctx)
 | 
			
		||||
	//v.cache.Set(destStr, tag, err)
 | 
			
		||||
	return tag, err
 | 
			
		||||
	//}
 | 
			
		||||
	//return tag, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (Router) Interface() interface{} {
 | 
			
		||||
	return (*Router)(nil)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,70 +0,0 @@
 | 
			
		|||
package router
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type RoutingEntry struct {
 | 
			
		||||
	tag    string
 | 
			
		||||
	err    error
 | 
			
		||||
	expire time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *RoutingEntry) Extend() {
 | 
			
		||||
	v.expire = time.Now().Add(time.Hour)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *RoutingEntry) Expired() bool {
 | 
			
		||||
	return v.expire.Before(time.Now())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RoutingTable struct {
 | 
			
		||||
	sync.RWMutex
 | 
			
		||||
	table map[string]*RoutingEntry
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewRoutingTable() *RoutingTable {
 | 
			
		||||
	return &RoutingTable{
 | 
			
		||||
		table: make(map[string]*RoutingEntry),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *RoutingTable) Cleanup() {
 | 
			
		||||
	v.Lock()
 | 
			
		||||
	defer v.Unlock()
 | 
			
		||||
 | 
			
		||||
	for key, value := range v.table {
 | 
			
		||||
		if value.Expired() {
 | 
			
		||||
			delete(v.table, key)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *RoutingTable) Set(destination string, tag string, err error) {
 | 
			
		||||
	v.Lock()
 | 
			
		||||
	defer v.Unlock()
 | 
			
		||||
 | 
			
		||||
	entry := &RoutingEntry{
 | 
			
		||||
		tag: tag,
 | 
			
		||||
		err: err,
 | 
			
		||||
	}
 | 
			
		||||
	entry.Extend()
 | 
			
		||||
	v.table[destination] = entry
 | 
			
		||||
 | 
			
		||||
	if len(v.table) > 1000 {
 | 
			
		||||
		go v.Cleanup()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *RoutingTable) Get(destination string) (bool, string, error) {
 | 
			
		||||
	v.RLock()
 | 
			
		||||
	defer v.RUnlock()
 | 
			
		||||
 | 
			
		||||
	entry, found := v.table[destination]
 | 
			
		||||
	if !found {
 | 
			
		||||
		return false, "", nil
 | 
			
		||||
	}
 | 
			
		||||
	entry.Extend()
 | 
			
		||||
	return true, entry.tag, entry.err
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue