*/
package org.opendaylight.protocol.pcep.ietf.stateful02;
+import io.netty.buffer.ByteBuf;
+
import java.util.BitSet;
import org.opendaylight.protocol.concepts.Ipv4Util;
private static final int V6_RSVP_LENGTH = 20;
@Override
- public RsvpErrorSpec parseTlv(final byte[] valueBytes) throws PCEPDeserializerException {
- if (valueBytes == null || valueBytes.length == 0) {
- throw new IllegalArgumentException("Value bytes array is mandatory. Can't be null or empty.");
+ public RsvpErrorSpec parseTlv(final ByteBuf buffer) throws PCEPDeserializerException {
+ if (buffer == null) {
+ return null;
}
- int byteOffset = 0;
final RsvpErrorBuilder builder = new RsvpErrorBuilder();
- if (valueBytes.length == V4_RSVP_LENGTH) {
- builder.setNode(new IpAddress(Ipv4Util.addressForBytes(ByteArray.subByte(valueBytes, byteOffset, IP4_F_LENGTH))));
- byteOffset += IP4_F_LENGTH;
- } else if (valueBytes.length == V6_RSVP_LENGTH) {
- builder.setNode(new IpAddress(Ipv6Util.addressForBytes(ByteArray.subByte(valueBytes, byteOffset, IP6_F_LENGTH))));
- byteOffset += IP6_F_LENGTH;
+ if (buffer.readableBytes() == V4_RSVP_LENGTH) {
+ builder.setNode(new IpAddress(Ipv4Util.addressForBytes(ByteArray.readBytes(buffer, IP4_F_LENGTH))));
+ } else if (buffer.readableBytes() == V6_RSVP_LENGTH) {
+ builder.setNode(new IpAddress(Ipv6Util.addressForBytes(ByteArray.readBytes(buffer, IP6_F_LENGTH))));
}
- final BitSet flags = ByteArray.bytesToBitSet(ByteArray.subByte(valueBytes, byteOffset, FLAGS_F_LENGTH));
- byteOffset += FLAGS_F_LENGTH;
+ final BitSet flags = ByteArray.bytesToBitSet(ByteArray.readBytes(buffer, FLAGS_F_LENGTH));
builder.setFlags(new Flags(flags.get(IN_PLACE_FLAG_OFFSET), flags.get(NOT_GUILTY_FLAGS_OFFSET)));
- final short errorCode = (short) UnsignedBytes.toInt(valueBytes[byteOffset]);
- byteOffset += ERROR_CODE_F_LENGTH;
+ final short errorCode = (short) UnsignedBytes.toInt(buffer.readByte());
builder.setCode(errorCode);
- final int errorValue = (ByteArray.bytesToShort(ByteArray.subByte(valueBytes, byteOffset, ERROR_VALUE_F_LENGTH)) & 0xFFFF);
+ final int errorValue = buffer.readUnsignedShort();
builder.setValue(errorValue);
return new RsvpErrorSpecBuilder().setRsvpError(builder.build()).build();
}