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) }) }