// This function should be called before executing any service APIs // TODO: Add other checks that needs to be done before executing APIs - like check for chassis terminating etc internal static CompletionCode ApiGreenSignalling() { CompletionCode response = new CompletionCode(); response = CompletionCode.UnspecifiedError; int currBladeId = bladeId; // Return Success if there is no active serial console session in progress if (!BladeSerialSessionMetadata.IsSerialConsoleSessionActive()) { response = CompletionCode.Success; return(response); } // If App.config parameter, KillSerialConsoleSession, is enabled, // terminate existing serial console session and proceed executing incoming commmands. if (ConfigLoaded.KillSerialConsoleSession) { response = CompletionCode.UnspecifiedError; Tracer.WriteInfo("Kill serial console session is enabled to allow incoming commands to succeed."); Contracts.ChassisResponse sessionResponse = new Contracts.ChassisResponse(); sessionResponse = StopBladeSerialSession(ConfigLoaded.InactiveBladePortId, ConfigLoaded.InactiveBladeSerialSessionToken, true); if (sessionResponse.completionCode != Contracts.CompletionCode.Success) { Tracer.WriteError("BladeSerialSessionMetadata.ApiGreenSignalling:Error stopserialsession failed"); return(response); } response = CompletionCode.Success; return(response); } // If App.config parameter, KillSerialConsoleSession, is not enabled, maintain existing serial console session, // and ignore incoming commands, with explicit failure message output as warning in trace, since it will not // affect service correctness. else { response = CompletionCode.SerialPortOtherErrors; Tracer.WriteWarning("Serial console session in progress. Ignore incoming command with message:{0}", response); // We are returning non-Success completion code (represented as SerialPortOtherErrors) // to indicate/trigger the failure of this incoming command. return(response); } }