1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-10-18 17:54:30 -04:00
v2fly/infra/conf/v4/hysteria2.go

79 lines
2.1 KiB
Go
Raw Normal View History

2024-09-06 11:07:27 -04:00
package v4
import (
"github.com/golang/protobuf/proto"
2024-09-09 10:39:22 -04:00
"github.com/v2fly/v2ray-core/v5/common/net/packetaddr"
2024-09-06 11:07:27 -04:00
"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
2024-09-09 10:39:22 -04:00
type Hysteria2ServerConfig struct {
PacketEncoding string `json:"packetEncoding"`
}
2024-09-06 11:07:27 -04:00
// Build implements Buildable
func (c *Hysteria2ServerConfig) Build() (proto.Message, error) {
config := new(hysteria2.ServerConfig)
2024-09-09 10:39:22 -04:00
switch c.PacketEncoding {
case "Packet":
config.PacketEncoding = packetaddr.PacketAddrType_Packet
case "", "None":
config.PacketEncoding = packetaddr.PacketAddrType_None
}
2024-09-06 11:07:27 -04:00
return config, nil
}