blackhole.go 1.1 KB

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