Esempio n. 1
0
 private void OnExpectSchemeGetCompleted(ActionCompletedUnit unit)
 {
     if (_learnMode.Result && _memoryGetId.Result && _serialApiGetInitData.Result)
     {
         if (_expectSchemeGet.Result)
         {
             _expectKexGet.Token.SetCancelled();
             _learnModeS0.NodeId = _expectSchemeGet.SpecificResult.SrcNodeId;
             if (_learnMode is SetSlaveLearnModeOperation)
             {
                 _learnModeS0.VirtualNodeId = _expectSchemeGet.SpecificResult.DestNodeId;
             }
             else
             {
                 _learnModeS0.IsController = _learnMode is SetLearnModeControllerOperation;
                 _securityManagerInfo.Network.ResetAndEnableAndSelfRestore();
             }
             COMMAND_CLASS_SECURITY.SECURITY_SCHEME_GET cmd = _expectSchemeGet.SpecificResult.Command;
             _learnModeS0.SupportedSecuritySchemes = cmd.supportedSecuritySchemes;
             unit.SetNextActionItems(_learnModeS0);
         }
         else if (_expectSchemeGet.Result.State == ActionStates.Expired)
         {
             SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
             _securityManagerInfo.Network.ResetSecuritySchemes();
             _securityManagerInfo.Network.ResetSecuritySchemes(_expectSchemeGet.SpecificResult.SrcNodeId);
             SetStateCompleted(unit);
         }
     }
 }
Esempio n. 2
0
        private void OnRequestCompleted(ActionCompletedUnit tu)
        {
            OnOperationCompletedBefore(tu);
            RequestDataExOperation op = new RequestDataExOperation(0, NodeId, Data, TxOptions, TxSecOptions, SecurityScheme, TxOptions2, CmdClass, Cmd, TimeoutMs);

            OnOperationCompletedAfter(tu, requestCompleted, op);
        }
Esempio n. 3
0
 private void OnSchemeReport(ActionCompletedUnit ou)
 {
     if (requestScheme.Result.State == ActionStates.Completed)
     {
         SecurityManagerInfo.Network.SetSecuritySchemes(SpecificResult.Id, SecuritySchemeSet.S0);
         COMMAND_CLASS_SECURITY.SECURITY_SCHEME_REPORT command = requestScheme.SpecificResult.Command;
         //TO# 07122 accourding to SDS12652-11 section 3.29.2.3, an including controller must not verify the reported scheme.
         sendNetworkKeySet.NodeId         = SpecificResult.Id;
         expectNetworkKeyVerify.SrcNodeId = SpecificResult.Id;
         var networkKey = SecurityManagerInfo.GetActualNetworkKey(SecuritySchemes.S0);
         if (SecurityManagerInfo.TestNetworkKeyS0InSet != null)
         {
             networkKey = SecurityManagerInfo.TestNetworkKeyS0InSet;
         }
         sendNetworkKeySet.Data = new COMMAND_CLASS_SECURITY.NETWORK_KEY_SET()
         {
             networkKeyByte = new List <byte>(networkKey)
         };
         SecurityManagerInfo.ActivateNetworkKeyS0Temp();
         if (SecurityManagerInfo.DelaysS0.ContainsKey(SecurityS0Delays.NetworkKeySet))
         {
             sendNetworkKeySet.DataDelay = SecurityManagerInfo.DelaysS0[SecurityS0Delays.NetworkKeySet];
         }
     }
     else
     {
         SetStateCompletedSecurityFailed(ou);
     }
 }
Esempio n. 4
0
        private void OnSendCompleted(ActionCompletedUnit tu)
        {
            OnOperationCompletedBefore(tu);
            SendDataExOperation op = new SendDataExOperation(NodeId, Data, TxOptions, TxSecOptions, SecurityScheme, TxOptions2);

            OnOperationCompletedAfter(tu, sendCompleted, op);
        }
