dokodemo.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package conf
  2. import (
  3. "github.com/xtls/xray-core/common/errors"
  4. "github.com/xtls/xray-core/common/net"
  5. "github.com/xtls/xray-core/proxy/dokodemo"
  6. "google.golang.org/protobuf/proto"
  7. )
  8. type DokodemoConfig struct {
  9. Address *Address `json:"address"`
  10. Port uint16 `json:"port"`
  11. PortMap map[string]string `json:"portMap"`
  12. Network *NetworkList `json:"network"`
  13. FollowRedirect bool `json:"followRedirect"`
  14. UserLevel uint32 `json:"userLevel"`
  15. }
  16. func (v *DokodemoConfig) Build() (proto.Message, error) {
  17. config := new(dokodemo.Config)
  18. if v.Address != nil {
  19. config.Address = v.Address.Build()
  20. }
  21. config.Port = uint32(v.Port)
  22. config.PortMap = v.PortMap
  23. for _, v := range config.PortMap {
  24. if _, _, err := net.SplitHostPort(v); err != nil {
  25. return nil, errors.New("invalid portMap: ", v).Base(err)
  26. }
  27. }
  28. config.Networks = v.Network.Build()
  29. config.FollowRedirect = v.FollowRedirect
  30. config.UserLevel = v.UserLevel
  31. return config, nil
  32. }