mirror of
https://github.com/debauchee/barrier.git
synced 2024-12-22 10:31:45 +03:00
a729e33cfb
Made extensive changes to the launcher to provide more control over setting up auto-start and it now saves configuration to the user's documents directory if auto-starting at login and saves to the system directory if auto-starting at boot. Replaced MapVirtualKey() with table lookup to work around that function's lack of support for extended keyboard scan codes. Added first cut at support for AltGr.
150 lines
4.4 KiB
C++
150 lines
4.4 KiB
C++
/*
|
|
* synergy -- mouse and keyboard sharing utility
|
|
* Copyright (C) 2002 Chris Schoeneman
|
|
*
|
|
* This package is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* found in the file COPYING that should have accompanied this file.
|
|
*
|
|
* This package is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef IPLATFORM_H
|
|
#define IPLATFORM_H
|
|
|
|
#include "IInterface.h"
|
|
#include "CString.h"
|
|
|
|
//! Platform dependent functions interface
|
|
/*!
|
|
This interface provides methods to query platform specific data and
|
|
perform operations that are inherently non-portable.
|
|
*/
|
|
class IPlatform : public IInterface {
|
|
public:
|
|
typedef int (*DaemonFunc)(IPlatform*, int argc, const char** argv);
|
|
|
|
//! Uninstall result codes
|
|
enum EResult {
|
|
kSuccess, //!< Uninstall succeeded
|
|
kFailed, //!< Uninstall failed
|
|
kAlready //!< Not installed
|
|
};
|
|
|
|
//! @name manipulators
|
|
//@{
|
|
|
|
//! Install daemon
|
|
/*!
|
|
Install a daemon. \c name is the name of the daemon passed to the
|
|
system and \c description is a short human readable description of
|
|
the daemon. \c pathname is the path to the daemon executable.
|
|
\c commandLine should \b not include the name of program as the
|
|
first argument. If \c allUsers is true then the daemon will be
|
|
installed to start at boot time, otherwise it will be installed to
|
|
start when the current user logs in.
|
|
*/
|
|
// FIXME -- throw on error? will get better error messages that way.
|
|
virtual bool installDaemon(const char* name,
|
|
const char* description,
|
|
const char* pathname,
|
|
const char* commandLine,
|
|
bool allUsers) = 0;
|
|
|
|
//! Uninstall daemon
|
|
/*!
|
|
Uninstall a daemon.
|
|
*/
|
|
virtual EResult uninstallDaemon(const char* name, bool allUsers) = 0;
|
|
|
|
//! Daemonize the process
|
|
/*!
|
|
Daemonize. This should call installDaemonLogger(). Returns
|
|
true iff successful. \c name is the name of the daemon.
|
|
Once daemonized, \c func is invoked and daemonize returns when
|
|
and what it does. daemonize() returns -1 on error.
|
|
|
|
Exactly what happens when daemonizing depends on the platform.
|
|
<ul>
|
|
<li>unix:
|
|
Detaches from terminal. \c func gets passed one argument, the
|
|
name passed to daemonize().
|
|
<li>win32:
|
|
Becomes a service. Argument 0 is the name of the service
|
|
and the rest are the arguments passed to StartService().
|
|
\c func is only called when the service is actually started.
|
|
\c func must behave like a proper ServiceMain() function; in
|
|
particular, it must call RegisterServiceCtrlHandler() and
|
|
SetServiceStatus().
|
|
</ul>
|
|
*/
|
|
virtual int daemonize(const char* name, DaemonFunc func) = 0;
|
|
|
|
//! Install daemon logger
|
|
/*!
|
|
Directs CLog to send messages to the daemon log. Used when
|
|
messages should no longer go to the console. \c name is used
|
|
in the log to identify this process.
|
|
*/
|
|
virtual void installDaemonLogger(const char* name) = 0;
|
|
|
|
//@}
|
|
//! @name accessors
|
|
//@{
|
|
|
|
//! Check if user has permission to install the daemon
|
|
/*!
|
|
Returns true iff the caller has permission to install or
|
|
uninstall the daemon. Note that even if this method returns
|
|
true it's possible that installing/uninstalling the service
|
|
may still fail. This method ignores whether or not the
|
|
service is already installed.
|
|
*/
|
|
virtual bool canInstallDaemon(const char* name,
|
|
bool allUsers) const = 0;
|
|
|
|
//! Check if the daemon is installed
|
|
/*!
|
|
Returns true iff the daemon is installed.
|
|
*/
|
|
virtual bool isDaemonInstalled(const char* name,
|
|
bool allUsers) const = 0;
|
|
|
|
//! Extract base name
|
|
/*!
|
|
Find the base name in the given \c pathname.
|
|
*/
|
|
virtual const char* getBasename(const char* pathname) const = 0;
|
|
|
|
//! Get user's home directory
|
|
/*!
|
|
Returns the user's home directory. Returns the empty string if
|
|
this cannot be determined.
|
|
*/
|
|
virtual CString getUserDirectory() const = 0;
|
|
|
|
//! Get system directory
|
|
/*!
|
|
Returns the ussystem configuration file directory.
|
|
*/
|
|
virtual CString getSystemDirectory() const = 0;
|
|
|
|
//! Concatenate path components
|
|
/*!
|
|
Concatenate pathname components with a directory separator
|
|
between them. This should not check if the resulting path
|
|
is longer than allowed by the system; we'll rely on the
|
|
system calls to tell us that.
|
|
*/
|
|
virtual CString addPathComponent(
|
|
const CString& prefix,
|
|
const CString& suffix) const = 0;
|
|
|
|
//@}
|
|
};
|
|
|
|
#endif
|