if(eof == true) { IOUtils.closeQuietly(socketChannel); dispatcher.completeConnection(key); } else { dispatcher.addBackForSelection(key);
@Override protected void processBuffer(final SocketChannel socketChannel, final ByteBuffer socketBuffer) throws InterruptedException, IOException { // get total bytes in buffer final int total = socketBuffer.remaining(); final InetAddress sender = socketChannel.socket().getInetAddress(); try { // go through the buffer parsing the RELP command for (int i = 0; i < total; i++) { byte currByte = socketBuffer.get(); // 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 SocketChannelResponder responder = new SocketChannelResponder(socketChannel); frameHandler.handle(frame, responder, sender.toString()); socketBuffer.mark(); } } 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); } }
dispatcher.completeConnection(key);
dispatcher.completeConnection(key);
@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); } }
public void handle(final RELPFrame frame, final ChannelResponder<SocketChannel> responder, final String sender) throws IOException, InterruptedException { // respond to open and close commands immediately, create and queue an event for everything else if (CMD_OPEN.equals(frame.getCommand())) { Map<String,String> offers = RELPResponse.parseOffers(frame.getData(), charset); ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.open(frame.getTxnr(), offers)); responder.addResponse(response); responder.respond(); } else if (CMD_CLOSE.equals(frame.getCommand())) { ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.ok(frame.getTxnr())); responder.addResponse(response); responder.respond(); dispatcher.completeConnection(key); } else { final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); metadata.put(RELPMetadata.TXNR_KEY, String.valueOf(frame.getTxnr())); metadata.put(RELPMetadata.COMMAND_KEY, frame.getCommand()); final E event = eventFactory.create(frame.getData(), metadata, responder); events.offer(event); } }
if(eof == true) { IOUtils.closeQuietly(sslSocketChannel); dispatcher.completeConnection(key); } else { dispatcher.addBackForSelection(key);
dispatcher.completeConnection(key);
dispatcher.completeConnection(key);
@Override protected void processBuffer(final SocketChannel socketChannel, final ByteBuffer socketBuffer) throws InterruptedException, IOException { // get total bytes in buffer final int total = socketBuffer.remaining(); final InetAddress sender = socketChannel.socket().getInetAddress(); try { // go through the buffer parsing the RELP command for (int i = 0; i < total; i++) { byte currByte = socketBuffer.get(); // 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 SocketChannelResponder responder = new SocketChannelResponder(socketChannel); frameHandler.handle(frame, responder, sender.toString()); socketBuffer.mark(); } } 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); } }
dispatcher.completeConnection(key);
@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); } }
public void handle(final RELPFrame frame, final ChannelResponder<SocketChannel> responder, final String sender) throws IOException, InterruptedException { // respond to open and close commands immediately, create and queue an event for everything else if (CMD_OPEN.equals(frame.getCommand())) { Map<String,String> offers = RELPResponse.parseOffers(frame.getData(), charset); ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.open(frame.getTxnr(), offers)); responder.addResponse(response); responder.respond(); } else if (CMD_CLOSE.equals(frame.getCommand())) { ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.ok(frame.getTxnr())); responder.addResponse(response); responder.respond(); dispatcher.completeConnection(key); } else { final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); metadata.put(RELPMetadata.TXNR_KEY, String.valueOf(frame.getTxnr())); metadata.put(RELPMetadata.COMMAND_KEY, frame.getCommand()); final E event = eventFactory.create(frame.getData(), metadata, responder); events.offer(event); } }
dispatcher.completeConnection(key);