Esempio n. 5
0
 private void OnNonceReport(ActionCompletedUnit ou)
 {
     AddTraceLogItems(requestNonce.SpecificResult.TraceLog);
     if (requestNonce.Result.State == ActionStates.Completed)
     {
         COMMAND_CLASS_SECURITY.SECURITY_NONCE_REPORT cmd = requestNonce.SpecificResult.Command;
         "NONCE REPORT {0}"._DLOG(requestNonce.SpecificResult.Command.GetHex());
         if (cmd.nonceByte != null && cmd.nonceByte.Count == 8)
         {
             byte[] msg = _securityS0CryptoProvider.Encrypt(0, CommandToSecureSend, SrcNodeId, DestNodeId, cmd.nonceByte.ToArray());
             sendEncData.Data = msg;
             //sendEncData.OnHandledCallback = OnHandledCallback;
             if (_securityManagerInfo.DelaysS0.ContainsKey(SecurityS0Delays.Command))
             {
                 Thread.Sleep(_securityManagerInfo.DelaysS0[SecurityS0Delays.Command]);
             }
         }
         else
         {
             SetStateFailed(ou);
         }
     }
     else
     {
         SetStateFailed(ou);
     }
 }
        private void OnRequestFirstEncData(ActionCompletedUnit ou)
        {
            AddTraceLogItems(sendFirstEncData.SpecificResult.TraceLog);
            if (sendFirstEncData.Result.State == ActionStates.Completed)
            {
                COMMAND_CLASS_SECURITY.SECURITY_NONCE_REPORT cmd = sendFirstEncData.SpecificResult.Command;
                if (cmd.nonceByte != null && cmd.nonceByte.Count == 8)
                {
                    byte[] secondFragmentCmd = CommandToSecureSend.Skip(MaxBytesPerFrameSize).Take(MaxBytesPerFrameSize).ToArray();
                    COMMAND_CLASS_SECURITY.SECURITY_MESSAGE_ENCAPSULATION.Tproperties1 property = 0;
                    property.sequenceCounter = SequenceCounter;
                    property.sequenced       = 1;
                    property.secondFrame     = 1;
                    byte[] msg = _securityS0CryptoProvider.Encrypt(property, secondFragmentCmd, _securityManagerInfo.Network.NodeId, NodeId, cmd.nonceByte.ToArray());

                    COMMAND_CLASS_SECURITY.SECURITY_MESSAGE_ENCAPSULATION msgCmd = msg;
                    sendSecondEncData.Data = msgCmd;
                    //sendSecondEncData.OnHandledCallback = OnHandledCallback;
                    if (_securityManagerInfo.DelaysS0.ContainsKey(SecurityS0Delays.Command))
                    {
                        Thread.Sleep(_securityManagerInfo.DelaysS0[SecurityS0Delays.Command]);
                    }
                }
                else
                {
                    SetStateFailed(ou);
                }
            }
            else
            {
                SetStateFailed(ou);
            }
        }
Esempio n. 7
0
 private void OnSchemeInherit(ActionCompletedUnit ou)
 {
     if (requestSchemeInherit.Result.State == ActionStates.Completed)
     {
         COMMAND_CLASS_SECURITY.SECURITY_SCHEME_INHERIT cmd = requestSchemeInherit.SpecificResult.Command;
         if ((cmd.supportedSecuritySchemes & 0xFE) == 0)
         {
             sendSecureSchemeReport.NodeId       = NodeId;
             sendSecureSchemeReport.BridgeNodeId = VirtualNodeId;
             if (_securityManagerInfo.DelaysS0.ContainsKey(SecurityS0Delays.SchemeReportEnc))
             {
                 sendSecureSchemeReport.DataDelay = _securityManagerInfo.DelaysS0[SecurityS0Delays.SchemeReportEnc];
             }
         }
         else
         {
             SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
             SetStateCompletedSecurityFailed(ou);
         }
     }
     else
     {
         SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
         SetStateCompletedSecurityFailed(ou);
     }
 }
