| 
					
				 | 
			
			
				@@ -0,0 +1,40 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package blackhole 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"io/ioutil" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	v2net "github.com/v2ray/v2ray-core/common/net" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"github.com/v2ray/v2ray-core/proxy" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"github.com/v2ray/v2ray-core/transport/ray" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// BlackHole is an outbound connection that sliently swallow the entire payload. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type BlackHole struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func NewBlackHole() *BlackHole { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return &BlackHole{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (bh *BlackHole) Dispatch(firstPacket v2net.Packet, ray ray.OutboundRay) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if chunk := firstPacket.Chunk(); chunk != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		chunk.Release() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	close(ray.OutboundOutput()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if firstPacket.MoreChunks() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		v2net.ChanToWriter(ioutil.Discard, ray.OutboundInput()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type BlackHoleFactory struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (factory BlackHoleFactory) Create(config interface{}) (proxy.OutboundConnectionHandler, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return NewBlackHole(), nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	proxy.RegisterOutboundConnectionHandlerFactory("blackhole", BlackHoleFactory{}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |