package conf import ( "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/net" "github.com/xtls/xray-core/proxy/dokodemo" "google.golang.org/protobuf/proto" ) type DokodemoConfig struct { Address *Address `json:"address"` Port uint16 `json:"port"` PortMap map[string]string `json:"portMap"` Network *NetworkList `json:"network"` FollowRedirect bool `json:"followRedirect"` UserLevel uint32 `json:"userLevel"` } func (v *DokodemoConfig) Build() (proto.Message, error) { config := new(dokodemo.Config) if v.Address != nil { config.Address = v.Address.Build() } config.Port = uint32(v.Port) config.PortMap = v.PortMap for _, v := range config.PortMap { if _, _, err := net.SplitHostPort(v); err != nil { return nil, errors.New("invalid portMap: ", v).Base(err) } } config.Networks = v.Network.Build() config.FollowRedirect = v.FollowRedirect config.UserLevel = v.UserLevel return config, nil }