Moved CPrimaryScreen and CSecondaryScreen to the lib/synergy
and the platform specific implementations to lib/platform. Added an lib/arch method to query the platform's native wide character encoding and changed CUnicode to use it. All platform dependent code is now in lib/arch, lib/platform, and the programs under cmd. Also added more documentation.
This commit is contained in:
parent
f65921bc3f
commit
e9cc0b434e
57
PORTING
57
PORTING
|
@ -301,14 +301,26 @@ FIXME -- high level overview of class relationships
|
||||||
Portability
|
Portability
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
Synergy is mostly platform independent code but necessarily has
|
||||||
|
platform dependent parts. The mundane platform dependent parts
|
||||||
|
come from the usual suspects: networking, multithreading, file
|
||||||
|
system, high resolution clocks, system logging, etc. Porting
|
||||||
|
these parts is relatively straightforward.
|
||||||
|
|
||||||
|
Synergy also has more esoteric platform dependent code. The
|
||||||
|
functions for low-level event interception and insertion,
|
||||||
|
warping the cursor position, character to keyboard event
|
||||||
|
translation, clipboard manipulation, and screen saver control
|
||||||
|
are often obscure and poorly documented. Unfortunately, these
|
||||||
|
are exactly the functions synergy requires to do its magic.
|
||||||
|
|
||||||
Porting synergy to a new platform requires the following steps:
|
Porting synergy to a new platform requires the following steps:
|
||||||
|
|
||||||
- Setting up the build
|
- Setting up the build
|
||||||
- Adjusting lib/common/common.h
|
- Adjusting lib/common/common.h
|
||||||
- Implementing lib/arch
|
- Implementing lib/arch
|
||||||
- Implementing lib/platform
|
- Implementing lib/platform
|
||||||
- Implementing primary and secondary screens for the platform
|
- Tweaks
|
||||||
- Tweaking synergyc and synergys
|
|
||||||
|
|
||||||
Setting up the build:
|
Setting up the build:
|
||||||
|
|
||||||
|
@ -330,22 +342,49 @@ common.h.
|
||||||
|
|
||||||
Implementing lib/arch:
|
Implementing lib/arch:
|
||||||
|
|
||||||
Most platform dependent code lives in lib/arch. There are several
|
Much platform dependent code lives in lib/arch. There are several
|
||||||
interface classes there and they must all be implemented for each
|
interface classes there and they must all be implemented for each
|
||||||
platform. See the interface header files for more information.
|
platform. See the interface header files for more information.
|
||||||
|
|
||||||
|
Platforms requiring special functions should create a class named
|
||||||
|
CArchMiscXXX where XXX is the platform name. The class should have
|
||||||
|
only static methods. Clients can include the appropriate header
|
||||||
|
file and make calls directly, surrounded by a suitable #ifdef/#endif.
|
||||||
|
|
||||||
Implementing lib/platform:
|
Implementing lib/platform:
|
||||||
|
|
||||||
Most of the remaining platform dependent code lives in lib/platform.
|
Most of the remaining platform dependent code lives in lib/platform.
|
||||||
The code there implements platform dependent window, clipboard, and
|
The code there implements platform dependent window, clipboard, and
|
||||||
screen saver handling. The following interfaces must be implemented:
|
screen saver handling. If a platform is named XXX then the following
|
||||||
|
classes should be derived and implemented:
|
||||||
|
|
||||||
FIXME
|
* CXXXClipboard : IClipboard
|
||||||
|
Provides clipboard operations. Typically, this class will
|
||||||
|
have helper classes for converting between various clipboard
|
||||||
|
data formats.
|
||||||
|
|
||||||
Implementing primary and secondary screens for the platform:
|
* CXXXScreen : IScreen
|
||||||
|
Provide screen operations common to the server and clients.
|
||||||
|
The CXXXPrimaryScreen and CXXXSecondaryScreen classes use a
|
||||||
|
CXXXScreen.
|
||||||
|
|
||||||
FIXME
|
* CXXXPrimaryScreen : CPrimaryScreen, IScreenEventHandler
|
||||||
|
Provides server screen operations.
|
||||||
|
|
||||||
Tweaking synergyc and synergys:
|
* CXXXSecondaryScreen : CSecondaryScreen, IScreenEventHandler
|
||||||
|
Provides client screen operations.
|
||||||
|
|
||||||
FIXME
|
* CXXXScreenSaver : IScreenSaver
|
||||||
|
Provides screen saver operations.
|
||||||
|
|
||||||
|
Tweaks:
|
||||||
|
|
||||||
|
Finally, each platform typically requires various adjustments here
|
||||||
|
and there. In particular, synergyc.cpp and synergys.cpp usually
|
||||||
|
require platform dependent code for the main entry point, parsing
|
||||||
|
arguments, and reporting errors. Also, some platforms may benefit
|
||||||
|
from a graphical user interface front end. These are generally
|
||||||
|
not portable and synergy doesn't provide any infrastructure for
|
||||||
|
the code common to any platform, though it may do so someday.
|
||||||
|
There is, however, an implementation of a GUI front end for Windows
|
||||||
|
that serves as an example.
|
||||||
|
|
|
@ -86,6 +86,11 @@ CArgs* CArgs::s_instance = NULL;
|
||||||
// platform dependent factories
|
// platform dependent factories
|
||||||
//
|
//
|
||||||
|
|
||||||
|
//! Factory for creating secondary screens
|
||||||
|
/*!
|
||||||
|
Objects of this type create secondary screens appropriate for the
|
||||||
|
platform.
|
||||||
|
*/
|
||||||
class CSecondaryScreenFactory : public ISecondaryScreenFactory {
|
class CSecondaryScreenFactory : public ISecondaryScreenFactory {
|
||||||
public:
|
public:
|
||||||
CSecondaryScreenFactory() { }
|
CSecondaryScreenFactory() { }
|
||||||
|
|
|
@ -96,6 +96,11 @@ CArgs* CArgs::s_instance = NULL;
|
||||||
// platform dependent factories
|
// platform dependent factories
|
||||||
//
|
//
|
||||||
|
|
||||||
|
//! Factory for creating primary screens
|
||||||
|
/*!
|
||||||
|
Objects of this type create primary screens appropriate for the
|
||||||
|
platform.
|
||||||
|
*/
|
||||||
class CPrimaryScreenFactory : public IPrimaryScreenFactory {
|
class CPrimaryScreenFactory : public IPrimaryScreenFactory {
|
||||||
public:
|
public:
|
||||||
CPrimaryScreenFactory() { }
|
CPrimaryScreenFactory() { }
|
||||||
|
|
|
@ -679,7 +679,7 @@ ENABLE_PREPROCESSING = YES
|
||||||
# compilation will be performed. Macro expansion can be done in a controlled
|
# compilation will be performed. Macro expansion can be done in a controlled
|
||||||
# way by setting EXPAND_ONLY_PREDEF to YES.
|
# way by setting EXPAND_ONLY_PREDEF to YES.
|
||||||
|
|
||||||
MACRO_EXPANSION = NO
|
MACRO_EXPANSION = YES
|
||||||
|
|
||||||
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
|
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
|
||||||
# then the macro expansion is limited to the macros specified with the
|
# then the macro expansion is limited to the macros specified with the
|
||||||
|
|
|
@ -130,6 +130,8 @@ CArch::~CArch()
|
||||||
CArch*
|
CArch*
|
||||||
CArch::getInstance()
|
CArch::getInstance()
|
||||||
{
|
{
|
||||||
|
assert(s_instance != NULL);
|
||||||
|
|
||||||
return s_instance;
|
return s_instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,6 +571,12 @@ CArch::convWCToMB(char* dst, wchar_t src, CArchMBState state)
|
||||||
return m_string->convWCToMB(dst, src, state);
|
return m_string->convWCToMB(dst, src, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IArchString::EWideCharEncoding
|
||||||
|
CArch::getWideCharEncoding()
|
||||||
|
{
|
||||||
|
return m_string->getWideCharEncoding();
|
||||||
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
CArch::time()
|
CArch::time()
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,10 +25,24 @@
|
||||||
#include "IArchString.h"
|
#include "IArchString.h"
|
||||||
#include "IArchTime.h"
|
#include "IArchTime.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\def ARCH
|
||||||
|
This macro evaluates to the singleton CArch object.
|
||||||
|
*/
|
||||||
#define ARCH (CArch::getInstance())
|
#define ARCH (CArch::getInstance())
|
||||||
|
|
||||||
#define ARCH_ARGS
|
#define ARCH_ARGS
|
||||||
|
|
||||||
|
//! Delegating mplementation of architecture dependent interfaces
|
||||||
|
/*!
|
||||||
|
This class is a centralized interface to all architecture dependent
|
||||||
|
interface implementations (except miscellaneous functions). It
|
||||||
|
instantiates an implementation of each interface and delegates calls
|
||||||
|
to each method to those implementations. Clients should use the
|
||||||
|
\c ARCH macro to access this object. Clients must also instantiate
|
||||||
|
exactly one of these objects before attempting to call any method,
|
||||||
|
typically at the beginning of \c main().
|
||||||
|
*/
|
||||||
class CArch : public IArchConsole,
|
class CArch : public IArchConsole,
|
||||||
public IArchDaemon,
|
public IArchDaemon,
|
||||||
public IArchFile,
|
public IArchFile,
|
||||||
|
@ -46,6 +60,11 @@ public:
|
||||||
// accessors
|
// accessors
|
||||||
//
|
//
|
||||||
|
|
||||||
|
//! Return the singleton instance
|
||||||
|
/*!
|
||||||
|
The client must have instantiated exactly once CArch object before
|
||||||
|
calling this function.
|
||||||
|
*/
|
||||||
static CArch* getInstance();
|
static CArch* getInstance();
|
||||||
|
|
||||||
// IArchConsole overrides
|
// IArchConsole overrides
|
||||||
|
@ -142,6 +161,8 @@ public:
|
||||||
virtual bool isInitMBState(CArchMBState);
|
virtual bool isInitMBState(CArchMBState);
|
||||||
virtual int convMBToWC(wchar_t*, const char*, int, CArchMBState);
|
virtual int convMBToWC(wchar_t*, const char*, int, CArchMBState);
|
||||||
virtual int convWCToMB(char*, wchar_t, CArchMBState);
|
virtual int convWCToMB(char*, wchar_t, CArchMBState);
|
||||||
|
virtual EWideCharEncoding
|
||||||
|
getWideCharEncoding();
|
||||||
|
|
||||||
// IArchTime overrides
|
// IArchTime overrides
|
||||||
virtual double time();
|
virtual double time();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_CONSOLE CArchConsoleUnix
|
#define ARCH_CONSOLE CArchConsoleUnix
|
||||||
|
|
||||||
|
//! Unix implementation of IArchConsole
|
||||||
class CArchConsoleUnix : public IArchConsole {
|
class CArchConsoleUnix : public IArchConsole {
|
||||||
public:
|
public:
|
||||||
CArchConsoleUnix();
|
CArchConsoleUnix();
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#define ARCH_CONSOLE CArchConsoleWindows
|
#define ARCH_CONSOLE CArchConsoleWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchConsole
|
||||||
class CArchConsoleWindows : public IArchConsole {
|
class CArchConsoleWindows : public IArchConsole {
|
||||||
public:
|
public:
|
||||||
CArchConsoleWindows();
|
CArchConsoleWindows();
|
||||||
|
|
|
@ -19,6 +19,13 @@
|
||||||
|
|
||||||
#define ARCH_DAEMON CArchDaemonNone
|
#define ARCH_DAEMON CArchDaemonNone
|
||||||
|
|
||||||
|
//! Dummy implementation of IArchDaemon
|
||||||
|
/*!
|
||||||
|
This class implements IArchDaemon for a platform that does not have
|
||||||
|
daemons. The install and uninstall functions do nothing, the query
|
||||||
|
functions return false, and \c daemonize() simply calls the passed
|
||||||
|
function and returns its result.
|
||||||
|
*/
|
||||||
class CArchDaemonNone : public IArchDaemon {
|
class CArchDaemonNone : public IArchDaemon {
|
||||||
public:
|
public:
|
||||||
CArchDaemonNone();
|
CArchDaemonNone();
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#undef ARCH_DAEMON
|
#undef ARCH_DAEMON
|
||||||
#define ARCH_DAEMON CArchDaemonUnix
|
#define ARCH_DAEMON CArchDaemonUnix
|
||||||
|
|
||||||
|
//! Unix implementation of IArchDaemon
|
||||||
class CArchDaemonUnix : public CArchDaemonNone {
|
class CArchDaemonUnix : public CArchDaemonNone {
|
||||||
public:
|
public:
|
||||||
CArchDaemonUnix();
|
CArchDaemonUnix();
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#define ARCH_DAEMON CArchDaemonWindows
|
#define ARCH_DAEMON CArchDaemonWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchDaemon
|
||||||
class CArchDaemonWindows : public IArchDaemon {
|
class CArchDaemonWindows : public IArchDaemon {
|
||||||
public:
|
public:
|
||||||
typedef int (*RunFunc)(void);
|
typedef int (*RunFunc)(void);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_FILE CArchFileUnix
|
#define ARCH_FILE CArchFileUnix
|
||||||
|
|
||||||
|
//! Unix implementation of IArchFile
|
||||||
class CArchFileUnix : public IArchFile {
|
class CArchFileUnix : public IArchFile {
|
||||||
public:
|
public:
|
||||||
CArchFileUnix();
|
CArchFileUnix();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_FILE CArchFileWindows
|
#define ARCH_FILE CArchFileWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchFile
|
||||||
class CArchFileWindows : public IArchFile {
|
class CArchFileWindows : public IArchFile {
|
||||||
public:
|
public:
|
||||||
CArchFileWindows();
|
CArchFileWindows();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_LOG CArchLogUnix
|
#define ARCH_LOG CArchLogUnix
|
||||||
|
|
||||||
|
//! Unix implementation of IArchLog
|
||||||
class CArchLogUnix : public IArchLog {
|
class CArchLogUnix : public IArchLog {
|
||||||
public:
|
public:
|
||||||
CArchLogUnix();
|
CArchLogUnix();
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#define ARCH_LOG CArchLogWindows
|
#define ARCH_LOG CArchLogWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchLog
|
||||||
class CArchLogWindows : public IArchLog {
|
class CArchLogWindows : public IArchLog {
|
||||||
public:
|
public:
|
||||||
CArchLogWindows();
|
CArchLogWindows();
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#ifndef CARCHMISCWINDOWS_H
|
#ifndef CARCHMISCWINDOWS_H
|
||||||
#define CARCHMISCWINDOWS_H
|
#define CARCHMISCWINDOWS_H
|
||||||
|
|
||||||
|
//! Miscellaneous win32 functions.
|
||||||
class CArchMiscWindows {
|
class CArchMiscWindows {
|
||||||
public:
|
public:
|
||||||
typedef int (*RunFunc)(void);
|
typedef int (*RunFunc)(void);
|
||||||
|
|
|
@ -31,6 +31,7 @@ public:
|
||||||
pthread_mutex_t m_mutex;
|
pthread_mutex_t m_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Posix implementation of IArchMultithread
|
||||||
class CArchMultithreadPosix : public IArchMultithread {
|
class CArchMultithreadPosix : public IArchMultithread {
|
||||||
public:
|
public:
|
||||||
CArchMultithreadPosix();
|
CArchMultithreadPosix();
|
||||||
|
|
|
@ -575,7 +575,7 @@ CArchMultithreadWindows::refThread(CArchThreadImpl* thread)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CArchMultithreadWindows::testCancelThreadImpl(CArchThread thread)
|
CArchMultithreadWindows::testCancelThreadImpl(CArchThreadImpl* thread)
|
||||||
{
|
{
|
||||||
assert(thread != NULL);
|
assert(thread != NULL);
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ public:
|
||||||
CRITICAL_SECTION m_mutex;
|
CRITICAL_SECTION m_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchMultithread
|
||||||
class CArchMultithreadWindows : public IArchMultithread {
|
class CArchMultithreadWindows : public IArchMultithread {
|
||||||
public:
|
public:
|
||||||
CArchMultithreadWindows();
|
CArchMultithreadWindows();
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
socklen_t m_len;
|
socklen_t m_len;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Berkeley (BSD) sockets implementation of IArchNetwork
|
||||||
class CArchNetworkBSD : public IArchNetwork {
|
class CArchNetworkBSD : public IArchNetwork {
|
||||||
public:
|
public:
|
||||||
CArchNetworkBSD();
|
CArchNetworkBSD();
|
||||||
|
|
|
@ -35,7 +35,7 @@ static int (PASCAL FAR *getsockopt_winsock)(SOCKET s, int level, int optname, vo
|
||||||
static u_short (PASCAL FAR *htons_winsock)(u_short v);
|
static u_short (PASCAL FAR *htons_winsock)(u_short v);
|
||||||
static char FAR * (PASCAL FAR *inet_ntoa_winsock)(struct in_addr in);
|
static char FAR * (PASCAL FAR *inet_ntoa_winsock)(struct in_addr in);
|
||||||
static unsigned long (PASCAL FAR *inet_addr_winsock)(const char FAR * cp);
|
static unsigned long (PASCAL FAR *inet_addr_winsock)(const char FAR * cp);
|
||||||
static int (PASCAL FAR *ioctl_winsock)(SOCKET s, int cmd, void FAR *);
|
static int (PASCAL FAR *ioctl_winsock)(SOCKET s, int cmd, void FAR * data);
|
||||||
static int (PASCAL FAR *listen_winsock)(SOCKET s, int backlog);
|
static int (PASCAL FAR *listen_winsock)(SOCKET s, int backlog);
|
||||||
static u_short (PASCAL FAR *ntohs_winsock)(u_short v);
|
static u_short (PASCAL FAR *ntohs_winsock)(u_short v);
|
||||||
static int (PASCAL FAR *recv_winsock)(SOCKET s, void FAR * buf, int len, int flags);
|
static int (PASCAL FAR *recv_winsock)(SOCKET s, void FAR * buf, int len, int flags);
|
||||||
|
@ -47,7 +47,7 @@ static SOCKET (PASCAL FAR *socket_winsock)(int af, int type, int protocol);
|
||||||
static struct hostent FAR * (PASCAL FAR *gethostbyaddr_winsock)(const char FAR * addr, int len, int type);
|
static struct hostent FAR * (PASCAL FAR *gethostbyaddr_winsock)(const char FAR * addr, int len, int type);
|
||||||
static struct hostent FAR * (PASCAL FAR *gethostbyname_winsock)(const char FAR * name);
|
static struct hostent FAR * (PASCAL FAR *gethostbyname_winsock)(const char FAR * name);
|
||||||
static int (PASCAL FAR *WSACleanup_winsock)(void);
|
static int (PASCAL FAR *WSACleanup_winsock)(void);
|
||||||
static int (PASCAL FAR *WSAFDIsSet_winsock)(SOCKET, fd_set FAR *);
|
static int (PASCAL FAR *WSAFDIsSet_winsock)(SOCKET, fd_set FAR * fdset);
|
||||||
|
|
||||||
#undef FD_ISSET
|
#undef FD_ISSET
|
||||||
#define FD_ISSET(fd, set) WSAFDIsSet_winsock((SOCKET)(fd), (fd_set FAR *)(set))
|
#define FD_ISSET(fd, set) WSAFDIsSet_winsock((SOCKET)(fd), (fd_set FAR *)(set))
|
||||||
|
|
|
@ -44,6 +44,7 @@ public:
|
||||||
int m_len;
|
int m_len;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchNetwork
|
||||||
class CArchNetworkWinsock : public IArchNetwork {
|
class CArchNetworkWinsock : public IArchNetwork {
|
||||||
public:
|
public:
|
||||||
CArchNetworkWinsock();
|
CArchNetworkWinsock();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_SLEEP CArchSleepUnix
|
#define ARCH_SLEEP CArchSleepUnix
|
||||||
|
|
||||||
|
//! Unix implementation of IArchSleep
|
||||||
class CArchSleepUnix : public IArchSleep {
|
class CArchSleepUnix : public IArchSleep {
|
||||||
public:
|
public:
|
||||||
CArchSleepUnix();
|
CArchSleepUnix();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_SLEEP CArchSleepWindows
|
#define ARCH_SLEEP CArchSleepWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchSleep
|
||||||
class CArchSleepWindows : public IArchSleep {
|
class CArchSleepWindows : public IArchSleep {
|
||||||
public:
|
public:
|
||||||
CArchSleepWindows();
|
CArchSleepWindows();
|
||||||
|
|
|
@ -32,3 +32,9 @@ CArchStringUnix::~CArchStringUnix()
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "vsnprintf.cpp"
|
#include "vsnprintf.cpp"
|
||||||
|
|
||||||
|
IArchString::EWideCharEncoding
|
||||||
|
CArchStringUnix::getWideCharEncoding()
|
||||||
|
{
|
||||||
|
return kUCS4;
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_STRING CArchStringUnix
|
#define ARCH_STRING CArchStringUnix
|
||||||
|
|
||||||
|
//! Unix implementation of IArchString
|
||||||
class CArchStringUnix : public IArchString {
|
class CArchStringUnix : public IArchString {
|
||||||
public:
|
public:
|
||||||
CArchStringUnix();
|
CArchStringUnix();
|
||||||
|
@ -33,6 +34,8 @@ public:
|
||||||
virtual bool isInitMBState(CArchMBState);
|
virtual bool isInitMBState(CArchMBState);
|
||||||
virtual int convMBToWC(wchar_t*, const char*, int, CArchMBState);
|
virtual int convMBToWC(wchar_t*, const char*, int, CArchMBState);
|
||||||
virtual int convWCToMB(char*, wchar_t, CArchMBState);
|
virtual int convWCToMB(char*, wchar_t, CArchMBState);
|
||||||
|
virtual EWideCharEncoding
|
||||||
|
getWideCharEncoding();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,3 +36,9 @@ CArchStringWindows::~CArchStringWindows()
|
||||||
#define HAVE_VSNPRINTF 1
|
#define HAVE_VSNPRINTF 1
|
||||||
#define ARCH_VSNPRINTF _vsnprintf
|
#define ARCH_VSNPRINTF _vsnprintf
|
||||||
#include "vsnprintf.cpp"
|
#include "vsnprintf.cpp"
|
||||||
|
|
||||||
|
IArchString::EWideCharEncoding
|
||||||
|
CArchStringWindows::getWideCharEncoding()
|
||||||
|
{
|
||||||
|
return kUTF16;
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_STRING CArchStringWindows
|
#define ARCH_STRING CArchStringWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchString
|
||||||
class CArchStringWindows : public IArchString {
|
class CArchStringWindows : public IArchString {
|
||||||
public:
|
public:
|
||||||
CArchStringWindows();
|
CArchStringWindows();
|
||||||
|
@ -33,6 +34,8 @@ public:
|
||||||
virtual bool isInitMBState(CArchMBState);
|
virtual bool isInitMBState(CArchMBState);
|
||||||
virtual int convMBToWC(wchar_t*, const char*, int, CArchMBState);
|
virtual int convMBToWC(wchar_t*, const char*, int, CArchMBState);
|
||||||
virtual int convWCToMB(char*, wchar_t, CArchMBState);
|
virtual int convWCToMB(char*, wchar_t, CArchMBState);
|
||||||
|
virtual EWideCharEncoding
|
||||||
|
getWideCharEncoding();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_TIME CArchTimeUnix
|
#define ARCH_TIME CArchTimeUnix
|
||||||
|
|
||||||
|
//! Generic Unix implementation of IArchTime
|
||||||
class CArchTimeUnix : public IArchTime {
|
class CArchTimeUnix : public IArchTime {
|
||||||
public:
|
public:
|
||||||
CArchTimeUnix();
|
CArchTimeUnix();
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#define ARCH_TIME CArchTimeWindows
|
#define ARCH_TIME CArchTimeWindows
|
||||||
|
|
||||||
|
//! Win32 implementation of IArchTime
|
||||||
class CArchTimeWindows : public IArchTime {
|
class CArchTimeWindows : public IArchTime {
|
||||||
public:
|
public:
|
||||||
CArchTimeWindows();
|
CArchTimeWindows();
|
||||||
|
|
|
@ -17,6 +17,11 @@
|
||||||
|
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
|
|
||||||
|
//! Interface for architecture dependent console output
|
||||||
|
/*!
|
||||||
|
This interface defines the console operations required by
|
||||||
|
synergy. Each architecture must implement this interface.
|
||||||
|
*/
|
||||||
class IArchConsole : public IInterface {
|
class IArchConsole : public IInterface {
|
||||||
public:
|
public:
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
|
|
|
@ -18,6 +18,11 @@
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
#include "stdstring.h"
|
#include "stdstring.h"
|
||||||
|
|
||||||
|
//! Interface for architecture dependent file system operations
|
||||||
|
/*!
|
||||||
|
This interface defines the file system operations required by
|
||||||
|
synergy. Each architecture must implement this interface.
|
||||||
|
*/
|
||||||
class IArchFile : public IInterface {
|
class IArchFile : public IInterface {
|
||||||
public:
|
public:
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
|
|
|
@ -17,9 +17,24 @@
|
||||||
|
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
|
|
||||||
|
//! Interface for architecture dependent logging
|
||||||
|
/*!
|
||||||
|
This interface defines the logging operations required by
|
||||||
|
synergy. Each architecture must implement this interface.
|
||||||
|
*/
|
||||||
class IArchLog : public IInterface {
|
class IArchLog : public IInterface {
|
||||||
public:
|
public:
|
||||||
enum ELevel { kERROR, kWARNING, kNOTE, kINFO, kDEBUG };
|
//! Log levels
|
||||||
|
/*!
|
||||||
|
The logging priority levels in order of highest to lowest priority.
|
||||||
|
*/
|
||||||
|
enum ELevel {
|
||||||
|
kERROR, //!< For serious or fatal errors
|
||||||
|
kWARNING, //!< For minor errors and warnings
|
||||||
|
kNOTE, //!< For messages about notable events
|
||||||
|
kINFO, //!< For informational messages
|
||||||
|
kDEBUG //!< For debugging messages
|
||||||
|
};
|
||||||
|
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
//@{
|
//@{
|
||||||
|
|
|
@ -17,11 +17,47 @@
|
||||||
|
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CArchCondImpl
|
||||||
|
\brief Internal condition variable data.
|
||||||
|
An architecture dependent type holding the necessary data for a
|
||||||
|
condition variable.
|
||||||
|
*/
|
||||||
class CArchCondImpl;
|
class CArchCondImpl;
|
||||||
class CArchMutexImpl;
|
|
||||||
class CArchThreadImpl;
|
/*!
|
||||||
|
\var CArchCond
|
||||||
|
\brief Opaque condition variable type.
|
||||||
|
An opaque type representing a condition variable.
|
||||||
|
*/
|
||||||
typedef CArchCondImpl* CArchCond;
|
typedef CArchCondImpl* CArchCond;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CArchMutexImpl
|
||||||
|
\brief Internal mutex data.
|
||||||
|
An architecture dependent type holding the necessary data for a mutex.
|
||||||
|
*/
|
||||||
|
class CArchMutexImpl;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\var CArchMutex
|
||||||
|
\brief Opaque mutex type.
|
||||||
|
An opaque type representing a mutex.
|
||||||
|
*/
|
||||||
typedef CArchMutexImpl* CArchMutex;
|
typedef CArchMutexImpl* CArchMutex;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CArchThreadImpl
|
||||||
|
\brief Internal thread data.
|
||||||
|
An architecture dependent type holding the necessary data for a thread.
|
||||||
|
*/
|
||||||
|
class CArchThreadImpl;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\var CArchThread
|
||||||
|
\brief Opaque thread type.
|
||||||
|
An opaque type representing a thread.
|
||||||
|
*/
|
||||||
typedef CArchThreadImpl* CArchThread;
|
typedef CArchThreadImpl* CArchThread;
|
||||||
|
|
||||||
//! Interface for architecture dependent multithreading
|
//! Interface for architecture dependent multithreading
|
||||||
|
@ -31,7 +67,9 @@ synergy. Each architecture must implement this interface.
|
||||||
*/
|
*/
|
||||||
class IArchMultithread : public IInterface {
|
class IArchMultithread : public IInterface {
|
||||||
public:
|
public:
|
||||||
|
//! Type of thread entry point
|
||||||
typedef void* (*ThreadFunc)(void*);
|
typedef void* (*ThreadFunc)(void*);
|
||||||
|
//! Type of thread identifier
|
||||||
typedef unsigned int ThreadID;
|
typedef unsigned int ThreadID;
|
||||||
|
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
|
@ -41,38 +79,172 @@ public:
|
||||||
// condition variable methods
|
// condition variable methods
|
||||||
//
|
//
|
||||||
|
|
||||||
|
//! Create a condition variable
|
||||||
|
/*!
|
||||||
|
The condition variable is an opaque data type.
|
||||||
|
*/
|
||||||
virtual CArchCond newCondVar() = 0;
|
virtual CArchCond newCondVar() = 0;
|
||||||
|
|
||||||
|
//! Destroy a condition variable
|
||||||
virtual void closeCondVar(CArchCond) = 0;
|
virtual void closeCondVar(CArchCond) = 0;
|
||||||
|
|
||||||
|
//! Signal a condition variable
|
||||||
|
/*!
|
||||||
|
Signalling a condition variable releases one waiting thread.
|
||||||
|
*/
|
||||||
virtual void signalCondVar(CArchCond) = 0;
|
virtual void signalCondVar(CArchCond) = 0;
|
||||||
|
|
||||||
|
//! Broadcast a condition variable
|
||||||
|
/*!
|
||||||
|
Broadcasting a condition variable releases all waiting threads.
|
||||||
|
*/
|
||||||
virtual void broadcastCondVar(CArchCond) = 0;
|
virtual void broadcastCondVar(CArchCond) = 0;
|
||||||
|
|
||||||
|
//! Wait on a condition variable
|
||||||
|
/*!
|
||||||
|
Waiting on a conditation variable for up to \c timeout seconds.
|
||||||
|
If \c timeout is < 0 then there is no timeout. The mutex must
|
||||||
|
be locked when this method is called. The mutex is unlocked
|
||||||
|
during the wait and locked again before returning.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual bool waitCondVar(CArchCond, CArchMutex, double timeout) = 0;
|
virtual bool waitCondVar(CArchCond, CArchMutex, double timeout) = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// mutex methods
|
// mutex methods
|
||||||
//
|
//
|
||||||
|
|
||||||
|
//! Create a non-recursive mutex
|
||||||
|
/*!
|
||||||
|
Creates a non-recursive mutex. A thread must not lock a
|
||||||
|
non-recursive mutex when it already holds a lock on that mutex.
|
||||||
|
If it does it will deadlock. The mutex is an opaque data type.
|
||||||
|
*/
|
||||||
virtual CArchMutex newMutex() = 0;
|
virtual CArchMutex newMutex() = 0;
|
||||||
|
|
||||||
|
//! Destroy a mutex
|
||||||
virtual void closeMutex(CArchMutex) = 0;
|
virtual void closeMutex(CArchMutex) = 0;
|
||||||
|
|
||||||
|
//! Lock a mutex
|
||||||
|
/*!
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual void lockMutex(CArchMutex) = 0;
|
virtual void lockMutex(CArchMutex) = 0;
|
||||||
|
|
||||||
|
//! Unlock a mutex
|
||||||
virtual void unlockMutex(CArchMutex) = 0;
|
virtual void unlockMutex(CArchMutex) = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// thread methods
|
// thread methods
|
||||||
//
|
//
|
||||||
|
|
||||||
virtual CArchThread newThread(ThreadFunc, void*) = 0;
|
//! Start a new thread
|
||||||
|
/*!
|
||||||
|
Creates and starts a new thread, using \c func as the entry point
|
||||||
|
and passing it \c userData. The thread is an opaque data type.
|
||||||
|
*/
|
||||||
|
virtual CArchThread newThread(ThreadFunc func, void* userData) = 0;
|
||||||
|
|
||||||
|
//! Get a reference to the calling thread
|
||||||
|
/*!
|
||||||
|
Returns a thread representing the current (i.e. calling) thread.
|
||||||
|
*/
|
||||||
virtual CArchThread newCurrentThread() = 0;
|
virtual CArchThread newCurrentThread() = 0;
|
||||||
virtual CArchThread copyThread(CArchThread) = 0;
|
|
||||||
|
//! Copy a thread object
|
||||||
|
/*!
|
||||||
|
Returns a reference to to thread referred to by \c thread.
|
||||||
|
*/
|
||||||
|
virtual CArchThread copyThread(CArchThread thread) = 0;
|
||||||
|
|
||||||
|
//! Release a thread reference
|
||||||
|
/*!
|
||||||
|
Deletes the given thread object. This does not destroy the thread
|
||||||
|
the object referred to, even if there are no remaining references.
|
||||||
|
Use cancelThread() and waitThread() to stop a thread and wait for
|
||||||
|
it to exit.
|
||||||
|
*/
|
||||||
virtual void closeThread(CArchThread) = 0;
|
virtual void closeThread(CArchThread) = 0;
|
||||||
virtual void cancelThread(CArchThread) = 0;
|
|
||||||
|
//! Force a thread to exit
|
||||||
|
/*!
|
||||||
|
Causes \c thread to exit when it next calls a cancellation point.
|
||||||
|
A thread avoids cancellation as long as it nevers calls a
|
||||||
|
cancellation point. Once it begins the cancellation process it
|
||||||
|
must always let cancellation go to completion but may take as
|
||||||
|
long as necessary to clean up.
|
||||||
|
*/
|
||||||
|
virtual void cancelThread(CArchThread thread) = 0;
|
||||||
|
|
||||||
|
//! Change thread priority
|
||||||
|
/*!
|
||||||
|
Changes the priority of \c thread by \c n. If \c n is positive
|
||||||
|
the thread has a lower priority and if negative a higher priority.
|
||||||
|
Some architectures may not support either or both directions.
|
||||||
|
*/
|
||||||
virtual void setPriorityOfThread(CArchThread, int n) = 0;
|
virtual void setPriorityOfThread(CArchThread, int n) = 0;
|
||||||
|
|
||||||
|
//! Cancellation point
|
||||||
|
/*!
|
||||||
|
This method does nothing but is a cancellation point. Clients
|
||||||
|
can make their own functions cancellation points by calling this
|
||||||
|
method at appropriate times.
|
||||||
|
*/
|
||||||
virtual void testCancelThread() = 0;
|
virtual void testCancelThread() = 0;
|
||||||
virtual bool wait(CArchThread, double timeout) = 0;
|
|
||||||
|
//! Wait for a thread to exit
|
||||||
|
/*!
|
||||||
|
Waits for up to \c timeout seconds for \c thread to exit (normally
|
||||||
|
or by cancellation). Waits forever if \c timeout < 0. Returns
|
||||||
|
true if the thread exited, false otherwise. Waiting on the current
|
||||||
|
thread returns immediately with false.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
|
virtual bool wait(CArchThread thread, double timeout) = 0;
|
||||||
|
|
||||||
|
//! Wait for a user event
|
||||||
|
/*!
|
||||||
|
Waits for up to \c timeout seconds for a pending user event.
|
||||||
|
Returns true if an event occurred, false otherwise.
|
||||||
|
|
||||||
|
This method is not required by all platforms.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual bool waitForEvent(double timeout) = 0;
|
virtual bool waitForEvent(double timeout) = 0;
|
||||||
|
|
||||||
|
//! Compare threads
|
||||||
|
/*!
|
||||||
|
Returns true iff two thread objects refer to the same thread.
|
||||||
|
Note that comparing thread objects directly is meaningless.
|
||||||
|
*/
|
||||||
virtual bool isSameThread(CArchThread, CArchThread) = 0;
|
virtual bool isSameThread(CArchThread, CArchThread) = 0;
|
||||||
virtual bool isExitedThread(CArchThread) = 0;
|
|
||||||
virtual void* getResultOfThread(CArchThread) = 0;
|
//! Test if thread exited
|
||||||
virtual ThreadID getIDOfThread(CArchThread) = 0;
|
/*!
|
||||||
|
Returns true iff \c thread has exited.
|
||||||
|
*/
|
||||||
|
virtual bool isExitedThread(CArchThread thread) = 0;
|
||||||
|
|
||||||
|
//! Returns the exit code of a thread
|
||||||
|
/*!
|
||||||
|
Waits indefinitely for \c thread to exit (if it hasn't yet) then
|
||||||
|
returns the thread's exit code.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
|
virtual void* getResultOfThread(CArchThread thread) = 0;
|
||||||
|
|
||||||
|
//! Returns an ID for a thread
|
||||||
|
/*!
|
||||||
|
Returns some ID number for \c thread. This is for logging purposes.
|
||||||
|
All thread objects referring to the same thread return the same ID.
|
||||||
|
However, clients should us isSameThread() to compare thread objects
|
||||||
|
instead of comparing IDs.
|
||||||
|
*/
|
||||||
|
virtual ThreadID getIDOfThread(CArchThread thread) = 0;
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,9 +18,33 @@
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
#include "stdstring.h"
|
#include "stdstring.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CArchSocketImpl
|
||||||
|
\brief Internal socket data.
|
||||||
|
An architecture dependent type holding the necessary data for a socket.
|
||||||
|
*/
|
||||||
class CArchSocketImpl;
|
class CArchSocketImpl;
|
||||||
class CArchNetAddressImpl;
|
|
||||||
|
/*!
|
||||||
|
\var CArchSocket
|
||||||
|
\brief Opaque socket type.
|
||||||
|
An opaque type representing a socket.
|
||||||
|
*/
|
||||||
typedef CArchSocketImpl* CArchSocket;
|
typedef CArchSocketImpl* CArchSocket;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CArchNetAddressImpl
|
||||||
|
\brief Internal network address data.
|
||||||
|
An architecture dependent type holding the necessary data for a network
|
||||||
|
address.
|
||||||
|
*/
|
||||||
|
class CArchNetAddressImpl;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\var CArchNetAddress
|
||||||
|
\brief Opaque network address type.
|
||||||
|
An opaque type representing a network address.
|
||||||
|
*/
|
||||||
typedef CArchNetAddressImpl* CArchNetAddress;
|
typedef CArchNetAddressImpl* CArchNetAddress;
|
||||||
|
|
||||||
//! Interface for architecture dependent networking
|
//! Interface for architecture dependent networking
|
||||||
|
@ -30,47 +54,171 @@ synergy. Each architecture must implement this interface.
|
||||||
*/
|
*/
|
||||||
class IArchNetwork : public IInterface {
|
class IArchNetwork : public IInterface {
|
||||||
public:
|
public:
|
||||||
|
//! Supported address families
|
||||||
enum EAddressFamily {
|
enum EAddressFamily {
|
||||||
kUNKNOWN,
|
kUNKNOWN,
|
||||||
kINET,
|
kINET,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Supported socket types
|
||||||
enum ESocketType {
|
enum ESocketType {
|
||||||
kDGRAM,
|
kDGRAM,
|
||||||
kSTREAM
|
kSTREAM
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Events for \c poll()
|
||||||
|
/*!
|
||||||
|
Events for \c poll() are bitmasks and can be combined using the
|
||||||
|
bitwise operators.
|
||||||
|
*/
|
||||||
enum {
|
enum {
|
||||||
kPOLLIN = 1,
|
kPOLLIN = 1, //!< Socket is readable
|
||||||
kPOLLOUT = 2,
|
kPOLLOUT = 2, //!< Socket is writable
|
||||||
kPOLLERR = 4,
|
kPOLLERR = 4, //!< The socket is in an error state
|
||||||
kPOLLNVAL = 8
|
kPOLLNVAL = 8 //!< The socket is invalid
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! A socket query for \c poll()
|
||||||
class CPollEntry {
|
class CPollEntry {
|
||||||
public:
|
public:
|
||||||
|
//! The socket to query
|
||||||
CArchSocket m_socket;
|
CArchSocket m_socket;
|
||||||
|
|
||||||
|
//! The events to query for
|
||||||
|
/*!
|
||||||
|
The events to query for can be any combination of kPOLLIN and
|
||||||
|
kPOLLOUT.
|
||||||
|
*/
|
||||||
unsigned short m_events;
|
unsigned short m_events;
|
||||||
|
|
||||||
|
//! The result events
|
||||||
unsigned short m_revents;
|
unsigned short m_revents;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
|
//! Create a new socket
|
||||||
|
/*!
|
||||||
|
The socket is an opaque data type.
|
||||||
|
*/
|
||||||
virtual CArchSocket newSocket(EAddressFamily, ESocketType) = 0;
|
virtual CArchSocket newSocket(EAddressFamily, ESocketType) = 0;
|
||||||
|
|
||||||
|
//! Copy a socket object
|
||||||
|
/*!
|
||||||
|
Returns a reference to to socket referred to by \c s.
|
||||||
|
*/
|
||||||
virtual CArchSocket copySocket(CArchSocket s) = 0;
|
virtual CArchSocket copySocket(CArchSocket s) = 0;
|
||||||
|
|
||||||
|
//! Release a socket reference
|
||||||
|
/*!
|
||||||
|
Deletes the given socket object. This does not destroy the socket
|
||||||
|
the object referred to until there are no remaining references for
|
||||||
|
the socket.
|
||||||
|
*/
|
||||||
virtual void closeSocket(CArchSocket s) = 0;
|
virtual void closeSocket(CArchSocket s) = 0;
|
||||||
|
|
||||||
|
//! Close socket for further reads
|
||||||
|
/*!
|
||||||
|
Calling this disallows future reads on socket \c s.
|
||||||
|
*/
|
||||||
virtual void closeSocketForRead(CArchSocket s) = 0;
|
virtual void closeSocketForRead(CArchSocket s) = 0;
|
||||||
|
|
||||||
|
//! Close socket for further writes
|
||||||
|
/*!
|
||||||
|
Calling this disallows future writes on socket \c s.
|
||||||
|
*/
|
||||||
virtual void closeSocketForWrite(CArchSocket s) = 0;
|
virtual void closeSocketForWrite(CArchSocket s) = 0;
|
||||||
|
|
||||||
|
//! Bind socket to address
|
||||||
|
/*!
|
||||||
|
Binds socket \c s to the address \c addr.
|
||||||
|
*/
|
||||||
virtual void bindSocket(CArchSocket s, CArchNetAddress addr) = 0;
|
virtual void bindSocket(CArchSocket s, CArchNetAddress addr) = 0;
|
||||||
|
|
||||||
|
//! Listen for connections on socket
|
||||||
|
/*!
|
||||||
|
Causes the socket \c s to begin listening for incoming connections.
|
||||||
|
*/
|
||||||
virtual void listenOnSocket(CArchSocket s) = 0;
|
virtual void listenOnSocket(CArchSocket s) = 0;
|
||||||
|
|
||||||
|
//! Accept connection on socket
|
||||||
|
/*!
|
||||||
|
Accepts a connection on socket \c s, returning a new socket for the
|
||||||
|
connection and filling in \c addr with the address of the remote
|
||||||
|
end. \c addr may be NULL if the remote address isn't required.
|
||||||
|
The original socket \c s is unaffected and remains in the listening
|
||||||
|
state. The new socket shares most of the properties of \c s except
|
||||||
|
it's not in the listening state, it's connected, and is not
|
||||||
|
non-blocking even is \c s is.
|
||||||
|
|
||||||
|
This call blocks if \c s is not non-blocking and there are no
|
||||||
|
pending connection requests.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual CArchSocket acceptSocket(CArchSocket s, CArchNetAddress* addr) = 0;
|
virtual CArchSocket acceptSocket(CArchSocket s, CArchNetAddress* addr) = 0;
|
||||||
virtual void connectSocket(CArchSocket s, CArchNetAddress name) = 0;
|
|
||||||
|
//! Connect socket
|
||||||
|
/*!
|
||||||
|
Connects the socket \c s to the remote address \c addr. This call
|
||||||
|
blocks if \c s is not non-blocking. If \c s is non-blocking then
|
||||||
|
the client can \c poll() for writability to detect a connection.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
|
virtual void connectSocket(CArchSocket s, CArchNetAddress addr) = 0;
|
||||||
|
|
||||||
|
//! Check socket state
|
||||||
|
/*!
|
||||||
|
Tests the state of \c num sockets for readability and/or writability.
|
||||||
|
Waits up to \c timeout seconds for some socket to become readable
|
||||||
|
and/or writable (or indefinitely if \c timeout < 0). Returns the
|
||||||
|
number of sockets that were readable (if readability was being
|
||||||
|
queried) or writable (if writablility was being queried) and sets
|
||||||
|
the \c m_revents members of the entries. \c kPOLLERR and \c kPOLLNVAL
|
||||||
|
are set in \c m_revents as appropriate. If a socket indicates
|
||||||
|
\c kPOLLERR then \c throwErrorOnSocket() can be used to determine
|
||||||
|
the type of error.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual int pollSocket(CPollEntry[], int num, double timeout) = 0;
|
virtual int pollSocket(CPollEntry[], int num, double timeout) = 0;
|
||||||
|
|
||||||
|
//! Read data from socket
|
||||||
|
/*!
|
||||||
|
Read up to \c len bytes from socket \c s in \c buf and return the
|
||||||
|
number of bytes read. The number of bytes can be less than \c len
|
||||||
|
if not enough data is available. Returns 0 if the remote end has
|
||||||
|
disconnected and there is no more queued received data. Blocks if
|
||||||
|
the socket is not non-blocking and there is no queued received data.
|
||||||
|
If non-blocking and there is no queued received data then throws
|
||||||
|
XArchNetworkWouldBlock.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual size_t readSocket(CArchSocket s, void* buf, size_t len) = 0;
|
virtual size_t readSocket(CArchSocket s, void* buf, size_t len) = 0;
|
||||||
|
|
||||||
|
//! Write data from socket
|
||||||
|
/*!
|
||||||
|
Write up to \c len bytes to socket \c s from \c buf and return the
|
||||||
|
number of bytes written. The number of bytes can be less than
|
||||||
|
\c len if the remote end disconnected or the socket is non-blocking
|
||||||
|
and the internal buffers are full. If non-blocking and the internal
|
||||||
|
buffers are full before any data is written then throws
|
||||||
|
XArchNetworkWouldBlock.
|
||||||
|
|
||||||
|
(Cancellation point)
|
||||||
|
*/
|
||||||
virtual size_t writeSocket(CArchSocket s,
|
virtual size_t writeSocket(CArchSocket s,
|
||||||
const void* buf, size_t len) = 0;
|
const void* buf, size_t len) = 0;
|
||||||
virtual void throwErrorOnSocket(CArchSocket) = 0;
|
|
||||||
|
//! Check error on socket
|
||||||
|
/*!
|
||||||
|
If the socket \c s is in an error state then throws an appropriate
|
||||||
|
XArchNetwork exception.
|
||||||
|
*/
|
||||||
|
virtual void throwErrorOnSocket(CArchSocket s) = 0;
|
||||||
|
|
||||||
//! Set socket to (non-)blocking operation
|
//! Set socket to (non-)blocking operation
|
||||||
/*!
|
/*!
|
||||||
|
@ -87,17 +235,42 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool setNoDelayOnSocket(CArchSocket, bool noDelay) = 0;
|
virtual bool setNoDelayOnSocket(CArchSocket, bool noDelay) = 0;
|
||||||
|
|
||||||
|
//! Return local host's name
|
||||||
virtual std::string getHostName() = 0;
|
virtual std::string getHostName() = 0;
|
||||||
|
|
||||||
|
//! Create an "any" network address
|
||||||
virtual CArchNetAddress newAnyAddr(EAddressFamily) = 0;
|
virtual CArchNetAddress newAnyAddr(EAddressFamily) = 0;
|
||||||
|
|
||||||
|
//! Copy a network address
|
||||||
virtual CArchNetAddress copyAddr(CArchNetAddress) = 0;
|
virtual CArchNetAddress copyAddr(CArchNetAddress) = 0;
|
||||||
|
|
||||||
|
//! Convert a name to a network address
|
||||||
virtual CArchNetAddress nameToAddr(const std::string&) = 0;
|
virtual CArchNetAddress nameToAddr(const std::string&) = 0;
|
||||||
|
|
||||||
|
//! Destroy a network address
|
||||||
virtual void closeAddr(CArchNetAddress) = 0;
|
virtual void closeAddr(CArchNetAddress) = 0;
|
||||||
|
|
||||||
|
//! Convert an address to a host name
|
||||||
virtual std::string addrToName(CArchNetAddress) = 0;
|
virtual std::string addrToName(CArchNetAddress) = 0;
|
||||||
|
|
||||||
|
//! Convert an address to a string
|
||||||
virtual std::string addrToString(CArchNetAddress) = 0;
|
virtual std::string addrToString(CArchNetAddress) = 0;
|
||||||
|
|
||||||
|
//! Get an address's family
|
||||||
virtual EAddressFamily getAddrFamily(CArchNetAddress) = 0;
|
virtual EAddressFamily getAddrFamily(CArchNetAddress) = 0;
|
||||||
|
|
||||||
|
//! Set the port of an address
|
||||||
virtual void setAddrPort(CArchNetAddress, int port) = 0;
|
virtual void setAddrPort(CArchNetAddress, int port) = 0;
|
||||||
|
|
||||||
|
//! Get the port of an address
|
||||||
virtual int getAddrPort(CArchNetAddress) = 0;
|
virtual int getAddrPort(CArchNetAddress) = 0;
|
||||||
virtual bool isAnyAddr(CArchNetAddress) = 0;
|
|
||||||
|
//! Test for the "any" address
|
||||||
|
/*!
|
||||||
|
Returns true if \c addr is the "any" address. \c newAnyAddr()
|
||||||
|
returns an "any" address.
|
||||||
|
*/
|
||||||
|
virtual bool isAnyAddr(CArchNetAddress addr) = 0;
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,6 +17,11 @@
|
||||||
|
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
|
|
||||||
|
//! Interface for architecture dependent sleeping
|
||||||
|
/*!
|
||||||
|
This interface defines the sleep operations required by
|
||||||
|
synergy. Each architecture must implement this interface.
|
||||||
|
*/
|
||||||
class IArchSleep : public IInterface {
|
class IArchSleep : public IInterface {
|
||||||
public:
|
public:
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
|
|
|
@ -18,11 +18,39 @@
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CArchMBStateImpl
|
||||||
|
\brief Internal multibyte conversion data.
|
||||||
|
An architecture dependent type holding the necessary data for a
|
||||||
|
multibyte to/from wide character conversion.
|
||||||
|
*/
|
||||||
class CArchMBStateImpl;
|
class CArchMBStateImpl;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\var CArchMBState
|
||||||
|
\brief Opaque multibyte conversion state type.
|
||||||
|
An opaque type representing multibyte conversion state.
|
||||||
|
*/
|
||||||
typedef CArchMBStateImpl* CArchMBState;
|
typedef CArchMBStateImpl* CArchMBState;
|
||||||
|
|
||||||
|
//! Interface for architecture dependent string operations
|
||||||
|
/*!
|
||||||
|
This interface defines the string operations required by
|
||||||
|
synergy. Each architecture must implement this interface.
|
||||||
|
*/
|
||||||
class IArchString : public IInterface {
|
class IArchString : public IInterface {
|
||||||
public:
|
public:
|
||||||
|
//! Wide character encodings
|
||||||
|
/*!
|
||||||
|
The known wide character encodings
|
||||||
|
*/
|
||||||
|
enum EWideCharEncoding {
|
||||||
|
kUCS2, //!< The UCS-2 encoding
|
||||||
|
kUCS4, //!< The UCS-4 encoding
|
||||||
|
kUTF16, //!< The UTF-16 encoding
|
||||||
|
kUTF32 //!< The UTF-32 encoding
|
||||||
|
};
|
||||||
|
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
|
@ -55,6 +83,10 @@ public:
|
||||||
//! Convert wide character to multibyte
|
//! Convert wide character to multibyte
|
||||||
virtual int convWCToMB(char*, wchar_t, CArchMBState) = 0;
|
virtual int convWCToMB(char*, wchar_t, CArchMBState) = 0;
|
||||||
|
|
||||||
|
//! Return the architecture's native wide character encoding
|
||||||
|
virtual EWideCharEncoding
|
||||||
|
getWideCharEncoding() = 0;
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,11 @@
|
||||||
|
|
||||||
#include "IInterface.h"
|
#include "IInterface.h"
|
||||||
|
|
||||||
|
//! Interface for architecture dependent time operations
|
||||||
|
/*!
|
||||||
|
This interface defines the time operations required by
|
||||||
|
synergy. Each architecture must implement this interface.
|
||||||
|
*/
|
||||||
class IArchTime : public IInterface {
|
class IArchTime : public IInterface {
|
||||||
public:
|
public:
|
||||||
//! @name manipulators
|
//! @name manipulators
|
||||||
|
|
|
@ -61,7 +61,6 @@ libarch_a_SOURCES = \
|
||||||
IArchString.h \
|
IArchString.h \
|
||||||
IArchTime.h \
|
IArchTime.h \
|
||||||
XArch.h \
|
XArch.h \
|
||||||
XArchImpl.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
EXTRA_libarch_a_SOURCES = \
|
EXTRA_libarch_a_SOURCES = \
|
||||||
CArchConsoleUnix.cpp \
|
CArchConsoleUnix.cpp \
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 XARCHIMPL_H
|
|
||||||
#define XARCHIMPL_H
|
|
||||||
|
|
||||||
// include appropriate architecture implementation
|
|
||||||
#if WINDOWS_LIKE
|
|
||||||
# include "XArchWindows.h"
|
|
||||||
#elif UNIX_LIKE
|
|
||||||
# include "XArchUnix.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -179,10 +179,6 @@ SOURCE=.\XArch.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\XArchImpl.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\XArchWindows.h
|
SOURCE=.\XArchWindows.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
|
|
@ -54,12 +54,7 @@ static const int g_prioritySuffixLength = 2;
|
||||||
static const int g_priorityPad = g_maxPriorityLength +
|
static const int g_priorityPad = g_maxPriorityLength +
|
||||||
g_prioritySuffixLength;
|
g_prioritySuffixLength;
|
||||||
|
|
||||||
//
|
//! Convenience object to lock/unlock a mutex
|
||||||
// CLogLock
|
|
||||||
//
|
|
||||||
// Convenience object to lock/unlock a mutex.
|
|
||||||
//
|
|
||||||
|
|
||||||
class CLogLock {
|
class CLogLock {
|
||||||
public:
|
public:
|
||||||
CLogLock(CArchMutex mutex) : m_mutex(mutex) { ARCH->lockMutex(m_mutex); }
|
CLogLock(CArchMutex mutex) : m_mutex(mutex) { ARCH->lockMutex(m_mutex); }
|
||||||
|
|
|
@ -414,13 +414,31 @@ wchar_t*
|
||||||
CUnicode::UTF8ToWideChar(const CString& src, UInt32& size, bool* errors)
|
CUnicode::UTF8ToWideChar(const CString& src, UInt32& size, bool* errors)
|
||||||
{
|
{
|
||||||
// convert to platform's wide character encoding
|
// convert to platform's wide character encoding
|
||||||
#if WINDOWS_LIKE
|
CString tmp;
|
||||||
CString tmp = UTF8ToUTF16(src, errors);
|
switch (ARCH->getWideCharEncoding()) {
|
||||||
|
case IArchString::kUCS2:
|
||||||
|
tmp = UTF8ToUCS2(src, errors);
|
||||||
size = tmp.size() >> 1;
|
size = tmp.size() >> 1;
|
||||||
#elif UNIX_LIKE
|
break;
|
||||||
CString tmp = UTF8ToUCS4(src, errors);
|
|
||||||
|
case IArchString::kUCS4:
|
||||||
|
tmp = UTF8ToUCS4(src, errors);
|
||||||
size = tmp.size() >> 2;
|
size = tmp.size() >> 2;
|
||||||
#endif
|
break;
|
||||||
|
|
||||||
|
case IArchString::kUTF16:
|
||||||
|
tmp = UTF8ToUTF16(src, errors);
|
||||||
|
size = tmp.size() >> 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IArchString::kUTF32:
|
||||||
|
tmp = UTF8ToUTF32(src, errors);
|
||||||
|
size = tmp.size() >> 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(0 && "unknown wide character encoding");
|
||||||
|
}
|
||||||
|
|
||||||
// copy to a wchar_t array
|
// copy to a wchar_t array
|
||||||
wchar_t* dst = new wchar_t[size];
|
wchar_t* dst = new wchar_t[size];
|
||||||
|
@ -434,11 +452,23 @@ CUnicode::wideCharToUTF8(const wchar_t* src, UInt32 size, bool* errors)
|
||||||
// convert from platform's wide character encoding.
|
// convert from platform's wide character encoding.
|
||||||
// note -- this must include a wide nul character (independent of
|
// note -- this must include a wide nul character (independent of
|
||||||
// the CString's nul character).
|
// the CString's nul character).
|
||||||
#if WINDOWS_LIKE
|
switch (ARCH->getWideCharEncoding()) {
|
||||||
return doUTF16ToUTF8(reinterpret_cast<const UInt8*>(src), size, errors);
|
case IArchString::kUCS2:
|
||||||
#elif UNIX_LIKE
|
return doUCS2ToUTF8(reinterpret_cast<const UInt8*>(src), size, errors);
|
||||||
|
|
||||||
|
case IArchString::kUCS4:
|
||||||
return doUCS4ToUTF8(reinterpret_cast<const UInt8*>(src), size, errors);
|
return doUCS4ToUTF8(reinterpret_cast<const UInt8*>(src), size, errors);
|
||||||
#endif
|
|
||||||
|
case IArchString::kUTF16:
|
||||||
|
return doUTF16ToUTF8(reinterpret_cast<const UInt8*>(src), size, errors);
|
||||||
|
|
||||||
|
case IArchString::kUTF32:
|
||||||
|
return doUTF32ToUTF8(reinterpret_cast<const UInt8*>(src), size, errors);
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(0 && "unknown wide character encoding");
|
||||||
|
return CString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CString
|
CString
|
||||||
|
|
|
@ -17,30 +17,17 @@
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
|
|
||||||
// win32 wants a const char* argument to std::exception c'tor
|
|
||||||
#if WINDOWS_LIKE
|
|
||||||
#include <windows.h>
|
|
||||||
#define STDEXCEPTARG ""
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// default to no argument
|
|
||||||
#ifndef STDEXCEPTARG
|
|
||||||
#define STDEXCEPTARG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// XBase
|
// XBase
|
||||||
//
|
//
|
||||||
|
|
||||||
XBase::XBase() :
|
XBase::XBase() :
|
||||||
// exception(STDEXCEPTARG),
|
|
||||||
m_what()
|
m_what()
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
XBase::XBase(const CString& msg) :
|
XBase::XBase(const CString& msg) :
|
||||||
// exception(STDEXCEPTARG),
|
|
||||||
m_what(msg)
|
m_what(msg)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
|
|
|
@ -16,17 +16,12 @@
|
||||||
#define XBASE_H
|
#define XBASE_H
|
||||||
|
|
||||||
#include "CString.h"
|
#include "CString.h"
|
||||||
/*
|
|
||||||
#include "stdpre.h"
|
|
||||||
#include <exception>
|
|
||||||
#include "stdpost.h"
|
|
||||||
*/
|
|
||||||
|
|
||||||
//! Exception base class
|
//! Exception base class
|
||||||
/*!
|
/*!
|
||||||
This is the base class of most exception types.
|
This is the base class of most exception types.
|
||||||
*/
|
*/
|
||||||
class XBase /*: public std::exception*/ {
|
class XBase {
|
||||||
public:
|
public:
|
||||||
//! Use getWhat() as the result of what()
|
//! Use getWhat() as the result of what()
|
||||||
XBase();
|
XBase();
|
||||||
|
@ -34,7 +29,7 @@ public:
|
||||||
XBase(const CString& msg);
|
XBase(const CString& msg);
|
||||||
virtual ~XBase();
|
virtual ~XBase();
|
||||||
|
|
||||||
// std::exception overrides
|
//! Reason for exception
|
||||||
virtual const char* what() const;
|
virtual const char* what() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -17,8 +17,6 @@ VDEPTH = ./$(VPATH)/$(DEPTH)
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
client.dsp \
|
client.dsp \
|
||||||
CMSWindowsSecondaryScreen.cpp \
|
|
||||||
CMSWindowsSecondaryScreen.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
|
@ -28,14 +26,9 @@ MAINTAINERCLEANFILES = \
|
||||||
noinst_LIBRARIES = libclient.a
|
noinst_LIBRARIES = libclient.a
|
||||||
libclient_a_SOURCES = \
|
libclient_a_SOURCES = \
|
||||||
CClient.cpp \
|
CClient.cpp \
|
||||||
CSecondaryScreen.cpp \
|
|
||||||
CServerProxy.cpp \
|
CServerProxy.cpp \
|
||||||
CXWindowsSecondaryScreen.cpp \
|
|
||||||
CClient.h \
|
CClient.h \
|
||||||
CSecondaryScreen.h \
|
|
||||||
CServerProxy.h \
|
CServerProxy.h \
|
||||||
CXWindowsSecondaryScreen.h \
|
|
||||||
ISecondaryScreenFactory.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(VDEPTH)/lib/common \
|
-I$(VDEPTH)/lib/common \
|
||||||
|
|
|
@ -91,14 +91,6 @@ SOURCE=.\CClient.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsSecondaryScreen.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CSecondaryScreen.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CServerProxy.cpp
|
SOURCE=.\CServerProxy.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
@ -111,20 +103,8 @@ SOURCE=.\CClient.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsSecondaryScreen.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CSecondaryScreen.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CServerProxy.h
|
SOURCE=.\CServerProxy.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\ISecondaryScreenFactory.h
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Resource Files"
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,7 @@ private:
|
||||||
CString m_reason;
|
CString m_reason;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! HTTP exception indicating an unsupported method
|
||||||
class XHTTPAllow : public XHTTP {
|
class XHTTPAllow : public XHTTP {
|
||||||
public:
|
public:
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
class IScreenReceiver;
|
class IScreenReceiver;
|
||||||
class IMSWindowsScreenEventHandler;
|
class IMSWindowsScreenEventHandler;
|
||||||
|
|
||||||
// Microsoft windows screen implementation
|
//! Implementation of IScreen for Microsoft Windows
|
||||||
class CMSWindowsScreen : public IScreen {
|
class CMSWindowsScreen : public IScreen {
|
||||||
public:
|
public:
|
||||||
CMSWindowsScreen(IScreenReceiver*, IMSWindowsScreenEventHandler*);
|
CMSWindowsScreen(IScreenReceiver*, IMSWindowsScreenEventHandler*);
|
||||||
|
|
|
@ -33,6 +33,11 @@ class IScreenReceiver;
|
||||||
class CXWindowsClipboard;
|
class CXWindowsClipboard;
|
||||||
class CXWindowsScreenSaver;
|
class CXWindowsScreenSaver;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class CEvent
|
||||||
|
\brief User event data
|
||||||
|
An architecture dependent type holding user event data.
|
||||||
|
*/
|
||||||
// X11 event
|
// X11 event
|
||||||
class CEvent {
|
class CEvent {
|
||||||
public:
|
public:
|
||||||
|
@ -40,7 +45,7 @@ public:
|
||||||
SInt32 m_result;
|
SInt32 m_result;
|
||||||
};
|
};
|
||||||
|
|
||||||
// X11 screen implementation
|
//! Implementation of IScreen for X11
|
||||||
class CXWindowsScreen : public IScreen {
|
class CXWindowsScreen : public IScreen {
|
||||||
public:
|
public:
|
||||||
CXWindowsScreen(IScreenReceiver*, IScreenEventHandler*);
|
CXWindowsScreen(IScreenReceiver*, IScreenEventHandler*);
|
||||||
|
@ -279,6 +284,7 @@ private:
|
||||||
static CXWindowsScreen* s_screen;
|
static CXWindowsScreen* s_screen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Convenience object to lock/unlock a CXWindowsScreen
|
||||||
class CDisplayLock {
|
class CDisplayLock {
|
||||||
public:
|
public:
|
||||||
CDisplayLock(const CXWindowsScreen*);
|
CDisplayLock(const CXWindowsScreen*);
|
||||||
|
|
|
@ -23,15 +23,19 @@ EXTRA_DIST = \
|
||||||
CMSWindowsClipboardAnyTextConverter.cpp \
|
CMSWindowsClipboardAnyTextConverter.cpp \
|
||||||
CMSWindowsClipboardTextConverter.cpp \
|
CMSWindowsClipboardTextConverter.cpp \
|
||||||
CMSWindowsClipboardUTF16Converter.cpp \
|
CMSWindowsClipboardUTF16Converter.cpp \
|
||||||
|
CMSWindowsPrimaryScreen.cpp \
|
||||||
CMSWindowsScreen.cpp \
|
CMSWindowsScreen.cpp \
|
||||||
CMSWindowsScreenSaver.cpp \
|
CMSWindowsScreenSaver.cpp \
|
||||||
|
CMSWindowsSecondaryScreen.cpp \
|
||||||
CSynergyHook.cpp \
|
CSynergyHook.cpp \
|
||||||
CMSWindowsClipboard.h \
|
CMSWindowsClipboard.h \
|
||||||
CMSWindowsClipboardAnyTextConverter.h \
|
CMSWindowsClipboardAnyTextConverter.h \
|
||||||
CMSWindowsClipboardTextConverter.h \
|
CMSWindowsClipboardTextConverter.h \
|
||||||
CMSWindowsClipboardUTF16Converter.h \
|
CMSWindowsClipboardUTF16Converter.h \
|
||||||
|
CMSWindowsPrimaryScreen.h \
|
||||||
CMSWindowsScreen.h \
|
CMSWindowsScreen.h \
|
||||||
CMSWindowsScreenSaver.h \
|
CMSWindowsScreenSaver.h \
|
||||||
|
CMSWindowsSecondaryScreen.h \
|
||||||
CSynergyHook.h \
|
CSynergyHook.h \
|
||||||
IMSWindowsScreenEventHandler.h \
|
IMSWindowsScreenEventHandler.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
@ -46,15 +50,19 @@ libplatform_a_SOURCES = \
|
||||||
CXWindowsClipboardTextConverter.cpp \
|
CXWindowsClipboardTextConverter.cpp \
|
||||||
CXWindowsClipboardUCS2Converter.cpp \
|
CXWindowsClipboardUCS2Converter.cpp \
|
||||||
CXWindowsClipboardUTF8Converter.cpp \
|
CXWindowsClipboardUTF8Converter.cpp \
|
||||||
|
CXWindowsPrimaryScreen.cpp \
|
||||||
CXWindowsScreen.cpp \
|
CXWindowsScreen.cpp \
|
||||||
CXWindowsScreenSaver.cpp \
|
CXWindowsScreenSaver.cpp \
|
||||||
|
CXWindowsSecondaryScreen.cpp \
|
||||||
CXWindowsUtil.cpp \
|
CXWindowsUtil.cpp \
|
||||||
CXWindowsClipboard.h \
|
CXWindowsClipboard.h \
|
||||||
CXWindowsClipboardTextConverter.h \
|
CXWindowsClipboardTextConverter.h \
|
||||||
CXWindowsClipboardUCS2Converter.h \
|
CXWindowsClipboardUCS2Converter.h \
|
||||||
CXWindowsClipboardUTF8Converter.h \
|
CXWindowsClipboardUTF8Converter.h \
|
||||||
|
CXWindowsPrimaryScreen.h \
|
||||||
CXWindowsScreen.h \
|
CXWindowsScreen.h \
|
||||||
CXWindowsScreenSaver.h \
|
CXWindowsScreenSaver.h \
|
||||||
|
CXWindowsSecondaryScreen.h \
|
||||||
CXWindowsUtil.h \
|
CXWindowsUtil.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
|
|
|
@ -103,12 +103,20 @@ SOURCE=.\CMSWindowsClipboardUTF16Converter.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CMSWindowsPrimaryScreen.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsScreen.cpp
|
SOURCE=.\CMSWindowsScreen.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsScreenSaver.cpp
|
SOURCE=.\CMSWindowsScreenSaver.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CMSWindowsSecondaryScreen.cpp
|
||||||
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Header Files"
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
@ -131,6 +139,10 @@ SOURCE=.\CMSWindowsClipboardUTF16Converter.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CMSWindowsPrimaryScreen.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsScreen.h
|
SOURCE=.\CMSWindowsScreen.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -139,6 +151,10 @@ SOURCE=.\CMSWindowsScreenSaver.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CMSWindowsSecondaryScreen.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\IMSWindowsScreenEventHandler.h
|
SOURCE=.\IMSWindowsScreenEventHandler.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
|
|
@ -17,8 +17,6 @@ VDEPTH = ./$(VPATH)/$(DEPTH)
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
server.dsp \
|
server.dsp \
|
||||||
CMSWindowsPrimaryScreen.cpp \
|
|
||||||
CMSWindowsPrimaryScreen.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = \
|
MAINTAINERCLEANFILES = \
|
||||||
|
@ -32,18 +30,13 @@ libserver_a_SOURCES = \
|
||||||
CConfig.cpp \
|
CConfig.cpp \
|
||||||
CHTTPServer.cpp \
|
CHTTPServer.cpp \
|
||||||
CPrimaryClient.cpp \
|
CPrimaryClient.cpp \
|
||||||
CPrimaryScreen.cpp \
|
|
||||||
CServer.cpp \
|
CServer.cpp \
|
||||||
CXWindowsPrimaryScreen.cpp \
|
|
||||||
CClientProxy.h \
|
CClientProxy.h \
|
||||||
CClientProxy1_0.h \
|
CClientProxy1_0.h \
|
||||||
CConfig.h \
|
CConfig.h \
|
||||||
CHTTPServer.h \
|
CHTTPServer.h \
|
||||||
CPrimaryClient.h \
|
CPrimaryClient.h \
|
||||||
CPrimaryScreen.h \
|
|
||||||
CServer.h \
|
CServer.h \
|
||||||
CXWindowsPrimaryScreen.h \
|
|
||||||
IPrimaryScreenFactory.h \
|
|
||||||
$(NULL)
|
$(NULL)
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(VDEPTH)/lib/common \
|
-I$(VDEPTH)/lib/common \
|
||||||
|
|
|
@ -103,18 +103,10 @@ SOURCE=.\CHTTPServer.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsPrimaryScreen.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CPrimaryClient.cpp
|
SOURCE=.\CPrimaryClient.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CPrimaryScreen.cpp
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CServer.cpp
|
SOURCE=.\CServer.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
|
@ -139,24 +131,12 @@ SOURCE=.\CHTTPServer.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CMSWindowsPrimaryScreen.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CPrimaryClient.h
|
SOURCE=.\CPrimaryClient.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CPrimaryScreen.h
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\CServer.h
|
SOURCE=.\CServer.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\IPrimaryScreenFactory.h
|
|
||||||
# End Source File
|
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Resource Files"
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
|
|
@ -25,24 +25,30 @@ MAINTAINERCLEANFILES = \
|
||||||
|
|
||||||
noinst_LIBRARIES = libsynergy.a
|
noinst_LIBRARIES = libsynergy.a
|
||||||
libsynergy_a_SOURCES = \
|
libsynergy_a_SOURCES = \
|
||||||
|
CClipboard.cpp \
|
||||||
CInputPacketStream.cpp \
|
CInputPacketStream.cpp \
|
||||||
COutputPacketStream.cpp \
|
COutputPacketStream.cpp \
|
||||||
|
CPrimaryScreen.cpp \
|
||||||
CProtocolUtil.cpp \
|
CProtocolUtil.cpp \
|
||||||
CClipboard.cpp \
|
CSecondaryScreen.cpp \
|
||||||
XScreen.cpp \
|
XScreen.cpp \
|
||||||
XSynergy.cpp \
|
XSynergy.cpp \
|
||||||
CClipboard.h \
|
CClipboard.h \
|
||||||
CInputPacketStream.h \
|
CInputPacketStream.h \
|
||||||
COutputPacketStream.h \
|
COutputPacketStream.h \
|
||||||
|
CPrimaryScreen.h \
|
||||||
CProtocolUtil.h \
|
CProtocolUtil.h \
|
||||||
|
CSecondaryScreen.h \
|
||||||
ClipboardTypes.h \
|
ClipboardTypes.h \
|
||||||
IClient.h \
|
IClient.h \
|
||||||
IClipboard.h \
|
IClipboard.h \
|
||||||
|
IPrimaryScreenFactory.h \
|
||||||
IPrimaryScreenReceiver.h \
|
IPrimaryScreenReceiver.h \
|
||||||
IScreen.h \
|
IScreen.h \
|
||||||
IScreenEventHandler.h \
|
IScreenEventHandler.h \
|
||||||
IScreenReceiver.h \
|
IScreenReceiver.h \
|
||||||
IScreenSaver.h \
|
IScreenSaver.h \
|
||||||
|
ISecondaryScreenFactory.h \
|
||||||
IServer.h \
|
IServer.h \
|
||||||
KeyTypes.h \
|
KeyTypes.h \
|
||||||
MouseTypes.h \
|
MouseTypes.h \
|
||||||
|
|
|
@ -99,10 +99,18 @@ SOURCE=.\COutputPacketStream.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CPrimaryScreen.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CProtocolUtil.cpp
|
SOURCE=.\CProtocolUtil.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CSecondaryScreen.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\XScreen.cpp
|
SOURCE=.\XScreen.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -131,10 +139,18 @@ SOURCE=.\COutputPacketStream.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CPrimaryScreen.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\CProtocolUtil.h
|
SOURCE=.\CProtocolUtil.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\CSecondaryScreen.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\IClient.h
|
SOURCE=.\IClient.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -143,6 +159,10 @@ SOURCE=.\IClipboard.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\IPrimaryScreenFactory.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\IPrimaryScreenReceiver.h
|
SOURCE=.\IPrimaryScreenReceiver.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -163,6 +183,10 @@ SOURCE=.\IScreenSaver.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\ISecondaryScreenFactory.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\IServer.h
|
SOURCE=.\IServer.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
Loading…
Reference in New Issue