Example usage for io.netty.buffer ByteBuf writeByte

List of usage examples for io.netty.buffer ByteBuf writeByte

Introduction

In this page you can find the example usage for io.netty.buffer ByteBuf writeByte.

Prototype

public abstract ByteBuf writeByte(int value);

Source Link

Document

Sets the specified byte at the current writerIndex and increases the writerIndex by 1 in this buffer.

Usage

From source file:com.mastfrog.scamper.compression.CompressingCodec.java

License:Open Source License

@Override
public ByteBuf encode(MessageType type, ByteBuf outbound, Channel channel) {
    try {//from  w  w  w.j a  v a 2s .  c o  m
        ByteBuf head = channel.alloc().buffer(type.headerLength() + 1);
        head.writeByte(magicNumber());
        type.writeHeader(head);
        ByteBuf compressed = channel.alloc().buffer();
        compress(outbound, compressed);
        ByteBuf result = channel.alloc().compositeBuffer(2).addComponent(head).addComponent(compressed);
        result.writerIndex(head.readableBytes() + compressed.readableBytes());
        return result;
    } catch (Exception ex) {
        return Exceptions.chuck(ex);
    }
}

From source file:com.mastfrog.scamper.MessageType.java

License:Open Source License

/**
 * Write this mesage type into a ByteBuf
 *
 * @param buf The buffeer/*from  w  ww  .  j a  va 2 s.com*/
 * @return the buffer
 */
public ByteBuf writeHeader(ByteBuf buf) {
    return buf.writeByte(byteOne).writeByte(byteTwo);
}

From source file:com.mnt.base.stream.client.NClientNIOConnection.java

License:Open Source License

@Override
public void deliverWaitPacket() {
    ByteBuf buf = channelHandlerContext.alloc().buffer(1);
    buf.writeByte(0);
    channelHandlerContext.writeAndFlush(buf);
}

From source file:com.mnt.base.stream.netty.NStreamEncoder.java

License:Open Source License

@Override
protected void encode(ChannelHandlerContext ctx, StreamPacket packet, ByteBuf out) throws Exception {

    Attribute<NStreamLightweightParser> parserAttr = ctx.channel().attr(NStreamDecoder.NSTREAM_PARSER_KEY);
    NStreamLightweightParser parser = parserAttr.get();
    if (parser == null) {
        parser = new NStreamLightweightParser();
        parserAttr.set(parser);/*  w  w w .j a v a2 s.  c  om*/
    }

    ByteArrays source = packet.getSource();

    out.writeByte(StreamPacketDef.BYTE_STREAM_PACKET_START);
    out.writeBytes(BytesUtil.intToBytes(source.getTotalLength()));

    for (ByteArray ba : source.getByteArrays()) {
        out.writeBytes(ba.getBytes(), ba.getPosition(), ba.getLength());
    }

    out.writeBytes(BytesUtil.genSign(source));
    out.writeByte(StreamPacketDef.BYTE_STREAM_PACKET_END);
}

From source file:com.mobius.software.android.iotbroker.mqtt.parser.MQParser.java

License:Open Source License

