diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java index fa237c3921735cc8681b209572e3a3acb34ae537..f033586f17b654ff43dcd49e5f7d075ea166325f 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/MidlewareTunnel.java @@ -146,25 +146,16 @@ class MidlewareTunnel implements Closeable { if (connection.isServerClosed()) { break; } - byte[] sending; if (len == 0) { continue; } - if (buffer.length != len) { - sending = new byte[len]; - System.arraycopy(buffer, 0, sending, 0, len); - } else { - sending = buffer; - } - - int result = dataTransfer.sendDataToJobNode(sending, jobId, ipAddress, sessionCode); - if (result <= 0) { + if (!sendToMiddleware(buffer, len, connection)) { return; } } connection.clientClosed(); - } catch (InterruptedIOException e) { + } catch (InterruptedIOException e) { return; } catch (SocketException e) { if (!e.getMessage().equals("Socket closed")) { @@ -177,6 +168,27 @@ class MidlewareTunnel implements Closeable { } } + private boolean sendToMiddleware(byte[] buffer, int len, P_Connection connection) { + byte[] sending; + int toSend = len; + int offset = 0; + do { + if (toSend != buffer.length || offset != 0) { + sending = new byte[toSend]; + System.arraycopy(buffer, offset, sending, 0, toSend); + } else { + sending = buffer; + } + int reallySend = dataTransfer.sendDataToJobNode(sending, jobId, ipAddress, sessionCode); + if (reallySend == -1) { + return false; + } + toSend -= reallySend; + offset += reallySend; + } while(toSend != 0 && !connection.isServerClosed()); + return true; + } + private void readFromMiddleware(P_Connection connection) { log.info("START: readFromMiddleware"); try {