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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }