#6734 Added new cmd option --tls-cert

- Moved ArgsBase, ClientArgs, and ServerArgs to own namespace
 - Added some Documentation to Args classes

Signed-off-by: Jamie Newbon <jamie@symless.com>
This commit is contained in:
Jamie Newbon 2020-07-27 13:29:58 +01:00
parent 28d376e7f0
commit 6684b8b09f
26 changed files with 250 additions and 180 deletions

View file

@ -56,7 +56,7 @@ Client::Client(
const String& name, const NetworkAddress& address, const String& name, const NetworkAddress& address,
ISocketFactory* socketFactory, ISocketFactory* socketFactory,
synergy::Screen* screen, synergy::Screen* screen,
ClientArgs const& args) : lib::synergy::ClientArgs const& args) :
m_mock(false), m_mock(false),
m_name(name), m_name(name),
m_serverAddress(address), m_serverAddress(address),

View file

@ -59,7 +59,7 @@ public:
*/ */
Client(IEventQueue* events, const String& name, Client(IEventQueue* events, const String& name,
const NetworkAddress& address, ISocketFactory* socketFactory, const NetworkAddress& address, ISocketFactory* socketFactory,
synergy::Screen* screen, ClientArgs const& args); synergy::Screen* screen, lib::synergy::ClientArgs const& args);
~Client(); ~Client();
@ -222,7 +222,7 @@ private:
Thread* m_writeToDropDirThread; Thread* m_writeToDropDirThread;
TCPSocket* m_socket; TCPSocket* m_socket;
bool m_useSecureNetwork; bool m_useSecureNetwork;
ClientArgs m_args;
bool m_enableClipboard; bool m_enableClipboard;
size_t m_maximumClipboardSize; size_t m_maximumClipboardSize;
lib::synergy::ClientArgs m_args;
}; };

View file

@ -22,6 +22,8 @@
#include "net/SocketMultiplexer.h" #include "net/SocketMultiplexer.h"
#include "net/TSocketMultiplexerMethodJob.h" #include "net/TSocketMultiplexerMethodJob.h"
#include "arch/XArch.h" #include "arch/XArch.h"
#include "synergy/ArgParser.h"
#include "synergy/ArgsBase.h"
static const char s_certificateDir[] = { "SSL" }; static const char s_certificateDir[] = { "SSL" };
static const char s_certificateFilename[] = { "Synergy.pem" }; static const char s_certificateFilename[] = { "Synergy.pem" };
@ -53,10 +55,16 @@ SecureListenSocket::accept()
setListeningJob(); setListeningJob();
} }
//default location of the TLS cert file in users dir
String certificateFilename = synergy::string::sprintf("%s/%s/%s", String certificateFilename = synergy::string::sprintf("%s/%s/%s",
ARCH->getProfileDirectory().c_str(), ARCH->getProfileDirectory().c_str(),
s_certificateDir, s_certificateDir,
s_certificateFilename); s_certificateFilename);
//if the tls cert option is set use that for the certificate file
if (!ArgParser::argsBase().m_tlsCertFile.empty()) {
certificateFilename = ArgParser::argsBase().m_tlsCertFile;
}
bool loaded = socket->loadCertificates(certificateFilename); bool loaded = socket->loadCertificates(certificateFilename);
if (!loaded) { if (!loaded) {

View file

@ -62,7 +62,7 @@ Server::Server(
PrimaryClient* primaryClient, PrimaryClient* primaryClient,
synergy::Screen* screen, synergy::Screen* screen,
IEventQueue* events, IEventQueue* events,
ServerArgs const& args) : lib::synergy::ServerArgs const& args) :
m_mock(false), m_mock(false),
m_primaryClient(primaryClient), m_primaryClient(primaryClient),
m_active(primaryClient), m_active(primaryClient),

View file

@ -107,7 +107,7 @@ public:
ownership of \p primaryClient. ownership of \p primaryClient.
*/ */
Server(Config& config, PrimaryClient* primaryClient, Server(Config& config, PrimaryClient* primaryClient,
synergy::Screen* screen, IEventQueue* events, ServerArgs const& args); synergy::Screen* screen, IEventQueue* events, lib::synergy::ServerArgs const& args);
~Server(); ~Server();
#ifdef TEST_ENV #ifdef TEST_ENV
@ -481,5 +481,5 @@ private:
bool m_waitDragInfoThread; bool m_waitDragInfoThread;
ClientListener* m_clientListener; ClientListener* m_clientListener;
ServerArgs m_args; lib::synergy::ServerArgs m_args;
}; };

View file

