2  * Copyright 2015 Open Networking Laboratory
 
   4  * Licensed under the Apache License, Version 2.0 (the "License");
 
   5  * you may not use this file except in compliance with the License.
 
   6  * You may obtain a copy of the License at
 
   8  *     http://www.apache.org/licenses/LICENSE-2.0
 
  10  * Unless required by applicable law or agreed to in writing, software
 
  11  * distributed under the License is distributed on an "AS IS" BASIS,
 
  12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  13  * See the License for the specific language governing permissions and
 
  14  * limitations under the License.
 
  16 package org.onosproject.pcepio.types;
 
  18 import java.util.Objects;
 
  19 import org.jboss.netty.buffer.ChannelBuffer;
 
  20 import org.onosproject.pcepio.protocol.PcepVersion;
 
  21 import org.slf4j.Logger;
 
  22 import org.slf4j.LoggerFactory;
 
  24 import com.google.common.base.MoreObjects;
 
  25 import com.google.common.base.MoreObjects.ToStringHelper;
 
  28  * Provides Opaque Link Attribute.
 
  30 public class OpaqueLinkAttributeTlv implements PcepValueType {
 
  34      * Reference :[I-D.ietf-idr-attributesls-distribution] /3.3.2.6
 
  36       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 
  37      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
  38      |              Type=TBD42       |             Length            |
 
  39      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
  40      //                Opaque link attributes (variable)            //
 
  41      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
  44     protected static final Logger log = LoggerFactory.getLogger(OpaqueLinkAttributeTlv.class);
 
  46     public static final short TYPE = 1097; //TODO:NEED TO HANDLE TDB42
 
  47     private final short hLength;
 
  49     private final byte[] rawValue;
 
  52      * constructor to initialize rawValue.
 
  54      * @param rawValue of Opaque Link Attribute
 
  55      * @param hLength length
 
  57     public OpaqueLinkAttributeTlv(byte[] rawValue, short hLength) {
 
  58         log.debug("OpaqueLinkAttributeTlv");
 
  59         this.rawValue = rawValue;
 
  61             this.hLength = (short) rawValue.length;
 
  63             this.hLength = hLength;
 
  68      * Returns newly created OpaqueLinkAttributeTlv object.
 
  70      * @param raw of Opaque Link Attribute
 
  71      * @param hLength length
 
  72      * @return new object of OpaqueLinkAttributeTlv
 
  74     public static OpaqueLinkAttributeTlv of(final byte[] raw, short hLength) {
 
  75         return new OpaqueLinkAttributeTlv(raw, hLength);
 
  79      * Returns raw value of Opaque Link Attribute Tlv.
 
  80      * @return rawValue raw value
 
  82     public byte[] getValue() {
 
  87     public PcepVersion getVersion() {
 
  88         return PcepVersion.PCEP_1;
 
  92     public short getType() {
 
  97     public short getLength() {
 
 102     public int hashCode() {
 
 103         return Objects.hash(rawValue);
 
 107     public boolean equals(Object obj) {
 
 111         if (obj instanceof OpaqueLinkAttributeTlv) {
 
 112             OpaqueLinkAttributeTlv other = (OpaqueLinkAttributeTlv) obj;
 
 113             return Objects.equals(this.rawValue, other.rawValue);
 
 119     public int write(ChannelBuffer c) {
 
 120         int iLenStartIndex = c.writerIndex();
 
 122         c.writeShort(hLength);
 
 123         c.writeBytes(rawValue);
 
 124         return c.writerIndex() - iLenStartIndex;
 
 128      * Reads the channel buffer and returns object of OpaqueLinkAttributeTlv.
 
 130      * @param c input channel buffer
 
 131      * @param hLength length
 
 132      * @return object of Opaque Link Attribute Tlv
 
 134     public static PcepValueType read(ChannelBuffer c, short hLength) {
 
 135         byte[] iOpaqueValue = new byte[hLength];
 
 136         c.readBytes(iOpaqueValue, 0, hLength);
 
 137         return new OpaqueLinkAttributeTlv(iOpaqueValue, hLength);
 
 141     public String toString() {
 
 142         ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
 
 144         toStrHelper.add("Type", TYPE);
 
 145         toStrHelper.add("Length", hLength);
 
 147         StringBuffer result = new StringBuffer();
 
 148         for (byte b : rawValue) {
 
 149             result.append(String.format("%02X ", b));
 
 151         toStrHelper.add("Value", result);
 
 153         return toStrHelper.toString();