blackhole.go 1.3 KB

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