/** {@inheritDoc} */ @Override public void messageReceived(NextFilter next, IoSession session, Object message) throws Exception { // Create forwarding IO session IoSession forward = (IoSession) session.getAttribute(FORWARD_KEY); if (forward != null && forward.isConnected()) { if (message instanceof IoBuffer) { final IoBuffer buf = (IoBuffer) message; if (log.isDebugEnabled()) { log.debug("[{}] RAW >> {}", name, buf.getHexDump()); } IoBuffer copy = IoBuffer.allocate(buf.limit()); int limit = buf.limit(); copy.put(buf); copy.flip(); forward.write(copy); buf.flip(); buf.position(0); buf.limit(limit); } } next.messageReceived(session, message); }
log.debug(">>{}", buf.getHexDump());
/** * {@inheritDoc} */ @Override public String getHexDump() { return buf.getHexDump(); }
/** * {@inheritDoc} */ @Override public String getHexDump(int lengthLimit) { return buf.getHexDump(lengthLimit); }
/** * {@inheritDoc} */ @Override public String getHexDump(int lengthLimit) { return buf.getHexDump(lengthLimit); }
/** * {@inheritDoc} */ @Override public String getHexDump() { return buf.getHexDump(); }
@Override public String getHexDump() { return buf.getHexDump(); }
@Override public String getHexDump(int lengthLimit) { return buf.getHexDump(lengthLimit); }
@Override public String get ( final IoBuffer data, final int index ) { return data.getSlice ( index, this.length ).getHexDump ().toUpperCase (); }
/** {@inheritDoc} */ @Override public String toString() { final IoBuffer buf = getData(); StringBuffer sb = new StringBuffer(); sb.append("Size: "); sb.append(buf.remaining()); sb.append(" Data:\n\n"); sb.append(HexDump.formatHexDump(buf.getHexDump())); return sb.toString(); }
/** {@inheritDoc} */ @Override public String toString() { final IoBuffer buf = getData(); StringBuffer sb = new StringBuffer(); sb.append("Size: "); sb.append(buf.remaining()); sb.append(" Data:\n\n"); sb.append(HexDump.formatHexDump(buf.getHexDump())); return sb.toString(); }
/** * Format debug message * * @param log * Logger * @param msg * Message * @param buf * Byte buffer to debug */ public final static void debug(Logger log, String msg, IoBuffer buf) { if (log.isDebugEnabled()) { log.debug(msg); log.debug("Size: {}", buf.remaining()); log.debug("Data:\n{}", HexDump.formatHexDump(buf.getHexDump())); log.debug("\n{}\n", toString(buf)); } }
/** * Format debug message * * @param log * Logger * @param msg * Message * @param buf * Byte buffer to debug */ public final static void debug(Logger log, String msg, IoBuffer buf) { if (log.isDebugEnabled()) { log.debug(msg); log.debug("Size: {}", buf.remaining()); log.debug("Data:\n{}", HexDump.formatHexDump(buf.getHexDump())); log.debug("\n{}\n", toString(buf)); } }
/** * Used for debugging byte stream. * * @param data * IoBuffer */ @SuppressWarnings("unused") private static final void dump(IoBuffer data) { log.debug("Hex: {}", data.getHexDump()); int pos = data.position(); byte[] bar = new byte[data.limit() - data.position()]; data.get(bar); log.debug("Str {}", new String(bar)); bar = null; data.position(pos); }
private IoBuffer insertBytesToNewIoBuffer(IoSession session, IoBuffer buffer) { if (insertByteProbability > rng.nextInt(1000)) { logger.info(buffer.getHexDump()); // where to insert bytes ? int pos = rng.nextInt(buffer.remaining()) - 1; // how many byte to insert ? int count = rng.nextInt(maxInsertByte-1)+1; IoBuffer newBuff = IoBuffer.allocate(buffer.remaining() + count); for (int i = 0; i < pos; i++) newBuff.put(buffer.get()); for (int i = 0; i < count; i++) { newBuff.put((byte) (rng.nextInt(256))); } while (buffer.remaining() > 0) { newBuff.put(buffer.get()); } newBuff.flip(); logger.info("Inserted " + count + " bytes."); logger.info(newBuff.getHexDump()); return newBuff; } return null; }
private IoBuffer insertBytesToNewIoBuffer(IoSession session, IoBuffer buffer) { if (insertByteProbability > rng.nextInt(1000)) { logger.info(buffer.getHexDump()); // where to insert bytes ? int pos = rng.nextInt(buffer.remaining()) - 1; // how many byte to insert ? int count = rng.nextInt(maxInsertByte - 1) + 1; IoBuffer newBuff = IoBuffer.allocate(buffer.remaining() + count); for (int i = 0; i < pos; i++) newBuff.put(buffer.get()); for (int i = 0; i < count; i++) { newBuff.put((byte) (rng.nextInt(256))); } while (buffer.remaining() > 0) { newBuff.put(buffer.get()); } newBuff.flip(); logger.info("Inserted " + count + " bytes."); logger.info(newBuff.getHexDump()); return newBuff; } return null; }
private IoBuffer insertBytesToNewIoBuffer(IoSession session, IoBuffer buffer) { if (insertByteProbability > rng.nextInt(1000)) { logger.info(buffer.getHexDump()); // where to insert bytes ? int pos = rng.nextInt(buffer.remaining()) - 1; // how many byte to insert ? int count = rng.nextInt(maxInsertByte - 1) + 1; IoBuffer newBuff = IoBuffer.allocate(buffer.remaining() + count); for (int i = 0; i < pos; i++) newBuff.put(buffer.get()); for (int i = 0; i < count; i++) { newBuff.put((byte) (rng.nextInt(256))); } while (buffer.remaining() > 0) { newBuff.put(buffer.get()); } newBuff.flip(); logger.info("Inserted " + count + " bytes."); logger.info(newBuff.getHexDump()); return newBuff; } return null; }
@Override public DecodingState decode(IoBuffer in, ProtocolDecoderOutput out) throws Exception { if (in.hasRemaining()) { byte initialByte = in.get(in.position()); for (byte initialMethodByte : INITIAL_METHOD_BYTES) { if (initialByte == initialMethodByte) { return READ_METHOD; } } throw new ProtocolDecoderException("Unexpected start of HTTP request: " + in.getHexDump()); } else { return this; } }
/** * Cache status objects */ public void cacheStatusObjects() { cachedStatusObjects = new HashMap<String, byte[]>(); String statusCode; IoBuffer out = IoBuffer.allocate(256); out.setAutoExpand(true); for (String s : statusObjects.keySet()) { statusCode = s; StatusObject statusObject = statusObjects.get(statusCode); if (statusObject instanceof RuntimeStatusObject) { continue; } serializeStatusObject(out, statusObject); out.flip(); if (log.isTraceEnabled()) { log.trace(HexDump.formatHexDump(out.getHexDump())); } byte[] cachedBytes = new byte[out.limit()]; out.get(cachedBytes); out.clear(); cachedStatusObjects.put(statusCode, cachedBytes); } out.free(); out = null; }
@Override public DecodingState decode(IoBuffer in, ProtocolDecoderOutput out) throws Exception { IoBufferEx inEx = (IoBufferEx) in; int length = inEx.remaining(); if (remaining > length) { // more data will come in next IP packet remaining -= length; IoBufferEx slice = inEx.getSlice(length); HttpContentMessage httpContent = new HttpContentMessage(slice, false); out.write(httpContent); return this; } else if (remaining > 0L) { // remaining <= in.remaining() - data is completed int remainingAsInt = (int) remaining; IoBufferEx slice = inEx.getSlice(remainingAsInt); remaining = 0L; HttpContentMessage httpContent = new HttpContentMessage(slice, true); out.write(httpContent); return finishDecode(out); } else { throw new ProtocolDecoderException("Content length exceeded: " + in.getHexDump()); } }