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); } }
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); } }