/** * 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 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; import com.pcee.protocol.message.objectframe.PCEPObjectFrameFactory; /** * <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 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Flags |O|B|R| Pri | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Request-ID-number | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | | * // Optional TLVs // * | | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * </pre> */ public class PCEPRequestParametersObject implements PCEPObjectFrame { private final String NAME = "Request Parameters"; private String requestIDNumber; private String flags; private PCEPCommonObjectHeader objectHeader; // private LinkedList<PCEPTLVObject> tlvList; private int flagsStartBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAGS_START_BIT; private int flagsEndBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAGS_END_BIT; private int flagsLength = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAGS_LENGTH; private int oFlagStartBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_O_START_BIT; private int oFlagEndBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_O_END_BIT; private int oFlagLength = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_O_LENGTH; private int bFlagStartBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_B_START_BIT; private int bFlagEndBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_B_END_BIT; private int bFlagLength = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_B_LENGTH; private int rFlagStartBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_R_START_BIT; private int rFlagEndBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_R_END_BIT; private int rFlagLength = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_R_LENGTH; private int priFlagStartBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_PRI_START_BIT; private int priFlagEndBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_PRI_END_BIT; private int priFlagLength = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_FLAG_PRI_LENGTH; private int requestIDNumberStartBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_REQUEST_ID_NUMBER_START_BIT; private int requestIDNumberEndBit = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_REQUEST_ID_NUMBER_END_BIT; private int requestIDNumberLength = PCEPConstantValues.REQUEST_PARAMETERS_OBJECT_REQUEST_ID_NUMBER_LENGTH; public PCEPRequestParametersObject(PCEPCommonObjectHeader objectHeader, String binaryString) { this.setObjectHeader(objectHeader); this.setObjectBinaryString(binaryString); this.updateHeaderLength(); } public PCEPRequestParametersObject(PCEPCommonObjectHeader objectHeader, String oFlag, String bFlag, String rFlag, String priFlag, String requestIDNumber) { this.setObjectHeader(objectHeader); this.setFlagsBinaryString(PCEPComputationFactory.generateZeroString(flagsLength)); this.setOFlagBinaryString(oFlag); this.setBFlagBinaryString(bFlag); this.setRFlagBinaryString(rFlag); this.setPriFlagBinaryString(priFlag); this.setRequestIDNumberDecimalValue(Integer.parseInt(requestIDNumber)); this.updateHeaderLength(); } public static void main (String [] args){ PCEPRequestParametersObject RP = PCEPObjectFrameFactory.generatePCEPRequestParametersObject("1", "0", "1", "0", "0", "1", "32"); System.out.println(RP.getRequestIDNumberDecimalValue()); } 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 = flags + requestIDNumber; return binaryString; } public void setObjectBinaryString(String binaryString) { String flagsBinaryString = binaryString.substring(flagsStartBit, flagsEndBit + 1); String oFlagBinaryString = binaryString.substring(oFlagStartBit, oFlagEndBit + 1); String bFlagBinaryString = binaryString.substring(bFlagStartBit, bFlagEndBit + 1); String rFlagBinaryString = binaryString.substring(rFlagStartBit, rFlagEndBit + 1); String priFlagBinaryString = binaryString.substring(priFlagStartBit, priFlagEndBit + 1); String requestIDNumberBinaryString = binaryString.substring(requestIDNumberStartBit, requestIDNumberEndBit + 1); this.setFlagsBinaryString(flagsBinaryString); this.setOFlagBinaryString(oFlagBinaryString); this.setBFlagBinaryString(bFlagBinaryString); this.setRFlagBinaryString(rFlagBinaryString); this.setPriFlagBinaryString(priFlagBinaryString); this.setRequestIDNumberBinaryString(requestIDNumberBinaryString); } public int getObjectFrameByteLength() { int objectLength = flags.length() + requestIDNumber.length(); int headerLength = PCEPConstantValues.COMMON_OBJECT_HEADER_LENGTH; int objectFrameByteLength = (objectLength + headerLength) / 8; return objectFrameByteLength; } public String getObjectFrameBinaryString() { String headerBinaryString = this.getObjectHeader().getHeaderBinaryString(); String objectBinaryString = this.getObjectBinaryString(); return headerBinaryString + objectBinaryString; } /** * requestIDNumber */ public int getRequestIDNumberDecimalValue() { int decimalValue = (int) PCEPComputationFactory.getDecimalValue(requestIDNumber); return decimalValue; } public String getRequestIDNumberBinaryString() { return this.requestIDNumber; } public void setRequestIDNumberDecimalValue(int decimalValue) { int binaryLength = requestIDNumberLength; int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength-1); this.requestIDNumber = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength); } public void setRequestIDNumberBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, requestIDNumberLength); this.requestIDNumber = checkedBinaryString; } public void setRequestIDNumberBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(requestIDNumber, startingBit, binaryString, requestIDNumberLength); this.requestIDNumber = 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; } /** * oFlag */ public int getOFlagDecimalValue() { int relativeStartBit = (oFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + oFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getOFlagBinaryString() { String binaryString = flags.substring(0, (oFlagStartBit - flagsStartBit) + oFlagLength); return binaryString; } public void setOFlagBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(this.flags, (oFlagStartBit - flagsStartBit), binaryString, flagsLength); this.flags = checkedBinaryString; } /** * bFlag */ public int getBFlagDecimalValue() { int relativeStartBit = (bFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + bFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getBFlagBinaryString() { int relativeStartBit = (bFlagStartBit - flagsStartBit); String binaryString = flags.substring(relativeStartBit, relativeStartBit + bFlagLength); return binaryString; } public void setBFlagBinaryString(String binaryString) { int relativeStartBit = (bFlagStartBit - flagsStartBit); String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, relativeStartBit, binaryString, flagsLength); this.flags = checkedBinaryString; } /** * rFlag */ public int getRFlagDecimalValue() { int relativeStartBit = (rFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + rFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getRFlagBinaryString() { int relativeStartBit = (rFlagStartBit - flagsStartBit); String binaryString = flags.substring(relativeStartBit, relativeStartBit + rFlagLength); return binaryString; } public void setRFlagBinaryString(String binaryString) { int relativeStartBit = (rFlagStartBit - flagsStartBit); String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, relativeStartBit, binaryString, flagsLength); this.flags = checkedBinaryString; } /** * priFlag */ public int getPriFlagDecimalValue() { int relativeStartBit = (priFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + priFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getPriFlagBinaryString() { int relativeStartBit = (priFlagStartBit - flagsStartBit); String binaryString = flags.substring(relativeStartBit, relativeStartBit + priFlagLength); return binaryString; } public void setPriFlagBinaryString(String binaryString) { int relativeStartBit = (priFlagStartBit - flagsStartBit); String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, relativeStartBit, binaryString, flagsLength); this.flags = checkedBinaryString; } public String toString() { String flagsInfo = "Flags=" + this.getFlagsBinaryString(); String requestIDNumberInfo = ",RequestIDNumber=" + this.getRequestIDNumberBinaryString(); String headerInfo = this.getObjectHeader().toString(); String objectInfo = NAME + ":" + flagsInfo + requestIDNumberInfo + ">"; return headerInfo + objectInfo; } public String binaryInformation() { String flagsInfo = this.getFlagsBinaryString(); String requestIDNumberBinaryInfo = "'" + getRequestIDNumberBinaryString(); String headerInfo = this.getObjectHeader().binaryInformation(); String objectInfo = "[" + flagsInfo + requestIDNumberBinaryInfo + "]"; return headerInfo + objectInfo; } public String contentInformation() { return "[" + NAME + "]"; } }