public virtual BACVnetVar Decode(BACPacket cm) { byte tag = cm.getByte(); switch (DecodeClass(tag)) { case CLASS.APPLICATION: CONTEXT_TAG ct = (CONTEXT_TAG)(cm.getByte() >> 4); return(Decode(cm, ct)); case CLASS.CONTEXT: // IF this is an Openning Tag if ((tag & 0x0F) == 0x0E) { BACVnetConstructed constr = new BACVnetConstructed(); cm.getNextByte(); while (cm.hasMore() == true) { tag = cm.getByte(); // IF this is the closing Tag if ((tag & 0x0F) == 0x0F) { cm.getNextByte(); break; } BACVnetVar vn = new BACVnetVar().Decode(cm); constr.AddVar(vn); //constr.AddVar(cm.getNextByte()); } return(constr); } else { // This would be an error ?? CONTEXT_TAG ct1 = (CONTEXT_TAG)(cm.getByte() >> 4); return(Decode(cm, ct1)); } default: break; } return(this); }
public PDU Decode(BACPacket cm) { pduType = (BACnetPDU)(cm.getByte() >> 4); switch (pduType) { case BACnetPDU.PDU_CONFIRMED_REQUEST: pduType = BACnetPDU.PDU_CONFIRMED_REQUEST; cm.SetAction(BACPacket.Action_Type.REQUEST); return(new PDUConfirmedService().Decode(cm)); case BACnetPDU.PDU_UNCONFIRMED_SERVICE_REQUEST: pduType = BACnetPDU.PDU_UNCONFIRMED_SERVICE_REQUEST; cm.SetAction(BACPacket.Action_Type.REQUEST); return(new PDUUnConfirmedService().Decode(cm)); case BACnetPDU.PDU_SIMPLEACK: pduType = BACnetPDU.PDU_SEGMENTACK; cm.SetAction(BACPacket.Action_Type.RESPONSE); return(new PDUSimpleAck().Decode(cm)); case BACnetPDU.PDU_COMPLEXACK: pduType = BACnetPDU.PDU_COMPLEXACK; cm.SetAction(BACPacket.Action_Type.RESPONSE); return(new PDUComplexAck().Decode(cm)); case BACnetPDU.PDU_SEGMENTACK: case BACnetPDU.PDU_ERROR: pduType = BACnetPDU.PDU_ERROR; cm.SetAction(BACPacket.Action_Type.RESPONSE); return(new PDUError().Decode(cm)); case BACnetPDU.PDU_REJECT: pduType = BACnetPDU.PDU_REJECT; cm.SetAction(BACPacket.Action_Type.RESPONSE); return(new PDUReject().Decode(cm)); case BACnetPDU.PDU_ABORT: return(this); } return(this); }
new public PDU Decode(BACPacket cm) { System.Console.Write("Decoding PDUComplexAck"); byte a = cm.getNextByte(); segMessage = DecodeSegMessage(a); moreFollows = DecodeMoreFollows(a); segResponseAccp = DecodeSegResponse(a); if (segResponseAccp == true) { maxSegmentsAccepted = (MAX_SEGMENTS_ACCEPTED)cm.getByte(); } maxAPDUlengthAccepted = DecodeMaxAPDUlengthAccp(cm.getNextByte()); invokeID = cm.getNextByte(); // If the optional parameter are present if (segMessage) { sequenceNumber = cm.getNextByte(); proposedWindowSize = cm.getNextByte(); } serviceChoice = (ConfirmedServiceChoice)cm.getNextByte(); switch (serviceChoice) { case ConfirmedServiceChoice.READPROPERTY: apduService = new APDUReadProperty(); apduService.Decode(cm); break; } return(this); }
public virtual NSDU Decode(BACPacket cm) { nlm = (Network_Layer_Message)cm.getByte(); switch (nlm) { case Network_Layer_Message.WHO_IS_ROUTER_TO_NETWORK: return(new NSDU_Who_Is_Router_To_Network().Decode(cm)); case Network_Layer_Message.I_AM_ROUTER_TO_NETWORK: return(new NSDU_I_Am_Router_To_Network().Decode(cm)); case Network_Layer_Message.I_COULD_BE_ROUTER_TO_NETWORK: return(new NSDU_I_Could_be_Router_To_Network().Decode(cm)); case Network_Layer_Message.REJECT_MESSAGE_TO_NETWORK: return(new NSDU_Reject_Message_To_Network().Decode(cm)); case Network_Layer_Message.ROUTER_BUSY_TO_NETWORK: return(new NSDU_Router_Busy_To_Network().Decode(cm)); case Network_Layer_Message.INITIALIZE_ROUTING_TABLE: return(new NSDU_Initialize_Routing_Table().Decode(cm)); case Network_Layer_Message.INITIALIZE_ROUTING_TABLE_ACK: return(new NSDU_Initialize_Routing_Table_Ack().Decode(cm)); case Network_Layer_Message.ESTABLISH_CONNECTION_TO_NETWORK: break; case Network_Layer_Message.DISCONNECT_CONNECTION_TO_NETWORK: break; case Network_Layer_Message.CHALLENGE_REQUEST: break; case Network_Layer_Message.SECURITY_PAYLOAD: break; case Network_Layer_Message.SECURITY_RESPONSE: break; case Network_Layer_Message.REQUEST_KEY_UPDATE: break; case Network_Layer_Message.UPDATE_KEY_SET: break; case Network_Layer_Message.UPDATE_DISTRIBUTION_KEY: break; case Network_Layer_Message.REQUEST_MASTER_KEY: break; case Network_Layer_Message.SET_MASTER_KEY: break; case Network_Layer_Message.WHAT_IS_NETWORK_NUMBER: break; case Network_Layer_Message.NETWORK_NUMBER_IS: break; } return(this); }