config.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package blackhole
  2. import (
  3. "v2ray.com/core/common/alloc"
  4. v2io "v2ray.com/core/common/io"
  5. "github.com/golang/protobuf/proto"
  6. "github.com/golang/protobuf/ptypes"
  7. "github.com/golang/protobuf/ptypes/any"
  8. "strings"
  9. "v2ray.com/core/common/loader"
  10. )
  11. const (
  12. http403response = `HTTP/1.1 403 Forbidden
  13. Connection: close
  14. Cache-Control: max-age=3600, public
  15. Content-Length: 0
  16. `
  17. )
  18. type ResponseConfig interface {
  19. AsAny() *any.Any
  20. WriteTo(v2io.Writer)
  21. }
  22. func (this *NoneResponse) WriteTo(v2io.Writer) {}
  23. func (this *NoneResponse) AsAny() *any.Any {
  24. r, _ := ptypes.MarshalAny(this)
  25. return r
  26. }
  27. func (this *HTTPResponse) WriteTo(writer v2io.Writer) {
  28. writer.Write(alloc.NewLocalBuffer(512).Clear().AppendString(http403response))
  29. }
  30. func (this *HTTPResponse) AsAny() *any.Any {
  31. r, _ := ptypes.MarshalAny(this)
  32. return r
  33. }
  34. func (this *Response) GetInternalResponse() (ResponseConfig, error) {
  35. if this == nil {
  36. return new(NoneResponse), nil
  37. }
  38. var r ResponseConfig
  39. switch this.Type {
  40. case Response_None:
  41. r = new(NoneResponse)
  42. case Response_HTTP:
  43. r = new(HTTPResponse)
  44. }
  45. err := ptypes.UnmarshalAny(this.Settings, r.(proto.Message))
  46. if err != nil {
  47. return nil, err
  48. }
  49. return r, nil
  50. }
  51. var (
  52. cache = loader.ConfigCreatorCache{}
  53. )
  54. func init() {
  55. cache.RegisterCreator(strings.ToLower(Response_Type_name[int32(Response_None)]), func() interface{} { return new(NoneResponse) })
  56. cache.RegisterCreator(strings.ToLower(Response_Type_name[int32(Response_HTTP)]), func() interface{} { return new(HTTPResponse) })
  57. }