public static ByteBuf encode(MQMessage header) throws UnsupportedEncodingException, MalformedMessageException {
    int length = header.getLength();
    ByteBuf buf = getBuffer(length);
    MessageType type = header.getType();

    switch (type) {
    case CONNECT:
        Connect connect = (Connect) header;
        if (connect.isWillFlag() && !connect.getWill().isValid())
            throw new MalformedMessageException("invalid will encoding");

        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeShort(4);/*from w ww  .j a  va2s .c o m*/
        buf.writeBytes(connect.getName().getBytes());
        buf.writeByte(connect.getProtocolLevel());
        byte contentFlags = 0;
        contentFlags |= 0;
        contentFlags |= connect.isClean() ? 0x02 : 0;
        contentFlags |= connect.isWillFlag() ? 0x04 : 0;
        contentFlags |= connect.isWillFlag() ? connect.getWill().getTopic().getQos().getValue() << 3 : 0;
        contentFlags |= connect.isWillFlag() ? connect.getWill().getRetain() ? 0x20 : 0 : 0;
        contentFlags |= connect.isUsernameFlag() ? 0x40 : 0;
        contentFlags |= connect.isPasswordFlag() ? 0x80 : 0;
        buf.writeByte(contentFlags);
        buf.writeShort(connect.getKeepAlive());
        buf.writeShort(connect.getClientID().length());
        buf.writeBytes(connect.getClientID().getBytes("UTF-8"));

        if (connect.isWillFlag()) {
            Text willTopic = connect.getWill().getTopic().getName();
            if (willTopic != null) {
                buf.writeShort(willTopic.length());
                buf.writeBytes(willTopic.toString().getBytes("UTF-8"));
            }

            byte[] willMessage = connect.getWill().getContent();
            if (willMessage != null) {
                buf.writeShort(willMessage.length);
                buf.writeBytes(willMessage);
            }
        }

        String username = connect.getUserName();
        if (username != null) {
            buf.writeShort(username.length());
            buf.writeBytes(username.getBytes("UTF-8"));
        }

        String password = connect.getPassword();
        if (password != null) {
            buf.writeShort(password.length());
            buf.writeBytes(password.getBytes("UTF-8"));
        }
        break;

    case CONNACK:
        Connack connack = (Connack) header;
        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeBoolean(connack.isSessionPresent());
        buf.writeByte(connack.getReturnCode().getNum());
        break;

    case PUBLISH:
        Publish publish = (Publish) header;
        byte firstByte = (byte) (type.getNum() << 4);
        firstByte |= publish.isDup() ? 8 : 0;
        firstByte |= (publish.getTopic().getQos().getValue() << 1);
        firstByte |= publish.isRetain() ? 1 : 0;
        buf.setByte(0, firstByte);
        buf.writeShort(publish.getTopic().length());
        buf.writeBytes(publish.getTopic().getName().toString().getBytes("UTF-8"));
        if (publish.getPacketID() != null)
            buf.writeShort(publish.getPacketID());
        buf.writeBytes(publish.getContent());
        break;

    case PUBACK:
        Puback puback = (Puback) header;
        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeShort(puback.getPacketID());
        break;

    case PUBREC:
        Pubrec pubrec = (Pubrec) header;
        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeShort(pubrec.getPacketID());
        break;

    case PUBREL:
        Pubrel pubrel = (Pubrel) header;
        buf.setByte(0, (byte) ((type.getNum() << 4) | 0x2));
        buf.writeShort(pubrel.getPacketID());
        break;

    case PUBCOMP:
        Pubcomp pubcomp = (Pubcomp) header;
        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeShort(pubcomp.getPacketID());
        break;

    case SUBSCRIBE:
        Subscribe sub = (Subscribe) header;
        buf.setByte(0, (byte) ((type.getNum() << 4) | 0x2));
        if (sub.getPacketID() != null)
            buf.writeShort(sub.getPacketID());
        for (Topic subscription : sub.getTopics()) {
            buf.writeShort(subscription.getName().length());
            buf.writeBytes(subscription.getName().toString().getBytes("UTF-8"));
            buf.writeByte(subscription.getQos().getValue());
        }
        break;

    case SUBACK:
        Suback suback = (Suback) header;
        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeShort(suback.getPacketID());
        for (SubackCode code : suback.getReturnCodes())
            buf.writeByte(code.getNum());
        break;

    case UNSUBSCRIBE:
        Unsubscribe unsub = (Unsubscribe) header;
        buf.setByte(0, (byte) ((type.getNum() << 4) | 0x2));
        buf.writeShort(unsub.getPacketID());
        for (Topic topic : unsub.getTopics()) {
            buf.writeShort(topic.getName().length());
            buf.writeBytes(topic.getName().toString().getBytes("UTF-8"));
        }
        break;

    case UNSUBACK:
        Unsuback unsuback = (Unsuback) header;
        buf.setByte(0, (byte) (type.getNum() << 4));
        buf.writeShort(unsuback.getPacketID());
        break;

    case DISCONNECT:
    case PINGREQ:
    case PINGRESP:
        buf.setByte(0, (byte) (type.getNum() << 4));
        break;

    default:
        throw new MalformedMessageException("Invalid header type: " + type);
    }

    return buf;
}

From source file:com.mobius.software.android.iotbroker.mqtt.parser.MQParser.java

License:Open Source License

private static ByteBuf getBuffer(final int length) throws MalformedMessageException {
    byte[] lengthBytes;

    if (length <= 127)
        lengthBytes = new byte[1];
    else if (length <= 16383)
        lengthBytes = new byte[2];
    else if (length <= 2097151)
        lengthBytes = new byte[3];
    else if (length <= 26843545)
        lengthBytes = new byte[4];
    else//from ww w  .  ja  v  a2 s  .  c om
        throw new MalformedMessageException("header length exceeds maximum of 26843545 bytes");

    byte encByte;
    int pos = 0, l = length;
    do {
        encByte = (byte) (l % 128);
        l /= 128;
        if (l > 0)
            lengthBytes[pos++] = (byte) (encByte | 128);
        else
            lengthBytes[pos++] = encByte;
    } while (l > 0);

    int bufferSize = 1 + lengthBytes.length + length;
    ByteBuf buf = Unpooled.buffer(bufferSize);

    buf.writeByte(0);
    buf.writeBytes(lengthBytes);

    return buf;
}

