diff options
Diffstat (limited to 'nxcompext/NXlib.h')
-rw-r--r-- | nxcompext/NXlib.h | 912 |
1 files changed, 0 insertions, 912 deletions
diff --git a/nxcompext/NXlib.h b/nxcompext/NXlib.h deleted file mode 100644 index f4d76cb46..000000000 --- a/nxcompext/NXlib.h +++ /dev/null @@ -1,912 +0,0 @@ -/**************************************************************************/ -/* */ -/* 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) */ -/* */ -/* NXCOMPEXT, 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 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 NXlib_H -#define NXlib_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <nx-X11/X.h> -#include <nx-X11/Xlib.h> - -#include "NX.h" -#include "NXpack.h" -#include "NXproto.h" -#include "NXvars.h" - -/* - * All the NX code should use these. - */ - -#define Xmalloc(size) malloc((size)) -#define Xfree(ptr) free((ptr)) - -/* - * Maximum number of supported pack methods. - */ - -#define NXNumberOfPackMethods 128 - -/* - * Assume this as the limit of resources that - * can be provided to the split and unpack - * requests. - */ - -#define NXNumberOfResources 256 - -#define NXNoResource 256 + 1 -#define NXAnyResource 256 + 2 - -/* - * Initialize the internal structures used by - * the library. Should be executed again after - * having reopened the display. - */ - -extern int NXInitDisplay( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Reset all the internal structures. Should be - * executed after closing the display. - */ - -extern int NXResetDisplay( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Set the NX display flush policy. The policy can - * be either NXFlushDeferred or NXFlushImmediate. - */ - -extern int NXSetDisplayPolicy( -#if NeedFunctionPrototypes - Display* /* display */, - int /* policy */ -#endif -); - -/* - * Set the display output buffer size. - */ - -extern int NXSetDisplayBuffer( -#if NeedFunctionPrototypes - Display* /* display */, - int /* size */ -#endif -); - -/* - * If set, the Popen() function in the X server - * wil remove the LD_LIBRARY_PATH variable from - * the environment before calling the execl() - * function on the child process. The function - * returns the previous value. - */ - -extern int NXUnsetLibraryPath( -#if NeedFunctionPrototypes - int /* value */ -#endif -); - -/* - * If the parameter is true, the Xlib I/O error - * handler will return, instead of quitting the - * program. The function returns the previous - * value. - */ - -extern int NXHandleDisplayError( -#if NeedFunctionPrototypes - int /* value */ -#endif -); - -/* - * Shutdown the display descriptor and force Xlib - * to set the I/O error flag. - */ - -extern Bool NXForceDisplayError( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Check the value of the XlibDisplayIOError flag. - * If not set, try to call the display error hand- - * ler to give to the application a chance to see - * whether it needs to close the connection. - */ - -extern int NXDisplayError( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Query the number of bytes readable from the - * display connection. - */ - -extern int NXDisplayReadable( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Query the number of the outstanding bytes to - * flush to the display connection. - */ - -extern int NXDisplayFlushable( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Return a value between 0 and 9 indicating the - * congestion level of the NX transport based on - * the tokens remaining. A value of 9 means that - * the link is congested and no further data can - * be sent. - */ - -extern int NXDisplayCongestion( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -/* - * Flush the Xlib display buffer and/or the - * outstanding data accumulated by the NX - * transport. - */ - -extern int NXFlushDisplay( -#if NeedFunctionPrototypes - Display* /* display */, - int /* what */ -#endif -); - -/* - * Public interfaces used to set the handlers. - * They all return the previous handler. - */ - -extern NXDisplayErrorPredicate NXSetDisplayErrorPredicate( -#if NeedFunctionPrototypes - NXDisplayErrorPredicate /* predicate */ -#endif -); - -/* - * Called when the display blocks waiting to read or - * write more data. - */ - -extern NXDisplayBlockHandler NXSetDisplayBlockHandler( -#if NeedFunctionPrototypes - NXDisplayBlockHandler /* handler */ -#endif -); - -/* - * Called after more data is written to the display. - * When the NX transport is running, data may be queued - * until an explicit flush. - */ - -extern NXDisplayWriteHandler NXSetDisplayWriteHandler( -#if NeedFunctionPrototypes - NXDisplayWriteHandler /* handler */ -#endif -); - -/* - * Called after more data is sent to the remote proxy. - * - * Here the display pointer is passed as the second - * parameter to make clear that the function does not - * tie the callback to the display, but, similarly to - * all the Xlib error handlers, to a global variable - * shared by all the Xlib functions. The display - * pointer will be passed back by nxcomp at the time - * it will call the handler. This is because nxcomp - * doesn't have access to the display structure. - */ - -extern NXDisplayFlushHandler NXSetDisplayFlushHandler( -#if NeedFunctionPrototypes - NXDisplayFlushHandler /* handler */, - Display* /* display */ -#endif -); - -/* - * Get an arbitrary null terminated buffer to be added - * to the NX statistics. - */ - -extern NXDisplayStatisticsHandler NXSetDisplayStatisticsHandler( -#if NeedFunctionPrototypes - NXDisplayStatisticsHandler /* handler */, - char ** /* buffer */ -#endif -); - -/* - * Redefine the function called by Xlib in the case of - * an out-of-order sequence number received in the X - * protocol stream. - */ - -extern NXLostSequenceHandler NXSetLostSequenceHandler( -#if NeedFunctionPrototypes - NXLostSequenceHandler /* handler */ -#endif -); - -/* - * The agent should get the NX parameters at startup, just after - * having opened the display. If the agent is not able to satisfy - * the pack method set by user (because a method is not applica- - * ble, it is not supported by the remote or it simply requires a - * screen depth greater than the depth available), it should fall - * back to the nearest method of the same type. - */ - -extern Status NXGetControlParameters( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int* /* link_type */, - unsigned int* /* local_major */, - unsigned int* /* local_minor */, - unsigned int* /* local_patch */, - unsigned int* /* remote_major */, - unsigned int* /* remote_minor */, - unsigned int* /* remote_patch */, - int* /* frame_timeout */, - int* /* ping_timeout */, - int* /* split_mode */, - int* /* split_size */, - unsigned int* /* pack_method */, - unsigned int* /* pack_quality */, - int* /* data_level */, - int* /* stream_level */, - int* /* delta_level */, - unsigned int* /* load_cache */, - unsigned int* /* save_cache */, - unsigned int* /* startup_cache */ -#endif -); - -/* - * Which unpack methods are supported by the remote proxy? - */ - -extern Status NXGetUnpackParameters( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int* /* entries */, - unsigned char[] /* supported_methods */ -#endif -); - -/* - * Query and enable shared memory support on path agent to X - * client proxy and X server proxy to real X server. At the - * moment only the path proxy to real X server is implemented. - * On return flags will say if support has been successfully - * activated. Segments will contain the XID associated to the - * shared memory blocks. A MIT-SHM compliant protocol is used - * between proxy and the real server, while a simplified - * version is used between the agent and the client proxy to - * accomodate both packed images and plain X bitmaps. - */ - -extern Status NXGetShmemParameters( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int* /* enable_client */, - unsigned int* /* enable_server */, - unsigned int* /* client_segment */, - unsigned int* /* server_segment */, - unsigned int* /* client_size */, - unsigned int* /* server_size */ -#endif -); - -/* - * Get the path to the font server that can be used by the X - * server to tunnel the font connections across the NX link. - * The path actually represents the TCP port where the proxy - * on the NX client side is listening. The agent can tempora- - * rily enable the tunneling when it needs a font that is not - * available on the client, for example when the session is - * migrated from a different X server. - */ - -extern Status NXGetFontParameters( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* path_length */, - char[] /* path_data */ -#endif -); - -/* - * This set of functions is used to leverage the image stream- - * ing capabilities built in nxcomp. An image can be streamed - * by sending a start-split message, followed by the X messages - * that will have to be split by the proxy, followed by an end- - * split closure. Usually, in the middle of a start-split/end- - * split sequence there will be a single PutImage() or PutPack- - * edImage(), that, in turn, can generate multiple partial - * requests, like a SetUnpackColormap() and SetUnpackAlpha() - * that will be later used to decompress the image to its ori- - * ginal form. Multiple requests may be also generated because - * of the maximum size of a X request being exceeded, so that - * Xlib has to divide the single image in multiple sub-image re- - * quests. The agent doesn't need to take care of these details - * but will rather have to track the result of the split opera- - * tion. By monitoring the notify events sent by the proxy, the - * agent will have to implement its own strategy to deal with - * the resources. For example, it will be able to: - * - * - Mark a drawable as dirty, if the image was not sent - * synchronously, in the main X oputput stream. - * - * - Choose to commit or discard the original image, at the - * time it will be recomposed at the remote side. This may - * include all the messages that were part of the split - * (the colormap, the alpha channel, etc.) - * - * - Mark the drawable as clean again, if the image was - * committed and the drawable didn't change in the mean- - * while. - * - * At the time the proxy receives the end-split, it reports the - * result of the operation to the agent. The agent will be able - * to identify the original split operation (the one referenced - * in the start-split/end-split sequence) by the small integer - * number (0-255) named 'resource' sent in the events. - * - * One of the following cases may be encountered: - * - * - * NXNoSplitNotify All messages were sent in the main out- - * put stream, so that no split actually - * took place. - * - * NXStartSplitNotify One or more messages were split, so, - * at discrection of the agent, the client - * may be suspended until the transferral - * is completed. - * - * NXCommitSplitNotify One of the requests that made up the - * split was recomposed. The agent should - * either commit the given request or tell - * the proxy to discard it. - * - * NXEndSplitNotify The split was duly completed. The agent - * can restart the client. - * - * NXEmptySplitNotify No more split operation are pending. - * The agent can use this information to - * implement specific strategies requiring - * that all messages have been recomposed - * at the remote end, like updating the - * drawables that were not synchronized - * because of the lazy encoding. - * - * The 'mode' field that is sent by the agent in the start-split - * request, determines the strategy that the proxy will adopt to - * deal with the image. If set to 'eager', the proxy will only - * split the messages whose size exceeds the split threshold (the - * current threshold can be found in the NXGetControlParameters() - * reply). If the mode is set to lazy, the proxy will split any - * image that would have generated an actual transfer of the data - * part (in practice all images that are not found in the cache). - * This second strategy can be leveraged by an agent to further - * reduce the bandwidth requirements. For example, by setting the - * mode to lazy and by monitoring the result, an agent can easi- - * ly verify if the drawable was successfully updated, mark the - * drawable if not, and synchronize it at later time. - * - * See NXproto.h for the definition of the available modes. - */ - -extern unsigned int NXAllocSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXStartSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - unsigned int /* mode */ -#endif -); - -extern int NXEndSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXCommitSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - unsigned int /* propagate */, - unsigned char /* request */, - unsigned int /* position */ -#endif -); - -extern int NXAbortSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXFinishSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXFreeSplit( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXSetExposeParameters( -#if NeedFunctionPrototypes - Display* /* display */, - int /* expose */, - int /* graphics_expose */, - int /* no_expose */ -#endif -); - -extern int NXSetCacheParameters( -#if NeedFunctionPrototypes - Display* /* display */, - int /* enable_cache */, - int /* enable_split */, - int /* enable_save */, - int /* enable_load */ -#endif -); - -extern unsigned int NXAllocUnpack( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXSetUnpackGeometry( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Visual* /* visual */ -#endif -); - -extern int NXSetUnpackColormap( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - unsigned int /* method */, - unsigned int /* entries */, - const char* /* data */, - unsigned int /* data_length */ -#endif -); - -extern int NXSetUnpackAlpha( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - unsigned int /* method */, - unsigned int /* entries */, - const char* /* data */, - unsigned int /* data_length */ -#endif -); - -extern int NXSetUnpackColormapCompat( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - unsigned int /* entries */, - const char* /* data */ -#endif -); - -extern int NXSetUnpackAlphaCompat( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - unsigned int /* entries */, - const char* /* data */ -#endif -); - -extern int NXFreeUnpack( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -/* - * A packed image is a XImage but with - * offset field containing total amount - * of packed image data. - */ - -typedef XImage NXPackedImage; - -NXPackedImage *NXCreatePackedImage( -#if NeedFunctionPrototypes - Display* /* display */, - Visual* /* visual */, - unsigned int /* method */, - unsigned int /* depth */, - int /* format */, - char* /* data */, - int /* data_length */, - unsigned int /* width */, - unsigned int /* height */, - int /* bitmap_pad */, - int /* bytes_per_line */ -#endif -); - -extern int NXDestroyPackedImage( -#if NeedFunctionPrototypes - NXPackedImage* /* image */ -#endif -); - -NXPackedImage *NXPackImage( -#if NeedFunctionPrototypes - Display* /* display */, - XImage* /* src_image */, - unsigned int /* method */ -#endif -); - -NXPackedImage *NXInPlacePackImage( -#if NeedFunctionPrototypes - Display* /* display */, - XImage* /* src_image */, - unsigned int /* method */ -#endif -); - -/* - * GC is declared void * to get rid of mess - * with different GC definitions in some X - * server code (like in nxagent). - */ - -extern int NXPutPackedImage( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Drawable /* drawable */, - void* /* gc */, - NXPackedImage* /* image */, - unsigned int /* method */, - unsigned int /* depth */, - int /* src_x */, - int /* src_y */, - int /* dst_x */, - int /* dst_y */, - unsigned int /* width */, - unsigned int /* height */ -#endif -); - -/* - * Get multiple colors with a single call by - * pipelining X_AllocColor requests/replies. - */ - -extern int NXAllocColors( -#if NeedFunctionPrototypes - Display* /* display */, - Colormap /* colormap */, - unsigned int /* entries */, - XColor[] /* screens_in_out */, - Bool [] /* flags allocation errors */ -#endif -); - -/* - * Encode the data in the given format. - */ - -extern char *NXEncodeColormap( -#if NeedFunctionPrototypes - const char* /* src_data */, - unsigned int /* src_size */, - unsigned int* /* dst_size */ -#endif -); - -extern char *NXEncodeAlpha( -#if NeedFunctionPrototypes - const char* /* src_data */, - unsigned int /* src_size */, - unsigned int* /* dst_size */ -#endif -); - -extern NXPackedImage *NXEncodeRgb( -#if NeedFunctionPrototypes - XImage* /* src_image */, - unsigned int /* method */, - unsigned int /* quality */ -#endif -); - -extern NXPackedImage *NXEncodeRle( -#if NeedFunctionPrototypes - XImage* /* src_image */, - unsigned int /* method */, - unsigned int /* quality */ -#endif -); - -extern NXPackedImage *NXEncodeJpeg( -#if NeedFunctionPrototypes - XImage* /* src_image */, - unsigned int /* method */, - unsigned int /* quality */ -#endif -); - -typedef struct -{ - long pixel; - int found; - -} NXColorTable; - -extern int NXEncodeColors( -#if NeedFunctionPrototypes - XImage* /* src_image */, - NXColorTable* /* color_table */, - int /* nb_max */ -#endif -); - -extern NXPackedImage *NXEncodePng( -#if NeedFunctionPrototypes - XImage* /* src_image */, - unsigned int /* method */, - unsigned int /* quality */ -#endif -); - -extern NXPackedImage *NXEncodeBitmap( -#if NeedFunctionPrototypes - XImage* /* src_image */, - unsigned int /* method */, - unsigned int /* quality */ -#endif -); - -extern int NXCleanImage( -#if NeedFunctionPrototypes - XImage* -#endif -); - -extern void NXMaskImage( -#if NeedFunctionPrototypes - XImage* /* pointer to image to mask */ , - unsigned int /* method */ -#endif -); - -extern int NXImageCacheSize; - -extern void NXInitCache( -#if NeedFunctionPrototypes - Display* /* display */, - int /* entries in image cache */ -#endif -); - -extern void NXFreeCache( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -extern XImage *NXCacheFindImage( -#if NeedFunctionPrototypes - NXPackedImage* /* packed image to find */, - unsigned int* /* pointer to the pack method if found */, - unsigned char** /* pointer to the calculated MD5 if found */ -#endif -); - -extern int NXCacheAddImage( -#if NeedFunctionPrototypes - NXPackedImage* /* packed image to be added to the cache */, - unsigned int /* pack method of the image to add */, - unsigned char* /* pointer to MD5 of the original unpacked image */ -#endif -); - - -extern int NXGetCollectImageResource( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -extern int NXCollectImage( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Drawable /* drawable */, - int /* src_x */, - int /* src_y */, - unsigned int /* width */, - unsigned int /* height */, - unsigned long /* plane_mask */, - int /* format */ -#endif -); - -extern int NXGetCollectedImage( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - XImage** /* image */ -#endif -); - -extern int NXGetCollectPropertyResource( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -extern int NXCollectProperty( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Window /* window */, - Atom /* property */, - long /* long_offset */, - long /* long_length */, - Bool /* delete */, - Atom /* req_type */ -#endif -); - -extern int NXGetCollectedProperty( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Atom* /* actual_type_return */, - int* /* actual_format_return */, - unsigned long* /* nitems_return */, - unsigned long* /* bytes_after_return */, - unsigned char** /* data */ -#endif -); - -extern int NXGetCollectGrabPointerResource( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -extern int NXCollectGrabPointer( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Window /* grab_window */, - Bool /* owner_events */, - unsigned int /* event_mask */, - int /* pointer_mode */, - int /* keyboard_mode */, - Window /* confine_to */, - Cursor /* cursor */, - Time /* time */ -#endif -); - -extern int NXGetCollectedGrabPointer( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - int* /* status */ -#endif -); - -extern int NXGetCollectInputFocusResource( -#if NeedFunctionPrototypes - Display* /* display */ -#endif -); - -extern int NXCollectInputFocus( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */ -#endif -); - -extern int NXGetCollectedInputFocus( -#if NeedFunctionPrototypes - Display* /* display */, - unsigned int /* resource */, - Window* /* focus_return */, - int* /* revert_to_return */ -#endif -); - -#ifdef __cplusplus -} -#endif - -#endif /* NXlib_H */ |