Esempio n. 8
0
 private void OnExpectKexGetCompleted(ActionCompletedUnit unit)
 {
     if (_learnMode.Result && _memoryGetId.Result && _serialApiGetInitData.Result)
     {
         if (_expectKexGet.Result)
         {
             _expectSchemeGet.Token.SetCancelled();
             _learnModeS2.NodeId = _expectKexGet.SpecificResult.SrcNodeId;
             if (_learnMode is SetSlaveLearnModeOperation)
             {
                 _learnModeS2.VirtualNodeId = _expectKexGet.SpecificResult.DestNodeId;
             }
             else
             {
                 _securityManagerInfo.Network.ResetAndEnableAndSelfRestore();
             }
             unit.SetNextActionItems(_learnModeS2);
         }
         else if (_expectKexGet.Result.State == ActionStates.Expired)
         {
             SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
             _securityManagerInfo.Network.ResetSecuritySchemes();
             _securityManagerInfo.Network.ResetSecuritySchemes(_expectKexGet.SpecificResult.SrcNodeId);
             SetStateCompleted(unit);
         }
     }
 }
Esempio n. 9
0
        private void OnSendNextSegment(ActionCompletedUnit actionUnit)
        {
            if ((TxOptions & TransmitOptions.TransmitOptionAcknowledge) == TransmitOptions.TransmitOptionAcknowledge)
            {
                var sendData = actionUnit.Action as SendDataOperation;
                if (sendData.SpecificResult.TransmitStatus == TransmitStatuses.CompleteNoAcknowledge)
                {
                    SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
                    SetStateFailed(actionUnit);
                }
            }

            Thread.Sleep(RELAXED_TIMING_DELAY);
            if (_dataOffset < _data.Length)
            {
                _nextSegmentSendOperation.NewToken();
                _nextSegmentSendOperation.Data = CreateSubsequentSegmentCmd(_data, _dataOffset);

                if (_dataOffset + _subsequentSegmentPayloadSize >= _data.Length)
                {
                    if (_segmentCompleteExpect.Token.State == ActionStates.Running)
                    {
                        _segmentCompleteExpect.Token.Reset(SEGMENT_COMPLETE_TIMEOUT);
                    }
                    else
                    {
                        _segmentCompleteExpect.NewToken();
                        actionUnit.AddFirstNextActionItems(_segmentCompleteExpect);
                    }
                }
                _dataOffset += _subsequentSegmentPayloadSize;
            }
        }
Esempio n. 10
0
 private void OnTestCompleted(ActionCompletedUnit ou)
 {
     _testIteration++;
     if (_sendTest.SpecificResult.TransmitStatus != TransmitStatuses.CompleteOk)
     {
         _failIterations++;
     }
     if (_testIteration >= _testFrameCount)
     {
         _sendPowerLevelTestNodeReport.NewToken();
         _sendPowerLevelTestNodeReport.NodeId = _testFromNodeId;
         _sendPowerLevelTestNodeReport.Data   = new COMMAND_CLASS_POWERLEVEL.POWERLEVEL_TEST_NODE_REPORT()
         {
             statusOfOperation = _failIterations == 0 ? (byte)0x01 : (byte)0x00,
             testFrameCount    = new byte[] { (byte)(_testIteration << 8), (byte)_testIteration },
             testNodeid        = _sendTest.NodeId
         };
         ou.SetNextActionItems(_sendPowerLevelTestNodeReport);
     }
     else
     {
         _sendTest.NewToken();
         ou.SetNextActionItems(_sendTest);
     }
 }
Esempio n. 11
0
 private void OnPowerLevelGet(ActionCompletedUnit ou)
 {
     _sendPowerLevelReport.Data = new COMMAND_CLASS_POWERLEVEL.POWERLEVEL_REPORT()
     {
         powerLevel = _powerLevelGet.SpecificResult.PowerLevel
     };
 }
