Implement route rules
This commit is contained in:
37
service.go
37
service.go
@@ -21,27 +21,24 @@ type Service struct {
|
||||
outbounds []adapter.Outbound
|
||||
}
|
||||
|
||||
func NewService(ctx context.Context, options *option.Options) (*Service, error) {
|
||||
var logOptions option.LogOption
|
||||
if options.Log != nil {
|
||||
logOptions = *options.Log
|
||||
}
|
||||
logger, err := log.NewLogger(logOptions)
|
||||
func NewService(ctx context.Context, options option.Options) (*Service, error) {
|
||||
logger, err := log.NewLogger(common.PtrValueOrDefault(options.Log))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
router := route.NewRouter(logger)
|
||||
var inbounds []adapter.Inbound
|
||||
var outbounds []adapter.Outbound
|
||||
if len(options.Inbounds) > 0 {
|
||||
for i, inboundOptions := range options.Inbounds {
|
||||
var inboundService adapter.Inbound
|
||||
inboundService, err = inbound.New(ctx, router, logger, i, inboundOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
inbounds = append(inbounds, inboundService)
|
||||
router, err := route.NewRouter(ctx, logger, common.PtrValueOrDefault(options.Route))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
inbounds := make([]adapter.Inbound, 0, len(options.Inbounds))
|
||||
outbounds := make([]adapter.Outbound, 0, len(options.Outbounds))
|
||||
for i, inboundOptions := range options.Inbounds {
|
||||
var inboundService adapter.Inbound
|
||||
inboundService, err = inbound.New(ctx, router, logger, i, inboundOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
inbounds = append(inbounds, inboundService)
|
||||
}
|
||||
for i, outboundOptions := range options.Outbounds {
|
||||
var outboundService adapter.Outbound
|
||||
@@ -52,13 +49,9 @@ func NewService(ctx context.Context, options *option.Options) (*Service, error)
|
||||
outbounds = append(outbounds, outboundService)
|
||||
}
|
||||
if len(outbounds) == 0 {
|
||||
outbounds = append(outbounds, outbound.NewDirect(nil, logger, "direct", &option.DirectOutboundOptions{}))
|
||||
outbounds = append(outbounds, outbound.NewDirect(nil, logger, "direct", option.DirectOutboundOptions{}))
|
||||
}
|
||||
router.UpdateOutbounds(outbounds)
|
||||
err = router.UpdateRules(options.Routes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Service{
|
||||
router: router,
|
||||
logger: logger,
|
||||
|
||||
Reference in New Issue
Block a user