@ -58,7 +58,7 @@ App* App::s_instance = nullptr;
// App // App
// //
App::App(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver, ArgsBase* args) : App::App(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver, lib::synergy::ArgsBase* args) :
m_bye(&exit), m_bye(&exit),
m_taskBarReceiver(NULL), m_taskBarReceiver(NULL),
m_suspended(false), m_suspended(false),
@ -266,7 +266,7 @@ App::runEventsLoop(void*)
// //
MinimalApp::MinimalApp() : MinimalApp::MinimalApp() :
App(NULL, NULL, new ArgsBase()) App(NULL, NULL, new lib::synergy::ArgsBase())
{ {
m_arch.init(); m_arch.init();
setEvents(m_events); setEvents(m_events);

View file

@ -43,11 +43,11 @@ typedef IArchTaskBarReceiver* (*CreateTaskBarReceiverFunc)(const BufferedLogOutp
class App : public IApp { class App : public IApp {
public: public:
App(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver, ArgsBase* args); App(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver, lib::synergy::ArgsBase* args);
virtual ~App(); virtual ~App();
// Returns args that are common between server and client. // Returns args that are common between server and client.
ArgsBase& argsBase() const { return *m_args; } lib::synergy::ArgsBase& argsBase() const { return *m_args; }
// Prints the current compiled version. // Prints the current compiled version.
virtual void version(); virtual void version();
@ -113,7 +113,7 @@ protected:
IEventQueue* m_events; IEventQueue* m_events;
private: private:
ArgsBase* m_args; lib::synergy::ArgsBase* m_args;
static App* s_instance; static App* s_instance;
FileLogOutputter* m_fileLog; FileLogOutputter* m_fileLog;
CreateTaskBarReceiverFunc m_createTaskBarReceiver; CreateTaskBarReceiverFunc m_createTaskBarReceiver;
@ -164,7 +164,8 @@ private:
" -l --log <file> write log messages to file.\n" \ " -l --log <file> write log messages to file.\n" \
" --no-tray disable the system tray icon.\n" \ " --no-tray disable the system tray icon.\n" \
" --enable-drag-drop enable file drag & drop.\n" \ " --enable-drag-drop enable file drag & drop.\n" \
" --enable-crypto enable the crypto (ssl) plugin.\n" " --enable-crypto enable the crypto (ssl) plugin.\n" \
" --tls-cert specify the path to the tls certificate file.\n"
#define HELP_COMMON_INFO_2 \ #define HELP_COMMON_INFO_2 \
" -h, --help display this help and exit.\n" \ " -h, --help display this help and exit.\n" \

View file

@ -29,8 +29,8 @@
#ifdef WINAPI_MSWINDOWS #ifdef WINAPI_MSWINDOWS
#include <VersionHelpers.h> #include <VersionHelpers.h>
#endif #endif
ArgsBase* ArgParser::m_argsBase = NULL; lib::synergy::ArgsBase* ArgParser::m_argsBase = NULL;
ArgParser::ArgParser(App* app) : ArgParser::ArgParser(App* app) :
m_app(app) m_app(app)
@ -38,7 +38,7 @@ ArgParser::ArgParser(App* app) :
} }
bool bool
ArgParser::parseServerArgs(ServerArgs& args, int argc, const char* const* argv) ArgParser::parseServerArgs(lib::synergy::ServerArgs& args, int argc, const char* const* argv)
{ {
setArgsBase(args); setArgsBase(args);
updateCommonArgs(argv); updateCommonArgs(argv);
@ -78,7 +78,7 @@ ArgParser::parseServerArgs(ServerArgs& args, int argc, const char* const* argv)
} }
bool bool
ArgParser::parseClientArgs(ClientArgs& args, int argc, const char* const* argv) ArgParser::parseClientArgs(lib::synergy::ClientArgs& args, int argc, const char* const* argv)
{ {
setArgsBase(args); setArgsBase(args);
updateCommonArgs(argv); updateCommonArgs(argv);
@ -130,7 +130,7 @@ ArgParser::parseClientArgs(ClientArgs& args, int argc, const char* const* argv)
} }
bool bool
ArgParser::parsePlatformArg(ArgsBase& argsBase, const int& argc, const char* const* argv, int& i) ArgParser::parsePlatformArg(lib::synergy::ArgsBase& argsBase, const int& argc, const char* const* argv, int& i)
{ {
#if WINAPI_MSWINDOWS #if WINAPI_MSWINDOWS
if (isArg(i, argc, argv, NULL, "--service")) { if (isArg(i, argc, argv, NULL, "--service")) {
@ -290,6 +290,9 @@ ArgParser::parseGenericArgs(int argc, const char* const* argv, int& i)
else if (isArg(i, argc, argv, NULL, "--plugin-dir", 1)) { else if (isArg(i, argc, argv, NULL, "--plugin-dir", 1)) {
argsBase().m_pluginDirectory = argv[++i]; argsBase().m_pluginDirectory = argv[++i];
} }
else if (isArg(i, argc, argv, NULL, "--tls-cert", 1)) {
argsBase().m_tlsCertFile = argv[++i];
}
else { else {
// option not supported here // option not supported here
return false; return false;

View file

@ -20,10 +20,15 @@
#include "base/String.h" #include "base/String.h"
#include "common/stdvector.h" #include "common/stdvector.h"
class ServerArgs; namespace lib {
class ClientArgs; namespace synergy {
class ArgsBase;
class ServerArgs;
class ClientArgs;
}
}
class ToolArgs; class ToolArgs;
class ArgsBase;
class App; class App;
class ArgParser { class ArgParser {
@ -31,13 +36,13 @@ class ArgParser {
public: public:
ArgParser(App* app); ArgParser(App* app);
bool parseServerArgs(ServerArgs& args, int argc, const char* const* argv); bool parseServerArgs(lib::synergy::ServerArgs& args, int argc, const char* const* argv);
bool parseClientArgs(ClientArgs& args, int argc, const char* const* argv); bool parseClientArgs(lib::synergy::ClientArgs& args, int argc, const char* const* argv);
bool parsePlatformArg(ArgsBase& argsBase, const int& argc, const char* const* argv, int& i); bool parsePlatformArg(lib::synergy::ArgsBase& argsBase, const int& argc, const char* const* argv, int& i);
bool parseToolArgs(ToolArgs& args, int argc, const char* const* argv); bool parseToolArgs(ToolArgs& args, int argc, const char* const* argv);
bool parseGenericArgs(int argc, const char* const* argv, int& i); bool parseGenericArgs(int argc, const char* const* argv, int& i);
bool parseDeprecatedArgs(int argc, const char* const* argv, int& i); bool parseDeprecatedArgs(int argc, const char* const* argv, int& i);
void setArgsBase(ArgsBase& argsBase) { m_argsBase = &argsBase; } void setArgsBase(lib::synergy::ArgsBase& argsBase) { m_argsBase = &argsBase; }
static bool isArg(int argi, int argc, const char* const* argv, static bool isArg(int argi, int argc, const char* const* argv,
const char* name1, const char* name2, const char* name1, const char* name2,
@ -50,14 +55,15 @@ public:
static String assembleCommand(std::vector<String>& argsArray, static String assembleCommand(std::vector<String>& argsArray,
String ignoreArg = "", int parametersRequired = 0); String ignoreArg = "", int parametersRequired = 0);
static lib::synergy::ArgsBase& argsBase() { return *m_argsBase; }
private: private:
void updateCommonArgs(const char* const* argv); void updateCommonArgs(const char* const* argv);
bool checkUnexpectedArgs(); bool checkUnexpectedArgs();
static ArgsBase& argsBase() { return *m_argsBase; }
private: private:
App* m_app; App* m_app;
static ArgsBase* m_argsBase; static lib::synergy::ArgsBase* m_argsBase;
}; };

View file

@ -1,6 +1,6 @@
/* /*
* synergy -- mouse and keyboard sharing utility * synergy -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2012-2020 Symless Ltd.
* Copyright (C) 2012 Nick Bolton * Copyright (C) 2012 Nick Bolton
* *
* This package is free software; you can redistribute it and/or * This package is free software; you can redistribute it and/or
@ -16,38 +16,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "synergy/ArgsBase.h" #include "ArgsBase.h"
ArgsBase::ArgsBase() : namespace lib {
#if SYSAPI_WIN32 namespace synergy {
m_daemon(false), // daemon mode not supported on windows (use --service) ArgsBase::~ArgsBase() {
m_debugServiceWait(false), //
m_pauseOnExit(false), }
m_stopOnDeskSwitch(false), }
#else }
m_daemon(true), // backward compatibility for unix (daemon by default)
#endif
#if WINAPI_XWINDOWS
m_disableXInitThreads(false),
#endif
m_backend(false),
m_restartable(true),
m_noHooks(false),
m_pname(NULL),
m_logFilter(NULL),
m_logFile(NULL),
m_display(NULL),
m_disableTray(false),
m_enableIpc(false),
m_enableDragDrop(false),
m_shouldExit(false),
m_synergyAddress(),
m_enableCrypto(false),
m_profileDirectory(""),
m_pluginDirectory("")
{
}
ArgsBase::~ArgsBase()
{
}

View file

@ -1,6 +1,6 @@
/* /*
* synergy -- mouse and keyboard sharing utility * synergy -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2012-2020 Symless Ltd.
* Copyright (C) 2012 Nick Bolton * Copyright (C) 2012 Nick Bolton
* *
* This package is free software; you can redistribute it and/or * This package is free software; you can redistribute it and/or
@ -16,39 +16,65 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once
#ifndef SYNERGY_CORE_ARGSBASE_H
#define SYNERGY_CORE_ARGSBASE_H
#include "base/String.h" #include "base/String.h"
class ArgsBase { namespace lib {
public: namespace synergy {
ArgsBase(); /**
virtual ~ArgsBase(); * @brief This is the base Argument class that will store the generic
* arguments passed into the applications this will be derived
* from and expanded to include application specific arguments
*/
class ArgsBase {
public:
ArgsBase() = default;
virtual ~ArgsBase();
/// @brief This sets the type of the derived class
enum Type { kBase, kServer, kClient };
Type m_classType = kBase; /// @brief Stores what type of object this is
bool m_daemon = true; /// @brief Should run as a daemon
bool m_backend = false; /// @brief //TODO Unsure what this is used for
bool m_restartable = true; /// @brief Should the app restart automatically
bool m_noHooks = false; /// @brief Should the app use hooks
const char* m_pname = nullptr; /// @brief The filename of the running process
const char* m_logFilter = nullptr; /// @brief The logging level of the application
const char* m_logFile = nullptr; /// @brief The full path to the logfile
const char* m_display = nullptr; /// @brief Contains the X-Server display to use
String m_name; /// @brief The name of the current computer
bool m_disableTray = false; /// @brief Should the app add a tray icon
bool m_enableIpc = false; /// @brief Tell the client to talk through IPC to the daemon
bool m_enableDragDrop = false; /// @brief Should drag drop support be enabled
bool m_shouldExit = false; /// @brief Will cause the application to exit when set to true
String m_synergyAddress; /// @brief Bind to this address //TODO This really should be a ServerArgs
bool m_enableCrypto = false; /// @brief Should the connections be TLS encrypted
String m_profileDirectory; /// @brief The profile DIR to use for the application
String m_pluginDirectory; /// @brief //TODO Plugins? Get set in ARCH but doesn't seem to get used
String m_tlsCertFile; /// @brief Contains the location of the TLS certificate file
public:
bool m_daemon;
bool m_backend;
bool m_restartable;
bool m_noHooks;
const char* m_pname;
const char* m_logFilter;
const char* m_logFile;
const char* m_display;
String m_name;
bool m_disableTray;
bool m_enableIpc;
bool m_enableDragDrop;
#if SYSAPI_WIN32 #if SYSAPI_WIN32
bool m_debugServiceWait; bool m_debugServiceWait = false;
bool m_pauseOnExit; bool m_pauseOnExit = false;
bool m_stopOnDeskSwitch; bool m_stopOnDeskSwitch = false;
#endif #endif
#if WINAPI_XWINDOWS #if WINAPI_XWINDOWS
bool m_disableXInitThreads; bool m_disableXInitThreads = false;
#endif #endif
bool m_shouldExit;
String m_synergyAddress; protected:
bool m_enableCrypto;
String m_profileDirectory; /// @brief deletes pointers and sets the value to null
String m_pluginDirectory; template<class T> static inline void destroy(T*& p) { delete p; p = 0; }
};
};
}
}
#endif //SYNERGY_CORE_ARGSBASE_H

View file

@ -63,7 +63,7 @@
#define RETRY_TIME 1.0 #define RETRY_TIME 1.0
ClientApp::ClientApp(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver) : ClientApp::ClientApp(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver) :
App(events, createTaskBarReceiver, new ClientArgs()), App(events, createTaskBarReceiver, new lib::synergy::ClientArgs()),
m_client(NULL), m_client(NULL),
m_clientScreen(NULL), m_clientScreen(NULL),
m_serverAddress(NULL) m_serverAddress(NULL)

View file

@ -25,7 +25,11 @@ class Event;
class Client; class Client;
class NetworkAddress; class NetworkAddress;
class Thread; class Thread;
class ClientArgs; namespace lib {
namespace synergy {
class ClientArgs;
}
}
class ClientApp : public App { class ClientApp : public App {
public: public:
@ -39,7 +43,7 @@ public:
void help(); void help();
// Returns arguments that are common and for client. // Returns arguments that are common and for client.
ClientArgs& args() const { return (ClientArgs&)argsBase(); } lib::synergy::ClientArgs& args() const { return (lib::synergy::ClientArgs&)argsBase(); }
const char* daemonName() const; const char* daemonName() const;
const char* daemonInfo() const; const char* daemonInfo() const;

View file

@ -15,9 +15,17 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "synergy/ClientArgs.h" #include "ClientArgs.h"
ClientArgs::ClientArgs() : namespace lib {
m_yscroll(0) namespace synergy {
{
} ClientArgs::~ClientArgs() {
}
ClientArgs::ClientArgs() {
m_classType = kClient;
}
}
}

View file

@ -15,16 +15,28 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #ifndef SYNERGY_CORE_CLIENTARGS_H
#define SYNERGY_CORE_CLIENTARGS_H
#include "synergy/ArgsBase.h" #include "ArgsBase.h"
class NetworkAddress;
class ClientArgs : public ArgsBase { namespace lib {
public: namespace synergy {
ClientArgs(); class ClientArgs : public ArgsBase {
public: /// Public functions
int m_yscroll; public:
}; ClientArgs();
~ClientArgs() override;
public:
int m_yscroll = 0;
private:
};
}
}
#endif //SYNERGY_CORE_CLIENTARGS_H

View file

@ -308,24 +308,23 @@ DaemonApp::handleIpcMessage(const Event& e, void*)
ArgParser::splitCommandString(command, argsArray); ArgParser::splitCommandString(command, argsArray);
ArgParser argParser(NULL); ArgParser argParser(NULL);
const char** argv = argParser.getArgv(argsArray); const char** argv = argParser.getArgv(argsArray);
ServerArgs serverArgs;
ClientArgs clientArgs;
int argc = static_cast<int>(argsArray.size()); int argc = static_cast<int>(argsArray.size());
bool server = argsArray[0].find("synergys") != String::npos ? true : false; bool server = argsArray[0].find("synergys") != String::npos;
ArgsBase* argBase = NULL;
if (server) { if (server) {
argParser.parseServerArgs(serverArgs, argc, argv); auto serverArgs = new lib::synergy::ServerArgs();
argBase = &serverArgs; argParser.parseServerArgs(*serverArgs, argc, argv);
} }
else { else {
argParser.parseClientArgs(clientArgs, argc, argv); auto clientArgs = new lib::synergy::ClientArgs();
argBase = &clientArgs; argParser.parseClientArgs(*clientArgs, argc, argv);
} }
delete[] argv; delete[] argv;
String logLevel(ArgParser::argsBase().m_logFilter);
String logLevel(argBase->m_logFilter);
if (!logLevel.empty()) { if (!logLevel.empty()) {
try { try {
// change log level based on that in the command string // change log level based on that in the command string

View file

@ -22,8 +22,13 @@
typedef int (*StartupFunc)(int, char**); typedef int (*StartupFunc)(int, char**);
namespace lib {
namespace synergy {
class ArgsBase;
}
}
class ILogOutputter; class ILogOutputter;
class ArgsBase;
class IArchTaskBarReceiver; class IArchTaskBarReceiver;
namespace synergy { class Screen; } namespace synergy { class Screen; }
class IEventQueue; class IEventQueue;
@ -32,7 +37,7 @@ class IApp : public IInterface
{ {
public: public:
virtual void setByeFunc(void(*bye)(int)) = 0; virtual void setByeFunc(void(*bye)(int)) = 0;
virtual ArgsBase& argsBase() const = 0; virtual lib::synergy::ArgsBase& argsBase() const = 0;
virtual int standardStartup(int argc, char** argv) = 0; virtual int standardStartup(int argc, char** argv) = 0;
virtual int runInner(int argc, char** argv, ILogOutputter* outputter, StartupFunc startup) = 0; virtual int runInner(int argc, char** argv, ILogOutputter* outputter, StartupFunc startup) = 0;
virtual void startNode() = 0; virtual void startNode() = 0;

View file

@ -65,7 +65,7 @@
// //
ServerApp::ServerApp(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver) : ServerApp::ServerApp(IEventQueue* events, CreateTaskBarReceiverFunc createTaskBarReceiver) :
App(events, createTaskBarReceiver, new ServerArgs()), App(events, createTaskBarReceiver, new lib::synergy::ServerArgs()),
m_server(NULL), m_server(NULL),
m_serverState(kUninitialized), m_serverState(kUninitialized),
m_serverScreen(NULL), m_serverScreen(NULL),

View file

@ -45,7 +45,11 @@ class ClientListener;
class EventQueueTimer; class EventQueueTimer;
class ILogOutputter; class ILogOutputter;
class IEventQueue; class IEventQueue;
class ServerArgs; namespace lib {
namespace synergy{
class ServerArgs;
}
}
class ServerApp : public App { class ServerApp : public App {
public: public:
@ -59,7 +63,7 @@ public:
void help(); void help();
// Returns arguments that are common and for server. // Returns arguments that are common and for server.
ServerArgs& args() const { return (ServerArgs&)argsBase(); } lib::synergy::ServerArgs& args() const { return (lib::synergy::ServerArgs&)argsBase(); }
const char* daemonName() const; const char* daemonName() const;
const char* daemonInfo() const; const char* daemonInfo() const;

View file

@ -1,6 +1,6 @@
/* /*
* synergy -- mouse and keyboard sharing utility * synergy -- mouse and keyboard sharing utility
* Copyright (C) 2014-2016 Symless Ltd. * Copyright (C) 2014-2020 Symless Ltd.
* *
* This package is free software; you can redistribute it and/or * This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -15,12 +15,20 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "synergy/ServerArgs.h" #include "ServerArgs.h"
ServerArgs::ServerArgs() : namespace lib {
m_configFile(), namespace synergy {
m_serial(),
m_config(NULL) ServerArgs::~ServerArgs() {
{ destroy(m_config);
}
ServerArgs::ServerArgs() {
m_classType = kServer;
}
}
} }

View file

@ -1,6 +1,6 @@
/* /*
* synergy -- mouse and keyboard sharing utility * synergy -- mouse and keyboard sharing utility
* Copyright (C) 2014-2016 Symless Ltd. * Copyright (C) 2014-2020 Symless Ltd.
* *
* This package is free software; you can redistribute it and/or * This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -15,20 +15,32 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #ifndef SYNERGY_CORE_SERVERARGS_H
#define SYNERGY_CORE_SERVERARGS_H
#include "synergy/ArgsBase.h" #include "ArgsBase.h"
#include "shared/SerialKey.h" #include "shared/SerialKey.h"
#include "server/Config.h"
class NetworkAddress; namespace lib {
class Config; namespace synergy {
class ServerArgs : public ArgsBase {
/// Public Functions
public:
ServerArgs();
~ServerArgs() override;
class ServerArgs : public ArgsBase { /// Public variables
public: public:
ServerArgs(); String m_configFile = ""; /// @brief Contains the path to the config file
SerialKey m_serial; /// @brief Contains the serial number and license info
Config* m_config = nullptr; /// @brief Contains the Parsed Configuration settings
public: /// Private Functions
String m_configFile; private:
SerialKey m_serial;
Config* m_config;
}; };
}
}
#endif //SYNERGY_CORE_SERVERARGS_H

View file

@ -128,8 +128,8 @@ TEST_F(NetworkTests, sendToClient_mockData)
ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true));
ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter)); ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter));
ServerArgs serverArgs; lib::synergy::ServerArgs serverArgs;
serverArgs.m_enableDragDrop = true; serverArgs.m_enableDragDrop = true;
Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs);
server.m_mock = true; server.m_mock = true;
@ -144,7 +144,7 @@ TEST_F(NetworkTests, sendToClient_mockData)
ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
clientArgs.m_enableDragDrop = true; clientArgs.m_enableDragDrop = true;
clientArgs.m_enableCrypto = false; clientArgs.m_enableCrypto = false;
Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs);
@ -186,8 +186,8 @@ TEST_F(NetworkTests, sendToClient_mockFile)
ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true));
ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter)); ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter));
ServerArgs serverArgs; lib::synergy::ServerArgs serverArgs;
serverArgs.m_enableDragDrop = true; serverArgs.m_enableDragDrop = true;
Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs);
server.m_mock = true; server.m_mock = true;
@ -202,7 +202,7 @@ TEST_F(NetworkTests, sendToClient_mockFile)
ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
clientArgs.m_enableDragDrop = true; clientArgs.m_enableDragDrop = true;
clientArgs.m_enableCrypto = false; clientArgs.m_enableCrypto = false;
Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs);
@ -238,8 +238,8 @@ TEST_F(NetworkTests, sendToServer_mockData)
ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true));
ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter)); ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter));
ServerArgs serverArgs; lib::synergy::ServerArgs serverArgs;
serverArgs.m_enableDragDrop = true; serverArgs.m_enableDragDrop = true;
Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs);
server.m_mock = true; server.m_mock = true;
@ -253,7 +253,7 @@ TEST_F(NetworkTests, sendToServer_mockData)
ON_CALL(clientScreen, getShape(_, _, _, _)).WillByDefault(Invoke(getScreenShape)); ON_CALL(clientScreen, getShape(_, _, _, _)).WillByDefault(Invoke(getScreenShape));
ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
clientArgs.m_enableDragDrop = true; clientArgs.m_enableDragDrop = true;
clientArgs.m_enableCrypto = false; clientArgs.m_enableCrypto = false;
Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs);
@ -295,8 +295,8 @@ TEST_F(NetworkTests, sendToServer_mockFile)
ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true)); ON_CALL(serverConfig, isScreen(_)).WillByDefault(Return(true));
ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter)); ON_CALL(serverConfig, getInputFilter()).WillByDefault(Return(&serverInputFilter));
ServerArgs serverArgs; lib::synergy::ServerArgs serverArgs;
serverArgs.m_enableDragDrop = true; serverArgs.m_enableDragDrop = true;
Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs); Server server(serverConfig, &primaryClient, &serverScreen, &m_events, serverArgs);
server.m_mock = true; server.m_mock = true;
@ -310,7 +310,7 @@ TEST_F(NetworkTests, sendToServer_mockFile)
ON_CALL(clientScreen, getShape(_, _, _, _)).WillByDefault(Invoke(getScreenShape)); ON_CALL(clientScreen, getShape(_, _, _, _)).WillByDefault(Invoke(getScreenShape));
ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos)); ON_CALL(clientScreen, getCursorPos(_, _)).WillByDefault(Invoke(getCursorPos));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
clientArgs.m_enableDragDrop = true; clientArgs.m_enableDragDrop = true;
clientArgs.m_enableCrypto = false; clientArgs.m_enableCrypto = false;
Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs); Client client(&m_events, "stub", serverAddress, clientSocketFactory, &clientScreen, clientArgs);

View file

@ -46,7 +46,7 @@ TEST(ArgParserTests, isArg_missingArgs_returnFalse)
const int argc = 2; const int argc = 2;
const char* argv[argc] = { "stub", "-t" }; const char* argv[argc] = { "stub", "-t" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
bool result = ArgParser::isArg(i, argc, argv, "-t", NULL, 1); bool result = ArgParser::isArg(i, argc, argv, "-t", NULL, 1);

View file

@ -42,7 +42,7 @@ TEST(ClientArgsParsingTests, parseClientArgs_yScrollArg_setYScroll)
NiceMock<MockArgParser> argParser; NiceMock<MockArgParser> argParser;
ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs)); ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs));
ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs)); ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
const int argc = 3; const int argc = 3;
const char* kYScrollCmd[argc] = { "stub", "--yscroll", "1" }; const char* kYScrollCmd[argc] = { "stub", "--yscroll", "1" };
@ -56,7 +56,7 @@ TEST(ClientArgsParsingTests, parseClientArgs_addressArg_setSynergyAddress)
NiceMock<MockArgParser> argParser; NiceMock<MockArgParser> argParser;
ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs)); ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs));
ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs)); ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
const int argc = 2; const int argc = 2;
const char* kAddressCmd[argc] = { "stub", "mock_address" }; const char* kAddressCmd[argc] = { "stub", "mock_address" };
@ -71,7 +71,7 @@ TEST(ClientArgsParsingTests, parseClientArgs_noAddressArg_returnFalse)
NiceMock<MockArgParser> argParser; NiceMock<MockArgParser> argParser;
ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs)); ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs));
ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs)); ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
const int argc = 1; const int argc = 1;
const char* kNoAddressCmd[argc] = { "stub" }; const char* kNoAddressCmd[argc] = { "stub" };
@ -85,7 +85,7 @@ TEST(ClientArgsParsingTests, parseClientArgs_unrecognizedArg_returnFalse)
NiceMock<MockArgParser> argParser; NiceMock<MockArgParser> argParser;
ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs)); ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(client_stubParseGenericArgs));
ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs)); ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(client_stubCheckUnexpectedArgs));
ClientArgs clientArgs; lib::synergy::ClientArgs clientArgs;
const int argc = 3; const int argc = 3;
const char* kUnrecognizedCmd[argc] = { "stub", "mock_arg", "mock_address"}; const char* kUnrecognizedCmd[argc] = { "stub", "mock_arg", "mock_address"};

View file

@ -48,7 +48,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_logLevelCmd_setLogLevel)
const char* kLogLevelCmd[argc] = { "stub", "--debug", "DEBUG" }; const char* kLogLevelCmd[argc] = { "stub", "--debug", "DEBUG" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kLogLevelCmd, i); argParser.parseGenericArgs(argc, kLogLevelCmd, i);
@ -66,7 +66,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_logFileCmd_saveLogFilename)
const char* kLogFileCmd[argc] = { "stub", "--log", "mock_filename" }; const char* kLogFileCmd[argc] = { "stub", "--log", "mock_filename" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kLogFileCmd, i); argParser.parseGenericArgs(argc, kLogFileCmd, i);
@ -84,7 +84,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_logFileCmdWithSpace_saveLogFilena
const char* kLogFileCmdWithSpace[argc] = { "stub", "--log", "mo ck_filename" }; const char* kLogFileCmdWithSpace[argc] = { "stub", "--log", "mo ck_filename" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kLogFileCmdWithSpace, i); argParser.parseGenericArgs(argc, kLogFileCmdWithSpace, i);
@ -102,7 +102,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_noDeamonCmd_daemonFalse)
const char* kNoDeamonCmd[argc] = { "stub", "-f" }; const char* kNoDeamonCmd[argc] = { "stub", "-f" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kNoDeamonCmd, i); argParser.parseGenericArgs(argc, kNoDeamonCmd, i);
@ -118,7 +118,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_deamonCmd_daemonTrue)
const char* kDeamonCmd[argc] = { "stub", "--daemon" }; const char* kDeamonCmd[argc] = { "stub", "--daemon" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kDeamonCmd, i); argParser.parseGenericArgs(argc, kDeamonCmd, i);
@ -134,7 +134,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_nameCmd_saveName)
const char* kNameCmd[argc] = { "stub", "--name", "mock" }; const char* kNameCmd[argc] = { "stub", "--name", "mock" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kNameCmd, i); argParser.parseGenericArgs(argc, kNameCmd, i);
@ -150,7 +150,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_noRestartCmd_restartFalse)
const char* kNoRestartCmd[argc] = { "stub", "--no-restart" }; const char* kNoRestartCmd[argc] = { "stub", "--no-restart" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kNoRestartCmd, i); argParser.parseGenericArgs(argc, kNoRestartCmd, i);
@ -166,7 +166,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_restartCmd_restartTrue)
const char* kRestartCmd[argc] = { "stub", "--restart" }; const char* kRestartCmd[argc] = { "stub", "--restart" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kRestartCmd, i); argParser.parseGenericArgs(argc, kRestartCmd, i);
@ -182,7 +182,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_backendCmd_backendTrue)
const char* kBackendCmd[argc] = { "stub", "-z" }; const char* kBackendCmd[argc] = { "stub", "-z" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kBackendCmd, i); argParser.parseGenericArgs(argc, kBackendCmd, i);
@ -198,7 +198,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_noHookCmd_noHookTrue)
const char* kNoHookCmd[argc] = { "stub", "--no-hooks" }; const char* kNoHookCmd[argc] = { "stub", "--no-hooks" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kNoHookCmd, i); argParser.parseGenericArgs(argc, kNoHookCmd, i);
@ -216,7 +216,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_helpCmd_showHelp)
NiceMock<MockApp> app; NiceMock<MockApp> app;
ArgParser argParser(&app); ArgParser argParser(&app);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
ON_CALL(app, help()).WillByDefault(Invoke(showMockHelp)); ON_CALL(app, help()).WillByDefault(Invoke(showMockHelp));
@ -236,7 +236,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_versionCmd_showVersion)
NiceMock<MockApp> app; NiceMock<MockApp> app;
ArgParser argParser(&app); ArgParser argParser(&app);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
ON_CALL(app, version()).WillByDefault(Invoke(showMockVersion)); ON_CALL(app, version()).WillByDefault(Invoke(showMockVersion));
@ -253,7 +253,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_noTrayCmd_disableTrayTrue)
const char* kNoTrayCmd[argc] = { "stub", "--no-tray" }; const char* kNoTrayCmd[argc] = { "stub", "--no-tray" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kNoTrayCmd, i); argParser.parseGenericArgs(argc, kNoTrayCmd, i);
@ -269,7 +269,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_ipcCmd_enableIpcTrue)
const char* kIpcCmd[argc] = { "stub", "--ipc" }; const char* kIpcCmd[argc] = { "stub", "--ipc" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kIpcCmd, i); argParser.parseGenericArgs(argc, kIpcCmd, i);
@ -304,7 +304,7 @@ TEST(GenericArgsParsingTests, parseGenericArgs_dragDropCmdOnLinux_enableDragDrop
const char* kDragDropCmd[argc] = { "stub", "--enable-drag-drop" }; const char* kDragDropCmd[argc] = { "stub", "--enable-drag-drop" };
ArgParser argParser(NULL); ArgParser argParser(NULL);
ArgsBase argsBase; lib::synergy::ArgsBase argsBase;
argParser.setArgsBase(argsBase); argParser.setArgsBase(argsBase);
argParser.parseGenericArgs(argc, kDragDropCmd, i); argParser.parseGenericArgs(argc, kDragDropCmd, i);

View file

@ -42,7 +42,7 @@ TEST(ServerArgsParsingTests, parseServerArgs_addressArg_setSynergyAddress)
NiceMock<MockArgParser> argParser; NiceMock<MockArgParser> argParser;
ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(server_stubParseGenericArgs)); ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(server_stubParseGenericArgs));
ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(server_stubCheckUnexpectedArgs)); ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(server_stubCheckUnexpectedArgs));
ServerArgs serverArgs; lib::synergy::ServerArgs serverArgs;
const int argc = 3; const int argc = 3;
const char* kAddressCmd[argc] = { "stub", "--address", "mock_address" }; const char* kAddressCmd[argc] = { "stub", "--address", "mock_address" };
@ -56,7 +56,7 @@ TEST(ServerArgsParsingTests, parseServerArgs_configArg_setConfigFile)
NiceMock<MockArgParser> argParser; NiceMock<MockArgParser> argParser;
ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(server_stubParseGenericArgs)); ON_CALL(argParser, parseGenericArgs(_, _, _)).WillByDefault(Invoke(server_stubParseGenericArgs));
ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(server_stubCheckUnexpectedArgs)); ON_CALL(argParser, checkUnexpectedArgs()).WillByDefault(Invoke(server_stubCheckUnexpectedArgs));
ServerArgs serverArgs; lib::synergy::ServerArgs serverArgs;
const int argc = 3; const int argc = 3;
const char* kConfigCmd[argc] = { "stub", "--config", "mock_configFile" }; const char* kConfigCmd[argc] = { "stub", "--config", "mock_configFile" };