617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*******************************************************************************
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Redistribution and use in source and binary forms, with or without
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * modification, are permitted provided that the following conditions are met:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions of source code must retain the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions in binary form must reproduce the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer in the documentation
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * and/or other materials provided with the distribution.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Neither the name of Intel Corp. nor the names of its
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * contributors may be used to endorse or promote products derived from this
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * software without specific prior written permission.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * POSSIBILITY OF SUCH DAMAGE.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *******************************************************************************/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#ifndef _AT_VERSION_TOOL_H_
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#define _AT_VERSION_TOOL_H_
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include <string>
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#include <list>
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganclass ATVersion
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan{
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganpublic:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /**
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan function check if user requested version information to be displayed on std output
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan and show version number
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param argc Argument count
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param argv Argument array
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param versionStr Version string to be displayed
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @return bool true if version user requested version to be displayed
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan false if version information was not displayed
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan static bool ShowVersionIfArg(int argc, const char **argv, const char *versionStr);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /**
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan function gets application version - if target application uses this class to show version
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param appName application name
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param version string returning version or empty string if version not determined
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @return true - if application is running, false - if not.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan static bool GetAppVersion(const char *appName, std::string &version);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /**
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan function gets process version - if target application uses this class to show version
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param cmd path to application
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @return string version or empty string if version not determined
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan static std::string GetProcessVersion(std::string cmd);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /**
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Checks if an application is running in the system.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param app_name Application binary name (not including path).
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param pids returned list of pids of searched application
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @return true - if application is running, false - if not.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan static bool IsAppRunning(const char *app_name, std::list<unsigned long> &pids);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /**
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Returns path associated with application with given PID. Note that to access this information for all processes
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan the function must be called with elevated privileges.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @param pid PID of application of interest.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan @return Application path if possible.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan Empty string if access is not possbile.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan NULL if the application isn't runnig.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan static std::string GetAppPathByPid(unsigned long pid);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan static const std::string appSearchPath;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan};
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#endif /* _AT_VERSION_TOOL_H_ */