package com.subgraph.orchid.sockets.sslengine;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
public class SSLEngineOutputStream extends OutputStream {
private final SSLEngineManager manager;
private final ByteBuffer outputBuffer;
public SSLEngineOutputStream(SSLEngineManager manager) {
this.manager = manager;
this.outputBuffer = manager.getSendBuffer();
}
@Override
public void write(int b) throws IOException {
outputBuffer.put((byte) b);
manager.write();
}
@Override
public void write(byte b[], int off, int len) throws IOException {
int written = 0;
while(written < len) {
int n = doWrite(b, off + written, len - written);
written += n;
}
}
@Override
public void close() throws IOException {
manager.close();
}
private int doWrite(byte[] b, int off, int len) throws IOException {
int putLength = Math.min(len, outputBuffer.remaining());
outputBuffer.put(b, off, putLength);
manager.write();
return putLength;
}
}