From source file:com.mobius.software.mqtt.parser.MQParser.java

License:Open Source License

public static ByteBuf encode(MQMessage header) throws MalformedMessageException {
    int length = header.getLength();
    ByteBuf buf = getBuffer(length);
    MessageType type = header.getType();
    try {/* w  ww  .j av a 2 s  .  c o m*/
        switch (type) {
        case CONNECT:
            Connect connect = (Connect) header;
            if (connect.isWillFlag() && !connect.getWill().isValid())
                throw new MalformedMessageException("invalid will encoding");

            buf.setByte(0, (byte) (type.getNum() << 4));
            buf.writeShort(4);
            buf.writeBytes(connect.getName().getBytes());
            buf.writeByte(connect.getProtocolLevel());

            byte contentFlags = 0;
            if (connect.isCleanSession())
                contentFlags += 2;
            if (connect.isWillFlag()) {
                contentFlags += 4;
                contentFlags += connect.getWill().getTopic().getQos().getValue() << 3;
                if (connect.getWill().isRetain())
                    contentFlags += 0x20;
            }
            if (connect.isPasswordFlag())
                contentFlags += 0x40;
            if (connect.isUsernameFlag())
                contentFlags += 0x80;
            buf.writeByte(contentFlags);

            buf.writeShort(connect.getKeepalive());
            buf.writeShort(connect.getClientID().length());
            buf.writeBytes(connect.getClientID().getBytes("UTF-8"));

            if (connect.isWillFlag()) {
                Text willTopic = connect.getWill().getTopic().getName();
                if (willTopic != null) {
                    buf.writeShort(willTopic.length());
                    buf.writeBytes(willTopic.toString().getBytes("UTF-8"));
                }

                byte[] willMessage = connect.getWill().getContent();
                if (willMessage != null) {
                    buf.writeShort(willMessage.length);
                    buf.writeBytes(willMessage);
                }
            }

            String username = connect.getUsername();
            if (username != null) {
                buf.writeShort(username.length());
                buf.writeBytes(username.getBytes("UTF-8"));
            }

            String password = connect.getPassword();
            if (password != null) {
                buf.writeShort(password.length());
                buf.writeBytes(password.getBytes("UTF-8"));
            }
            break;

        case CONNACK:
            Connack connack = (Connack) header;
            buf.setByte(0, (byte) (type.getNum() << 4));
            buf.writeBoolean(connack.isSessionPresent());
            buf.writeByte(connack.getReturnCode().getNum());
            break;

        case PUBLISH:
            Publish publish = (Publish) header;
            byte firstByte = (byte) (type.getNum() << 4);
            firstByte |= publish.isDup() ? 8 : 0;
            firstByte |= (publish.getTopic().getQos().getValue() << 1);
            firstByte |= publish.isRetain() ? 1 : 0;
            buf.setByte(0, firstByte);
            buf.writeShort(publish.getTopic().length());
            buf.writeBytes(publish.getTopic().getName().toString().getBytes("UTF-8"));
            switch (publish.getTopic().getQos()) {
            case AT_MOST_ONCE:
                if (publish.getPacketID() != null)
                    throw new MalformedMessageException("publish qos-0 must not contain packetID");
                break;
            case AT_LEAST_ONCE:
            case EXACTLY_ONCE:
                if (publish.getPacketID() == null)
                    throw new MalformedMessageException("publish qos-1,2 must contain packetID");
                buf.writeShort(publish.getPacketID());
                break;
            }
            buf.writeBytes(publish.getContent());
            break;

        case PUBACK:
            Puback puback = (Puback) header;
            buf.setByte(0, (byte) (type.getNum() << 4));
            if (puback.getPacketID() == null)
                throw new MalformedMessageException("puback must contain packetID");
            buf.writeShort(puback.getPacketID());
            break;

        case PUBREC:
            Pubrec pubrec = (Pubrec) header;
            buf.setByte(0, (byte) (type.getNum() << 4));
            if (pubrec.getPacketID() == null)
                throw new MalformedMessageException("pubrec must contain packetID");
            buf.writeShort(pubrec.getPacketID());
            break;

        case PUBREL:
            Pubrel pubrel = (Pubrel) header;
            buf.setByte(0, (byte) ((type.getNum() << 4) | 0x2));
            if (pubrel.getPacketID() == null)
                throw new MalformedMessageException("pubrel must contain packetID");
            buf.writeShort(pubrel.getPacketID());
            break;

        case PUBCOMP:
            Pubcomp pubcomp = (Pubcomp) header;
            buf.setByte(0, (byte) (type.getNum() << 4));
            if (pubcomp.getPacketID() == null)
                throw new MalformedMessageException("pubcomp must contain packetID");
            buf.writeShort(pubcomp.getPacketID());
            break;

        case SUBSCRIBE:
            Subscribe sub = (Subscribe) header;
            buf.setByte(0, (byte) ((type.getNum() << 4) | 0x2));
            if (sub.getPacketID() == null)
                throw new MalformedMessageException("subscribe must contain packetID");
            buf.writeShort(sub.getPacketID());
            for (Topic subscription : sub.getTopics()) {
                buf.writeShort(subscription.getName().length());
                buf.writeBytes(subscription.getName().toString().getBytes("UTF-8"));
                buf.writeByte(subscription.getQos().getValue());
            }
            break;

        case SUBACK:
            Suback suback = (Suback) header;
            buf.setByte(0, (byte) (type.getNum() << 4));
            if (suback.getPacketID() == null)
                throw new MalformedMessageException("suback must contain packetID");
            buf.writeShort(suback.getPacketID());
            for (SubackCode code : suback.getReturnCodes())
                buf.writeByte(code.getNum());
            break;

        case UNSUBSCRIBE:
            Unsubscribe unsub = (Unsubscribe) header;
            buf.setByte(0, (byte) ((type.getNum() << 4) | 0x2));
            if (unsub.getPacketID() == null)
                throw new MalformedMessageException("subscribe must contain packetID");
            buf.writeShort(unsub.getPacketID());
            for (Text topic : unsub.getTopics()) {
                buf.writeShort(topic.length());
                buf.writeBytes(topic.toString().getBytes("UTF-8"));
            }
            break;

        case UNSUBACK:
            Unsuback unsuback = (Unsuback) header;
            buf.setByte(0, (byte) (type.getNum() << 4));
            if (unsuback.getPacketID() == null)
                throw new MalformedMessageException("unsuback must contain packetID");
            buf.writeShort(unsuback.getPacketID());
            break;

        case DISCONNECT:
        case PINGREQ:
        case PINGRESP:
            buf.setByte(0, (byte) (type.getNum() << 4));
            break;

        default:
            throw new MalformedMessageException("Invalid header type: " + type);
        }

        return buf;
    } catch (UnsupportedEncodingException e) {
        throw new MalformedMessageException("unsupported string encoding:" + e.getMessage());
    }
}

