Java Code Examples for org.jboss.netty.buffer.ChannelBuffer#getInt()

The following examples show how to use org.jboss.netty.buffer.ChannelBuffer#getInt() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ThriftFrameDecoder.java    From ikasoa with MIT License 6 votes vote down vote up
protected ChannelBuffer tryDecodeFramedMessage(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer,
		boolean stripFraming) {

	int messageStartReaderIndex = buffer.readerIndex();
	int messageContentsOffset = stripFraming ? messageStartReaderIndex + MESSAGE_FRAME_SIZE
			: messageStartReaderIndex;
	int messageLength = buffer.getInt(messageStartReaderIndex) + MESSAGE_FRAME_SIZE;
	int messageContentsLength = messageStartReaderIndex + messageLength - messageContentsOffset;

	if (messageContentsLength > maxFrameSize)
		Channels.fireExceptionCaught(ctx,
				new TooLongFrameException(String.format("Maximum frame size of %d exceeded .", maxFrameSize)));

	if (messageLength == 0) {
		buffer.readerIndex(messageContentsOffset);
		return null;
	} else if (buffer.readableBytes() < messageLength)
		return null;
	else {
		ChannelBuffer messageBuffer = extractFrame(buffer, messageContentsOffset, messageContentsLength);
		buffer.readerIndex(messageStartReaderIndex + messageLength);
		return messageBuffer;
	}
}
 
Example 2
Source File: MongoMessageFrame.java    From usergrid with Apache License 2.0 6 votes vote down vote up
@Override
protected Object decode( ChannelHandlerContext ctx, Channel channel, ChannelBuffer buf ) throws Exception {

    if ( buf.readableBytes() < 4 ) {
        return null;
    }

    // logger.info("Mongo message decoding...");

    int length = buf.getInt( buf.readerIndex() );

    if ( length < 0 ) {
        return null;
    }

    if ( buf.readableBytes() < length ) {
        return null;
    }

    ChannelBuffer frame = buf.readSlice( length );
    return frame;
}
 
Example 3
Source File: SizeHeaderFrameDecoder.java    From Elasticsearch with Apache License 2.0 4 votes vote down vote up
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
    if (buffer.readableBytes() < 6) {
        return null;
    }

    int readerIndex = buffer.readerIndex();
    if (buffer.getByte(readerIndex) != 'E' || buffer.getByte(readerIndex + 1) != 'S') {
        // special handling for what is probably HTTP
        if (bufferStartsWith(buffer, readerIndex, "GET ") ||
            bufferStartsWith(buffer, readerIndex, "POST ") ||
            bufferStartsWith(buffer, readerIndex, "PUT ") ||
            bufferStartsWith(buffer, readerIndex, "HEAD ") ||
            bufferStartsWith(buffer, readerIndex, "DELETE ") ||
            bufferStartsWith(buffer, readerIndex, "OPTIONS ") ||
            bufferStartsWith(buffer, readerIndex, "PATCH ") ||
            bufferStartsWith(buffer, readerIndex, "TRACE ")) {

            throw new HttpOnTransportException("This is not a HTTP port");
        }

        // we have 6 readable bytes, show 4 (should be enough)
        throw new StreamCorruptedException("invalid internal transport message format, got ("
                + Integer.toHexString(buffer.getByte(readerIndex) & 0xFF) + ","
                + Integer.toHexString(buffer.getByte(readerIndex + 1) & 0xFF) + ","
                + Integer.toHexString(buffer.getByte(readerIndex + 2) & 0xFF) + ","
                + Integer.toHexString(buffer.getByte(readerIndex + 3) & 0xFF) + ")");
    }

    int dataLen = buffer.getInt(buffer.readerIndex() + 2);
    if (dataLen == NettyHeader.PING_DATA_SIZE) {
        // discard the messages we read and continue, this is achieved by skipping the bytes
        // and returning null
        buffer.skipBytes(6);
        return null;
    }
    if (dataLen <= 0) {
        throw new StreamCorruptedException("invalid data length: " + dataLen);
    }
    // safety against too large frames being sent
    if (dataLen > NINETY_PER_HEAP_SIZE) {
        throw new TooLongFrameException(
                "transport content length received [" + new ByteSizeValue(dataLen) + "] exceeded [" + new ByteSizeValue(NINETY_PER_HEAP_SIZE) + "]");
    }

    if (buffer.readableBytes() < dataLen + 6) {
        return null;
    }
    buffer.skipBytes(6);
    return buffer;
}
 
Example 4
Source File: MongoMessageDecoder.java    From usergrid with Apache License 2.0 4 votes vote down vote up
@Override
protected Object decode( ChannelHandlerContext ctx, Channel channel, ChannelBuffer buf ) throws Exception {

    if ( buf.readableBytes() < 4 ) {
        logger.info( "Needed at least 4 bytes, only " + buf.readableBytes() + " available" );
        return null;
    }

    // logger.info("Mongo message decoding...");

    int length = buf.getInt( buf.readerIndex() );

    if ( length < 0 ) {
        logger.info( "Negative length " + length );
        return null;
    }

    if ( buf.readableBytes() < length ) {
        logger.info( "Needed " + length + " bytes, only " + buf.readableBytes() + " available" );
        return null;
    }

    // logger.info("Attempting to read " + length + " bytes");
    ChannelBuffer frame = buf.readSlice( length );

    int opCode = frame.getInt( frame.readerIndex() + 12 );

    // logger.info("Mongo message opcode " + opCode + " received");

    Message message = null;
    if ( opCode == Message.OP_DELETE ) {
        message = new OpDelete();
    }
    else if ( opCode == Message.OP_GET_MORE ) {
        message = new OpGetMore();
    }
    else if ( opCode == Message.OP_INSERT ) {
        message = new OpInsert();
    }
    else if ( opCode == Message.OP_KILL_CURSORS ) {
        message = new OpKillCursors();
    }
    else if ( opCode == Message.OP_MSG ) {
        message = new OpMsg();
    }
    else if ( opCode == Message.OP_QUERY ) {
        message = new OpQuery();
    }
    else if ( opCode == Message.OP_REPLY ) {
        message = new OpReply();
    }
    else if ( opCode == Message.OP_UPDATE ) {
        message = new OpUpdate();
    }

    if ( message != null ) {
        message.decode( frame );
    }
    else {
        logger.info( "Mongo unrecongnized message opcode " + opCode + " received" );
    }

    // logger.info(message);

    return message;
}