|
@@ -0,0 +1,53 @@
|
|
|
|
|
+package v5cfg
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "context"
|
|
|
|
|
+ "github.com/golang/protobuf/proto"
|
|
|
|
|
+ core "github.com/v2fly/v2ray-core/v4"
|
|
|
|
|
+ "github.com/v2fly/v2ray-core/v4/app/proxyman"
|
|
|
|
|
+ "github.com/v2fly/v2ray-core/v4/common/serial"
|
|
|
|
|
+ "github.com/v2fly/v2ray-core/v4/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()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 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
|
|
|
|
|
+}
|