BUG-612 : switched PCEP Tlvs to ByteBuf
[bgpcep.git] / pcep / ietf-stateful02 / src / main / java / org / opendaylight / protocol / pcep / ietf / stateful02 / Stateful02RSVPErrorSpecTlvParser.java
index 7b3f561dc217c72b2f904d7098075cf87636e46f..d8af90a4f2988f3933bdccd241730244a42daa56 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful02;
 
+import io.netty.buffer.ByteBuf;
+
 import java.util.BitSet;
 
 import org.opendaylight.protocol.concepts.Ipv4Util;
@@ -46,26 +48,21 @@ public final class Stateful02RSVPErrorSpecTlvParser implements TlvParser, TlvSer
        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();
        }