|
@@ -252,11 +252,12 @@ func readShort(p []byte) uint16 {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
type frameHeader struct {
|
|
type frameHeader struct {
|
|
|
- version protoVersion
|
|
|
|
|
- flags byte
|
|
|
|
|
- stream int
|
|
|
|
|
- op frameOp
|
|
|
|
|
- length int
|
|
|
|
|
|
|
+ version protoVersion
|
|
|
|
|
+ flags byte
|
|
|
|
|
+ stream int
|
|
|
|
|
+ op frameOp
|
|
|
|
|
+ length int
|
|
|
|
|
+ customPayload map[string][]byte
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (f frameHeader) String() string {
|
|
func (f frameHeader) String() string {
|
|
@@ -446,6 +447,10 @@ func (f *framer) parseFrame() (frame frame, err error) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if f.header.flags&flagCustomPayload == flagCustomPayload {
|
|
|
|
|
+ f.header.customPayload = f.readBytesMap()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// assumes that the frame body has been read into rbuf
|
|
// assumes that the frame body has been read into rbuf
|
|
|
switch f.header.op {
|
|
switch f.header.op {
|
|
|
case opError:
|
|
case opError:
|
|
@@ -1629,6 +1634,19 @@ func (f *framer) readStringMap() map[string]string {
|
|
|
return m
|
|
return m
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (f *framer) readBytesMap() map[string][]byte {
|
|
|
|
|
+ size := f.readShort()
|
|
|
|
|
+ m := make(map[string][]byte)
|
|
|
|
|
+
|
|
|
|
|
+ for i := 0; i < int(size); i++ {
|
|
|
|
|
+ k := f.readString()
|
|
|
|
|
+ v := f.readBytes()
|
|
|
|
|
+ m[k] = v
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return m
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (f *framer) readStringMultiMap() map[string][]string {
|
|
func (f *framer) readStringMultiMap() map[string][]string {
|
|
|
size := f.readShort()
|
|
size := f.readShort()
|
|
|
m := make(map[string][]string)
|
|
m := make(map[string][]string)
|