| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | 
							- package blackhole
 
- import (
 
- 	"v2ray.com/core/common"
 
- 	"v2ray.com/core/common/buf"
 
- 	"v2ray.com/core/common/serial"
 
- )
 
- const (
 
- 	http403response = `HTTP/1.1 403 Forbidden
 
- Connection: close
 
- Cache-Control: max-age=3600, public
 
- Content-Length: 0
 
- `
 
- )
 
- // ResponseConfig is the configuration for blackhole responses.
 
- type ResponseConfig interface {
 
- 	// WriteTo writes predefined response to the give buffer.
 
- 	WriteTo(buf.Writer) int32
 
- }
 
- // WriteTo implements ResponseConfig.WriteTo().
 
- func (*NoneResponse) WriteTo(buf.Writer) int32 { return 0 }
 
- // WriteTo implements ResponseConfig.WriteTo().
 
- func (*HTTPResponse) WriteTo(writer buf.Writer) int32 {
 
- 	b := buf.New()
 
- 	common.Must(b.Reset(serial.WriteString(http403response)))
 
- 	n := b.Len()
 
- 	writer.WriteMultiBuffer(buf.NewMultiBufferValue(b))
 
- 	return n
 
- }
 
- // GetInternalResponse converts response settings from proto to internal data structure.
 
- func (c *Config) GetInternalResponse() (ResponseConfig, error) {
 
- 	if c.GetResponse() == nil {
 
- 		return new(NoneResponse), nil
 
- 	}
 
- 	config, err := c.GetResponse().GetInstance()
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	return config.(ResponseConfig), nil
 
- }
 
 
  |