From source file:com.mobius.software.mqtt.parser.MQParser.java

License:Open Source License

public static ByteBuf getBuffer(final int length) throws MalformedMessageException {
    byte[] lengthBytes;

    if (length <= 127)
        lengthBytes = new byte[1];
    else if (length <= 16383)
        lengthBytes = new byte[2];
    else if (length <= 2097151)
        lengthBytes = new byte[3];
    else if (length <= 26843545)
        lengthBytes = new byte[4];
    else/* ww w . j  a va  2 s  . com*/
        throw new MalformedMessageException("header length exceeds maximum of 26843545 bytes");

    byte encByte;
    int pos = 0, l = length;
    do {
        encByte = (byte) (l % 128);
        l /= 128;
        if (l > 0)
            lengthBytes[pos++] = (byte) (encByte | 128);
        else
            lengthBytes[pos++] = encByte;
    } while (l > 0);

    int bufferSize = 1 + lengthBytes.length + length;
    ByteBuf buf = Unpooled.buffer(bufferSize);

    buf.writeByte(0);
    buf.writeBytes(lengthBytes);

    return buf;
}

From source file:com.mobius.software.mqtt.parser.test.TestParser.java

License:Open Source License

@Test
public void testPositivenext() throws MalformedMessageException {
    ByteBuf buf = Unpooled.buffer(114);
    buf.writeByte(0x82);
    buf.writeByte(0x66);//from  w w w.j av a 2 s.  c  o m
    buf.writeShort(10);
    buf.writeShort(97);
    buf.writeBytes(new byte[96]);
    buf.writeByte(1);
    buf.writeByte(0);
    assertEquals("Invalid next header length", 104, MQParser.next(buf).capacity());
    assertEquals("buffer index was not reset", 0, buf.readerIndex());
}

From source file:com.mobius.software.mqtt.parser.test.TestParser.java

License:Open Source License

@Test(expected = MalformedMessageException.class)
public void testNegativeNext() throws MalformedMessageException {
    ByteBuf buf = Unpooled.buffer(103);
    buf.writeByte(0x82);
    buf.writeByte(0x66); //encoded l=104, actual l=103
    buf.writeShort(10);//w ww.  j a v a 2 s. com
    buf.writeShort(97);
    buf.writeBytes(new byte[96]);
    buf.writeByte(1);
    MQParser.next(buf);
}