| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package v5cfg
- import (
- "context"
- "github.com/golang/protobuf/proto"
- core "github.com/v2fly/v2ray-core/v5"
- "github.com/v2fly/v2ray-core/v5/app/proxyman"
- "github.com/v2fly/v2ray-core/v5/common/serial"
- "github.com/v2fly/v2ray-core/v5/transport/internet"
- )
- func (c OutboundConfig) BuildV5(ctx context.Context) (proto.Message, error) {
- senderSettings := &proxyman.SenderConfig{}
- if c.SendThrough != nil {
- address := c.SendThrough
- if address.Family().IsDomain() {
- return nil, newError("unable to send through: " + address.String())
- }
- senderSettings.Via = address.Build()
- }
- if c.StreamSetting != nil {
- ss, err := c.StreamSetting.BuildV5(ctx)
- if err != nil {
- return nil, err
- }
- senderSettings.StreamSettings = ss.(*internet.StreamConfig)
- }
- if c.ProxySettings != nil {
- ps, err := c.ProxySettings.Build()
- if err != nil {
- return nil, newError("invalid outbound detour proxy settings.").Base(err)
- }
- senderSettings.ProxySettings = ps
- }
- if c.MuxSettings != nil {
- senderSettings.MultiplexSettings = c.MuxSettings.Build()
- }
- senderSettings.DomainStrategy = proxyman.SenderConfig_AS_IS
- switch c.DomainStrategy {
- case "UseIP":
- senderSettings.DomainStrategy = proxyman.SenderConfig_USE_IP
- case "UseIP4":
- senderSettings.DomainStrategy = proxyman.SenderConfig_USE_IP4
- case "UseIP6":
- senderSettings.DomainStrategy = proxyman.SenderConfig_USE_IP6
- case "AsIs", "":
- default:
- return nil, newError("unknown domain strategy: ", c.DomainStrategy)
- }
- if c.Settings == nil {
- c.Settings = []byte("{}")
- }
- outboundConfigPack, err := loadHeterogeneousConfigFromRawJSON("outbound", c.Protocol, c.Settings)
- if err != nil {
- return nil, newError("unable to load outbound protocol config").Base(err)
- }
- return &core.OutboundHandlerConfig{
- SenderSettings: serial.ToTypedMessage(senderSettings),
- Tag: c.Tag,
- ProxySettings: serial.ToTypedMessage(outboundConfigPack),
- }, nil
- }
|