/** * Process the contents of the buffer. Give sub-classes a chance to override this behavior. * * @param sslSocketChannel the channel the data was read from * @param socketChannel the socket channel being wrapped by sslSocketChannel * @param bytesRead the number of bytes read * @param buffer the buffer to process * @throws InterruptedException thrown if interrupted while queuing events */ protected void processBuffer(final SSLSocketChannel sslSocketChannel, final SocketChannel socketChannel, final int bytesRead, final byte[] buffer) throws InterruptedException, IOException { final InetAddress sender = socketChannel.socket().getInetAddress(); // go through the buffer looking for the end of each message for (int i = 0; i < bytesRead; i++) { final byte currByte = buffer[i]; // check if at end of a message if (currByte == getDelimiter()) { if (currBytes.size() > 0) { final SSLSocketChannelResponder response = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); final E event = eventFactory.create(currBytes.toByteArray(), metadata, response); events.offer(event); currBytes.reset(); } } else { currBytes.write(currByte); } } }
@Override protected void processBuffer(final SSLSocketChannel sslSocketChannel, final SocketChannel socketChannel, final int bytesRead, final byte[] buffer) throws InterruptedException, IOException { final InetAddress sender = socketChannel.socket().getInetAddress(); try { // go through the buffer parsing the RELP command for (int i = 0; i < bytesRead; i++) { byte currByte = buffer[i]; // if we found the end of a frame, handle the frame and mark the buffer if (decoder.process(currByte)) { final RELPFrame frame = decoder.getFrame(); logger.debug("Received RELP frame with transaction {} and command {}", new Object[] {frame.getTxnr(), frame.getCommand()}); final SSLSocketChannelResponder responder = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); frameHandler.handle(frame, responder, sender.toString()); } } logger.debug("Done processing buffer"); } catch (final RELPFrameException rfe) { logger.error("Error reading RELP frames due to {}", new Object[] {rfe.getMessage()} , rfe); // if an invalid frame or bad data was sent then the decoder will be left in a // corrupted state, so lets close the connection and cause the client to re-establish dispatcher.completeConnection(key); } }
final SSLSocketChannelResponder responder = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); frameHandler.handle(frame, responder, sender.toString());
final SSLSocketChannelResponder responder = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); frameHandler.handle(frame, responder, sender.toString());
@Override protected void processBuffer(final SSLSocketChannel sslSocketChannel, final SocketChannel socketChannel, final int bytesRead, final byte[] buffer) throws InterruptedException, IOException { final InetAddress sender = socketChannel.socket().getInetAddress(); try { // go through the buffer parsing the RELP command for (int i = 0; i < bytesRead; i++) { byte currByte = buffer[i]; // if we found the end of a frame, handle the frame and mark the buffer if (decoder.process(currByte)) { final RELPFrame frame = decoder.getFrame(); logger.debug("Received RELP frame with transaction {} and command {}", new Object[] {frame.getTxnr(), frame.getCommand()}); final SSLSocketChannelResponder responder = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); frameHandler.handle(frame, responder, sender.toString()); } } logger.debug("Done processing buffer"); } catch (final RELPFrameException rfe) { logger.error("Error reading RELP frames due to {}", new Object[] {rfe.getMessage()} , rfe); // if an invalid frame or bad data was sent then the decoder will be left in a // corrupted state, so lets close the connection and cause the client to re-establish dispatcher.completeConnection(key); } }
final SSLSocketChannelResponder responder = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); frameHandler.handle(frame, responder, sender.toString());