github.com/xtls/xray-core@v1.8.12-0.20240518155711-3168d27b0bdb/common/protocol/id.go (about) 1 package protocol 2 3 import ( 4 "crypto/md5" 5 6 "github.com/xtls/xray-core/common" 7 "github.com/xtls/xray-core/common/uuid" 8 ) 9 10 const ( 11 IDBytesLen = 16 12 ) 13 14 // The ID of en entity, in the form of a UUID. 15 type ID struct { 16 uuid uuid.UUID 17 cmdKey [IDBytesLen]byte 18 } 19 20 // Equals returns true if this ID equals to the other one. 21 func (id *ID) Equals(another *ID) bool { 22 return id.uuid.Equals(&(another.uuid)) 23 } 24 25 func (id *ID) Bytes() []byte { 26 return id.uuid.Bytes() 27 } 28 29 func (id *ID) String() string { 30 return id.uuid.String() 31 } 32 33 func (id *ID) UUID() uuid.UUID { 34 return id.uuid 35 } 36 37 func (id ID) CmdKey() []byte { 38 return id.cmdKey[:] 39 } 40 41 // NewID returns an ID with given UUID. 42 func NewID(uuid uuid.UUID) *ID { 43 id := &ID{uuid: uuid} 44 md5hash := md5.New() 45 common.Must2(md5hash.Write(uuid.Bytes())) 46 common.Must2(md5hash.Write([]byte("c48619fe-8f02-49e0-b9e9-edf763e17e21"))) 47 md5hash.Sum(id.cmdKey[:0]) 48 return id 49 }