| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package l7
- import "fmt"
- const (
- dmMsgHeaderSize = 64
- dmMsgOffsetPackType = 4
- dmMsgOffsetBodyLen = 6
- dmMsgPackTypeQuery = 0x05
- )
- type DmParser struct {
- //preparedStatements map[string]string
- }
- func NewDmParser() *DmParser {
- //return &DmParser{preparedStatements: map[string]string{}}
- return &DmParser{}
- }
- func (p *DmParser) Parse(payload []byte, statementId uint32) string {
- payloadSize := uint32(len(payload))
- fmt.Println("-------dm payloadSize", payloadSize)
- if payloadSize <= dmMsgHeaderSize {
- return ""
- }
- //msgHeader := payload[:dmMsgHeaderSize]
- packType := p.getUint32By2ByteFromPayload(payload, dmMsgOffsetPackType)
- if packType != dmMsgPackTypeQuery {
- fmt.Println("-------dm packType != dmMsgPackTypeQuery ", packType)
- return ""
- }
- bodySize := p.getUint32By4ByteFromPayload(payload, dmMsgOffsetBodyLen)
- if dmMsgHeaderSize+bodySize < payloadSize {
- return ""
- }
- queryTail := ""
- if dmMsgHeaderSize+bodySize > payloadSize {
- //partial
- queryTail = "..."
- }
- query := string(payload[dmMsgHeaderSize:]) + queryTail
- fmt.Printf("-------dm query is [%s] \n", query)
- return query
- }
- func (p *DmParser) getUint32By2ByteFromPayload(payload []byte, offset int) uint32 {
- var result uint32
- result = uint32(payload[offset] & 0xff)
- offset++
- result |= uint32(payload[offset]&0xff) << 8
- offset++
- return result
- }
- func (p *DmParser) getUint32By4ByteFromPayload(payload []byte, offset int) uint32 {
- var result uint32
- result = uint32(payload[offset] & 0xff)
- offset++
- result |= uint32(payload[offset]&0xff) << 8
- offset++
- result |= uint32(payload[offset]&0xff) << 16
- offset++
- result |= uint32(payload[offset]&0xff) << 24
- return result
- }
|