final WorkerThread workerThread = (WorkerThread)Thread.currentThread(); ByteBuffer byteBuffer = workerThread.getByteBuffer(); ByteBuffer outputBB = workerThread.getOutputBB(); ByteBuffer inputBB = workerThread.getInputBB(); int expectedSize = workerThread.getSSLEngine().getSession() .getPacketBufferSize(); if (defaultBufferSize < expectedSize){ expectedSize = workerThread.getSSLEngine().getSession() .getApplicationBufferSize(); if ( expectedSize > byteBuffer.capacity() ) { workerThread.setInputBB(inputBB); workerThread.setOutputBB(outputBB); workerThread.setByteBuffer(byteBuffer);
private void saveSecuredBufferRemainders(SelectionKey selectionKey) { ThreadAttachment attachment = (ThreadAttachment) selectionKey.attachment(); WorkerThread workerThread = (WorkerThread) Thread.currentThread(); if (attachment == null || workerThread.getAttachment() != attachment) { Controller.logger().log(Level.FINE, "SelectionKey ThreadAttachment is NULL or doesn't " + "correspond to the current thread, when saving buffers"); return; } ByteBuffer inputBB = workerThread.getInputBB(); if (inputBB != null && inputBB.hasRemaining()) { workerThread.updateAttachment(attachment.getMode() | Mode.INPUT_BB); } else { workerThread.updateAttachment(attachment.getMode() & (Integer.MAX_VALUE ^ Mode.INPUT_BB)); } ByteBuffer outputBB = workerThread.getOutputBB(); if (outputBB != null && outputBB.hasRemaining()) { workerThread.updateAttachment(attachment.getMode() | Mode.OUTPUT_BB); } else { workerThread.updateAttachment(attachment.getMode() & (Integer.MAX_VALUE ^ Mode.OUTPUT_BB)); } }
/** * SelectionKey attachment processing * @param selectionKey */ public void process(SelectionKey selectionKey) { ((WorkerThread) Thread.currentThread()).attach(this); }
public ByteBuffer getByteBuffer() { final WorkerThread workerThread = (WorkerThread) Thread.currentThread(); if (workerThread.getSSLEngine() != null) { return workerThread.getInputBB(); } return null; } });
/** * Encrypt the response and flush it using {@link OutputWriter} * @param channel {@link SelectableChannel} to flush * @param bb {@link ByteBuffer} * @return number of bytes written * @throws java.io.IOException */ public static long flushChannel(SelectableChannel channel, ByteBuffer bb) throws IOException{ WorkerThread workerThread = (WorkerThread)Thread.currentThread(); SSLEngine sslEngine = workerThread.getSSLEngine(); ByteBuffer outputBB = workerThread.getOutputBB(); return flushChannel(channel,bb,outputBB,sslEngine); }
/** * Returns <code>ByteBuffer</code>, where PUReadFilter will read data * * @return <code>ByteBuffer</code> */ @Override public ByteBuffer getByteBuffer() { final WorkerThread workerThread = (WorkerThread) Thread.currentThread(); final SSLEngine sslEngine = workerThread.getSSLEngine(); if (sslEngine != null) { ByteBuffer secureInputBuffer = workerThread.getInputBB(); if (secureInputBuffer == null) { final int securedBBSize = sslEngine.getSession().getPacketBufferSize(); secureInputBuffer = ByteBuffer.allocate(securedBBSize * 2); workerThread.setInputBB(secureInputBuffer); } return secureInputBuffer; } return null; } }
/** * Get the peer certificate list by initiating a new handshake. * @param key {@link SelectionKey} * @param needClientAuth * @return Object[] An array of X509Certificate. * @throws java.io.IOException */ public static Object[] doPeerCertificateChain(SelectionKey key, boolean needClientAuth) throws IOException { final WorkerThread workerThread = (WorkerThread)Thread.currentThread(); ByteBuffer byteBuffer = workerThread.getByteBuffer(); ByteBuffer inputBB = workerThread.getInputBB(); ByteBuffer outputBB = workerThread.getOutputBB(); SSLEngine sslEngine = workerThread.getSSLEngine(); return SSLUtils.doPeerCertificateChain((SocketChannel) key.channel(), byteBuffer, inputBB, outputBB, sslEngine, needClientAuth, InputReader.getDefaultReadTimeout()); }
public boolean execute(Context ctx) throws IOException { final WorkerThread workerThread = ((WorkerThread) Thread.currentThread()); ByteBuffer buffer = workerThread.getByteBuffer(); buffer.flip(); if (buffer.hasRemaining()) { buffer.position(position); try { SSLEngine sslEngine = workerThread.getSSLEngine(); AttributeHolder attributes = ctx.getAttributeHolderByScope(AttributeScope.CONNECTION); (SSLWritePreProcessor) attributes.getAttribute(SSL_WRITE_PREPROCESSOR); if (preProcessor == null) { preProcessor = new SSLWritePreProcessor(sslEngine, workerThread.getOutputBB()); workerThread.setOutputBB(null); attributes.setAttribute(SSL_WRITE_PREPROCESSOR, preProcessor);
workerThread.setSSLEngine(sslEngine); workerThread.setInputBB(inputBB); workerThread.setOutputBB(outputBB); final Object attachment = workerThread.updateAttachment(Mode.SSL_ENGINE); key.attach(attachment); byteBuffer = SSLUtils.unwrapAll(byteBuffer, inputBB, sslEngine); protocolRequest.setByteBuffer(byteBuffer); workerThread.setByteBuffer(byteBuffer); workerThread.setByteBuffer(byteBuffer);
public boolean execute(Context ctx) throws IOException { final WorkerThread thread = (WorkerThread) Thread.currentThread(); final SSLEngine sslEngine = thread.getSSLEngine(); HttpRedirector.redirectSSL(ctx, sslEngine, thread.getByteBuffer(), thread.getOutputBB(), redirectPort, redirectToSecure); } else { HttpRedirector.redirect(ctx, thread.getByteBuffer(), redirectPort, redirectToSecure); final ByteBuffer bb = thread.getByteBuffer();
SSLEngine sslEngine = workerThread.getSSLEngine(); if (sslEngine == null) { sslEngine = newSSLEngine(key); workerThread.setSSLEngine(sslEngine); ThreadAttachment attachment = workerThread.updateAttachment(Mode.SSL_ENGINE); key.attach(attachment); hasHandshake = true; ByteBuffer outputBB = workerThread.getOutputBB(); outputBB.limit(outputBB.position()); } else {
/** * Re-enable the SelectionKey and make sure the ByteBuffer has been cleared. * @return <tt>true</tt> if the previous ProtocolFilter postExecute method * needs to be invoked. */ public boolean postExecute(Context ctx) throws IOException { ctx.setKeyRegistrationState(Context.KeyRegistrationState.REGISTER); ((WorkerThread)Thread.currentThread()).getByteBuffer().clear(); return true; }
private static void swapEncryptOutBuffer(final WorkerThread workerThread, final SSLAsyncOutputBuffer outputBuffer, final SSLEngine engine) { ByteBuffer tmp = allocate(engine); outputBuffer.setOutputBB(workerThread.getOutputBB()); workerThread.setOutputBB(tmp); outputBuffer.setSSLEngine(engine); }
public void setByteBuffer(ByteBuffer byteBuffer) { workerThread().setByteBuffer(byteBuffer); }
public SSLEngine getSSLEngine() { return workerThread().getSSLEngine(); }
ByteBuffer byteBuffer = workerThread.getByteBuffer(); Protocol protocol = ctx.getProtocol(); workerThread.setByteBuffer(nBuf); } else { workerThread.setByteBuffer(ByteBufferFactory.allocateView(false));
if (sslEngine == null) { return Utils.readWithTemporarySelector(key.channel(), thread.getByteBuffer(), timeout).bytesRead; } else { ByteBuffer byteBuffer = thread.getByteBuffer(); final ByteBuffer securedBuffer = thread.getInputBB(); if (securedBuffer.position() > 0) { final int initialPosition = byteBuffer.position();
private void saveParser(SelectionKey key, ProtocolParser parser) { WorkerThread workerThread = (WorkerThread) Thread.currentThread(); // Detach the current Thread data. ThreadAttachment threadAttachment = workerThread.getAttachment(); threadAttachment.setAttribute(ProtocolParser.PARSER, parser); // Attach it to the SelectionKey so the it can be resumed latter. key.attach(threadAttachment); }
ByteBuffer bb = wt.getByteBuffer(); controller = ctx.getController(); ctx.getSelectionKey().attach(null); } else { wt.getAttachment().setTimeout(null);
private boolean associateWithThread(ByteBuffer buffer) { final Thread currentThread = Thread.currentThread(); if (currentThread instanceof WorkerThread) { ((WorkerThread) currentThread).setOutputBB(buffer); return true; } return false; }