Fix rsvp.yang
[bgpcep.git] / rsvp / impl / src / main / java / org / opendaylight / protocol / rsvp / parser / impl / te / SessionAttributeLspObjectParser.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.protocol.rsvp.parser.impl.te;
9
10 import static com.google.common.base.Preconditions.checkArgument;
11
12 import io.netty.buffer.ByteBuf;
13 import io.netty.buffer.Unpooled;
14 import java.nio.charset.StandardCharsets;
15 import org.opendaylight.protocol.rsvp.parser.spi.RSVPParsingException;
16 import org.opendaylight.protocol.rsvp.parser.spi.subobjects.AbstractRSVPObjectParser;
17 import org.opendaylight.protocol.util.BitArray;
18 import org.opendaylight.protocol.util.ByteArray;
19 import org.opendaylight.protocol.util.ByteBufUtils;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.RsvpTeObject;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.session.attribute.object.session.attribute.object.basic.session.attribute.object._case.BasicSessionAttributeObject;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.session.attribute.object.session.attribute.object.basic.session.attribute.object._case.BasicSessionAttributeObjectBuilder;
23
24 public final class SessionAttributeLspObjectParser extends AbstractRSVPObjectParser {
25     public static final short CLASS_NUM = 207;
26     public static final short CTYPE = 7;
27     static final int LOCAL_PROTECTION = 7;
28     static final int LABEL_RECORDING = 6;
29     static final int SE_STYLE = 5;
30     private static final int BODY_SIZE_C7 = 4;
31     private static final int PADDING = 4;
32
33     static int getPadding(final int length) {
34         return (PADDING - length % PADDING) % PADDING;
35     }
36
37     @Override
38     protected RsvpTeObject localParseObject(final ByteBuf byteBuf) throws RSVPParsingException {
39         final BasicSessionAttributeObjectBuilder builder = new BasicSessionAttributeObjectBuilder()
40                 .setSetupPriority(ByteBufUtils.readUint8(byteBuf))
41                 .setHoldPriority(ByteBufUtils.readUint8(byteBuf));
42         final BitArray bs = BitArray.valueOf(byteBuf.readByte());
43         builder.setLocalProtectionDesired(bs.get(LOCAL_PROTECTION));
44         builder.setLabelRecordingDesired(bs.get(LABEL_RECORDING));
45         builder.setSeStyleDesired(bs.get(SE_STYLE));
46         final short nameLength = byteBuf.readUnsignedByte();
47         final ByteBuf auxBuf = byteBuf.readSlice(nameLength);
48         final String name = new String(ByteArray.readAllBytes(auxBuf), StandardCharsets.US_ASCII);
49         builder.setSessionName(name);
50         return builder.build();
51     }
52
53     @Override
54     public void localSerializeObject(final RsvpTeObject teLspObject, final ByteBuf output) {
55         checkArgument(teLspObject instanceof BasicSessionAttributeObject, "SessionAttributeObject is mandatory.");
56
57         final BasicSessionAttributeObject sessionObject = (BasicSessionAttributeObject) teLspObject;
58         final ByteBuf sessionName = Unpooled.wrappedBuffer(StandardCharsets.US_ASCII.encode(sessionObject
59             .getSessionName()));
60         final int pad = getPadding(sessionName.readableBytes());
61         serializeAttributeHeader(BODY_SIZE_C7 + pad + sessionName.readableBytes(), CLASS_NUM, CTYPE, output);
62         output.writeByte(sessionObject.getSetupPriority().toJava());
63         output.writeByte(sessionObject.getHoldPriority().toJava());
64         final BitArray bs = new BitArray(FLAGS_SIZE);
65         bs.set(LOCAL_PROTECTION, sessionObject.isLocalProtectionDesired());
66         bs.set(LABEL_RECORDING, sessionObject.isLabelRecordingDesired());
67         bs.set(SE_STYLE, sessionObject.isSeStyleDesired());
68         bs.toByteBuf(output);
69         output.writeByte(sessionName.readableBytes());
70         output.writeBytes(sessionName);
71         output.writeZero(pad);
72     }
73 }