/** * This file is part of Path Computation Element Emulator (PCEE). * * PCEE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PCEE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PCEE. If not, see <http://www.gnu.org/licenses/>. */ package com.pcee.protocol.message.objectframe.impl; import java.util.LinkedList; import com.pcee.protocol.message.PCEPComputationFactory; import com.pcee.protocol.message.PCEPConstantValues; import com.pcee.protocol.message.objectframe.PCEPCommonObjectHeader; import com.pcee.protocol.message.objectframe.PCEPObjectFrame; /** * <pre> * 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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | Flags |S|N|L| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Request-ID-number #1 | * // // * | Request-ID-number #M | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * </pre> */ public class PCEPSynchronizationVectorObject implements PCEPObjectFrame { private final String NAME = "Synchronization Vector"; private String reserved; private String flags; private PCEPCommonObjectHeader objectHeader; // private LinkedList<PCEPTLVObject> tlvList; private LinkedList<String> requestIDNumbers; private int reservedStartBit = PCEPConstantValues.SVEC_OBJECT_RESERVED_START_BIT; private int reservedEndBit = PCEPConstantValues.SVEC_OBJECT_RESERVED_END_BIT; private int reservedLength = PCEPConstantValues.SVEC_OBJECT_RESERVED_LENGTH; private int flagsStartBit = PCEPConstantValues.SVEC_OBJECT_FLAGS_START_BIT; private int flagsEndBit = PCEPConstantValues.SVEC_OBJECT_FLAGS_END_BIT; private int flagsLength = PCEPConstantValues.SVEC_OBJECT_FLAGS_LENGTH; private int sFlagStartBit = PCEPConstantValues.SVEC_OBJECT_FLAG_S_START_BIT; private int sFlagEndBit = PCEPConstantValues.SVEC_OBJECT_FLAG_S_END_BIT; private int sFlagLength = PCEPConstantValues.SVEC_OBJECT_FLAG_S_LENGTH; private int nFlagStartBit = PCEPConstantValues.SVEC_OBJECT_FLAG_N_START_BIT; private int nFlagEndBit = PCEPConstantValues.SVEC_OBJECT_FLAG_N_END_BIT; private int nFlagLength = PCEPConstantValues.SVEC_OBJECT_FLAG_N_LENGTH; private int lFlagStartBit = PCEPConstantValues.SVEC_OBJECT_FLAG_L_START_BIT; private int lFlagEndBit = PCEPConstantValues.SVEC_OBJECT_FLAG_L_END_BIT; private int lFlagLength = PCEPConstantValues.SVEC_OBJECT_FLAG_L_LENGTH; /** * Testconstructor, not implemented for the requestIDNumbers */ public PCEPSynchronizationVectorObject(PCEPCommonObjectHeader objectHeader, String binaryString) { this.setObjectHeader(objectHeader); this.setObjectBinaryString(binaryString); this.updateHeaderLength(); } public PCEPSynchronizationVectorObject(PCEPCommonObjectHeader objectHeader, String sFlag, String nFlag, String lFlag, LinkedList<String> requestIDNumbers) { this.setObjectHeader(objectHeader); this.setReservedBinaryString(PCEPComputationFactory.generateZeroString(reservedLength)); this.setFlagsBinaryString(PCEPComputationFactory.generateZeroString(flagsLength)); this.setSFlagBinaryString(sFlag); this.setNFlagBinaryString(nFlag); this.setLFlagBinaryString(lFlag); this.requestIDNumbers = requestIDNumbers; this.updateHeaderLength(); } private void updateHeaderLength() { int objectFrameByteLength = this.getObjectFrameByteLength(); this.getObjectHeader().setLengthDecimalValue(objectFrameByteLength); } /** * Object */ public PCEPCommonObjectHeader getObjectHeader() { return objectHeader; } public void setObjectHeader(PCEPCommonObjectHeader objectHeader) { this.objectHeader = objectHeader; } public String getObjectBinaryString() { String binaryString = reserved + flags; StringBuffer requestIDNumbersStringBuffer = new StringBuffer(); for (int i = 0; i < requestIDNumbers.size(); i++) { String reuqestIDNumberString = requestIDNumbers.get(i); requestIDNumbersStringBuffer.append(reuqestIDNumberString); } return binaryString + requestIDNumbersStringBuffer.toString(); } public void setObjectBinaryString(String binaryString) { String reservedBinaryString = binaryString.substring(reservedStartBit, reservedEndBit + 1); String flagsBinaryString = binaryString.substring(flagsStartBit, flagsEndBit + 1); String sFlagBinaryString = binaryString.substring(sFlagStartBit, sFlagEndBit + 1); String nFlagBinaryString = binaryString.substring(nFlagStartBit, nFlagEndBit + 1); String lFlagBinaryString = binaryString.substring(lFlagStartBit, lFlagEndBit + 1); this.setReservedBinaryString(reservedBinaryString); this.setFlagsBinaryString(flagsBinaryString); this.setSFlagBinaryString(sFlagBinaryString); this.setNFlagBinaryString(nFlagBinaryString); this.setLFlagBinaryString(lFlagBinaryString); } public int getObjectFrameByteLength() { int objectLength = reserved.length() + flags.length(); int requestIDNumbersLength = getRequestIDNumbersLength(); int headerLength = PCEPConstantValues.COMMON_OBJECT_HEADER_LENGTH; int objectFrameByteLength = (objectLength + requestIDNumbersLength + headerLength) / 8; return objectFrameByteLength; } public String getObjectFrameBinaryString() { String headerBinaryString = this.getObjectHeader().getHeaderBinaryString(); String objectBinaryString = this.getObjectBinaryString(); return headerBinaryString + objectBinaryString; } private int getRequestIDNumbersLength() { int length = 0; for (int i = 0; i < requestIDNumbers.size(); i++) { length += requestIDNumbers.get(i).length(); } return length; } /** * reserved */ // public int getReservedDecimalValue() { // int decimalValue = (int) getDecimalValue(reserved); // return decimalValue; // } public String getReservedBinaryString() { return this.reserved; } // public void setReservedDecimalValue(int decimalValue) { // int binaryLength = reservedLength; // int maxValue = (int) // PCEPConstantValues.MaxValueFabrication(binaryLength); // // this.reserved = this.setDecimalValue(decimalValue, maxValue, // binaryLength); // } public void setReservedBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, reservedLength); this.reserved = checkedBinaryString; } public void setReservedBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(reserved, startingBit, binaryString, reservedLength); this.reserved = checkedBinaryString; } /** * flags */ // public int getFlagsDecimalValue() { // int decimalValue = (int) getDecimalValue(flags); // return decimalValue; // } public String getFlagsBinaryString() { return this.flags; } // public void setFlagsDecimalValue(int decimalValue) { // int binaryLength = flagsLength; // int maxValue = (int) // PCEPConstantValues.MaxValueFabrication(binaryLength); // // this.flags = this.setDecimalValue(decimalValue, maxValue, binaryLength); // } public void setFlagsBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, flagsLength); this.flags = checkedBinaryString; } public void setFlagsBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, startingBit, binaryString, flagsLength); this.flags = checkedBinaryString; } /** * sFlag */ public int getSFlagDecimalValue() { int relativeStartBit = (sFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + sFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getSFlagBinaryString() { String binaryString = flags.substring(0, (sFlagStartBit - flagsStartBit) + sFlagLength); return binaryString; } public void setSFlagBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(this.flags, (sFlagStartBit - flagsStartBit), binaryString, flagsLength); this.flags = checkedBinaryString; } /** * nFlag */ public int getNFlagDecimalValue() { int relativeStartBit = (nFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + nFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getNFlagBinaryString() { int relativeStartBit = (nFlagStartBit - flagsStartBit); String binaryString = flags.substring(relativeStartBit, relativeStartBit + nFlagLength); return binaryString; } public void setNFlagBinaryString(String binaryString) { int relativeStartBit = (nFlagStartBit - flagsStartBit); String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, relativeStartBit, binaryString, flagsLength); this.flags = checkedBinaryString; } /** * lFlag */ public int getLFlagDecimalValue() { int relativeStartBit = (lFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + lFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getLFlagBinaryString() { int relativeStartBit = (lFlagStartBit - flagsStartBit); String binaryString = flags.substring(relativeStartBit, relativeStartBit + lFlagLength); return binaryString; } public void setLFlagBinaryString(String binaryString) { int relativeStartBit = (lFlagStartBit - flagsStartBit); String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, relativeStartBit, binaryString, flagsLength); this.flags = checkedBinaryString; } public String toString() { String reservedInfo = "Reserved=" + this.getReservedBinaryString(); String flagsInfo = ",Flags=" + this.getFlagsBinaryString(); String headerInfo = this.getObjectHeader().toString(); String objectInfo = "<SVEC:" + reservedInfo + flagsInfo; StringBuffer requestIDNumbersStringBuffer = new StringBuffer(); for (int i = 0; i < requestIDNumbers.size(); i++) { String reuqestIDNumberString = requestIDNumbers.get(i); requestIDNumbersStringBuffer.append(",RequestID=" + reuqestIDNumberString); } requestIDNumbersStringBuffer.append(">"); return headerInfo + objectInfo + requestIDNumbersStringBuffer.toString(); } public String binaryInformation() { String reservedBinaryInfo = getReservedBinaryString(); String flagsInfo = "'" + this.getFlagsBinaryString(); String headerInfo = this.getObjectHeader().binaryInformation(); String objectInfo = "[" + reservedBinaryInfo + flagsInfo; StringBuffer requestIDNumbersStringBuffer = new StringBuffer(); for (int i = 0; i < requestIDNumbers.size(); i++) { String reuqestIDNumberString = requestIDNumbers.get(i); requestIDNumbersStringBuffer.append("'" + reuqestIDNumberString); } requestIDNumbersStringBuffer.append("]"); return headerInfo + objectInfo + requestIDNumbersStringBuffer.toString(); } public String contentInformation() { return "[" + NAME + "]"; } }