Search in sources :

Example 11 with ErrorPacket

use of io.mycat.net.mysql.ErrorPacket in project Mycat-Server by MyCATApache.

the class MySQLDataSource method testConnection.

@Override
public boolean testConnection(String schema) throws IOException {
    boolean isConnected = true;
    Socket socket = null;
    InputStream in = null;
    OutputStream out = null;
    try {
        socket = new Socket(this.getConfig().getIp(), this.getConfig().getPort());
        socket.setSoTimeout(1000 * 20);
        socket.setReceiveBufferSize(32768);
        socket.setSendBufferSize(32768);
        socket.setTcpNoDelay(true);
        socket.setKeepAlive(true);
        in = new BufferedInputStream(socket.getInputStream(), 32768);
        out = new BufferedOutputStream(socket.getOutputStream(), 32768);
        /**
	         * Phase 1: MySQL to client. Send handshake packet.
	        */
        BinaryPacket bin1 = new BinaryPacket();
        bin1.read(in);
        HandshakePacket handshake = new HandshakePacket();
        handshake.read(bin1);
        /**
	         * Phase 2: client to MySQL. Send auth packet.
	         */
        AuthPacket authPacket = new AuthPacket();
        authPacket.packetId = 1;
        authPacket.clientFlags = getClientFlags();
        authPacket.maxPacketSize = 1024 * 1024 * 16;
        authPacket.charsetIndex = handshake.serverCharsetIndex & 0xff;
        authPacket.user = this.getConfig().getUser();
        ;
        try {
            authPacket.password = passwd(this.getConfig().getPassword(), handshake);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e.getMessage());
        }
        authPacket.database = schema;
        authPacket.write(out);
        out.flush();
        /**
	         * Phase 3: MySQL to client. send OK/ERROR packet.
	         */
        BinaryPacket bin2 = new BinaryPacket();
        bin2.read(in);
        switch(bin2.data[0]) {
            case OkPacket.FIELD_COUNT:
                break;
            case ErrorPacket.FIELD_COUNT:
                ErrorPacket err = new ErrorPacket();
                err.read(bin2);
                isConnected = false;
            case EOFPacket.FIELD_COUNT:
                // 发送323响应认证数据包
                Reply323Packet r323 = new Reply323Packet();
                r323.packetId = ++bin2.packetId;
                String passwd = this.getConfig().getPassword();
                if (passwd != null && passwd.length() > 0) {
                    r323.seed = SecurityUtil.scramble323(passwd, new String(handshake.seed)).getBytes();
                }
                r323.write(out);
                out.flush();
                break;
        }
    } catch (IOException e) {
        isConnected = false;
    } finally {
        try {
            if (in != null) {
                in.close();
            }
        } catch (IOException e) {
        }
        try {
            if (out != null) {
                out.write(QuitPacket.QUIT);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
        }
        try {
            if (socket != null)
                socket.close();
        } catch (IOException e) {
        }
    }
    return isConnected;
}
Also used : BufferedInputStream(java.io.BufferedInputStream) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) BufferedOutputStream(java.io.BufferedOutputStream) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) IOException(java.io.IOException) HandshakePacket(io.mycat.net.mysql.HandshakePacket) ErrorPacket(io.mycat.net.mysql.ErrorPacket) BufferedInputStream(java.io.BufferedInputStream) AuthPacket(io.mycat.net.mysql.AuthPacket) Reply323Packet(io.mycat.net.mysql.Reply323Packet) BufferedOutputStream(java.io.BufferedOutputStream) Socket(java.net.Socket) BinaryPacket(io.mycat.net.mysql.BinaryPacket)

Example 12 with ErrorPacket

use of io.mycat.net.mysql.ErrorPacket in project Mycat-Server by MyCATApache.

the class CommitNodeHandler method errorResponse.

@Override
public void errorResponse(byte[] err, BackendConnection conn) {
    ErrorPacket errPkg = new ErrorPacket();
    errPkg.read(err);
    String errInfo = new String(errPkg.message);
    session.getSource().setTxInterrupt(errInfo);
    errPkg.write(session.getSource());
}
Also used : ErrorPacket(io.mycat.net.mysql.ErrorPacket)

Example 13 with ErrorPacket

use of io.mycat.net.mysql.ErrorPacket in project Mycat-Server by MyCATApache.

the class HeartBeatCon method errorResponse.

@Override
public void errorResponse(byte[] data, BackendConnection conn) {
    removeFinished(conn);
    ErrorPacket err = new ErrorPacket();
    err.read(data);
    LOGGER.warn("errorResponse " + err.errno + " " + new String(err.message));
    conn.release();
}
Also used : ErrorPacket(io.mycat.net.mysql.ErrorPacket)

Example 14 with ErrorPacket

use of io.mycat.net.mysql.ErrorPacket in project Mycat-Server by MyCATApache.

the class PacketUtil method getShutdown.

public static final ErrorPacket getShutdown() {
    ErrorPacket error = new ErrorPacket();
    error.packetId = 1;
    error.errno = ErrorCode.ER_SERVER_SHUTDOWN;
    error.message = "The server has been shutdown".getBytes();
    return error;
}
Also used : ErrorPacket(io.mycat.net.mysql.ErrorPacket)

Example 15 with ErrorPacket

use of io.mycat.net.mysql.ErrorPacket in project Mycat-Server by MyCATApache.

the class SingleNodeHandler method errorResponse.

@Override
public void errorResponse(byte[] data, BackendConnection conn) {
    ErrorPacket err = new ErrorPacket();
    err.read(data);
    err.packetId = ++packetId;
    backConnectionErr(err, conn);
}
Also used : ErrorPacket(io.mycat.net.mysql.ErrorPacket)

Aggregations

ErrorPacket (io.mycat.net.mysql.ErrorPacket)21 IOException (java.io.IOException)3 UnsupportedEncodingException (java.io.UnsupportedEncodingException)3 HandshakePacket (io.mycat.net.mysql.HandshakePacket)2 ConnectionException (io.mycat.net.ConnectionException)1 AuthPacket (io.mycat.net.mysql.AuthPacket)1 BinaryPacket (io.mycat.net.mysql.BinaryPacket)1 HeartbeatPacket (io.mycat.net.mysql.HeartbeatPacket)1 OkPacket (io.mycat.net.mysql.OkPacket)1 Reply323Packet (io.mycat.net.mysql.Reply323Packet)1 ServerConnection (io.mycat.server.ServerConnection)1 BufferedInputStream (java.io.BufferedInputStream)1 BufferedOutputStream (java.io.BufferedOutputStream)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 Socket (java.net.Socket)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1