blackhole.go 1.2 KB

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