예제 #1
0
        public static string FormatSdbRunResult(SdbRunResult commandResult, int?exitCode = null)
        {
            string msg;

            switch (commandResult)
            {
            case SdbRunResult.Success:
                if (exitCode.HasValue && (exitCode != 0) && (exitCode != -1))
                {
                    msg = $"SDB exit code is {exitCode}";
                }
                else
                {
                    msg = "";
                }
                break;

            case SdbRunResult.CreateProcessError:
                msg = "Failed to get sdb.exe program";
                break;

            case SdbRunResult.RunProcessError:
                msg = "SDB run error";
                break;

            case SdbRunResult.Timeout:
                msg = "SDB timeout";
                break;

            default:
                msg = "SDB error";
                break;
            }
            return(msg);
        }
예제 #2
0
        public static bool RunSdbCommandAndGetLastNonEmptyLine(SDBDeviceInfo device, string сommand,
                                                               out string lastOutputLine, out string errorMessage, TimeSpan?timeout = null)
        {
            lastOutputLine = "";
            string       nonEmptyLine = "";
            int          exitCode;
            SdbRunResult sdbResult = RunSdbCommand(device, сommand,
                                                   (bool isStdOut, string line) =>
            {
                if (line != "")
                {
                    nonEmptyLine = line;
                }
                return(false);
            },
                                                   out exitCode, timeout);

            if (sdbResult == SdbRunResult.Success)
            {
                lastOutputLine = nonEmptyLine;
                errorMessage   = "";
                return(true);
            }

            errorMessage = "Cannot run command. " + FormatSdbRunResult(sdbResult, exitCode);
            return(false);
        }
예제 #3
0
        public static bool RunSdbShellCommandAndCheckExitStatus(SDBDeviceInfo device, string shellCommand,
                                                                OutputDataProcessor outputDataProcessor, out string errorMessage, TimeSpan?timeout = null, bool isRoot = false)
        {
            int          exitCode;
            bool         success   = false;
            SdbRunResult sdbResult = RunSdbCommand(device,
                                                   $"shell \"{shellCommand} && echo {ShellSuccess} || echo {ShellFailure}\"",
                                                   (bool isStdOut, string line) =>
            {
                if (line.Contains(ShellSuccess))
                {
                    success = true;
                    return(true);
                }
                if (line.Contains(ShellFailure))
                {
                    return(true);
                }
                if (outputDataProcessor != null)
                {
                    if (outputDataProcessor(isStdOut, line))
                    {
                        success = true;
                        return(true);
                    }
                }
                return(false);
            },
                                                   out exitCode, timeout, isRoot);

            if (sdbResult == SdbRunResult.Success)
            {
                if (!success)
                {
                    errorMessage = "Command failed";
                    return(false);
                }
                errorMessage = "";
                return(true);
            }

            errorMessage = "Cannot run command. " + FormatSdbRunResult(sdbResult, exitCode);
            return(false);
        }
예제 #4
0
        public static bool CheckIsRoot(SDBDeviceInfo device, out bool isRoot, out string errorMessage, TimeSpan?timeout = null)
        {
            string checkIsRootScript = $"if [ $UID == 0 ]; then echo {ShellSuccess}; else echo {ShellFailure}; fi";

            isRoot = false;
            bool         result  = false;
            bool         success = false;
            int          exitCode;
            SdbRunResult sdbResult = RunSdbCommand(device, $"shell \"{checkIsRootScript}\"",
                                                   (bool isStdOut, string line) =>
            {
                if (line.Contains(ShellSuccess))
                {
                    result  = true;
                    success = true;
                    return(true);
                }
                if (line.Contains(ShellFailure))
                {
                    success = true;
                    return(true);
                }
                return(false);
            },
                                                   out exitCode, timeout, false);

            if (sdbResult == SdbRunResult.Success)
            {
                if (!success)
                {
                    errorMessage = "Command failed";
                    return(false);
                }
                isRoot       = result;
                errorMessage = "";
                return(true);
            }

            errorMessage = "Cannot run command. " + FormatSdbRunResult(sdbResult, exitCode);
            return(false);
        }