deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/***********************************************************
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync All Rights Reserved
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncPermission to use, copy, modify, and distribute this software and its
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncdocumentation for any purpose and without fee is hereby granted,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncprovided that the above copyright notice appear in all copies and that
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncboth that copyright notice and this permission notice appear in
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncsupporting documentation, and that the name of Digital not be
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncused in advertising or publicity pertaining to distribution of the
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncsoftware without specific, written prior permission.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncSOFTWARE.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync******************************************************************/
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifndef DIXSTRUCT_H
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define DIXSTRUCT_H
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "dix.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "resource.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "cursor.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "gc.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include "pixmap.h"
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#include <X11/Xmd.h>
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/*
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * direct-mapped hash table, used by resource manager to store
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * translation from client ids to server addresses.
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef DEBUG
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define MAX_REQUEST_LOG 100
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern CallbackListPtr ClientStateCallback;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr client;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync xConnSetupPrefix *prefix;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync xConnSetup *setup;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} NewClientInfoRec;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef void (*ReplySwapPtr) (
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr /* pClient */,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /* size */,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync void * /* pbuf */);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern void ReplyNotSwappd (
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr /* pClient */,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int /* size */,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync void * /* pbuf */);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef enum {ClientStateInitial,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientStateAuthenticating,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientStateRunning,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientStateRetained,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientStateGone,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientStateCheckingSecurity,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientStateCheckedSecurity} ClientState;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef XFIXES
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _saveSet {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync struct _Window *windowPtr;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool toRoot;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool remap;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} SaveSetElt;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetWindow(ss) ((ss).windowPtr)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetToRoot(ss) ((ss).toRoot)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetRemap(ss) ((ss).remap)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetAssignWindow(ss,w) ((ss).windowPtr = (w))
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetAssignToRoot(ss,tr) ((ss).toRoot = (tr))
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetAssignRemap(ss,rm) ((ss).remap = (rm))
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#else
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _Window *SaveSetElt;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetWindow(ss) (ss)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetToRoot(ss) FALSE
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetRemap(ss) TRUE
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetAssignWindow(ss,w) ((ss) = (w))
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetAssignToRoot(ss,tr)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SaveSetAssignRemap(ss,rm)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _Client {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int index;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Mask clientAsMask;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pointer requestBuffer;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pointer osPrivate; /* for OS layer, including scheduler */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool swapped;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ReplySwapPtr pSwapReplyFunc;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync XID errorValue;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int sequence;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int closeDownMode;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int clientGone;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int noClientException; /* this client died or needs to be
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * killed */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync DrawablePtr lastDrawable;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Drawable lastDrawableID;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync GCPtr lastGC;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync GContext lastGCID;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync SaveSetElt *saveSet;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int numSaved;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pointer screenPrivate[MAXSCREENS];
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int (**requestVector) (
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr /* pClient */);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync CARD32 req_len; /* length of current request */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool big_requests; /* supports large requests */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int priority;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientState clientState;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync DevUnion *devPrivates;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef XKB
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned short xkbClientFlags;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned short mapNotifyMask;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned short newKeyboardNotifyMask;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned short vMajor,vMinor;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync KeyCode minKC,maxKC;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef DEBUG
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned char requestLog[MAX_REQUEST_LOG];
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int requestLogIndex;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync unsigned long replyBytesRemaining;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef XAPPGROUP
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync struct _AppGroupRec* appgroup;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync struct _FontResolution * (*fontResFunc) ( /* no need for font.h */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr /* pClient */,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int * /* num */);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef SMART_SCHEDULE
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int smart_priority;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync long smart_start_tick;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync long smart_stop_tick;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync long smart_check_tick;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} ClientRec;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef SMART_SCHEDULE
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/*
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync * Scheduling interface
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern long SmartScheduleTime;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern long SmartScheduleInterval;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern long SmartScheduleSlice;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern long SmartScheduleMaxSlice;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern unsigned long SmartScheduleIdleCount;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool SmartScheduleDisable;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool SmartScheduleIdle;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool SmartScheduleTimerStopped;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool SmartScheduleStartTimer(void);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SMART_MAX_PRIORITY (20)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define SMART_MIN_PRIORITY (-20)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern Bool SmartScheduleInit(void);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* This prototype is used pervasively in Xext, dix */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#define DISPATCH_PROC(func) int func(ClientPtr /* client */)
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _WorkQueue {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync struct _WorkQueue *next;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool (*function) (
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr /* pClient */,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pointer /* closure */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync ClientPtr client;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pointer closure;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} WorkQueueRec;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern TimeStamp currentTime;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern TimeStamp lastDeviceEventTime;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int CompareTimeStamps(
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync TimeStamp /*a*/,
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync TimeStamp /*b*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern TimeStamp ClientTimeToServerTime(CARD32 /*c*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _CallbackRec {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync CallbackProcPtr proc;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync pointer data;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool deleted;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync struct _CallbackRec *next;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} CallbackRec, *CallbackPtr;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsynctypedef struct _CallbackList {
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync CallbackFuncsRec funcs;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int inCallback;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync Bool deleted;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync int numDeleted;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync CallbackPtr list;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync} CallbackListRec;
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync/* proc vectors */
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int (* InitialVector[3]) (ClientPtr /*client*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int (* ProcVector[256]) (ClientPtr /*client*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int (* SwappedProcVector[256]) (ClientPtr /*client*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#ifdef K5AUTH
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int (*k5_Vector[256])(ClientPtr /*client*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern ReplySwapPtr ReplySwapVector[256];
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsyncextern int ProcBadRequest(ClientPtr /*client*/);
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync
deb4998ba50060c48cce222fd18a8eed053918d7vboxsync#endif /* DIXSTRUCT_H */