v2ray před 9 roky
rodič
revize
b38137bd13

+ 1 - 0
shell/point/main/main.go

@@ -28,6 +28,7 @@ import (
 
 	_ "github.com/v2ray/v2ray-core/transport/internet/authenticators/noop"
 	_ "github.com/v2ray/v2ray-core/transport/internet/authenticators/srtp"
+	_ "github.com/v2ray/v2ray-core/transport/internet/authenticators/utp"
 )
 
 var (

+ 46 - 0
transport/internet/authenticators/utp/utp.go

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

+ 21 - 0
transport/internet/authenticators/utp/utp_test.go

@@ -0,0 +1,21 @@
+package utp_test
+
+import (
+	"testing"
+
+	"github.com/v2ray/v2ray-core/common/alloc"
+	"github.com/v2ray/v2ray-core/testing/assert"
+	. "github.com/v2ray/v2ray-core/transport/internet/authenticators/utp"
+)
+
+func TestUTPOpenSeal(t *testing.T) {
+	assert := assert.On(t)
+
+	content := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g'}
+	payload := alloc.NewLocalBuffer(2048).Clear().Append(content)
+	utp := UTP{}
+	utp.Seal(payload)
+	assert.Int(payload.Len()).GreaterThan(len(content))
+	assert.Bool(utp.Open(payload)).IsTrue()
+	assert.Bytes(content).Equals(payload.Bytes())
+}