@Override public Stateful parseTlv(final ByteBuf buffer) throws PCEPDeserializerException { if (buffer == null) { return null; } if (buffer.readableBytes() < FLAGS_F_LENGTH) { throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >= " + FLAGS_F_LENGTH + "."); } final BitSet flags = ByteArray.bytesToBitSet(ByteArray.readBytes(buffer, FLAGS_F_LENGTH)); final StatefulBuilder sb = new StatefulBuilder(); sb.setIncludeDbVersion(flags.get(S_FLAG_OFFSET)); sb.setLspUpdateCapability(flags.get(U_FLAG_OFFSET)); return sb.build(); }
@Override public Stateful parseTlv(final ByteBuf buffer) throws PCEPDeserializerException { if (buffer == null) { return null; } if (buffer.readableBytes() < FLAGS_F_LENGTH) { throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >= " + FLAGS_F_LENGTH + "."); } final BitSet flags = ByteArray.bytesToBitSet(ByteArray.readBytes(buffer, FLAGS_F_LENGTH)); final StatefulBuilder sb = new StatefulBuilder(); sb.setIncludeDbVersion(flags.get(S_FLAG_OFFSET)); sb.setLspUpdateCapability(flags.get(U_FLAG_OFFSET)); if (flags.get(I_FLAG_OFFSET)) { sb.addAugmentation(Stateful1.class, new Stateful1Builder().setInitiation(Boolean.TRUE).build()); } return sb.build(); }
@Override public RsvpErrorSpec parseTlv(final ByteBuf buffer) throws PCEPDeserializerException { if (buffer == null) { return null; } final RsvpErrorBuilder builder = new RsvpErrorBuilder(); if (buffer.readableBytes() == V4_RSVP_LENGTH) { builder.setNode(new IpAddress(Ipv4Util.addressForByteBuf(buffer))); } else if (buffer.readableBytes() == V6_RSVP_LENGTH) { builder.setNode(new IpAddress(Ipv6Util.addressForByteBuf(buffer))); } 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(buffer.readByte()); builder.setCode(errorCode); final int errorValue = buffer.readUnsignedShort(); builder.setValue(errorValue); return new RsvpErrorSpecBuilder().setRsvpError(builder.build()).build(); }
@Override public Lsp parseObject(final ObjectHeader header, final ByteBuf bytes) throws PCEPDeserializerException { Preconditions.checkArgument(bytes != null && bytes.isReadable(), "Array of bytes is mandatory. Can't be null or empty."); final LspBuilder builder = new LspBuilder(); builder.setIgnore(header.isIgnore()); builder.setProcessingRule(header.isProcessingRule()); final int[] plspIdRaw = { bytes.readUnsignedByte(), bytes.readUnsignedByte(), bytes.getUnsignedByte(2) }; builder.setPlspId(new PlspId((long) ((plspIdRaw[0] << ONE_B_OFFSET) | (plspIdRaw[1] << TWO_B_OFFSET) | (plspIdRaw[2] >> TWO_B_OFFSET)))); final BitSet flags = ByteArray.bytesToBitSet(ByteArray.readBytes(bytes, FLAGS_SIZE)); builder.setDelegate(flags.get(DELEGATE_FLAG_OFFSET)); builder.setSync(flags.get(SYNC_FLAG_OFFSET)); builder.setRemove(flags.get(REMOVE_FLAG_OFFSET)); builder.setOperational(flags.get(OPERATIONAL_FLAG_OFFSET)); final TlvsBuilder b = new TlvsBuilder(); parseTlvs(b, bytes.slice()); builder.setTlvs(b.build()); return builder.build(); }