Esempio n. 12
0
        private void OnMemoryGetIdCompleted(ActionCompletedUnit unit)
        {
            if (_memoryGetId.Result)
            {
                var lmc = _learnMode as SetLearnModeControllerOperation;
                var lms = _learnMode as SetLearnModeSlaveOperation;
                var lmv = _learnMode as SetSlaveLearnModeOperation;
                if ((lmc != null && lmc.SpecificResult.NodeId == 0) ||
                    (lms != null && lms.SpecificResult.NodeId == 0) ||
                    (lmv != null && lmv.SpecificResult.NodeId == 0))
                {
                    SpecificResult.LearnModeStatus = LearnModeStatuses.Removed;
                }
                else if (lmc != null && _memoryGetId.SpecificResult.HomeId.SequenceEqual(_previousHomeId))
                {
                    SpecificResult.LearnModeStatus = LearnModeStatuses.Replicated;
                }
                else
                {
                    SpecificResult.LearnModeStatus = LearnModeStatuses.Added;
                }

                if (lmc != null)
                {
                    SpecificResult.NodeId = _memoryGetId.SpecificResult.NodeId;
                    _securityManagerInfo.Network.NodeId = _memoryGetId.SpecificResult.NodeId;
                    _securityManagerInfo.Network.HomeId = _memoryGetId.SpecificResult.HomeId;
                }
                else if (lmv != null)
                {
                    SpecificResult.NodeId = lmv.SpecificResult.NodeId;
                }
            }
        }
Esempio n. 13
0
 private void SetStateCompletedSecurityDone(ActionCompletedUnit ou)
 {
     SpecificResult.SubstituteStatus = SubstituteStatuses.Done;
     SpecificResult.SecuritySchemes  = SecuritySchemeSet.S0;
     SecurityManagerInfo.Network.SetSecuritySchemes(SpecificResult.Id, SecuritySchemeSet.S0);
     SecurityManagerInfo.Network.SetSecuritySchemesSpecified(SpecificResult.Id);
     SetStateCompleted(ou);
 }
Esempio n. 14
0
        private void OnPKReport(ActionCompletedUnit ou)
        {
            _PkReportReceivedTimeStamp = DateTime.Now;
            if (_PKReportPKReport.Result.State == ActionStates.Completed &&
                _PKReportPKReport.SpecificResult.Command != null &&
                _PKReportPKReport.SpecificResult.Command.Length > 2)
            {
                COMMAND_CLASS_SECURITY_2.PUBLIC_KEY_REPORT rpt = _PKReportPKReport.SpecificResult.Command;
                if (rpt.properties1.includingNode == 1)
                {
                    var receiverPublicKey = ((List <byte>)rpt.ecdhPublicKey).ToArray();
                    if (receiverPublicKey != null && receiverPublicKey.Length == 32 && ValidatePublicKeyReport(receiverPublicKey))
                    {
                        var senderPublicKey = _securityManagerInfo.GetJoinPublicKeyS2();
                        if (_isClientSideAuthRequested && _KEX_SET.properties1.requestCsa > 0 && _securityManagerInfo.DSKVerificationOnReceiverCallback != null)
                        {
                            byte[] senderDSK = _securityManagerInfo.DSKVerificationOnReceiverCallback();
                            if (senderDSK != null && senderDSK.Length == 4)
                            {
                                Array.Copy(senderDSK, 0, receiverPublicKey, 0, 4);
                            }
                        }
                        _securityManagerInfo.SetNetworkKeyS2Temp(_securityManagerInfo.CalculateTempNetworkKeyS2(receiverPublicKey, false));
                        _securityManagerInfo.ActivateNetworkKeyS2TempForNode(_peerNodeId);

                        var kexSetEcho = _KEX_SET;
                        kexSetEcho.properties1.echo         = 1;
                        _KEXSetEchoKEXReportEcho.DestNodeId = NodeId;
                        _KEXSetEchoKEXReportEcho.SrcNodeId  = VirtualNodeId;
                        _KEXSetEchoKEXReportEcho.Data       = kexSetEcho;

                        _isWaitingForKexReportEcho = true;
                        #region KEXSetEcho
                        _securityTestSettingsService.ActivateTestPropertiesForFrame(SecurityS2TestFrames.KEXSetEcho, _KEXSetEchoKEXReportEcho);
                        #endregion
                    }
                    else
                    {
                        _KexFail.Data = new COMMAND_CLASS_SECURITY_2.KEX_FAIL {
                            kexFailType = 0x00
                        };
                        _KexFail.NodeId       = NodeId;
                        _KexFail.BridgeNodeId = VirtualNodeId;
                        ou.SetNextActionItems(_KexFail);
                    }
                }
                else
                {
                    SetStateCompletedSecurityFailed(ou);
                }
            }
            else
            {
                SetStateCompletedSecurityFailed(ou);
            }
        }
