public Contracts.SerialDataResponse ReceiveSerialPortData(int portID, string sessionToken) { Contracts.SerialDataResponse response = new Contracts.SerialDataResponse(); response.completionCode = Contracts.CompletionCode.Failure; this.portId = portID; Tracer.WriteInfo("Received ReceiveSerialPortConsoleData({0})", this.portId); // If there is NOT an already existing serial session (indicated by an invalid sessionToken), return failure with appropriate completion code if (CompareAndSwapMetadata(ConfigLoaded.InactiveSerialPortSessionToken, ConfigLoaded.InactiveSerialPortSessionToken) == CompletionCode.Success) { Tracer.WriteError("ReceiveSerialPortData({0}): Receive failed because of no active session.", portID); response.completionCode = Contracts.CompletionCode.NoActiveSerialSession; return(response); } // If this bladeid currently holds the serial session, update the timestamp else return failure if (this.CompareAndSwapMetadata(sessionToken, sessionToken, DateTime.Now) != CompletionCode.Success) { response.completionCode = Contracts.CompletionCode.SerialSessionActive; return(response); } SerialPortConsole currConsole = new SerialPortConsole((byte)portId); SerialDataPacket serialData = new SerialDataPacket(); serialData = currConsole.receiveSerialData(); if (serialData.completionCode != CompletionCode.Success) { // Common-case: lots of timeouts if device do not have any data to send over serial if (serialData.completionCode == CompletionCode.Timeout) { Tracer.WriteInfo("ReceiveSerialPortData({0}) Timeout in SerialConsolePort.receiveSerialData()", portId); response.completionCode = Contracts.CompletionCode.Timeout; return(response); } Tracer.WriteError("ReceiveSerialPortData({0}) Unknown Error in SerialConsolePort.receiveSerialData()", portId); return(response); } response.data = serialData.data; response.completionCode = Contracts.CompletionCode.Success; return(response); }
internal static Contracts.SerialDataResponse ReceiveBladeSerialData(int bladeId, string sessionToken) { Contracts.SerialDataResponse response = new Contracts.SerialDataResponse(); response.completionCode = Contracts.CompletionCode.Failure; Tracer.WriteInfo("BladeSerialSessionMetadata.ReceiveBladeSerialData({0})", bladeId); // If there is NOT an already existing Blade serial session (indicated by a invalid bladeId and a invalid sessionToken), return failure with appropriate completion code if (CompareAndSwapMetadata(ConfigLoaded.InactiveBladePortId, ConfigLoaded.InactiveBladeSerialSessionToken, ConfigLoaded.InactiveBladePortId, ConfigLoaded.InactiveBladeSerialSessionToken) == CompletionCode.Success) { Tracer.WriteError("ReceiveBladeSerialData({0}): Receive failed because of no active session.", bladeId); response.completionCode = Contracts.CompletionCode.NoActiveSerialSession; return(response); } // If this bladeid do not currently hold the serial session, return failure if (BladeSerialSessionMetadata.CompareAndSwapMetadata(bladeId, sessionToken, bladeId, sessionToken) != CompletionCode.Success) { response.completionCode = Contracts.CompletionCode.SerialSessionActive; return(response); } BladeSerialSession currSession = new BladeSerialSession((byte)bladeId); SerialDataPacket serialData = new SerialDataPacket(); serialData = currSession.receiveSerialData(); if (serialData.completionCode != CompletionCode.Success) { // Common-case: lots of timeouts if device do not have any data to send over serial if (serialData.completionCode == CompletionCode.Timeout) { Tracer.WriteInfo("BladeSerialSessionMetadata.ReceiveBladeSerialData({0}) Timeout in BladeSerialSession.receiveSerialData()", bladeId); response.completionCode = Contracts.CompletionCode.Timeout; return(response); } Tracer.WriteError("BladeSerialSessionMetadata.ReceiveBladeSerialData({0}) Error in BladeSerialSession.receiveSerialData()", bladeId); return(response); } response.data = serialData.data; response.completionCode = Contracts.CompletionCode.Success; return(response); }
public Contracts.SerialDataResponse ReceiveSerialPortData(int portID, string sessionToken) { Contracts.SerialDataResponse response = new Contracts.SerialDataResponse(); response.completionCode = Contracts.CompletionCode.Failure; this.portId = portID; Tracer.WriteInfo("Received ReceiveSerialPortConsoleData({0})", this.portId); // If there is NOT an already existing serial session (indicated by an invalid sessionToken), return failure with appropriate completion code if (CompareAndSwapMetadata(ConfigLoaded.InactiveSerialPortSessionToken, ConfigLoaded.InactiveSerialPortSessionToken) == CompletionCode.Success) { Tracer.WriteError("ReceiveSerialPortData({0}): Receive failed because of no active session.", portID); response.completionCode = Contracts.CompletionCode.NoActiveSerialSession; return response; } // If this bladeid currently holds the serial session, update the timestamp else return failure if (this.CompareAndSwapMetadata(sessionToken, sessionToken, DateTime.Now) != CompletionCode.Success) { response.completionCode = Contracts.CompletionCode.SerialSessionActive; return response; } SerialPortConsole currConsole = new SerialPortConsole((byte)portId); SerialDataPacket serialData = new SerialDataPacket(); serialData = currConsole.receiveSerialData(); if (serialData.completionCode != CompletionCode.Success) { // Common-case: lots of timeouts if device do not have any data to send over serial if (serialData.completionCode == CompletionCode.Timeout) { Tracer.WriteInfo("ReceiveSerialPortData({0}) Timeout in SerialConsolePort.receiveSerialData()", portId); response.completionCode = Contracts.CompletionCode.Timeout; return response; } Tracer.WriteError("ReceiveSerialPortData({0}) Unknown Error in SerialConsolePort.receiveSerialData()", portId); return response; } response.data = serialData.data; response.completionCode = Contracts.CompletionCode.Success; return response; }
internal static Contracts.SerialDataResponse ReceiveBladeSerialData(int bladeId, string sessionToken) { Contracts.SerialDataResponse response = new Contracts.SerialDataResponse(); response.completionCode = Contracts.CompletionCode.Failure; Tracer.WriteInfo("BladeSerialSessionMetadata.ReceiveBladeSerialData({0})", bladeId); // If there is NOT an already existing Blade serial session (indicated by a invalid bladeId and a invalid sessionToken), return failure with appropriate completion code if (CompareAndSwapMetadata(ConfigLoaded.InactiveBladePortId, ConfigLoaded.InactiveBladeSerialSessionToken, ConfigLoaded.InactiveBladePortId, ConfigLoaded.InactiveBladeSerialSessionToken) == CompletionCode.Success) { Tracer.WriteError("ReceiveBladeSerialData({0}): Receive failed because of no active session.", bladeId); response.completionCode = Contracts.CompletionCode.NoActiveSerialSession; return response; } // If this bladeid do not currently hold the serial session, return failure if (BladeSerialSessionMetadata.CompareAndSwapMetadata(bladeId, sessionToken, bladeId, sessionToken) != CompletionCode.Success) { response.completionCode = Contracts.CompletionCode.SerialSessionActive; return response; } BladeSerialSession currSession = new BladeSerialSession((byte)bladeId); SerialDataPacket serialData = new SerialDataPacket(); serialData = currSession.receiveSerialData(); if (serialData.completionCode != CompletionCode.Success) { // Common-case: lots of timeouts if device do not have any data to send over serial if (serialData.completionCode == CompletionCode.Timeout) { Tracer.WriteInfo("BladeSerialSessionMetadata.ReceiveBladeSerialData({0}) Timeout in BladeSerialSession.receiveSerialData()", bladeId); response.completionCode = Contracts.CompletionCode.Timeout; return response; } Tracer.WriteError("BladeSerialSessionMetadata.ReceiveBladeSerialData({0}) Error in BladeSerialSession.receiveSerialData()", bladeId); return response; } response.data = serialData.data; response.completionCode = Contracts.CompletionCode.Success; return response; }
/// <summary> /// Receives the blade serial data. /// </summary> /// <param name="bladeId">The blade identifier.</param> /// <param name="sessionToken">The session token.</param> /// <returns></returns> internal Contracts.SerialDataResponse ReceiveBladeSerialData(int bladeId, string sessionToken) { Contracts.SerialDataResponse response = new Contracts.SerialDataResponse(); response.completionCode = Contracts.CompletionCode.Failure; Tracer.WriteInfo("BladeSerialSessionMetadata.ReceiveBladeSerialData(bladeId: {0})", bladeId); // If there is NOT an already existing Blade serial session (indicated by invalid sessionToken), // return failure with appropriate completion code if (CompareAndSwapMetadata(inactiveBladeSerialSessionToken, inactiveBladeSerialSessionToken) == CompletionCode.Success) { Tracer.WriteError("BladeSerialSessionMetadata.ReceiveBladeSerialData(bladeId: {0}): " + "Receive failed because of no active session.", bladeId); response.completionCode = Contracts.CompletionCode.NoActiveSerialSession; return response; } // If this blade Id does not currently hold the serial session, return failure if (CompareAndSwapMetadata(sessionToken, sessionToken) != CompletionCode.Success) { Tracer.WriteError("BladeSerialSessionMetadata.ReceiveBladeSerialData(bladeId: {0}): " + "Receive failed because session token provided does not match blade token.", bladeId); response.completionCode = Contracts.CompletionCode.SerialSessionActive; return response; } // Read serial data from the blade Ipmi.ReceiveSerialData receiveSerial = WcsBladeFacade.ReceiveSerialData((byte)bladeId, readSerialDataBufferLength); if (receiveSerial.CompletionCode == noSessionActive) { Tracer.WriteError("BladeSerialSessionMetadata.ReceiveBladeSerialData(bladeId: {0}): " + "BMC has no active serial session.", bladeId); response.completionCode = Contracts.CompletionCode.NoActiveSerialSession; return response; } else if (receiveSerial.CompletionCode == bmcBufferOverflow) { Tracer.WriteWarning("BladeSerialSessionMetadata.ReceiveBladeSerialData(bladeId: {0}): " + "BMC buffer has overflowed.", bladeId); response.completionCode = Contracts.CompletionCode.BmcRxSerialBufferOverflow; response.statusDescription = "BMC buffer overflow occurred."; return response; } else if (receiveSerial.CompletionCode != (byte)CompletionCode.Success) { Tracer.WriteError("BladeSerialSessionMetadata.ReceiveBladeSerialData(bladeId: {0}): Error. Completion Code: {1}", bladeId, receiveSerial.CompletionCode); return response; } response.data = receiveSerial.Payload; response.completionCode = Contracts.CompletionCode.Success; return response; }