#ifndef _LBXSERVE_H_
#include "colormap.h"
#include "property.h"
#define _LBXSERVE_H_
#define _XLBX_SERVER_
#include "lbxstr.h"
#include "lbxdeltastr.h"
#include "lbxopts.h"
#define MAX_LBX_CLIENTS MAXCLIENTS
#define MAX_NUM_PROXIES (MAXCLIENTS >> 1)
typedef struct _LbxClient *LbxClientPtr;
typedef struct _LbxProxy *LbxProxyPtr;
typedef struct _LbxClient {
CARD32 id;
ClientPtr client;
LbxProxyPtr proxy;
Bool ignored;
Bool input_blocked;
int reqs_pending;
long bytes_in_reply;
long bytes_remaining;
Drawable drawableCache[GFX_CACHE_SIZE];
GContext gcontextCache[GFX_CACHE_SIZE];
pointer gfx_buffer;
unsigned long gb_size;
} LbxClientRec;
typedef struct _connectionOutput *OSBufPtr;
typedef struct _LbxProxy {
LbxProxyPtr next;
LbxClientPtr lbxClients[MAX_LBX_CLIENTS];
LbxClientPtr curRecv,
curDix;
int fd;
int pid;
int uid;
int numClients;
int maxIndex;
Bool aborted;
int grabClient;
pointer compHandle;
Bool dosquishing;
Bool useTags;
LBXDeltasRec indeltas;
LBXDeltasRec outdeltas;
char *iDeltaBuf;
char *replyBuf;
char *oDeltaBuf;
OSBufPtr ofirst;
OSBufPtr olast;
CARD32 cur_send_id;
LbxStreamOpts streamOpts;
int numBitmapCompMethods;
unsigned char *bitmapCompMethods;
int numPixmapCompMethods;
unsigned char *pixmapCompMethods;
int **pixmapCompDepths;
struct _ColormapRec *grabbedCmaps;
int motion_allowed_events;
lbxMotionCache motionCache;
} LbxProxyRec;
extern LbxClientPtr lbxClients[MAXCLIENTS];
#define LbxClient(client) (lbxClients[(client)->index])
#define LbxProxy(client) (LbxClient(client)->proxy)
#define LbxMaybeProxy(client) (LbxClient(client) ? LbxProxy(client) : 0)
#define LbxProxyID(client) (LbxProxy(client)->pid)
#define LbxProxyClient(proxy) ((proxy)->lbxClients[0]->client)
extern int LbxEventCode;
extern ClientPtr AllocLbxClientConnection ( ClientPtr client,
LbxProxyPtr proxy );
extern void LbxProxyConnection ( ClientPtr client, LbxProxyPtr proxy );
extern int UncompressedWriteToClient ( ClientPtr who, int count, char *buf );
extern void LbxForceOutput ( LbxProxyPtr proxy );
extern void SwitchClientInput ( ClientPtr client, Bool pending );
extern int PrepareLargeReqBuffer ( ClientPtr client );
extern Bool AppendFakeRequest ( ClientPtr client, char *data, int count );
extern void LbxFreeOsBuffers ( LbxProxyPtr proxy );
extern Bool AllocateLargeReqBuffer ( ClientPtr client, int size );
extern Bool AddToLargeReqBuffer ( ClientPtr client, char *data, int size );
extern void LbxPrimeInput ( ClientPtr client, LbxProxyPtr proxy );
extern int LbxCmapInit ( void );
extern Bool LbxCheckColorRequest ( ClientPtr client, ColormapPtr pmap,
xReq *req );
extern int LbxCheckCmapGrabbed ( ColormapPtr pmap );
extern void LbxDisableSmartGrab ( ColormapPtr pmap );
extern void LbxBeginFreeCellsEvent ( ColormapPtr pmap );
extern void LbxAddFreeCellToEvent ( ColormapPtr pmap, Pixel pixel );
extern void LbxEndFreeCellsEvent ( ColormapPtr pmap );
extern void LbxSortPixelList ( Pixel *pixels, int count );
extern int ProcLbxGrabCmap ( ClientPtr client );
extern void LbxReleaseCmap ( ColormapPtr pmap, Bool smart );
extern int ProcLbxReleaseCmap ( ClientPtr client );
extern int ProcLbxAllocColor ( ClientPtr client );
extern int ProcLbxIncrementPixel ( ClientPtr client );
extern void LbxDixInit ( void );
extern void LbxResetTags ( void );
extern int LbxSendConnSetup ( ClientPtr client, char *reason );
extern int LbxGetModifierMapping ( ClientPtr client );
extern int LbxGetKeyboardMapping ( ClientPtr client );
extern int LbxQueryFont ( ClientPtr client );
extern int LbxTagData ( ClientPtr client, XID tag, unsigned long len,
pointer data );
extern int LbxInvalidateTag ( ClientPtr client, XID tag );
extern void LbxAllowMotion ( ClientPtr client, int num );
extern void LbxFlushModifierMapTag ( void );
extern void LbxFlushKeyboardMapTag ( void );
extern void LbxFreeFontTag ( FontPtr pfont );
extern void LbxSendInvalidateTag ( ClientPtr client, XID tag, int tagtype );
extern Bool LbxFlushQTag ( XID tag );
extern void ProcessQTagZombies ( void );
extern void LbxQueryTagData ( ClientPtr client, int owner_pid, XID tag,
int tagtype );
extern Bool LbxAddExtension ( char *name, int opcode, int ev_base,
int err_base );
extern Bool LbxAddExtensionAlias ( int idx, char *alias );
extern void LbxDeclareExtensionSecurity ( char *extname, Bool secure );
extern Bool LbxRegisterExtensionGenerationMasks ( int idx, int num_reqs,
char *rep_mask,
char *ev_mask );
extern int LbxQueryExtension ( ClientPtr client, char *ename, int nlen );
extern void LbxCloseDownExtensions ( void );
extern void LbxSetReqMask ( CARD8 *mask, int req, Bool on );
extern int LbxDecodePoly( ClientPtr client, CARD8 xreqtype,
int (*decode_rtn)(char *, char *, short *) );
extern int LbxDecodeFillPoly ( ClientPtr client );
extern int LbxDecodeCopyArea ( ClientPtr client );
extern int LbxDecodeCopyPlane ( ClientPtr client );
extern int LbxDecodePolyText ( ClientPtr client );
extern int LbxDecodeImageText ( ClientPtr client );
extern int LbxDecodePutImage ( ClientPtr client );
extern int LbxDecodeGetImage ( ClientPtr client );
extern int LbxDecodePoints ( char *in, char *inend, short *out );
extern int LbxDecodeSegment ( char *in, char *inend, short *out );
extern int LbxDecodeRectangle ( char *in, char *inend, short *out );
extern int LbxDecodeArc ( char *in, char *inend, short *out );
extern LbxProxyPtr LbxPidToProxy ( int pid );
extern void LbxReencodeOutput ( ClientPtr client, char *pbuf, int *pcount,
char *cbuf, int *ccount );
extern void LbxExtensionInit ( void );
extern void LbxCloseClient ( ClientPtr client );
extern void LbxSetForBlock ( LbxClientPtr lbxClient );
extern int ProcLbxDispatch ( ClientPtr client );
extern int ProcLbxSwitch ( ClientPtr client );
extern int ProcLbxQueryVersion ( ClientPtr client );
extern int ProcLbxStartProxy ( ClientPtr client );
extern int ProcLbxStopProxy ( ClientPtr client );
extern int ProcLbxBeginLargeRequest ( ClientPtr client );
extern int ProcLbxLargeRequestData ( ClientPtr client );
extern int ProcLbxEndLargeRequest ( ClientPtr client );
extern int ProcLbxInternAtoms ( ClientPtr client );
extern int ProcLbxGetWinAttrAndGeom ( ClientPtr client );
extern int ProcLbxNewClient ( ClientPtr client );
extern int ProcLbxEstablishConnection ( ClientPtr client );
extern int ProcLbxCloseClient ( ClientPtr client );
extern int ProcLbxModifySequence ( ClientPtr client );
extern int ProcLbxAllowMotion ( ClientPtr client );
extern int ProcLbxGetModifierMapping ( ClientPtr client );
extern int ProcLbxGetKeyboardMapping ( ClientPtr client );
extern int ProcLbxQueryFont ( ClientPtr client );
extern int ProcLbxChangeProperty ( ClientPtr client );
extern int ProcLbxGetProperty ( ClientPtr client );
extern int ProcLbxTagData ( ClientPtr client );
extern int ProcLbxInvalidateTag ( ClientPtr client );
extern int ProcLbxPolyPoint ( ClientPtr client );
extern int ProcLbxPolyLine ( ClientPtr client );
extern int ProcLbxPolySegment ( ClientPtr client );
extern int ProcLbxPolyRectangle ( ClientPtr client );
extern int ProcLbxPolyArc ( ClientPtr client );
extern int ProcLbxFillPoly ( ClientPtr client );
extern int ProcLbxPolyFillRectangle ( ClientPtr client );
extern int ProcLbxPolyFillArc ( ClientPtr client );
extern int ProcLbxCopyArea ( ClientPtr client );
extern int ProcLbxCopyPlane ( ClientPtr client );
extern int ProcLbxPolyText ( ClientPtr client );
extern int ProcLbxImageText ( ClientPtr client );
extern int ProcLbxQueryExtension ( ClientPtr client );
extern int ProcLbxPutImage ( ClientPtr client );
extern int ProcLbxGetImage ( ClientPtr client );
extern int ProcLbxSync ( ClientPtr client );
extern int LbxChangeProperty ( ClientPtr client );
extern int LbxGetProperty ( ClientPtr client );
extern void LbxStallPropRequest ( ClientPtr client, PropertyPtr pProp );
extern int LbxChangeWindowProperty ( ClientPtr client, WindowPtr pWin,
Atom property, Atom type, int format,
int mode, unsigned long len,
Bool have_data, pointer value,
Bool sendevent, XID *tag );
extern int LbxSquishEvent ( char *buf );
extern int SProcLbxDispatch( ClientPtr client );
extern int SProcLbxSwitch ( ClientPtr client );
extern int SProcLbxBeginLargeRequest ( ClientPtr client );
extern int SProcLbxLargeRequestData ( ClientPtr client );
extern int SProcLbxEndLargeRequest ( ClientPtr client );
extern void LbxWriteSConnSetupPrefix ( ClientPtr pClient,
xLbxConnSetupPrefix *pcsp );
extern void LbxSwapFontInfo ( xLbxFontInfo *pr, Bool compressed );
extern void ZeroReplyPadBytes ( char *buf, int reqType );
#endif