/// <summary>
        /// Send sync Bridge Command
        /// </summary>
        /// <param name="channel">Channel to send command (Intel ME = 6)</param>
        /// <param name="slaveId">Channel Slave Id</param>
        /// /// <param name="trackRequest">Trace Message</param>
        /// <param name="messageData">Message payload</param>
        public virtual SendNodeMangerMessage SendNodeManagerRequest(byte channel, byte slaveId, bool trackRequest, NodeManagerRequest requestMessage, Type responseMessage)
        {
            byte rqSeq = NodeManagerRqSeq();

            byte[] nodeManagerMessage = requestMessage.GetNodeManagerBytes(slaveId, rqSeq, trackRequest);

            SendMessageResponse msgResponse = (SendMessageResponse)this.IpmiSendReceive(
                new SendMessageRequest(channel, trackRequest, nodeManagerMessage),
                typeof(SendMessageResponse));

            SendNodeMangerMessage response = new SendNodeMangerMessage(msgResponse.CompletionCode);

            if (response.CompletionCode == 0x00)
            {
                // Create the response based on the provided type.
                ConstructorInfo     constructorInfo     = responseMessage.GetConstructor(Type.EmptyTypes);
                NodeManagerResponse nodeManagerResponse = (NodeManagerResponse)constructorInfo.Invoke(new Object[0]);

                // set the message data.
                response.MessageData = msgResponse.MessageData;

                try
                {
                    nodeManagerResponse.InitializeNodeManager(msgResponse.MessageData, msgResponse.MessageData.Length, rqSeq);
                    response.Response = nodeManagerResponse;
                }
                catch (Exception ex)
                {
                    IpmiSharedFunc.WriteTrace(string.Format("Send Message error converting payload. Exception occured converting packet: {0}", ex));

                    // set an exception code for invalid data in ipmi data field, as the packet could
                    nodeManagerResponse.CompletionCode = 0xD6; // IpmiCmdFailedIllegalParameter
                }
            }

            return(response);
        }
Example #2
0
 /// <summary>
 /// Send sync Bridge Command
 /// </summary>
 /// <param name="channel">Channel to send command (Intel ME = 6)</param>
 /// <param name="slaveId">Channel Slave Id</param>
 /// <param name="messageData">Message payload</param>
 public static SendNodeMangerMessage SendNodeManagerRequest(byte deviceId, byte channel, byte slaveId, NodeManagerRequest requestMessage)
 {
     if (clients.ContainsKey(deviceId))
     {
         return(clients[deviceId].SendNodeManagerRequest <NodeManagerResponse>(channel, slaveId, requestMessage));
     }
     else
     {
         return(new SendNodeMangerMessage((byte)CompletionCode.InvalidDevice));
     }
 }
 /// <summary>
 /// Send sync Bridge Command
 /// </summary>
 /// <param name="channel">Channel to send command (Intel ME = 6)</param>
 /// <param name="slaveId">Channel Slave Id</param>
 /// <param name="messageData">Message payload</param>
 public virtual SendNodeMangerMessage SendNodeManagerRequest <T>(byte channel, byte slaveId, NodeManagerRequest requestMessage) where T : NodeManagerResponse
 {
     return(SendNodeManagerRequest(channel, slaveId, true, requestMessage, typeof(T)));
 }