@@ -94,7 +94,7 @@ func (c *Conn) ReadPacketTo(w io.Writer) error {
9494 header := []byte {0 , 0 , 0 , 0 }
9595
9696 if _ , err := io .ReadFull (c .reader , header ); err != nil {
97- return ErrBadConn
97+ return errors . Wrapf ( ErrBadConn , "io.ReadFull(header) failed. err %v" , err )
9898 }
9999
100100 length := int (uint32 (header [0 ]) | uint32 (header [1 ])<< 8 | uint32 (header [2 ])<< 16 )
@@ -112,16 +112,16 @@ func (c *Conn) ReadPacketTo(w io.Writer) error {
112112 }
113113
114114 if n , err := io .CopyN (w , c .reader , int64 (length )); err != nil {
115- return ErrBadConn
115+ return errors . Wrapf ( ErrBadConn , "io.CopyN failed. err %v, copied %v, expected %v" , err , n , length )
116116 } else if n != int64 (length ) {
117- return ErrBadConn
117+ return errors . Wrapf ( ErrBadConn , "io.CopyN failed(n != int64(length)). %v bytes copied, while %v expected" , n , length )
118118 } else {
119119 if length < MaxPayloadLen {
120120 return nil
121121 }
122122
123123 if err := c .ReadPacketTo (w ); err != nil {
124- return err
124+ return errors . Wrap ( err , "ReadPacketTo failed" )
125125 }
126126 }
127127
@@ -141,9 +141,9 @@ func (c *Conn) WritePacket(data []byte) error {
141141 data [3 ] = c .Sequence
142142
143143 if n , err := c .Write (data [:4 + MaxPayloadLen ]); err != nil {
144- return ErrBadConn
144+ return errors . Wrapf ( ErrBadConn , "Write(payload portion) failed. err %v" , err )
145145 } else if n != (4 + MaxPayloadLen ) {
146- return ErrBadConn
146+ return errors . Wrapf ( ErrBadConn , "Write(payload portion) failed. only %v bytes written, while %v expected" , n , 4 + MaxPayloadLen )
147147 } else {
148148 c .Sequence ++
149149 length -= MaxPayloadLen
@@ -157,9 +157,9 @@ func (c *Conn) WritePacket(data []byte) error {
157157 data [3 ] = c .Sequence
158158
159159 if n , err := c .Write (data ); err != nil {
160- return ErrBadConn
160+ return errors . Wrapf ( ErrBadConn , "Write failed. err %v" , err )
161161 } else if n != len (data ) {
162- return ErrBadConn
162+ return errors . Wrapf ( ErrBadConn , "Write failed. only %v bytes written, while %v expected" , n , len ( data ))
163163 } else {
164164 c .Sequence ++
165165 return nil
@@ -177,7 +177,7 @@ func (c *Conn) WriteClearAuthPacket(password string) error {
177177 copy (data [4 :], password )
178178 data [4 + pktLen - 1 ] = 0x00
179179
180- return c .WritePacket (data )
180+ return errors . Wrap ( c .WritePacket (data ), "WritePacket failed" )
181181}
182182
183183// WritePublicKeyAuthPacket: Caching sha2 authentication. Public key request and send encrypted password
@@ -186,17 +186,19 @@ func (c *Conn) WritePublicKeyAuthPacket(password string, cipher []byte) error {
186186 // request public key
187187 data := make ([]byte , 4 + 1 )
188188 data [4 ] = 2 // cachingSha2PasswordRequestPublicKey
189- c .WritePacket (data )
189+ if err := c .WritePacket (data ); err != nil {
190+ return errors .Wrap (err , "WritePacket(single byte) failed" )
191+ }
190192
191193 data , err := c .ReadPacket ()
192194 if err != nil {
193- return err
195+ return errors . Wrap ( err , "ReadPacket failed" )
194196 }
195197
196198 block , _ := pem .Decode (data [1 :])
197199 pub , err := x509 .ParsePKIXPublicKey (block .Bytes )
198200 if err != nil {
199- return err
201+ return errors . Wrap ( err , "x509.ParsePKIXPublicKey failed" )
200202 }
201203
202204 plain := make ([]byte , len (password )+ 1 )
@@ -209,15 +211,15 @@ func (c *Conn) WritePublicKeyAuthPacket(password string, cipher []byte) error {
209211 enc , _ := rsa .EncryptOAEP (sha1v , rand .Reader , pub .(* rsa.PublicKey ), plain , nil )
210212 data = make ([]byte , 4 + len (enc ))
211213 copy (data [4 :], enc )
212- return c .WritePacket (data )
214+ return errors . Wrap ( c .WritePacket (data ), "WritePacket failed" )
213215}
214216
215217func (c * Conn ) WriteEncryptedPassword (password string , seed []byte , pub * rsa.PublicKey ) error {
216218 enc , err := EncryptPassword (password , seed , pub )
217219 if err != nil {
218- return err
220+ return errors . Wrap ( err , "EncryptPassword failed" )
219221 }
220- return c .WriteAuthSwitchPacket (enc , false )
222+ return errors . Wrap ( c .WriteAuthSwitchPacket (enc , false ), "WriteAuthSwitchPacket failed" )
221223}
222224
223225// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse
@@ -234,7 +236,7 @@ func (c *Conn) WriteAuthSwitchPacket(authData []byte, addNUL bool) error {
234236 data [pktLen - 1 ] = 0x00
235237 }
236238
237- return c .WritePacket (data )
239+ return errors . Wrap ( c .WritePacket (data ), "WritePacket failed" )
238240}
239241
240242func (c * Conn ) ResetSequence () {
@@ -244,7 +246,7 @@ func (c *Conn) ResetSequence() {
244246func (c * Conn ) Close () error {
245247 c .Sequence = 0
246248 if c .Conn != nil {
247- return c .Conn .Close ()
249+ return errors . Wrap ( c .Conn .Close (), "Conn.Close failed" )
248250 }
249251 return nil
250252}
0 commit comments