List of usage examples for io.netty.buffer ByteBuf writeByte
public abstract ByteBuf writeByte(int value);
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); }