blackhole.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package conf
  2. import (
  3. "encoding/json"
  4. "github.com/v2fly/v2ray-core/v4/infra/conf/cfgcommon"
  5. "github.com/golang/protobuf/proto"
  6. "github.com/v2fly/v2ray-core/v4/common/serial"
  7. "github.com/v2fly/v2ray-core/v4/proxy/blackhole"
  8. )
  9. type NoneResponse struct{}
  10. func (*NoneResponse) Build() (proto.Message, error) {
  11. return new(blackhole.NoneResponse), nil
  12. }
  13. type HTTPResponse struct{}
  14. func (*HTTPResponse) Build() (proto.Message, error) {
  15. return new(blackhole.HTTPResponse), nil
  16. }
  17. type BlackholeConfig struct {
  18. Response json.RawMessage `json:"response"`
  19. }
  20. func (v *BlackholeConfig) Build() (proto.Message, error) {
  21. config := new(blackhole.Config)
  22. if v.Response != nil {
  23. response, _, err := configLoader.Load(v.Response)
  24. if err != nil {
  25. return nil, newError("Config: Failed to parse Blackhole response config.").Base(err)
  26. }
  27. responseSettings, err := response.(cfgcommon.Buildable).Build()
  28. if err != nil {
  29. return nil, err
  30. }
  31. config.Response = serial.ToTypedMessage(responseSettings)
  32. }
  33. return config, nil
  34. }
  35. var configLoader = NewJSONConfigLoader(
  36. ConfigCreatorCache{
  37. "none": func() interface{} { return new(NoneResponse) },
  38. "http": func() interface{} { return new(HTTPResponse) },
  39. },
  40. "type",
  41. "")