Esempio n. 15
0
        protected override void CreateInstance()
        {
            sendFirst = new SendDataExOperation(NodeId, Data, TxOptions, TxSecOptions, SecurityScheme, TxOptions2);
            sendFirst.SubstituteSettings = SubstituteSettings;
            sendCompleted = new ActionCompletedUnit(sendFirst, OnSendCompleted);

            requestFirst = new RequestDataExOperation(0, NodeId, Data, TxOptions, TxSecOptions, SecurityScheme, TxOptions2, CmdClass, Cmd, TimeoutMs);
            requestFirst.SubstituteSettings = SubstituteSettings;
            requestCompleted = new ActionCompletedUnit(requestFirst, OnRequestCompleted);
        }
Esempio n. 16
0
 private void OnSchemeInheritReport(ActionCompletedUnit ou)
 {
     if (requestSchemeInherit.Result.State == ActionStates.Completed)
     {
         SetStateCompletedSecurityDone(ou);
     }
     else
     {
         SetStateCompletedSecurityFailed(ou);
     }
 }
Esempio n. 17
0
 private void OnSendEncData(ActionCompletedUnit ou)
 {
     AddTraceLogItems(sendEncData.SpecificResult.TraceLog);
     if (sendEncData.Result.State == ActionStates.Completed)
     {
         SetStateCompleted(ou);
     }
     else
     {
         SetStateFailed(ou);
     }
 }
Esempio n. 18
0
 private void OnOperationCompletedBefore(ActionCompletedUnit tu)
 {
     if (IntervalMs > 0)
     {
         Thread.Sleep(IntervalMs);
     }
     SpecificResult.TotalCount++;
     if (!tu.Action.IsStateCompleted)
     {
         SpecificResult.FailCount++;
     }
 }
Esempio n. 19
0
 private void OnSendCompleted(ActionCompletedUnit ou)
 {
     AddTraceLogItems(ou.Action.Result.TraceLog);
     if (ou.Action.Result.State == ActionStates.Completed)
     {
         SetStateCompleted(ou);
     }
     else
     {
         SetStateFailed(ou);
     }
 }
Esempio n. 20
0
 private void OnDone(ActionCompletedUnit tu)
 {
     if (tu.Action.Result.State == ActionStates.Completed)
     {
         SpecificResult.SubstituteStatus = SubstituteStatuses.Done;
         SetStateCompletedSecurityDone(tu);
     }
     else
     {
         SetStateCompletedSecurityFailed(tu);
     }
 }
Esempio n. 21
0
            private void OnComplete(ActionCompletedUnit ou)
            {
                SpecificResult.Command            = _requestInclusionSupport.SpecificResult.Command;
                SpecificResult.IsBroadcast        = _requestInclusionSupport.SpecificResult.IsBroadcast;
                SpecificResult.NodeId             = _requestInclusionSupport.SpecificResult.NodeId;
                SpecificResult.RxRssi             = _requestInclusionSupport.SpecificResult.RxRssi;
                SpecificResult.RxSecurityScheme   = _requestInclusionSupport.SpecificResult.RxSecurityScheme;
                SpecificResult.RxSubstituteStatus = _requestInclusionSupport.SpecificResult.RxSubstituteStatus;
                SpecificResult.TransmitStatus     = _requestInclusionSupport.SpecificResult.TransmitStatus;
                SpecificResult.TxSubstituteStatus = _requestInclusionSupport.SpecificResult.TxSubstituteStatus;

                SetStateCompleted(ou);
            }
