|  | @@ -0,0 +1,46 @@
 | 
	
		
			
				|  |  | +package utp
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import (
 | 
	
		
			
				|  |  | +	"math/rand"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/common/alloc"
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/transport/internet"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type Config struct {
 | 
	
		
			
				|  |  | +	Version byte
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type UTP struct {
 | 
	
		
			
				|  |  | +	header       byte
 | 
	
		
			
				|  |  | +	extension    byte
 | 
	
		
			
				|  |  | +	connectionId uint16
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (this *UTP) Overhead() int {
 | 
	
		
			
				|  |  | +	return 4
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (this *UTP) Open(payload *alloc.Buffer) bool {
 | 
	
		
			
				|  |  | +	payload.SliceFrom(this.Overhead())
 | 
	
		
			
				|  |  | +	return true
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (this *UTP) Seal(payload *alloc.Buffer) {
 | 
	
		
			
				|  |  | +	payload.PrependUint16(this.connectionId)
 | 
	
		
			
				|  |  | +	payload.PrependBytes(this.header, this.extension)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type UTPFactory struct{}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (this UTPFactory) Create(rawSettings internet.AuthenticatorConfig) internet.Authenticator {
 | 
	
		
			
				|  |  | +	return &UTP{
 | 
	
		
			
				|  |  | +		header:       1,
 | 
	
		
			
				|  |  | +		extension:    0,
 | 
	
		
			
				|  |  | +		connectionId: uint16(rand.Intn(65536)),
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func init() {
 | 
	
		
			
				|  |  | +	internet.RegisterAuthenticator("utp", UTPFactory{}, func() interface{} { return new(Config) })
 | 
	
		
			
				|  |  | +}
 |