MCPcopy
hub / github.com/go-sql-driver/mysql / readPacket

Method readPacket

packets.go:41–123  ·  packets.go::mysqlConn.readPacket

Read packet to buffer 'data'

()

Source from the content-addressed store, hash-verified

39
40// Read packet to buffer 'data'
41func (mc *mysqlConn) readPacket() ([]byte, error) {
42 var prevData []byte
43 invalidSequence := false
44
45 readNext := mc.readNext
46 if mc.compress {
47 readNext = mc.compIO.readNext
48 }
49
50 for {
51 // read packet header
52 data, err := readNext(4)
53 if err != nil {
54 mc.close()
55 if cerr := mc.canceled.Value(); cerr != nil {
56 return nil, cerr
57 }
58 mc.log(err)
59 return nil, ErrInvalidConn
60 }
61
62 // packet length [24 bit]
63 pktLen := getUint24(data[:3])
64 seq := data[3]
65
66 // check packet sync [8 bit]
67 if seq != mc.sequence {
68 mc.log(fmt.Sprintf("[warn] unexpected sequence nr: expected %v, got %v", mc.sequence, seq))
69 // MySQL and MariaDB doesn't check packet nr in compressed packet.
70 if !mc.compress {
71 // For large packets, we stop reading as soon as sync error.
72 if len(prevData) > 0 {
73 mc.close()
74 return nil, ErrPktSyncMul
75 }
76 invalidSequence = true
77 }
78 }
79 mc.sequence = seq + 1
80
81 // packets with length 0 terminate a previous packet which is a
82 // multiple of (2^24)-1 bytes long
83 if pktLen == 0 {
84 // there was no previous packet
85 if prevData == nil {
86 mc.log(ErrMalformPkt)
87 mc.close()
88 return nil, ErrInvalidConn
89 }
90 return prevData, nil
91 }
92
93 // read packet body [pktLen bytes]
94 data, err = readNext(pktLen)
95 if err != nil {
96 mc.close()
97 if cerr := mc.canceled.Value(); cerr != nil {
98 return nil, cerr

Callers 15

TestReadPacketSingleByteFunction · 0.95
TestReadPacketSplitFunction · 0.95
TestReadPacketFailFunction · 0.95
readHandshakePacketMethod · 0.95
readAuthResultMethod · 0.95
readColumnsMethod · 0.95
skipPacketsMethod · 0.95
skipEofMethod · 0.95
skipRowsMethod · 0.95
handleAuthResultMethod · 0.95
readResultOKMethod · 0.80

Calls 4

closeMethod · 0.95
logMethod · 0.95
getUint24Function · 0.85
ValueMethod · 0.45

Tested by 5

TestReadPacketSingleByteFunction · 0.76
TestReadPacketSplitFunction · 0.76
TestReadPacketFailFunction · 0.76
uncompressHelperFunction · 0.64