diff --git a/src/main/java/org/mariadb/jdbc/client/ClientImpl.java b/src/main/java/org/mariadb/jdbc/client/ClientImpl.java index 2e718d58e..89a7d72f1 100644 --- a/src/main/java/org/mariadb/jdbc/client/ClientImpl.java +++ b/src/main/java/org/mariadb/jdbc/client/ClientImpl.java @@ -108,7 +108,7 @@ public ClientImpl( if (conf.socketTimeout() > 0) setSocketTimeout(conf.socketTimeout()); // read server handshake - ReadableByteBuf buf = reader.readReadablePacket(true); + ReadableByteBuf buf = reader.readPacket(true); if (buf.getByte() == -1) { ErrorPacket errorPacket = new ErrorPacket(buf, null); throw this.exceptionFactory.create( diff --git a/src/main/java/org/mariadb/jdbc/client/ConnectionHelper.java b/src/main/java/org/mariadb/jdbc/client/ConnectionHelper.java index 37ba1f485..3fd89356c 100644 --- a/src/main/java/org/mariadb/jdbc/client/ConnectionHelper.java +++ b/src/main/java/org/mariadb/jdbc/client/ConnectionHelper.java @@ -232,7 +232,7 @@ public static void authenticationHandler( writer.permitTrace(true); Configuration conf = context.getConf(); - ReadableByteBuf buf = reader.readReadablePacket(false); + ReadableByteBuf buf = reader.readPacket(false); authentication_loop: while (true) { diff --git a/src/main/java/org/mariadb/jdbc/client/result/Result.java b/src/main/java/org/mariadb/jdbc/client/result/Result.java index c29805646..d33eea517 100644 --- a/src/main/java/org/mariadb/jdbc/client/result/Result.java +++ b/src/main/java/org/mariadb/jdbc/client/result/Result.java @@ -110,7 +110,7 @@ public Result(ColumnDefinitionPacket[] metadataList, byte[][] data, Context cont @SuppressWarnings("fallthrough") protected boolean readNext() throws SQLException, IOException { - byte[] buf = reader.readPacket(false, traceEnable); + byte[] buf = reader.readPacket(false, traceEnable).buf(); switch (buf[0]) { case (byte) 0xFF: loaded = true; @@ -159,7 +159,7 @@ protected boolean readNext() throws SQLException, IOException { @SuppressWarnings("fallthrough") protected void skipRemaining() throws SQLException, IOException { while (true) { - ReadableByteBuf buf = reader.readReadablePacket(true, traceEnable); + ReadableByteBuf buf = reader.readPacket(true, traceEnable); switch (buf.getUnsignedByte()) { case 0xFF: loaded = true; diff --git a/src/main/java/org/mariadb/jdbc/client/socket/PacketReader.java b/src/main/java/org/mariadb/jdbc/client/socket/PacketReader.java index b26c124a3..adda614f6 100644 --- a/src/main/java/org/mariadb/jdbc/client/socket/PacketReader.java +++ b/src/main/java/org/mariadb/jdbc/client/socket/PacketReader.java @@ -66,8 +66,8 @@ public PacketReader(InputStream in, Configuration conf, MutableInt sequence) { * @return array packet. * @throws IOException if socket exception occur. */ - public ReadableByteBuf readReadablePacket(boolean reUsable) throws IOException { - return readReadablePacket(reUsable, logger.isTraceEnabled()); + public ReadableByteBuf readPacket(boolean reUsable) throws IOException { + return readPacket(reUsable, logger.isTraceEnabled()); } /** @@ -79,8 +79,7 @@ public ReadableByteBuf readReadablePacket(boolean reUsable) throws IOException { * @return array packet. * @throws IOException if socket exception occur. */ - public ReadableByteBuf readReadablePacket(boolean reUsable, boolean traceEnable) - throws IOException { + public ReadableByteBuf readPacket(boolean reUsable, boolean traceEnable) throws IOException { // *************************************************** // Read 4 byte header // *************************************************** @@ -189,129 +188,11 @@ public ReadableByteBuf readReadablePacket(boolean reUsable, boolean traceEnable) lastPacketLength += packetLength; } while (packetLength == MAX_PACKET_SIZE); - - return new ReadableByteBuf(sequence, rawBytes, rawBytes.length); } return new ReadableByteBuf(sequence, rawBytes, lastPacketLength); } - public byte[] readPacket(boolean reUsable, boolean traceEnable) throws IOException { - // *************************************************** - // Read 4 byte header - // *************************************************** - int remaining = 4; - int off = 0; - do { - int count = inputStream.read(header, off, remaining); - if (count < 0) { - throw new EOFException( - "unexpected end of stream, read " - + off - + " bytes from 4 (socket was closed by server)"); - } - remaining -= count; - off += count; - } while (remaining > 0); - - int lastPacketLength = - (header[0] & 0xff) + ((header[1] & 0xff) << 8) + ((header[2] & 0xff) << 16); - sequence.set(header[3]); - - // prepare array - byte[] rawBytes; - if (reUsable && lastPacketLength < REUSABLE_BUFFER_LENGTH) { - rawBytes = reusableArray; - } else { - rawBytes = new byte[lastPacketLength]; - } - - // *************************************************** - // Read content - // *************************************************** - remaining = lastPacketLength; - off = 0; - do { - int count = inputStream.read(rawBytes, off, remaining); - if (count < 0) { - throw new EOFException( - "unexpected end of stream, read " - + (lastPacketLength - remaining) - + " bytes from " - + lastPacketLength - + " (socket was closed by server)"); - } - remaining -= count; - off += count; - } while (remaining > 0); - - if (traceEnable) { - logger.trace( - "read: {}\n{}", - serverThreadLog, - LoggerHelper.hex(header, rawBytes, 0, lastPacketLength, maxQuerySizeToLog)); - } - - // *************************************************** - // In case content length is big, content will be separate in many 16Mb packets - // *************************************************** - if (lastPacketLength == MAX_PACKET_SIZE) { - int packetLength; - do { - remaining = 4; - off = 0; - do { - int count = inputStream.read(header, off, remaining); - if (count < 0) { - throw new EOFException("unexpected end of stream, read " + off + " bytes from 4"); - } - remaining -= count; - off += count; - } while (remaining > 0); - - packetLength = (header[0] & 0xff) + ((header[1] & 0xff) << 8) + ((header[2] & 0xff) << 16); - sequence.set(header[3]); - - int currentbufLength = rawBytes.length; - byte[] newRawBytes = new byte[currentbufLength + packetLength]; - System.arraycopy(rawBytes, 0, newRawBytes, 0, currentbufLength); - rawBytes = newRawBytes; - - // *************************************************** - // Read content - // *************************************************** - remaining = packetLength; - off = currentbufLength; - do { - int count = inputStream.read(rawBytes, off, remaining); - if (count < 0) { - throw new EOFException( - "unexpected end of stream, read " - + (packetLength - remaining) - + " bytes from " - + packetLength); - } - remaining -= count; - off += count; - } while (remaining > 0); - - if (traceEnable) { - logger.trace( - "read: {}\n{}", - serverThreadLog, - LoggerHelper.hex( - header, rawBytes, currentbufLength, packetLength, maxQuerySizeToLog)); - } - - lastPacketLength += packetLength; - } while (packetLength == MAX_PACKET_SIZE); - - return rawBytes; - } - - return rawBytes; - } - public MutableInt getSequence() { return sequence; } diff --git a/src/main/java/org/mariadb/jdbc/client/socket/PacketWriter.java b/src/main/java/org/mariadb/jdbc/client/socket/PacketWriter.java index aaa8fbc45..4a98fcc08 100644 --- a/src/main/java/org/mariadb/jdbc/client/socket/PacketWriter.java +++ b/src/main/java/org/mariadb/jdbc/client/socket/PacketWriter.java @@ -111,10 +111,7 @@ public void writeByte(int value) throws IOException { public void writeShort(short value) throws IOException { if (2 > buf.length - pos) { // not enough space remaining - byte[] arr = new byte[2]; - arr[0] = (byte) value; - arr[1] = (byte) (value >> 8); - writeBytes(arr, 0, 2); + writeBytes(new byte[] {(byte) value, (byte) (value >> 8)}, 0, 2); return; } diff --git a/src/main/java/org/mariadb/jdbc/message/client/ClientMessage.java b/src/main/java/org/mariadb/jdbc/message/client/ClientMessage.java index d1fae037d..2d5947270 100644 --- a/src/main/java/org/mariadb/jdbc/message/client/ClientMessage.java +++ b/src/main/java/org/mariadb/jdbc/message/client/ClientMessage.java @@ -75,7 +75,7 @@ default Completion readPacket( boolean traceEnable) throws IOException, SQLException { - ReadableByteBuf buf = reader.readReadablePacket(true, traceEnable); + ReadableByteBuf buf = reader.readPacket(true, traceEnable); switch (buf.getUnsignedByte()) { @@ -157,14 +157,14 @@ default Completion readPacket( for (int i = 0; i < fieldCount; i++) { ci[i] = new ColumnDefinitionPacket( - reader.readReadablePacket(false, traceEnable), + reader.readPacket(false, traceEnable), (context.getServerCapabilities() & Capabilities.MARIADB_CLIENT_EXTENDED_TYPE_INFO) > 0); } if (!context.isEofDeprecated()) { // skip intermediate EOF - reader.readReadablePacket(true, traceEnable); + reader.readPacket(true, traceEnable); } // read resultSet diff --git a/src/main/java/org/mariadb/jdbc/message/client/PreparePacket.java b/src/main/java/org/mariadb/jdbc/message/client/PreparePacket.java index 624c87e47..98197ab9a 100644 --- a/src/main/java/org/mariadb/jdbc/message/client/PreparePacket.java +++ b/src/main/java/org/mariadb/jdbc/message/client/PreparePacket.java @@ -68,7 +68,7 @@ public Completion readPacket( boolean traceEnable) throws IOException, SQLException { - ReadableByteBuf buf = reader.readReadablePacket(true, traceEnable); + ReadableByteBuf buf = reader.readPacket(true, traceEnable); switch (buf.getUnsignedByte()) { // ********************************************************************************************************* // * ERROR response diff --git a/src/main/java/org/mariadb/jdbc/message/server/PrepareResultPacket.java b/src/main/java/org/mariadb/jdbc/message/server/PrepareResultPacket.java index 37670347b..5f8b10aac 100644 --- a/src/main/java/org/mariadb/jdbc/message/server/PrepareResultPacket.java +++ b/src/main/java/org/mariadb/jdbc/message/server/PrepareResultPacket.java @@ -51,24 +51,24 @@ public PrepareResultPacket(ReadableByteBuf buffer, PacketReader reader, Context for (int i = 0; i < numParams; i++) { parameters[i] = new ColumnDefinitionPacket( - reader.readReadablePacket(false, trace), + reader.readPacket(false, trace), (context.getServerCapabilities() & Capabilities.MARIADB_CLIENT_EXTENDED_TYPE_INFO) > 0); } if (!context.isEofDeprecated()) { - reader.readReadablePacket(true, trace); + reader.readPacket(true, trace); } } if (numColumns > 0) { for (int i = 0; i < numColumns; i++) { columns[i] = new ColumnDefinitionPacket( - reader.readReadablePacket(false, trace), + reader.readPacket(false, trace), (context.getServerCapabilities() & Capabilities.MARIADB_CLIENT_EXTENDED_TYPE_INFO) > 0); } if (!context.isEofDeprecated()) { - reader.readReadablePacket(true, trace); + reader.readPacket(true, trace); } } } diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/CachingSha2PasswordPlugin.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/CachingSha2PasswordPlugin.java index 46ebe13b7..4936e9759 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/CachingSha2PasswordPlugin.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/CachingSha2PasswordPlugin.java @@ -131,7 +131,7 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex out.flush(); } - ReadableByteBuf buf = in.readReadablePacket(true); + ReadableByteBuf buf = in.readPacket(true); switch (buf.getByte()) { @@ -146,7 +146,7 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex buf.readBytes(authResult); switch (authResult[0]) { case 3: - return in.readReadablePacket(true); + return in.readPacket(true); case 4: if (conf.sslMode() != SslMode.DISABLE) { // send clear password @@ -187,7 +187,7 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex } } - return in.readReadablePacket(true); + return in.readPacket(true); default: throw new SQLException( @@ -230,7 +230,7 @@ public static PublicKey readPublicKeyFromFile(String serverRsaPublicKeyFile) thr */ public static PublicKey readPublicKeyFromSocket(PacketReader reader, Context context) throws SQLException, IOException { - ReadableByteBuf buf = reader.readReadablePacket(true); + ReadableByteBuf buf = reader.readPacket(true); switch (buf.getByte(0)) { case (byte) 0xFF: diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/ClearPasswordPlugin.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/ClearPasswordPlugin.java index bbd15695f..f7f6e2230 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/ClearPasswordPlugin.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/ClearPasswordPlugin.java @@ -75,6 +75,6 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex out.flush(); } - return in.readReadablePacket(true); + return in.readPacket(true); } } diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/Ed25519PasswordPlugin.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/Ed25519PasswordPlugin.java index 2637c3cde..00a0170e0 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/Ed25519PasswordPlugin.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/Ed25519PasswordPlugin.java @@ -133,6 +133,6 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex out.flush(); } - return in.readReadablePacket(true); + return in.readPacket(true); } } diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/NativePasswordPlugin.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/NativePasswordPlugin.java index 3bdb5f269..822ef14b5 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/NativePasswordPlugin.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/NativePasswordPlugin.java @@ -135,6 +135,6 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex } } - return in.readReadablePacket(true); + return in.readPacket(true); } } diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendGssApiAuthPacket.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendGssApiAuthPacket.java index a57b52c5a..2ca8dc8e9 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendGssApiAuthPacket.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendGssApiAuthPacket.java @@ -100,6 +100,6 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex gssapiAuth.authenticate(out, in, servicePrincipalName, mechanisms); - return in.readReadablePacket(true); + return in.readPacket(true); } } diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendPamAuthPacket.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendPamAuthPacket.java index 5067b2d93..9bef13111 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendPamAuthPacket.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/SendPamAuthPacket.java @@ -93,7 +93,7 @@ public ReadableByteBuf process(PacketWriter out, PacketReader in, Context contex out.writeByte(0); out.flush(); - ReadableByteBuf buf = in.readReadablePacket(true); + ReadableByteBuf buf = in.readPacket(true); int type = buf.getUnsignedByte(); diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/StandardGssapiAuthentication.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/StandardGssapiAuthentication.java index a0db67a13..406a4e0e8 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/StandardGssapiAuthentication.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/StandardGssapiAuthentication.java @@ -110,7 +110,7 @@ public void authenticate( out.flush(); } if (!context.isEstablished()) { - ReadableByteBuf buf = in.readReadablePacket(true); + ReadableByteBuf buf = in.readPacket(true); inToken = new byte[buf.readableBytes()]; buf.readBytes(inToken); } diff --git a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/WindowsNativeSspiAuthentication.java b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/WindowsNativeSspiAuthentication.java index 4740d837e..bc3259731 100644 --- a/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/WindowsNativeSspiAuthentication.java +++ b/src/main/java/org/mariadb/jdbc/plugin/authentication/standard/gssapi/WindowsNativeSspiAuthentication.java @@ -60,7 +60,7 @@ public void authenticate( // Step 2: read server response token if (clientContext.isContinue()) { - ReadableByteBuf buf = in.readReadablePacket(true); + ReadableByteBuf buf = in.readPacket(true); byte[] tokenForTheClientOnTheServer = new byte[buf.readableBytes()]; buf.readBytes(tokenForTheClientOnTheServer); Sspi.SecBufferDesc continueToken = diff --git a/src/test/java/org/mariadb/jdbc/Common.java b/src/test/java/org/mariadb/jdbc/Common.java index 71135c6f6..635f7bcd1 100644 --- a/src/test/java/org/mariadb/jdbc/Common.java +++ b/src/test/java/org/mariadb/jdbc/Common.java @@ -130,7 +130,12 @@ public Connection createProxyCon(HaMode mode, String opts) throws SQLException { public static boolean haveSsl() throws SQLException { Statement stmt = sharedConn.createStatement(); - ResultSet rs = stmt.executeQuery("select @@have_ssl"); + ResultSet rs = stmt.executeQuery("show variables like '%ssl%'"); + while (rs.next()) { + System.out.println(rs.getString(1) + ":" + rs.getString(2)); + } + + rs = stmt.executeQuery("select @@have_ssl"); assertTrue(rs.next()); return "YES".equals(rs.getString(1)); } diff --git a/src/test/java/org/mariadb/jdbc/integration/LoggingTest.java b/src/test/java/org/mariadb/jdbc/integration/LoggingTest.java index 2f0ca50ab..f4148922c 100644 --- a/src/test/java/org/mariadb/jdbc/integration/LoggingTest.java +++ b/src/test/java/org/mariadb/jdbc/integration/LoggingTest.java @@ -89,11 +89,11 @@ void basicLogging() throws Exception { + "| 73 69 6F 6E 5F 74 72 61 63 6B 5F 73 63 68 65 6D | sion_track_schem |\n" + "| 61 3D 31 | a=1 |\n" + "+--------------------------------------------------+------------------+\n"; - - Assertions.assertTrue( - contents.contains(defaultRequest) - || contents.contains(defaultRequest.replace("\r\n", "\n"))); - + if (!"maxscale".equals(System.getenv("srv")) && !"skysql-ha".equals(System.getenv("srv"))) { + Assertions.assertTrue( + contents.contains(defaultRequest) + || contents.contains(defaultRequest.replace("\r\n", "\n"))); + } String selectOne = "+--------------------------------------------------+\n" + "| 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n"