All Downloads are FREE. Search and download functionalities are using the official Maven repository.

es.tid.pce.pcep.objects.BitmapLabelSet Maven / Gradle / Ivy

The newest version!
package es.tid.pce.pcep.objects;

import java.util.Arrays;

import es.tid.pce.pcep.PCEPProtocolViolationException;
import es.tid.pce.pcep.constructs.NCF;

/**
 * �	Attaching a new LABEL object (class 129, type 1) as an attribute of the computed path. If there is only one label object it is the SUGGESTED_LABEL.
     0                   1                   2                   3
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Object-Class  |   OT  |Res|P|I|   Object Length (bytes)       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    4  |    Num Labels         |          Length               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    NCF                                                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Bit Map Word #1 (Lowest numerical labels)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   :                                                               :
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Bit Map Word #N (Highest numerical labels)                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 * @author Oscar Gonzalez de Dios
 * @version 0.1
 */

public class BitmapLabelSet extends LabelSet{
	
	private byte[] bytesBitmap;
	private int numLabels;
	private NCF ncf;

	//Constructors
	
	public BitmapLabelSet(){
		super();
		this.setOT(ObjectParameters.PCEP_OBJECT_TYPE_LABEL_SET_BITMAP);
	}

	public BitmapLabelSet(byte []bytes, int offset) throws MalformedPCEPObjectException{
		super(bytes,offset);
		decode();
	}
	
	//Encode and Decode
	
	/**
	 * Encode CLOSE message
	 * Only reason is encoded. The rest is set to 0
	 */
	public void encode(){
		
		int numberBytes =getNumberBytes(numLabels);	
		if (ncf!=null){
			try {
				ncf.encode();
			} catch (PCEPProtocolViolationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else {
			ncf=new NCF();
			try {
				ncf.encode();
			} catch (PCEPProtocolViolationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		 		
		int size_bytes = 8+ncf.getLength()+numberBytes;
		
		if ((size_bytes%4)!=0){
			size_bytes=size_bytes+(4-(size_bytes%4));
		}
		
		this.setObjectLength(size_bytes);
		this.object_bytes = new byte[size_bytes];
		
		encode_header();
		
		int offset = 4;//header
		int val=4;
		this.object_bytes[offset+1]=(byte) ( ((numLabels>>4)&0x0F)|((val<<4)&0xF0));
		this.object_bytes[offset+1]=(byte) (numLabels&0xFF);
		offset= offset+4;
		System.arraycopy(ncf.getBytes(), 0, this.getBytes(), offset, ncf.getLength());
		offset = offset+4;
		System.arraycopy(this.bytesBitmap,0, this.getBytes(), offset,numberBytes);
		offset = offset+numberBytes;
		for (int i=offset;i




© 2015 - 2024 Weber Informatics LLC | Privacy Policy