Add admin panel, manager, node_manager, bandwidth limiter, connection limiter, bonding, failover, vless encryption, mkcp transport

This commit is contained in:
Shtorm
2026-02-26 22:44:31 +03:00
parent 0f38dbba4c
commit ded1eb9635
115 changed files with 12582 additions and 301 deletions

View File

@@ -30,7 +30,9 @@ type Router struct {
dnsTransport adapter.DNSTransportManager
connection adapter.ConnectionManager
network adapter.NetworkManager
defaultOutbound adapter.Outbound
rules []adapter.Rule
final string
needFindProcess bool
ruleSets []adapter.RuleSet
ruleSetMap map[string]adapter.RuleSet
@@ -53,6 +55,7 @@ func NewRouter(ctx context.Context, logFactory log.Factory, options option.Route
connection: service.FromContext[adapter.ConnectionManager](ctx),
network: service.FromContext[adapter.NetworkManager](ctx),
rules: make([]adapter.Rule, 0, len(options.Rules)),
final: options.Final,
ruleSetMap: make(map[string]adapter.RuleSet),
needFindProcess: hasRule(options.Rules, isProcessRule) || hasDNSRule(dnsOptions.Rules, isProcessDNSRule) || options.FindProcess,
pauseManager: service.FromContext[pause.Manager](ctx),
@@ -159,6 +162,15 @@ func (r *Router) Start(stage adapter.StartStage) error {
return E.Cause(err, "post start rule_set[", ruleSet.Name(), "]")
}
}
if r.final != "" {
defaultOutbound, loaded := r.outbound.Outbound(r.final)
if !loaded {
return E.New("outbound not found: ", r.final)
}
r.defaultOutbound = defaultOutbound
} else {
r.defaultOutbound = r.outbound.Default()
}
r.started = true
return nil
case adapter.StartStateStarted: