mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-06-15 12:57:16 +03:00
v1.0.0
This commit is contained in:
89
infra/conf/transport.go
Normal file
89
infra/conf/transport.go
Normal file
@ -0,0 +1,89 @@
|
||||
package conf
|
||||
|
||||
import (
|
||||
"github.com/xtls/xray-core/v1/common/serial"
|
||||
"github.com/xtls/xray-core/v1/transport"
|
||||
"github.com/xtls/xray-core/v1/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"`
|
||||
}
|
||||
|
||||
// Build implements Buildable.
|
||||
func (c *TransportConfig) Build() (*transport.Config, error) {
|
||||
config := new(transport.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),
|
||||
})
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
Reference in New Issue
Block a user