Search in sources :

Example 1 with BinaryPacket

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

the class LoadDataUtil method writeToBackConnection.

public static byte writeToBackConnection(byte packID, InputStream inputStream, BackendAIOConnection backendAIOConnection) throws IOException {
    try {
        int packSize = MycatServer.getInstance().getConfig().getSystem().getBufferPoolChunkSize() - 5;
        // int packSize = backendAIOConnection.getMaxPacketSize() / 32;
        //  int packSize=65530;
        byte[] buffer = new byte[packSize];
        int len = -1;
        while ((len = inputStream.read(buffer)) != -1) {
            byte[] temp = null;
            if (len == packSize) {
                temp = buffer;
            } else {
                temp = new byte[len];
                System.arraycopy(buffer, 0, temp, 0, len);
            }
            BinaryPacket packet = new BinaryPacket();
            packet.packetId = ++packID;
            packet.data = temp;
            packet.write(backendAIOConnection);
        }
    } finally {
        inputStream.close();
    }
    return packID;
}
Also used : BinaryPacket(io.mycat.net.mysql.BinaryPacket)

Example 2 with BinaryPacket

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

the class ServerLoadDataInfileHandler method handle.

@Override
public void handle(byte[] data) {
    try {
        if (sql == null) {
            serverConnection.writeErrMessage(ErrorCode.ER_UNKNOWN_COM_ERROR, "Unknown command");
            clear();
            return;
        }
        BinaryPacket packet = new BinaryPacket();
        ByteArrayInputStream inputStream = new ByteArrayInputStream(data, 0, data.length);
        packet.read(inputStream);
        saveByteOrToFile(packet.data, false);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
Also used : BinaryPacket(io.mycat.net.mysql.BinaryPacket)

Example 3 with BinaryPacket

use of io.mycat.net.mysql.BinaryPacket 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)

Aggregations

BinaryPacket (io.mycat.net.mysql.BinaryPacket)3 AuthPacket (io.mycat.net.mysql.AuthPacket)1 ErrorPacket (io.mycat.net.mysql.ErrorPacket)1 HandshakePacket (io.mycat.net.mysql.HandshakePacket)1 Reply323Packet (io.mycat.net.mysql.Reply323Packet)1 BufferedInputStream (java.io.BufferedInputStream)1 BufferedOutputStream (java.io.BufferedOutputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 Socket (java.net.Socket)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1