|
|
@@ -167,89 +167,9 @@ func (d Driver) Open(dsn string) (driver.Conn, error) {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- // c.startListener()
|
|
|
-
|
|
|
- // switch r.(type) {
|
|
|
- // case *OKPacket: // Login successful.
|
|
|
- // // Reset sequence to 0 now that connection phase is over
|
|
|
- // // and command phase has started.
|
|
|
- // c.sequenceId = 0
|
|
|
-
|
|
|
- // // Tell server to stream binlog.
|
|
|
- // err = c.startBinLogStream()
|
|
|
- // if err != nil {
|
|
|
- // return nil, err
|
|
|
- // }
|
|
|
-
|
|
|
- // err = c.listenForBinlog()
|
|
|
- // if err != nil {
|
|
|
- // return nil, err
|
|
|
- // }
|
|
|
- // case *ErrorPacket: // Bad login.
|
|
|
- // case *AuthMoreDataPacket: // Something's fucked
|
|
|
- // fmt.Println("AuthMoreData")
|
|
|
- // }
|
|
|
-
|
|
|
return c, err
|
|
|
}
|
|
|
|
|
|
-func (c *Conn) listen() (interface{}, error) {
|
|
|
- ph, err := c.getPacketHeader()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- c.sequenceId++
|
|
|
-
|
|
|
- var res interface{}
|
|
|
-
|
|
|
- switch ph.Status {
|
|
|
- case StatusAuth:
|
|
|
- res, err := c.decodeAuthMoreDataResponsePacket(ph)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- switch res.Data {
|
|
|
- case SHA2_FAST_AUTH_SUCCESS:
|
|
|
- case SHA2_REQUEST_PUBLIC_KEY:
|
|
|
- case SHA2_PERFORM_FULL_AUTHENTICATION:
|
|
|
- c.putBytes(append([]byte(c.Config.Pass), NullByte))
|
|
|
- if c.Flush() != nil {
|
|
|
- return nil, c.Flush()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- case StatusEOF:
|
|
|
- fallthrough
|
|
|
- case StatusOK:
|
|
|
- res, err = c.decodeOKPacket(ph)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- case StatusErr:
|
|
|
- res, err = c.decodeErrorPacket(ph)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- err = errors.New(
|
|
|
- fmt.Sprintf(
|
|
|
- "Error %d: %s",
|
|
|
- res.(*ErrorPacket).ErrorCode,
|
|
|
- res.(*ErrorPacket).ErrorMessage,
|
|
|
- ))
|
|
|
-
|
|
|
- return res, err
|
|
|
- }
|
|
|
-
|
|
|
- err = c.scanner.Err()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- return res, nil
|
|
|
-}
|
|
|
-
|
|
|
type PacketHeader struct {
|
|
|
Length uint64
|
|
|
SequenceID uint64
|