auto-redirect: Move initialize to start

This commit is contained in:
世界 2025-02-06 08:43:50 +08:00
parent d093b82064
commit 8cc5351bb3
No known key found for this signature in database
GPG key ID: CD109927C34A63C4

View file

@ -44,7 +44,7 @@ type autoRedirect struct {
} }
func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) { func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) {
r := &autoRedirect{ return &autoRedirect{
tunOptions: options.TunOptions, tunOptions: options.TunOptions,
ctx: options.Context, ctx: options.Context,
handler: options.Handler, handler: options.Handler,
@ -56,7 +56,10 @@ func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) {
customRedirectPortFunc: options.CustomRedirectPort, customRedirectPortFunc: options.CustomRedirectPort,
routeAddressSet: options.RouteAddressSet, routeAddressSet: options.RouteAddressSet,
routeExcludeAddressSet: options.RouteExcludeAddressSet, routeExcludeAddressSet: options.RouteExcludeAddressSet,
} }, nil
}
func (r *autoRedirect) Start() error {
var err error var err error
if runtime.GOOS == "android" { if runtime.GOOS == "android" {
r.enableIPv4 = true r.enableIPv4 = true
@ -74,7 +77,7 @@ func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) {
} }
} }
if err != nil { if err != nil {
return nil, E.Extend(E.Cause(err, "root permission is required for auto redirect"), os.Getenv("PATH")) return E.Extend(E.Cause(err, "root permission is required for auto redirect"), os.Getenv("PATH"))
} }
} }
} else { } else {
@ -90,7 +93,7 @@ func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) {
if !r.useNFTables { if !r.useNFTables {
r.iptablesPath, err = exec.LookPath("iptables") r.iptablesPath, err = exec.LookPath("iptables")
if err != nil { if err != nil {
return nil, E.Cause(err, "iptables is required") return E.Cause(err, "iptables is required")
} }
} }
} }
@ -100,7 +103,7 @@ func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) {
r.ip6tablesPath, err = exec.LookPath("ip6tables") r.ip6tablesPath, err = exec.LookPath("ip6tables")
if err != nil { if err != nil {
if !r.enableIPv4 { if !r.enableIPv4 {
return nil, E.Cause(err, "ip6tables is required") return E.Cause(err, "ip6tables is required")
} else { } else {
r.enableIPv6 = false r.enableIPv6 = false
r.logger.Error("device has no ip6tables nat support: ", err) r.logger.Error("device has no ip6tables nat support: ", err)
@ -109,10 +112,6 @@ func NewAutoRedirect(options AutoRedirectOptions) (AutoRedirect, error) {
} }
} }
} }
return r, nil
}
func (r *autoRedirect) Start() error {
if r.customRedirectPortFunc != nil { if r.customRedirectPortFunc != nil {
r.customRedirectPort = r.customRedirectPortFunc() r.customRedirectPort = r.customRedirectPortFunc()
} }
@ -132,7 +131,6 @@ func (r *autoRedirect) Start() error {
} }
r.redirectServer = server r.redirectServer = server
} }
var err error
if r.useNFTables { if r.useNFTables {
r.cleanupNFTables() r.cleanupNFTables()
err = r.setupNFTables() err = r.setupNFTables()