1
0
mirror of https://github.com/fumiama/go-registry.git synced 2026-06-30 07:40:24 +08:00

public data in cmd packet

This commit is contained in:
源文雨
2022-04-24 18:55:03 +08:00
parent f93d4d7437
commit 9963c35b7d
2 changed files with 16 additions and 16 deletions

24
cmd.go
View File

@@ -36,7 +36,7 @@ var (
type CmdPacket struct { type CmdPacket struct {
io.ReaderFrom io.ReaderFrom
t *tea.TEA t *tea.TEA
data []byte Data []byte
rawCmdPacket rawCmdPacket
} }
@@ -51,7 +51,7 @@ type rawCmdPacket struct {
func NewCmdPacket(cmd uint8, data []byte, t *tea.TEA) (c *CmdPacket) { func NewCmdPacket(cmd uint8, data []byte, t *tea.TEA) (c *CmdPacket) {
c = pool.Get().(*CmdPacket) c = pool.Get().(*CmdPacket)
c.t = t c.t = t
c.data = data c.Data = data
c.cmd = cmd c.cmd = cmd
c.md5 = md5.Sum(data) c.md5 = md5.Sum(data)
return return
@@ -95,7 +95,7 @@ func ReadCmdPacket(f io.Reader, t *tea.TEA) (c *CmdPacket, err error) {
//go:nosplit //go:nosplit
func (c *CmdPacket) Refresh(cmd uint8, data []byte, t *tea.TEA) { func (c *CmdPacket) Refresh(cmd uint8, data []byte, t *tea.TEA) {
c.t = t c.t = t
c.data = data c.Data = data
c.cmd = cmd c.cmd = cmd
c.md5 = md5.Sum(data) c.md5 = md5.Sum(data)
} }
@@ -120,27 +120,27 @@ func (c *CmdPacket) ReadFrom(f io.Reader) (n int64, err error) {
// Write should not be used due to the full-copy of buf // Write should not be used due to the full-copy of buf
func (c *CmdPacket) Write(buf []byte) (n int, err error) { func (c *CmdPacket) Write(buf []byte) (n int, err error) {
oldlen := len(c.data) oldlen := len(c.Data)
c.data = append(c.data, buf...) c.Data = append(c.Data, buf...)
if len(c.data) < 1+1+16 { if len(c.Data) < 1+1+16 {
return len(buf), nil return len(buf), nil
} }
if len(c.data) < 1+1+16+int(c.len) { if len(c.Data) < 1+1+16+int(c.len) {
return len(buf), nil return len(buf), nil
} }
r := (*rawCmdPacket)(*(*unsafe.Pointer)(unsafe.Pointer(&c.data))) r := (*rawCmdPacket)(*(*unsafe.Pointer)(unsafe.Pointer(&c.Data)))
c.cmd = r.cmd c.cmd = r.cmd
c.len = r.len c.len = r.len
c.md5 = r.md5 c.md5 = r.md5
copy(c.raw[:], r.raw[:c.len]) copy(c.raw[:], r.raw[:c.len])
c.data = nil c.Data = nil
return 1 + 1 + 16 + int(c.len) - oldlen, nil return 1 + 1 + 16 + int(c.len) - oldlen, nil
} }
//go:nosplit //go:nosplit
func (c *CmdPacket) Encrypt(seq uint8) (raw []byte) { func (c *CmdPacket) Encrypt(seq uint8) (raw []byte) {
setseq(c.t, seq) setseq(c.t, seq)
c.len = uint8(c.t.EncryptLittleEndianTo(c.data, sumtable, c.raw[:])) c.len = uint8(c.t.EncryptLittleEndianTo(c.Data, sumtable, c.raw[:]))
(*slice)(unsafe.Pointer(&raw)).Data = unsafe.Pointer(&c.rawCmdPacket) (*slice)(unsafe.Pointer(&raw)).Data = unsafe.Pointer(&c.rawCmdPacket)
(*slice)(unsafe.Pointer(&raw)).Len = 1 + 1 + 16 + int(c.len) (*slice)(unsafe.Pointer(&raw)).Len = 1 + 1 + 16 + int(c.len)
(*slice)(unsafe.Pointer(&raw)).Cap = 1 + 1 + 16 + 255 (*slice)(unsafe.Pointer(&raw)).Cap = 1 + 1 + 16 + 255
@@ -152,7 +152,7 @@ func (c *CmdPacket) Decrypt(seq uint8) error {
setseq(c.t, seq) setseq(c.t, seq)
d := c.t.DecryptLittleEndian(c.raw[:c.len], sumtable) d := c.t.DecryptLittleEndian(c.raw[:c.len], sumtable)
if d != nil && c.md5 == md5.Sum(d) { if d != nil && c.md5 == md5.Sum(d) {
c.data = d c.Data = d
return nil return nil
} }
return ErrMd5Mismatch return ErrMd5Mismatch
@@ -161,7 +161,7 @@ func (c *CmdPacket) Decrypt(seq uint8) error {
//go:nosplit //go:nosplit
func (c *CmdPacket) Put() { func (c *CmdPacket) Put() {
c.cmd = 0 c.cmd = 0
c.data = nil c.Data = nil
pool.Put(c) pool.Put(c)
} }

8
reg.go
View File

@@ -106,7 +106,7 @@ func (r *Regedit) Get(key string) (string, error) {
if err != nil { if err != nil {
return "", ErrDecAck return "", ErrDecAck
} }
a := string(p.data) a := string(p.Data)
if a == "erro" && p.cmd == ACKERRO { if a == "erro" && p.cmd == ACKERRO {
return "", ErrInternalServer return "", ErrInternalServer
} }
@@ -143,7 +143,7 @@ func (r *Regedit) Set(key, value string) error {
if err != nil { if err != nil {
return ErrDecAck return ErrDecAck
} }
a := BytesToString(ack.data) a := BytesToString(ack.Data)
if a == "erro" || ack.cmd == ACKERRO { if a == "erro" || ack.cmd == ACKERRO {
return ErrInternalServer return ErrInternalServer
} }
@@ -162,7 +162,7 @@ func (r *Regedit) Set(key, value string) error {
if err != nil { if err != nil {
return ErrDecAck return ErrDecAck
} }
a = BytesToString(ack.data) a = BytesToString(ack.Data)
if a == "erro" || ack.cmd == ACKERRO { if a == "erro" || ack.cmd == ACKERRO {
return ErrInternalServer return ErrInternalServer
} }
@@ -197,7 +197,7 @@ func (r *Regedit) Del(key string) error {
if err != nil { if err != nil {
return ErrDecAck return ErrDecAck
} }
a := BytesToString(ack.data) a := BytesToString(ack.Data)
if a == "erro" || ack.cmd == ACKERRO { if a == "erro" || ack.cmd == ACKERRO {
return ErrInternalServer return ErrInternalServer
} }