aboutsummaryrefslogtreecommitdiff
path: root/nxcomp/include
diff options
context:
space:
mode:
authorMihai Moldovan <ionic@ionic.de>2017-07-26 10:38:46 +0200
committerMihai Moldovan <ionic@ionic.de>2017-07-26 10:38:46 +0200
commit7897834ce578dc394649ed09acb9f95fc04915ff (patch)
treea0bcbfa2c4ae1111ad3d49390c7abd0ae3a9a2ed /nxcomp/include
parent9193d11eeeea933e293acd5e0f03fa4e9887186b (diff)
parent4afc641fdd8c03bd708f50e0c3691b5de7ea1dba (diff)
downloadnx-libs-7897834ce578dc394649ed09acb9f95fc04915ff.tar.gz
nx-libs-7897834ce578dc394649ed09acb9f95fc04915ff.tar.bz2
nx-libs-7897834ce578dc394649ed09acb9f95fc04915ff.zip
Merge branch 'sunweaver-pr/nxcomp-autoreconf' into 3.6.x
Attributes GH PR #480: https://github.com/ArcticaProject/nx-libs/pull/480
Diffstat (limited to 'nxcomp/include')
-rw-r--r--nxcomp/include/MD5.h91
-rw-r--r--nxcomp/include/NX.h471
-rw-r--r--nxcomp/include/NXalert.h276
-rw-r--r--nxcomp/include/NXpack.h141
-rw-r--r--nxcomp/include/NXproto.h447
-rw-r--r--nxcomp/include/NXvars.h201
6 files changed, 1627 insertions, 0 deletions
diff --git a/nxcomp/include/MD5.h b/nxcomp/include/MD5.h
new file mode 100644
index 000000000..698c995d8
--- /dev/null
+++ b/nxcomp/include/MD5.h
@@ -0,0 +1,91 @@
+/*
+ Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved.
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ L. Peter Deutsch
+ ghost@aladdin.com
+
+ */
+/* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */
+/*
+ Independent implementation of MD5 (RFC 1321).
+
+ This code implements the MD5 Algorithm defined in RFC 1321, whose
+ text is available at
+ http://www.ietf.org/rfc/rfc1321.txt
+ The code is derived from the text of the RFC, including the test suite
+ (section A.5) but excluding the rest of Appendix A. It does not include
+ any code or documentation that is identified in the RFC as being
+ copyrighted.
+
+ The original and principal author of md5.h is L. Peter Deutsch
+ <ghost@aladdin.com>. Other authors are noted in the change history
+ that follows (in reverse chronological order):
+
+ 2002-04-13 lpd Removed support for non-ANSI compilers; removed
+ references to Ghostscript; clarified derivation from RFC 1321;
+ now handles byte order either statically or dynamically.
+ 1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
+ 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
+ added conditionalization for C++ compilation from Martin
+ Purschke <purschke@bnl.gov>.
+ 1999-05-03 lpd Original version.
+ */
+
+#ifndef md5_INCLUDED
+# define md5_INCLUDED
+
+/*
+ * This package supports both compile-time and run-time determination of CPU
+ * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
+ * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
+ * defined as non-zero, the code will be compiled to run only on big-endian
+ * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
+ * run on either big- or little-endian CPUs, but will run slightly less
+ * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
+ */
+
+typedef unsigned char md5_byte_t; /* 8-bit byte */
+typedef unsigned int md5_word_t; /* 32-bit word */
+
+/* Define the state of the MD5 Algorithm. */
+typedef struct md5_state_s {
+ md5_word_t count[2]; /* message length in bits, lsw first */
+ md5_word_t abcd[4]; /* digest buffer */
+ md5_byte_t buf[64]; /* accumulate block */
+} md5_state_t;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Initialize the algorithm. */
+void md5_init(md5_state_t *pms);
+
+/* Append a string to the message. */
+void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
+
+/* Finish the message and return the digest. */
+void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif
+
+#endif /* md5_INCLUDED */
diff --git a/nxcomp/include/NX.h b/nxcomp/include/NX.h
new file mode 100644
index 000000000..7ec79b4b1
--- /dev/null
+++ b/nxcomp/include/NX.h
@@ -0,0 +1,471 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
+/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
+/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de> */
+/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de> */
+/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
+/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
+/* */
+/* NXCOMP, NX protocol compression and NX extensions to this software */
+/* are copyright of the aforementioned persons and companies. */
+/* */
+/* Redistribution and use of the present software is allowed according */
+/* to terms specified in the file LICENSE.nxcomp which comes in the */
+/* source distribution. */
+/* */
+/* All rights reserved. */
+/* */
+/* NOTE: This software has received contributions from various other */
+/* contributors, only the core maintainers and supporters are listed as */
+/* copyright holders. Please contact us, if you feel you should be listed */
+/* as copyright holder, as well. */
+/* */
+/**************************************************************************/
+
+#ifndef NX_H
+#define NX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <unistd.h>
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/select.h>
+#include <sys/uio.h>
+
+#define NX_FD_ANY -1
+
+#define NX_MODE_ANY -1
+#define NX_MODE_CLIENT 1
+#define NX_MODE_SERVER 2
+
+#define NX_DISPLAY_ANY NULL
+
+#define NX_SIGNAL_ANY -1
+#define NX_SIGNAL_ENABLE 1
+#define NX_SIGNAL_DISABLE 2
+#define NX_SIGNAL_RAISE 3
+#define NX_SIGNAL_FORWARD 4
+
+#define NX_POLICY_IMMEDIATE 1
+#define NX_POLICY_DEFERRED 2
+
+#define NX_ALERT_REMOTE 0
+#define NX_ALERT_LOCAL 1
+
+#define NX_HANDLER_FLUSH 0
+#define NX_HANDLER_STATISTICS 1
+
+#define NX_STATISTICS_PARTIAL 0
+#define NX_STATISTICS_TOTAL 1
+
+#define NX_CHANNEL_X11 0
+#define NX_CHANNEL_CUPS 1
+#define NX_CHANNEL_SMB 2
+#define NX_CHANNEL_MEDIA 3
+#define NX_CHANNEL_HTTP 4
+#define NX_CHANNEL_FONT 5
+#define NX_CHANNEL_SLAVE 6
+
+#define NX_FILE_SESSION 0
+#define NX_FILE_ERRORS 1
+#define NX_FILE_OPTIONS 2
+#define NX_FILE_STATS 3
+
+/*
+ * The following are the new interfaces to the NX transport. The
+ * NX proxy software is now intended to be run as a library of a
+ * higher level communication manager (nxssh, nxhttp, nxrtp, etc,
+ * not only nxproxy). This is a work-in-progress, so expect these
+ * interfaces to change in future. At the present moment, as an
+ * example, there is no provision for creating and managing mul-
+ * tiple proxy connections.
+ */
+
+/*
+ * Attach a NX transport to the provided descriptor. This should be
+ * done after having created a pair of connected sockets.
+ */
+
+extern int NXTransCreate(int fd, int mode, const char *options);
+
+/*
+ * Tell the proxy to use the second descriptor as its own end of
+ * the internal connection to the NX agent. The NX agent will use
+ * the first descriptor. Setting an agent connection will have the
+ * effect of disabling further X client connections and, if it is
+ * possible, will trigger the use of the memory-to-memory transport.
+ */
+
+extern int NXTransAgent(int fd[2]);
+
+/*
+ * Prepare the file sets and the timeout for a later execution of
+ * the select(). The masks and the timeout must persist across all
+ * the calls, so if you don't need any of the values, it is requi-
+ * red that you create empty masks and a default timeout. To save
+ * a check at each run, all the functions below assume that valid
+ * pointers are passed.
+ */
+
+extern int NXTransPrepare(int *maxfds, fd_set *readfds,
+ fd_set *writefds, struct timeval *timeout);
+
+/*
+ * Call select() to find out the descriptors in the sets having
+ * pending data.
+ */
+
+extern int NXTransSelect(int *result, int *error, int *maxfds, fd_set *readfds,
+ fd_set *writefds, struct timeval *timeout);
+
+/*
+ * Perform the required I/O on all the NX descriptors having pen-
+ * ding data. This can include reading and writing to the NX chan-
+ * nels, encoding and decoding the proxy data or managing any of
+ * the other NX resources.
+ */
+
+extern int NXTransExecute(int *result, int *error, int *maxfds, fd_set *readfds,
+ fd_set *writefds, struct timeval *timeout);
+
+/*
+ * Run an empty loop, giving to the NX transport a chance to check
+ * its descriptors.
+ */
+
+extern int NXTransContinue(struct timeval *timeout);
+
+/*
+ * Perform I/O on the given descriptors. If memory-to-memory trans-
+ * port has been activated and the descriptor is recognized as a
+ * valid agent connection, then the functions will read and write
+ * the data directly to the proxy buffer, otherwise the correspond-
+ * ing network operation will be performed.
+ */
+
+extern int NXTransRead(int fd, char *data, int size);
+extern int NXTransWrite(int fd, char *data, int size);
+extern int NXTransReadable(int fd, int *readable);
+
+extern int NXTransReadVector(int fd, struct iovec *iovdata, int iovsize);
+extern int NXTransWriteVector(int fd, struct iovec *iovdata, int iovsize);
+
+extern int NXTransClose(int fd);
+
+/*
+ * Return true if the NX transport is running. The fd parameter can
+ * be either the local descriptor attached to the NX transport or
+ * NX_FD_ANY.
+ */
+
+extern int NXTransRunning(int fd);
+
+/*
+ * Close down the NX transport and free all the allocated resources.
+ * The fd parameter can be either the local descriptor or NX_FD_ANY.
+ * This must be explicitly called by the agent before the proxy can
+ * start the tear down procedure.
+ */
+
+extern int NXTransDestroy(int fd);
+
+/*
+ * Tell to the proxy how to handle the standard POSIX signals. For
+ * example, given the SIGINT signal, the caller can specify any of
+ * the following actions:
+ *
+ * NX_SIGNAL_ENABLE: A signal handler will have to be installed by
+ * the library, so that it can be intercepted by
+ * the proxy.
+ *
+ * NX_SIGNAL_DISABLE: The signal will be handled by the caller and,
+ * eventually, forwarded to the proxy by calling
+ * NXTransSignal() explicitly.
+ *
+ * NX_SIGNAL_RAISE: The signal must be handled now, as if it had
+ * been delivered by the operating system. This
+ * function can be called by the agent with the
+ * purpose of propagating a signal to the proxy.
+ *
+ * NX_SIGNAL_FORWARD: A signal handler will have to be installed by
+ * the library but the library will have to call
+ * the original signal handler when the signal
+ * is received.
+ *
+ * As a rule of thumb, agents should let the proxy handle SIGUSR1
+ * and SIGUSR2, used for producing the NX protocol statistics, and
+ * SIGHUP, used for disconnecting the NX transport.
+ *
+ * The following signals are blocked by default upon creation of the
+ * NX transport:
+ *
+ * SIGCHLD These signals should be always put under the control
+ * SIGUSR1 of the proxy. If agents are intercepting them, agents
+ * SIGUSR2 should later call NXTransSignal(..., NX_SIGNAL_RAISE)
+ * SIGHUP to forward the signal to the proxy. As an alternative
+ * they can specify a NX_SIGNAL_FORWARD action, so they,
+ * in turn, can be notified about the signal. This can
+ * be especially useful for SIGCHLD.
+ *
+ * SIGINT These signals should be intercepted by agents. Agents
+ * SIGTERM should ensure that NXTransDestroy() is called before
+ * exiting, to give the proxy a chance to shut down the
+ * NX transport.
+ *
+ * SIGPIPE This signal is blocked by the proxy, but not used to
+ * implement any functionality. It can be handled by the
+ * NX agent without affecting the proxy.
+ *
+ * SIGALRM This is now used by the proxy and agents should not
+ * redefine it. Agents can use the signal to implement
+ * their own timers but should not interleave calls to
+ * the NX transport and should restore the old handler
+ * when the timeout is raised.
+ *
+ * SIGVTALRM These signals are not used but may be used in future
+ * SIGWINCH versions of the library.
+ * SIGIO
+ * SIGTSTP
+ * SIGTTIN
+ * SIGTTOU
+ *
+ * By calling NXTransSignal(..., NX_SIGNAL_DISABLE) nxcomp will res-
+ * tore the signal handler that was saved at the time the proxy hand-
+ * ler was installed. This means that you should call the function
+ * just after the XOpenDisplay() or any other function used to init-
+ * ialize the NX transport.
+ */
+
+extern int NXTransSignal(int signal, int action);
+
+/*
+ * Return a value between 0 and 9 indicating the congestion level
+ * based on the tokens still available. A value of 9 means that
+ * the link is congested and no further data can be sent.
+ */
+
+extern int NXTransCongestion(int fd);
+
+/*
+ * Let the application to be notified by the proxy when an event oc-
+ * curs. The parameter, as set at the time the handler is installed,
+ * is passed each time to the callback function. The parameter is
+ * presumably the display pointer, given that at the present moment
+ * the NX transport doesn't have access to the display structure and
+ * so wouldn't be able to determine the display to pass to the call-
+ * back function.
+ *
+ * NX_HANDLER_FLUSH: The handler function is called when some
+ * more data has been written to the proxy
+ * link.
+ *
+ * The data is the number of bytes written.
+ *
+ * NX_HANDLER_STATISTICS: This handler is called to let the agent
+ * include arbitrary data in the transport
+ * statistics. The parameter, in this case,
+ * is a pointer to a pointer to a null term-
+ * inated string. The pointer is set at the
+ * time the handler is registered. The point-
+ * ed string will have to be filled by the
+ * agent with its statistics data.
+ *
+ * The data can be NX_STATISTICS_PARTIAL or NX_STATISTICS_TOTAL. The
+ * agent can refer to the value by using the NXStatisticsPartial and
+ * NXStatisticsTotal constants defined in NXvars.h.
+ *
+ * Note that these interfaces are used by Xlib and nxcompext. Agents
+ * should never call these interfaces directly, but use the nxcompext
+ * wrapper.
+ */
+
+extern int NXTransHandler(int fd, int type, void (*handler)(void *parameter,
+ int reason), void *parameter);
+
+/*
+ * Set the policy to be used by the NX transport to write data to the
+ * proxy link:
+ *
+ * NX_POLICY_IMMEDIATE: When set to immediate, the proxy will try to
+ * write the data just after having encoded it.
+ *
+ * NX_POLICY_DEFERRED: When policy is set to deferred, data will be
+ * accumulated in a buffer and written to the
+ * remote proxy when NXTransFlush() is called by
+ * the agent.
+ */
+
+extern int NXTransPolicy(int fd, int type);
+
+/*
+ * Query the number of bytes that have been accumulated for a deferred
+ * flush.
+ */
+
+extern int NXTransFlushable(int fd);
+
+/*
+ * Tell to the NX transport to write all the accumulated data to the
+ * remote proxy.
+ */
+
+extern int NXTransFlush(int fd);
+
+/*
+ * Create a new channel of the given type. It returns 1 on success,
+ * 0 if the NX transport is not running, or -1 in the case of error.
+ * On success, the descriptor provided by the caller can be later
+ * used for the subsequent I/O. The type parameter not only tells to
+ * the proxy the remote port where the channel has to be connected,
+ * but also gives a hint about the type of data that will be carried
+ * by the channel, so that the proxy can try to optimize the traffic
+ * on the proxy link.
+ *
+ * NX_CHANNEL_X: The channel will carry X traffic and it
+ * will be connected to the remote X display.
+ *
+ * NX_CHANNEL_CUPS: The channel will carry CUPS/IPP protocol.
+ *
+ * NX_CHANNEL_SMB: The channel will carry SMB/CIFS protocol.
+ *
+ * NX_CHANNEL_MEDIA: The channel will transport audio or other
+ * multimedia data.
+ *
+ * NX_CHANNEL_HTTP: The channel will carry HTTP protocol.
+ *
+ * NX_CHANNEL_FONT: The channel will forward a X font server
+ * connection.
+ *
+ * Only a proxy running at the NX server/X client side will be able
+ * to create a X, CUPS, SMB, MEDIA and HTTP channel. A proxy running
+ * at the NX client/X server side can create font server connections.
+ * The channel creation will also fail if the remote end has not been
+ * set up to forward the connection.
+ *
+ * To create a new channel the agent will have to set up a socketpair
+ * and pass to the proxy one of the socket descriptors.
+ *
+ * Example:
+ *
+ * #include <sys/types.h>
+ * #include <sys/socket.h>
+ *
+ * int fds[2];
+ *
+ * if (socketpair(PF_LOCAL, SOCK_STREAM, 0, fds) < 0)
+ * {
+ * ...
+ * }
+ * else
+ * {
+ * //
+ * // Use fds[0] locally and let the
+ * // proxy use fds[1].
+ * //
+ *
+ * if (NXTransChannel(NX_FD_ANY, fds[1], NX_CHANNEL_X) <= 0)
+ * {
+ * ...
+ * }
+ *
+ * //
+ * // The agent can now use fds[0] in
+ * // read(), write() and select()
+ * // system calls.
+ * //
+ *
+ * ...
+ * }
+ *
+ * Note that all the I/O on the descriptor should be non-blocking, to
+ * give a chance to the NX transport to run in the background and handle
+ * the data that will be fed to the agent's side of the socketpair. This
+ * will happen automatically, as long as the agent uses the XSelect()
+ * version of the select() function (as it is normal whenever performing
+ * Xlib I/O). In all the other cases, like presumably in the agent's main
+ * loop, the agent will have to loop through NXTransPrepare(), NXTrans-
+ * Select() and NXTransExecute() functions explicitly, adding to the sets
+ * the descriptors that are awaited by the agent. Please check the imple-
+ * mentation of _XSelect() in nx-X11/lib/X11/XlibInt.c for an example.
+ */
+
+extern int NXTransChannel(int fd, int channelfd, int type);
+
+/*
+ * Return the name of the files used by the proxy for the current session.
+ *
+ * The type parameter can be:
+ *
+ * NX_FILE_SESSION: Usually the file 'session' in the user's session
+ * directory.
+ *
+ * NX_FILE_ERRORS: The file used for the diagnostic output. Usually
+ * the file 'errors' in the session directory.
+ *
+ * NX_FILE_OPTIONS: The file containing the NX options, if any.
+ *
+ * NX_FILE_STATS: The file used for the statistics output.
+ *
+ * The returned string is allocated in static memory. The caller should
+ * copy the string upon returning from the function, without freeing the
+ * pointer.
+ */
+
+extern const char *NXTransFile(int type);
+
+/*
+ * Return the time in milliseconds elapsed since the last call to this
+ * same function.
+ */
+
+extern long NXTransTime(void);
+
+/*
+ * Other interfaces to the internal transport functions.
+ */
+
+extern int NXTransProxy(int fd, int mode, const char *display);
+
+extern int NXTransClient(const char *display);
+
+extern int NXTransDialog(const char *caption, const char *message,
+ const char *window, const char *type, int local,
+ const char *display);
+
+extern int NXTransAlert(int code, int local);
+
+extern int NXTransWatchdog(int timeout);
+
+extern int NXTransKeeper(int caches, int images, const char *root);
+
+extern void NXTransExit(int code) __attribute__((noreturn));
+
+extern int NXTransParseCommandLine(int argc, const char **argv);
+extern int NXTransParseEnvironment(const char *env, int force);
+
+extern void NXTransCleanup(void) __attribute__((noreturn));
+
+/*
+ * Cleans up the global and local state
+ * (the same way as NXTransCleanup does)
+ * but does not exit the process
+ * Needed for IOS platform
+ */
+extern void NXTransCleanupForReconnect(void);
+
+extern const char* NXVersion(void);
+extern int NXMajorVersion(void);
+extern int NXMinorVersion(void);
+extern int NXPatchVersion(void);
+extern int NXMaintenancePatchVersion(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NX_H */
diff --git a/nxcomp/include/NXalert.h b/nxcomp/include/NXalert.h
new file mode 100644
index 000000000..dca2f44ca
--- /dev/null
+++ b/nxcomp/include/NXalert.h
@@ -0,0 +1,276 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
+/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
+/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de> */
+/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de> */
+/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
+/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
+/* */
+/* NXCOMP, NX protocol compression and NX extensions to this software */
+/* are copyright of the aforementioned persons and companies. */
+/* */
+/* Redistribution and use of the present software is allowed according */
+/* to terms specified in the file LICENSE.nxcomp which comes in the */
+/* source distribution. */
+/* */
+/* All rights reserved. */
+/* */
+/* NOTE: This software has received contributions from various other */
+/* contributors, only the core maintainers and supporters are listed as */
+/* copyright holders. Please contact us, if you feel you should be listed */
+/* as copyright holder, as well. */
+/* */
+/**************************************************************************/
+
+#ifndef NXalert_H
+#define NXalert_H
+
+#define ALERT_CAPTION_PREFIX "NX - "
+
+#define INTERNAL_ERROR_ALERT 1
+#define INTERNAL_ERROR_ALERT_TYPE "error"
+#define INTERNAL_ERROR_ALERT_STRING \
+"\
+An unrecoverable internal error was detected.\n\
+Press OK to terminate the current session.\n\
+"
+
+#define CLOSE_DEAD_X_CONNECTION_CLIENT_ALERT 2
+#define CLOSE_DEAD_X_CONNECTION_CLIENT_ALERT_TYPE "yesno"
+#define CLOSE_DEAD_X_CONNECTION_CLIENT_ALERT_STRING \
+"\
+One of the applications currently in use is not responding.\n\
+Do you want to terminate the current session?\n\
+"
+
+#define CLOSE_DEAD_X_CONNECTION_SERVER_ALERT 3
+#define CLOSE_DEAD_X_CONNECTION_SERVER_ALERT_TYPE "yesno"
+#define CLOSE_DEAD_X_CONNECTION_SERVER_ALERT_STRING \
+"\
+One of the applications did not behave correctly and caused\n\
+the X server to stop responding in a timely fashion. Do you\n\
+want to terminate the current session?\n\
+"
+
+#define CLOSE_DEAD_PROXY_CONNECTION_CLIENT_ALERT 4
+#define CLOSE_DEAD_PROXY_CONNECTION_CLIENT_ALERT_TYPE NULL
+#define CLOSE_DEAD_PROXY_CONNECTION_CLIENT_ALERT_STRING NULL
+
+#define CLOSE_DEAD_PROXY_CONNECTION_SERVER_ALERT 5
+#define CLOSE_DEAD_PROXY_CONNECTION_SERVER_ALERT_TYPE "yesno"
+#define CLOSE_DEAD_PROXY_CONNECTION_SERVER_ALERT_STRING \
+"\
+No response received from the remote server.\n\
+Do you want to terminate the current session?\n\
+"
+
+#define RESTART_DEAD_PROXY_CONNECTION_CLIENT_ALERT 6
+#define RESTART_DEAD_PROXY_CONNECTION_CLIENT_ALERT_TYPE NULL
+#define RESTART_DEAD_PROXY_CONNECTION_CLIENT_ALERT_STRING NULL
+
+#define RESTART_DEAD_PROXY_CONNECTION_SERVER_ALERT 7
+#define RESTART_DEAD_PROXY_CONNECTION_SERVER_ALERT_TYPE "yesno"
+#define RESTART_DEAD_PROXY_CONNECTION_SERVER_ALERT_STRING \
+"\
+Connection with remote server was shut down. NX will try\n\
+to establish a new server connection. Session could have\n\
+been left in a unusable state. Do you want to terminate\n\
+the session?\n\
+"
+
+#define CLOSE_UNRESPONSIVE_X_SERVER_ALERT 8
+#define CLOSE_UNRESPONSIVE_X_SERVER_ALERT_TYPE "panic"
+#define CLOSE_UNRESPONSIVE_X_SERVER_ALERT_STRING \
+"\
+You pressed the key sequence CTRL+ALT+SHIFT+ESC.\n\
+This is probably because your X server has become\n\
+unresponsive. Session will be terminated in 30\n\
+seconds unless you abort the procedure by pressing\n\
+the Cancel button.\n\
+"
+
+#define WRONG_PROXY_VERSION_ALERT 9
+#define WRONG_PROXY_VERSION_ALERT_TYPE "ok"
+#define WRONG_PROXY_VERSION_ALERT_STRING \
+"\
+Local NX libraries version " VERSION " do not match the NX\n\
+version of the remote server. Please check the error\n\
+log on the server to find out which client version you\n\
+need to install to be able to access this server.\n\
+"
+
+#define FAILED_PROXY_CONNECTION_CLIENT_ALERT 10
+#define FAILED_PROXY_CONNECTION_CLIENT_ALERT_TYPE NULL
+#define FAILED_PROXY_CONNECTION_CLIENT_ALERT_STRING NULL
+
+#define FAILED_PROXY_CONNECTION_SERVER_ALERT 11
+#define FAILED_PROXY_CONNECTION_SERVER_ALERT_TYPE "yesno"
+#define FAILED_PROXY_CONNECTION_SERVER_ALERT_STRING \
+"\
+Could not yet establish the connection to the remote\n\
+proxy. Do you want to terminate the current session?\n\
+"
+
+#define MISSING_PROXY_CACHE_ALERT 12
+#define MISSING_PROXY_CACHE_ALERT_TYPE "ok"
+#define MISSING_PROXY_CACHE_ALERT_STRING \
+"\
+NX was unable to negotiate a cache for this session.\n\
+This may happen if this is the first time you run a\n\
+session on this server or if cache was corrupted or\n\
+produced by an incompatible NX version.\n\
+"
+
+#define ABORT_PROXY_CONNECTION_ALERT 13
+#define ABORT_PROXY_CONNECTION_ALERT_TYPE "ok"
+#define ABORT_PROXY_CONNECTION_ALERT_STRING \
+"\
+The connection with the remote server was shut down.\n\
+Please check the state of your network connection.\n\
+"
+
+/*
+ * The one below is a special alert, used to close
+ * a previous alert that is running on the given
+ * side. This can be used to get rid of a message
+ * that has ceased to hold true.
+ */
+
+#define DISPLACE_MESSAGE_ALERT 14
+#define DISPLACE_MESSAGE_ALERT_TYPE NULL
+#define DISPLACE_MESSAGE_ALERT_STRING NULL
+
+/*
+ * These are the other alert messages that were
+ * added in the 1.5.0 release. The first is never
+ * shown and is intended just for testing.
+ */
+
+#define GREETING_MESSAGE_ALERT 15
+#define GREETING_MESSAGE_ALERT_TYPE "ok"
+#define GREETING_MESSAGE_ALERT_STRING \
+"\
+Welcome to NX from the NoMachine team. We really\n\
+hope you will enjoy this wonderful software as much\n\
+as we had fun making it ;-).\n\
+"
+
+/*
+ * These alerts are intended to notify the user
+ * of the reason why the agent failed to resume
+ * the session.
+ */
+
+#define START_RESUME_SESSION_ALERT 16
+#define START_RESUME_SESSION_ALERT_TYPE "ok"
+#define START_RESUME_SESSION_ALERT_STRING \
+"\
+You appear to run your NX session across a slow network\n\
+connection. Resuming the session may require some time.\n\
+Please wait.\
+"
+
+#define FAILED_RESUME_DISPLAY_ALERT 17
+#define FAILED_RESUME_DISPLAY_ALERT_TYPE "error"
+#define FAILED_RESUME_DISPLAY_ALERT_STRING \
+"\
+Failed to open the display. Can't resume the NX\n\
+session on this display.\n\
+"
+
+#define FAILED_RESUME_DISPLAY_BROKEN_ALERT 18
+#define FAILED_RESUME_DISPLAY_BROKEN_TYPE "error"
+#define FAILED_RESUME_DISPLAY_BROKEN_STRING \
+"\
+The display connection was broken while trying to\n\
+resume the session. Please, check your network\n\
+connection and try again.\n\
+"
+
+#define FAILED_RESUME_VISUALS_ALERT 19
+#define FAILED_RESUME_VISUALS_ALERT_TYPE "error"
+#define FAILED_RESUME_VISUALS_ALERT_STRING \
+"\
+Failed to restore all the required visuals.\n\
+Can't resume the NX session on this display.\n\
+"
+
+#define FAILED_RESUME_COLORMAPS_ALERT 20
+#define FAILED_RESUME_COLORMAPS_ALERT_TYPE "error"
+#define FAILED_RESUME_COLORMAPS_ALERT_STRING \
+"\
+The number of available colormaps is different\n\
+on the new display. Can't resume the NX session\n\
+on this display.\n\
+"
+
+#define FAILED_RESUME_PIXMAPS_ALERT 21
+#define FAILED_RESUME_PIXMAPS_ALERT_TYPE "error"
+#define FAILED_RESUME_PIXMAPS_ALERT_STRING \
+"\
+Failed to restore all the required pixmap formats.\n\
+Can't resume the NX session on this display.\n\
+"
+
+#define FAILED_RESUME_DEPTHS_ALERT 22
+#define FAILED_RESUME_DEPTHS_ALERT_TYPE "error"
+#define FAILED_RESUME_DEPTHS_ALERT_STRING \
+"\
+Failed to restore all the required screen depths.\n\
+Can't resume the NX session on this display.\n\
+"
+
+#define FAILED_RESUME_RENDER_ALERT 23
+#define FAILED_RESUME_RENDER_ALERT_TYPE "error"
+#define FAILED_RESUME_RENDER_ALERT_STRING \
+"\
+The render extension is missing or an incompatible\n\
+version was detected on your X server. Can't resume\n\
+the NX session on this display.\n\
+"
+
+#define FAILED_RESUME_FONTS_ALERT 24
+#define FAILED_RESUME_FONTS_ALERT_TYPE "error"
+#define FAILED_RESUME_FONTS_ALERT_STRING \
+"\
+One or more of the fonts that are in use by the\n\
+session are missing. Can't resume the NX session\n\
+on this display.\n\
+"
+
+#define ABORT_PROXY_NEGOTIATION_ALERT 62
+#define ABORT_PROXY_NEGOTIATION_ALERT_TYPE "ok"
+#define ABORT_PROXY_NEGOTIATION_ALERT_STRING \
+"\
+The remote proxy closed the connection while negotiating\n\
+the session. This may be due to the wrong authentication\n\
+credentials passed to the server.\n\
+"
+
+#define ABORT_PROXY_SHUTDOWN_ALERT 64
+#define ABORT_PROXY_SHUTDOWN_ALERT_TYPE "ok"
+#define ABORT_PROXY_SHUTDOWN_ALERT_STRING \
+"\
+No response received from the remote proxy while\n\
+waiting for the session shutdown.\n\
+"
+
+#define FAILED_XDMCP_CONNECTION_ALERT 65
+#define FAILED_XDMCP_CONNECTION_ALERT_TYPE "ok"
+#define FAILED_XDMCP_CONNECTION_ALERT_STRING \
+"\
+The XDM host that was contacted by the NX server doesn't\n\
+seem to be able to start the session. Please check your\n\
+server configuration.\n\
+"
+
+/*
+ * Used to handle the backward compatibility.
+ * Update the numbers if you add a new alert.
+ */
+
+#define LAST_PROTO_STEP_6_ALERT 63
+#define LAST_PROTO_STEP_7_ALERT 65
+
+#endif /* NXalert_H */
diff --git a/nxcomp/include/NXpack.h b/nxcomp/include/NXpack.h
new file mode 100644
index 000000000..3eade6855
--- /dev/null
+++ b/nxcomp/include/NXpack.h
@@ -0,0 +1,141 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
+/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
+/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de> */
+/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de> */
+/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
+/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
+/* */
+/* NXCOMP, NX protocol compression and NX extensions to this software */
+/* are copyright of the aforementioned persons and companies. */
+/* */
+/* Redistribution and use of the present software is allowed according */
+/* to terms specified in the file LICENSE.nxcomp which comes in the */
+/* source distribution. */
+/* */
+/* All rights reserved. */
+/* */
+/* NOTE: This software has received contributions from various other */
+/* contributors, only the core maintainers and supporters are listed as */
+/* copyright holders. Please contact us, if you feel you should be listed */
+/* as copyright holder, as well. */
+/* */
+/**************************************************************************/
+
+#ifndef NXpack_H
+#define NXpack_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MASK_METHOD_LIMIT 10
+
+#define NO_MASK 0
+
+#define MASK_8_COLORS 1
+#define MASK_64_COLORS 2
+#define MASK_256_COLORS 3
+#define MASK_512_COLORS 4
+#define MASK_4K_COLORS 5
+#define MASK_32K_COLORS 6
+#define MASK_64K_COLORS 7
+#define MASK_256K_COLORS 8
+#define MASK_2M_COLORS 9
+#define MASK_16M_COLORS 10
+
+#define PACK_METHOD_LIMIT 128
+
+#define NO_PACK 0
+
+#define PACK_MASKED_8_COLORS 1
+#define PACK_MASKED_64_COLORS 2
+#define PACK_MASKED_256_COLORS 3
+#define PACK_MASKED_512_COLORS 4
+#define PACK_MASKED_4K_COLORS 5
+#define PACK_MASKED_32K_COLORS 6
+#define PACK_MASKED_64K_COLORS 7
+#define PACK_MASKED_256K_COLORS 8
+#define PACK_MASKED_2M_COLORS 9
+#define PACK_MASKED_16M_COLORS 10
+
+#define PACK_RAW_8_BITS 3
+#define PACK_RAW_16_BITS 7
+#define PACK_RAW_24_BITS 10
+
+#define PACK_COLORMAP_256_COLORS 11
+
+#define PACK_JPEG_8_COLORS 26
+#define PACK_JPEG_64_COLORS 27
+#define PACK_JPEG_256_COLORS 28
+#define PACK_JPEG_512_COLORS 29
+#define PACK_JPEG_4K_COLORS 30
+#define PACK_JPEG_32K_COLORS 31
+#define PACK_JPEG_64K_COLORS 32
+#define PACK_JPEG_256K_COLORS 33
+#define PACK_JPEG_2M_COLORS 34
+#define PACK_JPEG_16M_COLORS 35
+
+#define PACK_PNG_8_COLORS 37
+#define PACK_PNG_64_COLORS 38
+#define PACK_PNG_256_COLORS 39
+#define PACK_PNG_512_COLORS 40
+#define PACK_PNG_4K_COLORS 41
+#define PACK_PNG_32K_COLORS 42
+#define PACK_PNG_64K_COLORS 43
+#define PACK_PNG_256K_COLORS 44
+#define PACK_PNG_2M_COLORS 45
+#define PACK_PNG_16M_COLORS 46
+
+#define PACK_RGB_16M_COLORS 63
+#define PACK_RLE_16M_COLORS 64
+
+#define PACK_ALPHA 65
+#define PACK_COLORMAP 66
+
+#define PACK_BITMAP_16M_COLORS 67
+
+/*
+ * Not really pack methods. These values
+ * allow dynamic selection of the pack
+ * method by the agent.
+ */
+
+#define PACK_NONE 0
+#define PACK_LOSSY 253
+#define PACK_LOSSLESS 254
+#define PACK_ADAPTIVE 255
+
+/*
+ * Reduce the number of colors in the
+ * image by applying a mask.
+ */
+
+typedef struct
+{
+ unsigned int color_mask;
+ unsigned int correction_mask;
+ unsigned int white_threshold;
+ unsigned int black_threshold;
+
+} ColorMask;
+
+extern const ColorMask Mask8TrueColor;
+extern const ColorMask Mask64TrueColor;
+extern const ColorMask Mask512TrueColor;
+extern const ColorMask Mask4KTrueColor;
+extern const ColorMask Mask32KTrueColor;
+extern const ColorMask Mask256KTrueColor;
+extern const ColorMask Mask2MTrueColor;
+extern const ColorMask Mask16MTrueColor;
+
+const ColorMask *MethodColorMask(unsigned int method);
+
+int MethodBitsPerPixel(unsigned int method);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NXpack_H */
diff --git a/nxcomp/include/NXproto.h b/nxcomp/include/NXproto.h
new file mode 100644
index 000000000..7b988bdbf
--- /dev/null
+++ b/nxcomp/include/NXproto.h
@@ -0,0 +1,447 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
+/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
+/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de> */
+/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de> */
+/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
+/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
+/* */
+/* NXCOMP, NX protocol compression and NX extensions to this software */
+/* are copyright of the aforementioned persons and companies. */
+/* */
+/* Redistribution and use of the present software is allowed according */
+/* to terms specified in the file LICENSE.nxcomp which comes in the */
+/* source distribution. */
+/* */
+/* All rights reserved. */
+/* */
+/* NOTE: This software has received contributions from various other */
+/* contributors, only the core maintainers and supporters are listed as */
+/* copyright holders. Please contact us, if you feel you should be listed */
+/* as copyright holder, as well. */
+/* */
+/**************************************************************************/
+
+#ifndef NXproto_H
+#define NXproto_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <X11/X.h>
+#include <X11/Xmd.h>
+#include <X11/Xproto.h>
+
+/*
+ * Force the size to match the wire protocol.
+ */
+
+#define Drawable CARD32
+#define GContext CARD32
+
+#define sz_xNXGetControlParametersReq 4
+#define sz_xNXGetCleanupParametersReq 4
+#define sz_xNXGetImageParametersReq 4
+#define sz_xNXGetUnpackParametersReq 8
+#define sz_xNXGetShmemParametersReq 16
+#define sz_xNXGetFontParametersReq 4
+#define sz_xNXSetExposeParametersReq 8
+#define sz_xNXSetCacheParametersReq 8
+#define sz_xNXStartSplitReq 8
+#define sz_xNXEndSplitReq 4
+#define sz_xNXCommitSplitReq 12
+#define sz_xNXSetUnpackGeometryReq 24
+#define sz_xNXSetUnpackColormapReq 16
+#define sz_xNXSetUnpackAlphaReq 16
+#define sz_xNXPutPackedImageReq 40
+#define sz_xNXFreeUnpackReq 4
+#define sz_xNXFinishSplitReq 4
+#define sz_xNXAbortSplitReq 4
+#define sz_xNXFreeSplitReq 4
+
+#define sz_xGetControlParametersReply 32
+#define sz_xGetCleanupParametersReply 32
+#define sz_xGetImageParametersReply 32
+#define sz_xGetUnpackParametersReply 32
+#define sz_xGetShmemParametersReply 32
+
+#define LINK_TYPE_LIMIT 5
+
+#define LINK_TYPE_NONE 0
+#define LINK_TYPE_MODEM 1
+#define LINK_TYPE_ISDN 2
+#define LINK_TYPE_ADSL 3
+#define LINK_TYPE_WAN 4
+#define LINK_TYPE_LAN 5
+
+/*
+ * NX Replies.
+ */
+
+/*
+ * The following reply has 4 new boolean
+ * fields in the last protocol version.
+ */
+
+typedef struct _NXGetControlParametersReply {
+ BYTE type; /* Is X_Reply. */
+ CARD8 linkType;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Is 0. */
+ CARD8 localMajor;
+ CARD8 localMinor;
+ CARD8 localPatch;
+ CARD8 remoteMajor;
+ CARD8 remoteMinor;
+ CARD8 remotePatch;
+ CARD16 splitTimeout B16;
+ CARD16 motionTimeout B16;
+ CARD8 splitMode;
+ CARD8 pad1;
+ CARD32 splitSize B32;
+ CARD8 packMethod;
+ CARD8 packQuality;
+ CARD8 dataLevel;
+ CARD8 streamLevel;
+ CARD8 deltaLevel;
+ CARD8 loadCache;
+ CARD8 saveCache;
+ CARD8 startupCache;
+} xNXGetControlParametersReply;
+
+typedef struct _NXGetCleanupParametersReply {
+ BYTE type; /* Is X_Reply. */
+ BYTE pad;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Is 0. */
+ BOOL cleanGet;
+ BOOL cleanAlloc;
+ BOOL cleanFlush;
+ BOOL cleanSend;
+ BOOL cleanImages;
+ BYTE pad1, pad2, pad3;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xNXGetCleanupParametersReply;
+
+typedef struct _NXGetImageParametersReply {
+ BYTE type; /* Is X_Reply. */
+ BYTE pad;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Is 0. */
+ BOOL imageSplit;
+ BOOL imageMask;
+ BOOL imageFrame;
+ CARD8 imageMaskMethod;
+ CARD8 imageSplitMethod;
+ BYTE pad1, pad2, pad3;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xNXGetImageParametersReply;
+
+/*
+ * Data is made of PACK_METHOD_LIMIT values of
+ * type BOOL telling which unpack capabilities
+ * are implemented in proxy.
+ */
+
+typedef struct _NXGetUnpackParametersReply {
+ BYTE type; /* Is X_Reply. */
+ BYTE pad;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Is PACK_METHOD_LIMIT / 4 from NXpack.h. */
+ CARD8 entries; /* Is PACK_METHOD_LIMIT. */
+ BYTE pad1, pad2, pad3;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+ CARD32 pad8 B32;
+} xNXGetUnpackParametersReply;
+
+typedef struct _NXGetShmemParametersReply {
+ BYTE type; /* Is X_Reply. */
+ CARD8 stage; /* As in the corresponding request. */
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Is 0. */
+ BOOL clientEnabled; /* SHM on path agent to proxy. */
+ BOOL serverEnabled; /* SHM on path proxy to X server. */
+ BYTE pad1, pad2; /* Previous values can be checked */
+ CARD32 clientSize B32; /* at end of stage 2. */
+ CARD32 serverSize B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+} xNXGetShmemParametersReply;
+
+typedef struct _NXGetFontParametersReply {
+ BYTE type; /* Is X_Reply. */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Is length of path string + 1 / 4. */
+ CARD32 pad2 B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xNXGetFontParametersReply;
+
+/*
+ * NX Requests.
+ */
+
+typedef struct _NXGetControlParametersReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+} xNXGetControlParametersReq;
+
+typedef struct _NXGetCleanupParametersReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+} xNXGetCleanupParametersReq;
+
+typedef struct _NXGetImageParametersReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+} xNXGetImageParametersReq;
+
+typedef struct _NXGetUnpackParametersReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ CARD8 entries;
+ BYTE pad1, pad2, pad3;
+} xNXGetUnpackParametersReq;
+
+typedef struct _NXGetShmemParametersReq {
+ CARD8 reqType;
+ CARD8 stage; /* It is between 0 and 2. */
+ CARD16 length B16;
+ BOOL enableClient; /* X client side support is */
+ BOOL enableServer; /* not implemented yet. */
+ BYTE pad1, pad2;
+ CARD32 clientSegment; /* XID identifying the shared */
+ CARD32 serverSegment; /* memory segments. */
+} xNXGetShmemParametersReq;
+
+typedef struct _NXGetFontParametersReq {
+ CARD8 reqType;
+ CARD8 pad;
+ CARD16 length B16;
+} xNXGetFontParametersReq;
+
+/*
+ * The available split modes.
+ */
+
+#define NXSplitModeDefault 0
+#define NXSplitModeAsync 1
+#define NXSplitModeSync 2
+
+typedef struct _NXStartSplitReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+ CARD8 mode;
+ BYTE pad1, pad2, pad3;
+} xNXStartSplitReq;
+
+typedef struct _NXEndSplitReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+} xNXEndSplitReq;
+
+typedef struct _NXCommitSplitReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+ CARD8 propagate;
+ CARD8 request;
+ BYTE pad1, pad2;
+ CARD32 position B32;
+} xNXCommitSplitReq;
+
+typedef struct _NXFinishSplitReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+} xNXFinishSplitReq;
+
+typedef struct _NXAbortSplitReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+} xNXAbortSplitReq;
+
+typedef struct _NXFreeSplitReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+} xNXFreeSplitReq;
+
+typedef struct _NXSetExposeParametersReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ BOOL expose;
+ BOOL graphicsExpose;
+ BOOL noExpose;
+ BYTE pad1;
+} xNXSetExposeParametersReq;
+
+typedef struct _NXSetCacheParametersReq {
+ CARD8 reqType;
+ BYTE pad;
+ CARD16 length B16;
+ BOOL enableCache;
+ BOOL enableSplit;
+ BOOL enableSave;
+ BOOL enableLoad;
+} xNXSetCacheParametersReq;
+
+typedef struct _NXSetUnpackGeometryReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+ CARD8 depth1Bpp;
+ CARD8 depth4Bpp;
+ CARD8 depth8Bpp;
+ CARD8 depth16Bpp;
+ CARD8 depth24Bpp;
+ CARD8 depth32Bpp;
+ BYTE pad1, pad2;
+ CARD32 redMask B32;
+ CARD32 greenMask B32;
+ CARD32 blueMask B32;
+} xNXSetUnpackGeometryReq;
+
+typedef struct _NXSetUnpackColormapReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+ CARD8 method;
+ BYTE pad1, pad2, pad3;
+ CARD32 srcLength B32;
+ CARD32 dstLength B32;
+} xNXSetUnpackColormapReq;
+
+typedef struct _NXSetUnpackAlphaReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+ CARD8 method;
+ BYTE pad1, pad2, pad3;
+ CARD32 srcLength B32;
+ CARD32 dstLength B32;
+} xNXSetUnpackAlphaReq;
+
+typedef struct _NXPutPackedImageReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+ Drawable drawable B32;
+ GContext gc B32;
+ CARD8 method;
+ CARD8 format;
+ CARD8 srcDepth;
+ CARD8 dstDepth;
+ CARD32 srcLength B32;
+ CARD32 dstLength B32;
+ INT16 srcX B16, srcY B16;
+ CARD16 srcWidth B16, srcHeight B16;
+ INT16 dstX B16, dstY B16;
+ CARD16 dstWidth B16, dstHeight B16;
+} xNXPutPackedImageReq;
+
+typedef struct _NXFreeUnpackReq {
+ CARD8 reqType;
+ CARD8 resource;
+ CARD16 length B16;
+} xNXFreeUnpackReq;
+
+/*
+ * The X_NXSplitData and X_NXSplitEvent opcodes
+ * are used internally and are ignored if coming
+ * from the agent.
+ */
+
+#define X_NXInternalGenericData 0
+#define X_NXInternalGenericReply 1
+#define X_NXInternalGenericRequest 255
+
+#define X_NXInternalShapeExtension 128
+#define X_NXInternalRenderExtension 129
+
+#define X_NXFirstOpcode 230
+#define X_NXLastOpcode 252
+
+#define X_NXGetControlParameters 230
+#define X_NXGetCleanupParameters 231
+#define X_NXGetImageParameters 232
+#define X_NXGetUnpackParameters 233
+#define X_NXStartSplit 234
+#define X_NXEndSplit 235
+#define X_NXSplitData 236
+#define X_NXCommitSplit 237
+#define X_NXSetExposeParameters 240
+#define X_NXSetUnpackGeometry 241
+#define X_NXSetUnpackColormap 242
+#define X_NXPutPackedImage 243
+#define X_NXSplitEvent 244
+#define X_NXGetShmemParameters 245
+#define X_NXSetUnpackAlpha 246
+#define X_NXFreeUnpack 247
+#define X_NXFinishSplit 248
+#define X_NXAbortSplit 249
+#define X_NXFreeSplit 250
+#define X_NXGetFontParameters 251
+#define X_NXSetCacheParameters 252
+
+/*
+ * The following events are received by the agent
+ * in the form of a ClientMessage with the value
+ * 0 in fields atom and window. The format is
+ * always 32. Event specific data starts at byte
+ * offset 12.
+ *
+ * These events are sent by the NX transport to
+ * notify the agent about the result of a split
+ * operation.
+ */
+
+#define NXNoSplitNotify 1
+#define NXStartSplitNotify 2
+#define NXCommitSplitNotify 3
+#define NXEndSplitNotify 4
+#define NXEmptySplitNotify 5
+
+/*
+ * Notifications of collect events. These events
+ * don't come from the NX transport but are put
+ * back in client's event queue by NXlib.
+ */
+
+#define NXCollectImageNotify 8
+#define NXCollectPropertyNotify 9
+#define NXCollectGrabPointerNotify 10
+#define NXCollectInputFocusNotify 11
+
+#undef Drawable
+#undef GContext
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NXproto_H */
diff --git a/nxcomp/include/NXvars.h b/nxcomp/include/NXvars.h
new file mode 100644
index 000000000..f514000d7
--- /dev/null
+++ b/nxcomp/include/NXvars.h
@@ -0,0 +1,201 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2011 NoMachine (http://www.nomachine.com) */
+/* Copyright (c) 2008-2014 Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> */
+/* Copyright (c) 2014-2016 Ulrich Sibiller <uli42@gmx.de> */
+/* Copyright (c) 2014-2016 Mihai Moldovan <ionic@ionic.de> */
+/* Copyright (c) 2011-2016 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>*/
+/* Copyright (c) 2015-2016 Qindel Group (http://www.qindel.com) */
+/* */
+/* NXCOMP, NX protocol compression and NX extensions to this software */
+/* are copyright of the aforementioned persons and companies. */
+/* */
+/* Redistribution and use of the present software is allowed according */
+/* to terms specified in the file LICENSE.nxcomp which comes in the */
+/* source distribution. */
+/* */
+/* All rights reserved. */
+/* */
+/* NOTE: This software has received contributions from various other */
+/* contributors, only the core maintainers and supporters are listed as */
+/* copyright holders. Please contact us, if you feel you should be listed */
+/* as copyright holder, as well. */
+/* */
+/**************************************************************************/
+
+#ifndef NXvars_H
+#define NXvars_H
+
+/*
+ * This can be included by the proxy or another
+ * layer that doesn't use Xlib.
+ */
+
+#if !defined(_XLIB_H_) && !defined(_XKBSRV_H_)
+
+#define NeedFunctionPrototypes 1
+
+#define Display void
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Display flush policies.
+ */
+
+#define NXPolicyImmediate 1
+#define NXPolicyDeferred 2
+
+/*
+ * Type of flush.
+ */
+
+#define NXFlushBuffer 0
+#define NXFlushLink 1
+
+/*
+ * Type of statistics.
+ */
+
+#define NXStatisticsPartial 0
+#define NXStatisticsTotal 1
+
+/*
+ * Reason why the display is blocking.
+ */
+
+#define NXBlockRead 1
+#define NXBlockWrite 2
+
+/*
+ * Set if the client is interested in ignoring
+ * the display error and continue with the exe-
+ * cution of the program. By default the usual
+ * Xlib behaviour is gotten, and the library
+ * will call an exit().
+ */
+
+extern int _NXHandleDisplayError;
+
+/*
+ * The function below is called whenever Xlib is
+ * going to perform an I/O operation. The funct-
+ * ion can be redefined to include additional
+ * checks aimed at detecting if the display needs
+ * to be closed, for example because of an event
+ * or a signal mandating the end of the session.
+ * In this way the client program can regain the
+ * control before Xlib blocks waiting for input
+ * from the network.
+ */
+
+typedef int (*NXDisplayErrorPredicate)(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* reason */
+#endif
+);
+
+extern NXDisplayErrorPredicate _NXDisplayErrorFunction;
+
+/*
+ * This is called when Xlib is going to block
+ * waiting for the display to become readable or
+ * writable. The client can use the hook to run
+ * any arbitrary operation that may require some
+ * time to complete. The user should not try to
+ * read or write to the display inside the call-
+ * back routine.
+ */
+
+typedef void (*NXDisplayBlockHandler)(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* reason */
+#endif
+);
+
+extern NXDisplayBlockHandler _NXDisplayBlockFunction;
+
+/*
+ * Used to notify the program when more data
+ * is written to the socket.
+ */
+
+typedef void (*NXDisplayWriteHandler)(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* length */
+#endif
+);
+
+extern NXDisplayWriteHandler _NXDisplayWriteFunction;
+
+/*
+ * This callback is used to notify the agent
+ * that the proxy link has been flushed.
+ */
+
+typedef void (*NXDisplayFlushHandler)(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* length */
+#endif
+);
+
+extern NXDisplayFlushHandler _NXDisplayFlushFunction;
+
+/*
+ * Used by the NX transport to get an arbitrary
+ * string to add to its protocol statistics.
+ */
+
+typedef void (*NXDisplayStatisticsHandler)(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ char* /* buffer */,
+ int /* size */
+#endif
+);
+
+extern NXDisplayStatisticsHandler _NXDisplayStatisticsFunction;
+
+/*
+ * Let users redefine the function printing an
+ * error message in the case of a out-of-order
+ * sequence number.
+ */
+
+typedef void (*NXLostSequenceHandler)(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned long /* newseq */,
+ unsigned long /* lastseq */,
+ unsigned int /* type */
+#endif
+);
+
+extern NXLostSequenceHandler _NXLostSequenceFunction;
+
+/*
+ * Let the X server run the children processes
+ * (as for example the keyboard initialization
+ * utilities) by using the native system libra-
+ * ries, instead of the libraries shipped with
+ * the NX environment. If set, the Popen() in
+ * the X server will remove the LD_LIBRARY_PATH
+ * setting from the environment before calling
+ * the execl() function in the child process.
+ */
+
+extern int _NXUnsetLibraryPath;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NXvars_H */