Esempio n. 22
0
 private void OnSendOnlyFirstCompleted(ActionCompletedUnit ou)
 {
     //OnHandledCallback(ou);
     AddTraceLogItems(ou.Action.Result.TraceLog);
     if (ou.Action.Result.State == ActionStates.Completed)
     {
         SetStateCompleting(ou);
     }
     else
     {
         SetStateFailed(ou);
     }
 }
Esempio n. 23
0
 private void OnSendEncData(ActionCompletedUnit ou)
 {
     AddTraceLogItems(_sendEncData.SpecificResult.TraceLog);
     if (_sendEncData.Result.State == ActionStates.Completed)
     {
         SpecificResult.SubstituteStatus = SubstituteStatuses.Done;
         SetStateCompleted(ou);
     }
     else
     {
         SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
         SetStateFailed(ou);
     }
 }
Esempio n. 24
0
 protected void OnSecurityMessageReceived(ActionCompletedUnit ou)
 {
     if (_SecurityMessageReceived.Result)
     {
         if (_isWaitingForKexReportEcho)
         {
             Thread.Sleep(3000);
             _KexFail.SubstituteSettings.ClearFlag(SubstituteFlags.DenySecurity);
         }
         _KexFail.Data = new COMMAND_CLASS_SECURITY_2.KEX_FAIL {
             kexFailType = 0x05
         };
         _KexFail.NodeId       = NodeId;
         _KexFail.BridgeNodeId = VirtualNodeId;
         ou.SetNextActionItems(_KexFail);
     }
 }
Esempio n. 25
0
 private void OnSendTransferEnd(ActionCompletedUnit tu)
 {
     if (tu.Action.Result.State == ActionStates.Completed)
     {
         if (_grantedSchemes.Count > 0)
         {
             SetStateCompletedSecurityDone(tu);
         }
         else
         {
             SetStateCompletedSecurityNone(tu);
         }
     }
     else
     {
         SetStateCompletedSecurityFailed(tu);
     }
 }
Esempio n. 26
0
        private void OnNetworkKeySet(ActionCompletedUnit ou)
        {
            const byte keyLength = 16;

            if (requestNetworkKey.Result.State == ActionStates.Completed)
            {
                COMMAND_CLASS_SECURITY.NETWORK_KEY_SET cmd = requestNetworkKey.SpecificResult.Command;
                byte[] key = new byte[keyLength];
                if (cmd.networkKeyByte != null && cmd.networkKeyByte.Count() == keyLength)
                {
                    Array.Copy(cmd.networkKeyByte.ToArray(), 0, key, 0, Math.Min(cmd.networkKeyByte.Count, keyLength));
                    _securityManagerInfo.SetNetworkKey(key, SecuritySchemes.S0);
                    _securityManagerInfo.ActivateNetworkKeyS0();
                    if (VirtualNodeId > 0 || !IsController)
                    {
                        sendNetworkKeyVerify.NodeId       = NodeId;
                        sendNetworkKeyVerify.BridgeNodeId = VirtualNodeId;
                        ou.SetNextActionItems(sendNetworkKeyVerify);
                    }
                    else
                    {
                        requestSchemeInherit.DestNodeId = NodeId;
                        requestSchemeInherit.SrcNodeId  = VirtualNodeId;
                        ou.SetNextActionItems(requestSchemeInherit);
                        if (_securityManagerInfo.DelaysS0.ContainsKey(SecurityS0Delays.NetworkKeyVerify))
                        {
                            requestSchemeInherit.DataDelay = _securityManagerInfo.DelaysS0[SecurityS0Delays.NetworkKeyVerify];
                        }
                    }
                }
                else
                {
                    SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
                    SetStateCompletedSecurityFailed(ou);
                }
            }
            else
            {
                SpecificResult.SubstituteStatus = SubstituteStatuses.Failed;
                SetStateCompletedSecurityFailed(ou);
            }
        }
