if (mTrace) trace(OzUtil.byteBufferDebugDump("read unwrapped", mUnwrapped, true));
if (mTrace) debug(OzUtil.byteBufferDebugDump("read unwrapped", mUnwrapped, true));
    public void read(ByteBuffer rbb) throws IOException {        if (!handshake(rbb)) {            return;         }        SSLEngineResult result;        while (rbb.position() != 0) {            rbb.flip();            ensureUnwrappedCapacity();            String ibefore = null, obefore = null;            if (mDebug) ibefore = OzUtil.toString(rbb);            if (mDebug) obefore = OzUtil.toString(mUnwrapped);                         result = mSSLEngine.unwrap(rbb, mUnwrapped);                        if (mDebug) debug("read unwrap " + toString(result) + " in:"+ ibefore + "->" + OzUtil.toString(rbb) + " out:" + obefore + "->" + OzUtil.toString(mUnwrapped));            if (mTrace) trace(OzUtil.byteBufferDebugDump("read unwrapped", mUnwrapped, true));                        rbb.compact();                        switch (result.getStatus()) {            case BUFFER_UNDERFLOW:            case OK:                if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) {                    runTasks();                }                break;            default: // CLOSED BUFFER_OVERFLOW                throw new IOException("TLS: invalid status during read: " + result.getStatus());            }                        getNextFilter().read(mUnwrapped);                        if (result.getStatus() == Status.OK) {            	continue;            }                        if (result.getStatus() == Status.BUFFER_UNDERFLOW) {            	mConnection.enableReadInterest();            }            break;        }    }