77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
package handler
|
|
|
|
import (
|
|
"github.com/xtls/xray-core/app/proxyman"
|
|
cnet "github.com/xtls/xray-core/common/net"
|
|
"github.com/xtls/xray-core/common/protocol"
|
|
"github.com/xtls/xray-core/common/serial"
|
|
"github.com/xtls/xray-core/common/uuid"
|
|
"github.com/xtls/xray-core/core"
|
|
"github.com/xtls/xray-core/transport/internet"
|
|
)
|
|
|
|
func receiverSettings(port uint32, enableSniff bool) *serial.TypedMessage {
|
|
pr := cnet.SinglePortRange(cnet.Port(port))
|
|
rc := &proxyman.ReceiverConfig{
|
|
PortList: &cnet.PortList{Range: []*cnet.PortRange{pr}},
|
|
Listen: cnet.NewIPOrDomain(cnet.AnyIP),
|
|
StreamSettings: &internet.StreamConfig{
|
|
ProtocolName: "tcp",
|
|
},
|
|
}
|
|
if enableSniff {
|
|
rc.SniffingSettings = &proxyman.SniffingConfig{
|
|
Enabled: true,
|
|
DestinationOverride: []string{"http", "tls"},
|
|
}
|
|
}
|
|
return serial.ToTypedMessage(rc)
|
|
}
|
|
|
|
func senderSettings() *serial.TypedMessage {
|
|
return serial.ToTypedMessage(&proxyman.SenderConfig{
|
|
StreamSettings: &internet.StreamConfig{
|
|
ProtocolName: "tcp",
|
|
},
|
|
MultiplexSettings: &proxyman.MultiplexingConfig{
|
|
Enabled: true,
|
|
Concurrency: 8,
|
|
XudpProxyUDP443: "reject",
|
|
},
|
|
TargetStrategy: internet.DomainStrategy_USE_IP,
|
|
})
|
|
}
|
|
|
|
func endpoint(address string, port uint32, user *protocol.User) *protocol.ServerEndpoint {
|
|
return &protocol.ServerEndpoint{
|
|
Address: cnet.NewIPOrDomain(cnet.ParseAddress(address)),
|
|
Port: port,
|
|
User: user,
|
|
}
|
|
}
|
|
|
|
func randomUUID() string {
|
|
u := uuid.New()
|
|
return (&u).String()
|
|
}
|
|
|
|
func cnetOrDomain(value string) *cnet.IPOrDomain {
|
|
return cnet.NewIPOrDomain(cnet.ParseAddress(value))
|
|
}
|
|
|
|
func inboundConfig(tag string, receiver *serial.TypedMessage, proxy *serial.TypedMessage) *core.InboundHandlerConfig {
|
|
return &core.InboundHandlerConfig{
|
|
Tag: tag,
|
|
ReceiverSettings: receiver,
|
|
ProxySettings: proxy,
|
|
}
|
|
}
|
|
|
|
func outboundConfig(tag string, sender *serial.TypedMessage, proxy *serial.TypedMessage) *core.OutboundHandlerConfig {
|
|
return &core.OutboundHandlerConfig{
|
|
Tag: tag,
|
|
SenderSettings: sender,
|
|
ProxySettings: proxy,
|
|
}
|
|
}
|