Esempio n. 27
0
 protected override void CreateWorkflow()
 {
     ActionUnits.Add(new StartActionUnit(null, 0, new ActionBase[] { _segmentRequestResponse, _waitSegmentResponse, _firstSegmentSendOperation }));
     ActionUnits.Add(new ActionCompletedUnit(_firstSegmentSendOperation, OnFirstSegment, _nextSegmentSendOperation)
     {
         Name = "_firstSegmentSendOperation"
     });
     _sendNextSegmentCompletedUnit = new ActionCompletedUnit(_nextSegmentSendOperation, OnSendNextSegment, _nextSegmentSendOperation)
     {
         Name = "_nextSegmentSendOperation"
     };
     ActionUnits.Add(_sendNextSegmentCompletedUnit);
     ActionUnits.Add(new ActionCompletedUnit(_segmentCompleteExpect, OnSegmentComplete)
     {
         Name = "_segmentCompleteExpect"
     });
     ActionUnits.Add(new TimeElapsedUnit(Id, OnTimeElapsed, 0)
     {
         Name = "_timeElapsed"
     });
 }
Esempio n. 28
0
 private void OnCompleted(ActionCompletedUnit ou)
 {
     Result.InnerResults.Add(ou.Action.Result);
     if (IsWaitingForAllActions)
     {
         CompletedOoperations++;
         if (CompletedOoperations == Actions.Length)
         {
             if (ou.Action.Result.State == ActionStates.Failed)
             {
                 SetStateFailed(ou);
             }
             else if (ou.Action.Result.State == ActionStates.Expired)
             {
                 SetStateExpired(ou);
             }
             else
             {
                 SetStateCompleted(ou);
             }
         }
     }
     else
     {
         if (ou.Action.Result.State == ActionStates.Failed)
         {
             SetStateFailed(ou);
         }
         else if (ou.Action.Result.State == ActionStates.Expired)
         {
             SetStateExpired(ou);
         }
         else
         {
             SetStateCompleted(ou);
         }
     }
 }
Esempio n. 29
0
 private void OnSendDataComleted(ActionCompletedUnit ou)
 {
     AddTraceLogItems(ou.Action.Result.TraceLog);
     SpecificResult.TransmitStatus     = ((SendDataResult)ou.Action.Result).TransmitStatus;
     SpecificResult.TxSubstituteStatus = ((SendDataResult)ou.Action.Result).SubstituteStatus;
     if (ou.Action.Result.State == ActionStates.Completed)
     {
         if (ExpectData.Result)
         {
             SpecificResult.NodeId             = ExpectData.SpecificResult.SrcNodeId;
             SpecificResult.Command            = ExpectData.SpecificResult.Command;
             SpecificResult.RxRssi             = ExpectData.SpecificResult.Rssi;
             SpecificResult.RxSecurityScheme   = ExpectData.SpecificResult.SecurityScheme;
             SpecificResult.RxSubstituteStatus = ExpectData.SpecificResult.SubstituteStatus;
             SetStateCompleted(ou);
         }
     }
     else
     {
         ExpectData.Token.SetCancelled();
         SetStateFailed(ou);
     }
 }
Esempio n. 30
0
 private void OnNetworkKeyVerify(ActionCompletedUnit ou)
 {
     if (expectNetworkKeyVerify.Result.State == ActionStates.Completed)
     {
         if (SpecificResult.IsSlave)
         {
             SetStateCompletedSecurityDone(ou);
         }
         else
         {
             requestSchemeInherit.DestNodeId = SpecificResult.Id;
             ou.SetNextActionItems(requestSchemeInherit);
             if (SecurityManagerInfo.DelaysS0.ContainsKey(SecurityS0Delays.SchemeInherit))
             {
                 requestSchemeInherit.DataDelay = SecurityManagerInfo.DelaysS0[SecurityS0Delays.SchemeInherit];
             }
         }
     }
     else
     {
         SetStateCompletedSecurityFailed(ou);
     }
 }