mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-01-18 07:17:32 -05:00
79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package v4
|
|
|
|
import (
|
|
"github.com/golang/protobuf/proto"
|
|
|
|
"github.com/v2fly/v2ray-core/v5/common/net/packetaddr"
|
|
"github.com/v2fly/v2ray-core/v5/common/protocol"
|
|
"github.com/v2fly/v2ray-core/v5/common/serial"
|
|
"github.com/v2fly/v2ray-core/v5/infra/conf/cfgcommon"
|
|
"github.com/v2fly/v2ray-core/v5/proxy/hysteria2"
|
|
)
|
|
|
|
// Hysteria2ServerTarget is configuration of a single hysteria2 server
|
|
type Hysteria2ServerTarget struct {
|
|
Address *cfgcommon.Address `json:"address"`
|
|
Port uint16 `json:"port"`
|
|
Email string `json:"email"`
|
|
Level byte `json:"level"`
|
|
}
|
|
|
|
// Hysteria2ClientConfig is configuration of hysteria2 servers
|
|
type Hysteria2ClientConfig struct {
|
|
Servers []*Hysteria2ServerTarget `json:"servers"`
|
|
}
|
|
|
|
// Build implements Buildable
|
|
func (c *Hysteria2ClientConfig) Build() (proto.Message, error) {
|
|
config := new(hysteria2.ClientConfig)
|
|
|
|
if len(c.Servers) == 0 {
|
|
return nil, newError("0 Hysteria2 server configured.")
|
|
}
|
|
|
|
serverSpecs := make([]*protocol.ServerEndpoint, len(c.Servers))
|
|
for idx, rec := range c.Servers {
|
|
if rec.Address == nil {
|
|
return nil, newError("Hysteria2 server address is not set.")
|
|
}
|
|
if rec.Port == 0 {
|
|
return nil, newError("Invalid Hysteria2 port.")
|
|
}
|
|
account := &hysteria2.Account{}
|
|
hysteria2 := &protocol.ServerEndpoint{
|
|
Address: rec.Address.Build(),
|
|
Port: uint32(rec.Port),
|
|
User: []*protocol.User{
|
|
{
|
|
Level: uint32(rec.Level),
|
|
Email: rec.Email,
|
|
Account: serial.ToTypedMessage(account),
|
|
},
|
|
},
|
|
}
|
|
|
|
serverSpecs[idx] = hysteria2
|
|
}
|
|
|
|
config.Server = serverSpecs
|
|
|
|
return config, nil
|
|
}
|
|
|
|
// Hysteria2ServerConfig is Inbound configuration
|
|
type Hysteria2ServerConfig struct {
|
|
PacketEncoding string `json:"packetEncoding"`
|
|
}
|
|
|
|
// Build implements Buildable
|
|
func (c *Hysteria2ServerConfig) Build() (proto.Message, error) {
|
|
config := new(hysteria2.ServerConfig)
|
|
switch c.PacketEncoding {
|
|
case "Packet":
|
|
config.PacketEncoding = packetaddr.PacketAddrType_Packet
|
|
case "", "None":
|
|
config.PacketEncoding = packetaddr.PacketAddrType_None
|
|
}
|
|
return config, nil
|
|
}
|