package node import ( "encoding/json" "fmt" "github.com/Yuzuki616/V2bX/api/panel" conf2 "github.com/Yuzuki616/V2bX/conf" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/infra/conf" ) //OutboundBuilder build freedom outbund config for addoutbound func OutboundBuilder(config *conf2.ControllerConfig, nodeInfo *panel.NodeInfo, tag string) (*core.OutboundHandlerConfig, error) { outboundDetourConfig := &conf.OutboundDetourConfig{} outboundDetourConfig.Protocol = "freedom" outboundDetourConfig.Tag = tag // Build Send IP address if config.SendIP != "" { ipAddress := net.ParseAddress(config.SendIP) outboundDetourConfig.SendThrough = &conf.Address{Address: ipAddress} } // Freedom Protocol setting var domainStrategy = "Asis" if config.EnableDNS { if config.DNSType != "" { domainStrategy = config.DNSType } else { domainStrategy = "UseIP" } } proxySetting := &conf.FreedomConfig{ DomainStrategy: domainStrategy, } // Used for Shadowsocks-Plugin if nodeInfo.NodeType == "dokodemo-door" { proxySetting.Redirect = fmt.Sprintf("127.0.0.1:%d", nodeInfo.V2ray.Inbounds[0].PortList.Range[0].From-1) } var setting json.RawMessage setting, err := json.Marshal(proxySetting) if err != nil { return nil, fmt.Errorf("marshal proxy %s config fialed: %s", nodeInfo.NodeType, err) } outboundDetourConfig.Settings = &setting return outboundDetourConfig.Build() }