@@ -45,32 +45,33 @@ func (r *Router) Initialize(ctx context.Context, logger *log.Logger, options Rou
4545 if r .started {
4646 return errors .New ("already initialized" )
4747 }
48- r .ctx = ctx
49- r .logger = logger
50- r .outboundMap = options .OutboundMap
51- r .listMap = options .ListMap
52- r .ruleRegistry = options .RuleRegistry
53- r .snifferRegistry = options .SnifferRegistry
54- r .rules = make ([]Rule , 0 , len (options .Config .Rules ))
48+ rules := make ([]Rule , 0 , len (options .Config .Rules ))
5549 for i , ruleConfig := range options .Config .Rules {
56- rule , err := NewRule (logger , ruleConfig , r . listMap , r . ruleRegistry )
50+ rule , err := NewRule (logger , ruleConfig , options . ListMap , options . RuleRegistry )
5751 if err != nil {
5852 return fmt .Errorf ("initialize rule [index=%d]: %w" , i , err )
5953 }
60- r . rules = append (r . rules , rule )
54+ rules = append (rules , rule )
6155 }
6256 if options .Config .DefaultOutbound != "" {
63- var err error
64- r .defaultOutbound , err = r .FindOutboundByName (options .Config .DefaultOutbound )
57+ defaultOutbound , err := r .findOutboundByName (options .OutboundMap , options .Config .DefaultOutbound )
6558 if err != nil {
6659 return common .Cause ("default outbound is not found: " , err )
6760 }
61+ r .defaultOutbound = defaultOutbound
6862 } else {
6963 r .defaultOutbound , _ = protocol .NewOutbound (r .logger , & config.Outbound {
7064 Name : "default" ,
7165 })
72- r .defaultOutbound .PostInitialize (r )
66+ r .defaultOutbound .PostInitialize (r ) // this is dangerous since the router is not fully initialized yet
7367 }
68+ r .ctx = ctx
69+ r .logger = logger
70+ r .outboundMap = options .OutboundMap
71+ r .listMap = options .ListMap
72+ r .ruleRegistry = options .RuleRegistry
73+ r .snifferRegistry = options .SnifferRegistry
74+ r .rules = rules
7475 r .started = true
7576 return nil
7677}
@@ -169,16 +170,20 @@ func (r *Router) HandleConnection(conn net.Conn, metadata *adapter.Metadata) {
169170}
170171
171172func (r * Router ) FindOutboundByName (name string ) (adapter.Outbound , error ) {
173+ return r .findOutboundByName (r .outboundMap , name )
174+ }
175+
176+ func (r * Router ) findOutboundByName (outboundMap map [string ]adapter.Outbound , name string ) (adapter.Outbound , error ) {
172177 switch name {
173178 case "REJECT" :
174179 return rejectOutbound {}, nil
175180 case "RESET" :
176181 return resetOutbound {}, nil
177182 }
178- if r . outboundMap == nil {
183+ if outboundMap == nil {
179184 return nil , errors .New ("outbounds are not initialized" )
180185 }
181- outbound , ok := r . outboundMap [name ]
186+ outbound , ok := outboundMap [name ]
182187 if ! ok {
183188 return nil , fmt .Errorf ("outbound not found [%s]" , name )
184189 }
0 commit comments