Search in sources :

Example 1 with ConnectionException

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

the class MySQLConnectionAuthenticator method handle.

@Override
public void handle(byte[] data) {
    try {
        switch(data[4]) {
            case OkPacket.FIELD_COUNT:
                HandshakePacket packet = source.getHandshake();
                if (packet == null) {
                    processHandShakePacket(data);
                    // 发送认证数据包
                    source.authenticate();
                    break;
                }
                // 处理认证结果
                source.setHandler(new MySQLConnectionHandler(source));
                source.setAuthenticated(true);
                boolean clientCompress = Capabilities.CLIENT_COMPRESS == (Capabilities.CLIENT_COMPRESS & packet.serverCapabilities);
                boolean usingCompress = MycatServer.getInstance().getConfig().getSystem().getUseCompression() == 1;
                if (clientCompress && usingCompress) {
                    source.setSupportCompress(true);
                }
                if (listener != null) {
                    listener.connectionAcquired(source);
                }
                break;
            case ErrorPacket.FIELD_COUNT:
                ErrorPacket err = new ErrorPacket();
                err.read(data);
                String errMsg = new String(err.message);
                LOGGER.warn("can't connect to mysql server ,errmsg:" + errMsg + " " + source);
                //source.close(errMsg);
                throw new ConnectionException(err.errno, errMsg);
            case EOFPacket.FIELD_COUNT:
                auth323(data[3]);
                break;
            default:
                packet = source.getHandshake();
                if (packet == null) {
                    processHandShakePacket(data);
                    // 发送认证数据包
                    source.authenticate();
                    break;
                } else {
                    throw new RuntimeException("Unknown Packet!");
                }
        }
    } catch (RuntimeException e) {
        if (listener != null) {
            listener.connectionError(e, source);
            return;
        }
        throw e;
    }
}
Also used : HandshakePacket(io.mycat.net.mysql.HandshakePacket) ErrorPacket(io.mycat.net.mysql.ErrorPacket) ConnectionException(io.mycat.net.ConnectionException)

Aggregations

ConnectionException (io.mycat.net.ConnectionException)1 ErrorPacket (io.mycat.net.mysql.ErrorPacket)1 HandshakePacket (io.mycat.net.mysql.HandshakePacket)1