mirror of
https://github.com/fumiama/go-registry.git
synced 2026-06-13 05:04:35 +08:00
add ack cmd type
This commit is contained in:
21
cmd.go
21
cmd.go
@@ -20,6 +20,15 @@ const (
|
|||||||
CMDDAT
|
CMDDAT
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ACKNONE uint8 = iota<<4 + 3
|
||||||
|
ACKSUCC
|
||||||
|
ACKDATA
|
||||||
|
ACKNULL
|
||||||
|
ACKNEQU
|
||||||
|
ACKERRO
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrMd5Mismatch = errors.New("cmdpacket.decrypt: md5 mismatch")
|
ErrMd5Mismatch = errors.New("cmdpacket.decrypt: md5 mismatch")
|
||||||
)
|
)
|
||||||
@@ -91,13 +100,12 @@ func (c *CmdPacket) Refresh(cmd uint8, data []byte, t *tea.TEA) {
|
|||||||
c.md5 = md5.Sum(data)
|
c.md5 = md5.Sum(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:nosplit
|
|
||||||
func (c *CmdPacket) ClearData() {
|
|
||||||
c.data = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
func (c *CmdPacket) ReadFrom(f io.Reader) (n int64, err error) {
|
func (c *CmdPacket) ReadFrom(f io.Reader) (n int64, err error) {
|
||||||
|
if c.cmd > 0 {
|
||||||
|
err = io.EOF
|
||||||
|
return
|
||||||
|
}
|
||||||
buf := (*[1 + 1 + 16 + 255]byte)(unsafe.Pointer(&c.rawCmdPacket))
|
buf := (*[1 + 1 + 16 + 255]byte)(unsafe.Pointer(&c.rawCmdPacket))
|
||||||
cnt, err := io.ReadFull(f, buf[:1+1+16])
|
cnt, err := io.ReadFull(f, buf[:1+1+16])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -152,13 +160,14 @@ func (c *CmdPacket) Decrypt(seq uint8) error {
|
|||||||
|
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
func (c *CmdPacket) Put() {
|
func (c *CmdPacket) Put() {
|
||||||
|
c.cmd = 0
|
||||||
c.data = nil
|
c.data = nil
|
||||||
pool.Put(c)
|
pool.Put(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:nosplit
|
//go:nosplit
|
||||||
func setseq(t *tea.TEA, seq uint8) {
|
func setseq(t *tea.TEA, seq uint8) {
|
||||||
*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(t)) + uintptr(15))) = seq
|
*(*uint8)(unsafe.Add(unsafe.Pointer(t), 15)) = seq
|
||||||
}
|
}
|
||||||
|
|
||||||
// TEA encoding sumtable
|
// TEA encoding sumtable
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -2,4 +2,4 @@ module github.com/fumiama/go-registry
|
|||||||
|
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
require github.com/fumiama/gofastTEA v0.0.9
|
require github.com/fumiama/gofastTEA v0.0.10
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -1,2 +1,2 @@
|
|||||||
github.com/fumiama/gofastTEA v0.0.9 h1:adaWz+014vMShnLUNWIHLBs0Yv6JNUohcaXZNtct5J0=
|
github.com/fumiama/gofastTEA v0.0.10 h1:JJJ+brWD4kie+mmK2TkspDXKzqq0IjXm89aGYfoGhhQ=
|
||||||
github.com/fumiama/gofastTEA v0.0.9/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk=
|
github.com/fumiama/gofastTEA v0.0.10/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk=
|
||||||
|
|||||||
20
reg.go
20
reg.go
@@ -107,10 +107,10 @@ func (r *Regedit) Get(key string) (string, error) {
|
|||||||
return "", ErrDecAck
|
return "", ErrDecAck
|
||||||
}
|
}
|
||||||
a := string(p.data)
|
a := string(p.data)
|
||||||
if a == "erro" {
|
if a == "erro" && p.cmd == ACKERRO {
|
||||||
return "", ErrInternalServer
|
return "", ErrInternalServer
|
||||||
}
|
}
|
||||||
if a == "null" {
|
if a == "null" && p.cmd == ACKNULL {
|
||||||
return "", ErrNoSuchKey
|
return "", ErrNoSuchKey
|
||||||
}
|
}
|
||||||
return a, nil
|
return a, nil
|
||||||
@@ -145,10 +145,10 @@ func (r *Regedit) Set(key, value string) error {
|
|||||||
return ErrDecAck
|
return ErrDecAck
|
||||||
}
|
}
|
||||||
a := BytesToString(ack.data)
|
a := BytesToString(ack.data)
|
||||||
if a == "erro" {
|
if a == "erro" || ack.cmd == ACKERRO {
|
||||||
return ErrInternalServer
|
return ErrInternalServer
|
||||||
}
|
}
|
||||||
if a != "data" {
|
if a != "data" && ack.cmd != ACKDATA {
|
||||||
return ErrUnknownAck
|
return ErrUnknownAck
|
||||||
}
|
}
|
||||||
p.Refresh(CMDDAT, StringToBytes(value), r.ts)
|
p.Refresh(CMDDAT, StringToBytes(value), r.ts)
|
||||||
@@ -167,10 +167,10 @@ func (r *Regedit) Set(key, value string) error {
|
|||||||
return ErrDecAck
|
return ErrDecAck
|
||||||
}
|
}
|
||||||
a = BytesToString(ack.data)
|
a = BytesToString(ack.data)
|
||||||
if a == "erro" {
|
if a == "erro" || ack.cmd == ACKERRO {
|
||||||
return ErrInternalServer
|
return ErrInternalServer
|
||||||
}
|
}
|
||||||
if a != "succ" {
|
if a != "succ" && ack.cmd != ACKSUCC {
|
||||||
return ErrUnknownAck
|
return ErrUnknownAck
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -202,20 +202,20 @@ func (r *Regedit) Del(key string) error {
|
|||||||
return ErrDecAck
|
return ErrDecAck
|
||||||
}
|
}
|
||||||
a := BytesToString(ack.data)
|
a := BytesToString(ack.data)
|
||||||
if a == "erro" {
|
if a == "erro" || ack.cmd == ACKERRO {
|
||||||
return ErrInternalServer
|
return ErrInternalServer
|
||||||
}
|
}
|
||||||
if a == "null" {
|
if a == "null" || ack.cmd == ACKNULL {
|
||||||
return ErrNoSuchKey
|
return ErrNoSuchKey
|
||||||
}
|
}
|
||||||
if a != "succ" {
|
if a != "succ" && ack.cmd != ACKSUCC {
|
||||||
return ErrUnknownAck
|
return ErrUnknownAck
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Regedit) ack(c *CmdPacket) error {
|
func (r *Regedit) ack(c *CmdPacket) error {
|
||||||
// c.ClearData()
|
c.cmd = 0
|
||||||
_, err := io.Copy(c, r.conn)
|
_, err := io.Copy(c, r.conn)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ func TestReg(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
v, err := r.Get("test")
|
v, err := r.Get("test")
|
||||||
if err != nil {
|
if err != nil && err != ErrNoSuchKey {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
t.Log(v)
|
t.Log(v)
|
||||||
@@ -29,10 +29,10 @@ func TestReg(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
v, err = r.Get("test")
|
v, err = r.Get("test")
|
||||||
if err != nil {
|
t.Log(v)
|
||||||
|
if err != ErrNoSuchKey {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
t.Log(v)
|
|
||||||
err = r.Close()
|
err = r.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user