mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.0 KiB
105 lines
3.0 KiB
package conf |
|
|
|
import ( |
|
"github.com/xtls/xray-core/common/serial" |
|
"github.com/xtls/xray-core/transport/global" |
|
"github.com/xtls/xray-core/transport/internet" |
|
) |
|
|
|
type TransportConfig struct { |
|
TCPConfig *TCPConfig `json:"tcpSettings"` |
|
KCPConfig *KCPConfig `json:"kcpSettings"` |
|
WSConfig *WebSocketConfig `json:"wsSettings"` |
|
HTTPConfig *HTTPConfig `json:"httpSettings"` |
|
DSConfig *DomainSocketConfig `json:"dsSettings"` |
|
QUICConfig *QUICConfig `json:"quicSettings"` |
|
GRPCConfig *GRPCConfig `json:"grpcSettings"` |
|
GUNConfig *GRPCConfig `json:"gunSettings"` |
|
} |
|
|
|
// Build implements Buildable. |
|
func (c *TransportConfig) Build() (*global.Config, error) { |
|
config := new(global.Config) |
|
|
|
if c.TCPConfig != nil { |
|
ts, err := c.TCPConfig.Build() |
|
if err != nil { |
|
return nil, newError("failed to build TCP config").Base(err).AtError() |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "tcp", |
|
Settings: serial.ToTypedMessage(ts), |
|
}) |
|
} |
|
|
|
if c.KCPConfig != nil { |
|
ts, err := c.KCPConfig.Build() |
|
if err != nil { |
|
return nil, newError("failed to build mKCP config").Base(err).AtError() |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "mkcp", |
|
Settings: serial.ToTypedMessage(ts), |
|
}) |
|
} |
|
|
|
if c.WSConfig != nil { |
|
ts, err := c.WSConfig.Build() |
|
if err != nil { |
|
return nil, newError("failed to build WebSocket config").Base(err) |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "websocket", |
|
Settings: serial.ToTypedMessage(ts), |
|
}) |
|
} |
|
|
|
if c.HTTPConfig != nil { |
|
ts, err := c.HTTPConfig.Build() |
|
if err != nil { |
|
return nil, newError("Failed to build HTTP config.").Base(err) |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "http", |
|
Settings: serial.ToTypedMessage(ts), |
|
}) |
|
} |
|
|
|
if c.DSConfig != nil { |
|
ds, err := c.DSConfig.Build() |
|
if err != nil { |
|
return nil, newError("Failed to build DomainSocket config.").Base(err) |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "domainsocket", |
|
Settings: serial.ToTypedMessage(ds), |
|
}) |
|
} |
|
|
|
if c.QUICConfig != nil { |
|
qs, err := c.QUICConfig.Build() |
|
if err != nil { |
|
return nil, newError("Failed to build QUIC config.").Base(err) |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "quic", |
|
Settings: serial.ToTypedMessage(qs), |
|
}) |
|
} |
|
|
|
if c.GRPCConfig == nil { |
|
c.GRPCConfig = c.GUNConfig |
|
} |
|
if c.GRPCConfig != nil { |
|
gs, err := c.GRPCConfig.Build() |
|
if err != nil { |
|
return nil, newError("Failed to build gRPC config.").Base(err) |
|
} |
|
config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{ |
|
ProtocolName: "grpc", |
|
Settings: serial.ToTypedMessage(gs), |
|
}) |
|
} |
|
|
|
return config, nil |
|
}
|
|
|