#ifndef _ICELIBINT_H_
#define _ICELIBINT_H_
#include <X11/Xos.h>
#include <X11/Xfuncs.h>
#include <X11/Xmd.h>
#include <X11/ICE/ICEproto.h>
#include <X11/ICE/ICEconn.h>
#include <X11/ICE/ICEmsg.h>
#include <stdlib.h>
#include <stddef.h>
#define IceVendorString "MIT"
#define IceReleaseString "1.0"
#define PAD64(_bytes) ((8 - ((unsigned int) (_bytes) % 8)) % 8)
#define PADDED_BYTES64(_bytes) (_bytes + PAD64 (_bytes))
#define PAD32(_bytes) ((4 - ((unsigned int) (_bytes) % 4)) % 4)
#define PADDED_BYTES32(_bytes) (_bytes + PAD32 (_bytes))
#define WORD64COUNT(_bytes) (((unsigned int) ((_bytes) + 7)) >> 3)
#define WORD32COUNT(_bytes) (((unsigned int) ((_bytes) + 3)) >> 2)
#define STRING_BYTES(_string) \
(2 + strlen (_string) + PAD32 (2 + strlen (_string)))
#define ICE_INBUFSIZE 1024
#define ICE_OUTBUFSIZE 1024
#define MAX_ICE_AUTH_NAMES 32
#define ICE_MAX_AUTH_DATA_ENTRIES 100
struct _IceListenObj {
struct _XtransConnInfo *trans_conn;
char *network_id;
IceHostBasedAuthProc host_based_auth_proc;
};
typedef void (*_IceProcessCoreMsgProc) (
IceConn ,
int ,
unsigned long ,
Bool ,
IceReplyWaitInfo * ,
Bool * ,
Bool *
);
typedef struct {
int major_version;
int minor_version;
_IceProcessCoreMsgProc process_core_msg_proc;
} _IceVersion;
#define STORE_CARD8(_pBuf, _val) \
{ \
*((CARD8 *) _pBuf) = _val; \
_pBuf += 1; \
}
#ifndef WORD64
#define STORE_CARD16(_pBuf, _val) \
{ \
*((CARD16 *) _pBuf) = _val; \
_pBuf += 2; \
}
#define STORE_CARD32(_pBuf, _val) \
{ \
*((CARD32 *) _pBuf) = _val; \
_pBuf += 4; \
}
#else
#define STORE_CARD16(_pBuf, _val) \
{ \
struct { \
int value :16; \
int pad :16; \
} _d; \
_d.value = _val; \
memcpy (_pBuf, &_d, 2); \
_pBuf += 2; \
}
#define STORE_CARD32(_pBuf, _val) \
{ \
struct { \
int value :32; \
} _d; \
_d.value = _val; \
memcpy (_pBuf, &_d, 4); \
_pBuf += 4; \
}
#endif
#define STORE_STRING(_pBuf, _string) \
{ \
CARD16 _len = strlen (_string); \
STORE_CARD16 (_pBuf, _len); \
memcpy (_pBuf, _string, _len); \
_pBuf += _len; \
if (PAD32 (2 + _len)) \
_pBuf += PAD32 (2 + _len); \
}
#define EXTRACT_CARD8(_pBuf, _val) \
{ \
_val = *((CARD8 *) _pBuf); \
_pBuf += 1; \
}
#ifndef WORD64
#define EXTRACT_CARD16(_pBuf, _swap, _val) \
{ \
_val = *((CARD16 *) _pBuf); \
_pBuf += 2; \
if (_swap) \
_val = lswaps (_val); \
}
#define EXTRACT_CARD32(_pBuf, _swap, _val) \
{ \
_val = *((CARD32 *) _pBuf); \
_pBuf += 4; \
if (_swap) \
_val = lswapl (_val); \
}
#else
#define EXTRACT_CARD16(_pBuf, _swap, _val) \
{ \
_val = *(_pBuf + 0) & 0xff; \
_val <<= 8; \
_val |= *(_pBuf + 1) & 0xff;\
_pBuf += 2; \
if (_swap) \
_val = lswaps (_val); \
}
#define EXTRACT_CARD32(_pBuf, _swap, _val) \
{ \
_val = *(_pBuf + 0) & 0xff; \
_val <<= 8; \
_val |= *(_pBuf + 1) & 0xff;\
_val <<= 8; \
_val |= *(_pBuf + 2) & 0xff;\
_val <<= 8; \
_val |= *(_pBuf + 3) & 0xff;\
_pBuf += 4; \
if (_swap) \
_val = lswapl (_val); \
}
#endif
#define EXTRACT_STRING(_pBuf, _swap, _string) \
{ \
CARD16 _len; \
EXTRACT_CARD16 (_pBuf, _swap, _len); \
_string = (char *) malloc (_len + 1); \
memcpy (_string, _pBuf, _len); \
_pBuf += _len; \
_string[_len] = '\0'; \
if (PAD32 (2 + _len)) \
_pBuf += PAD32 (2 + _len); \
}
#define EXTRACT_LISTOF_STRING(_pBuf, _swap, _count, _strings) \
{ \
int _i; \
for (_i = 0; _i < _count; _i++) \
EXTRACT_STRING (_pBuf, _swap, _strings[_i]); \
}
#define SKIP_STRING(_pBuf, _swap, _end, _bail) \
{ \
CARD16 _len; \
EXTRACT_CARD16 (_pBuf, _swap, _len); \
_pBuf += _len + PAD32(2+_len); \
if (_pBuf > _end) { \
_bail; \
} \
}
#define SKIP_LISTOF_STRING(_pBuf, _swap, _count, _end, _bail) \
{ \
int _i; \
for (_i = 0; _i < _count; _i++) \
SKIP_STRING (_pBuf, _swap, _end, _bail); \
}
#define lswapl(_val) ((((_val) & 0xff) << 24) |\
(((_val) & 0xff00) << 8) |\
(((_val) & 0xff0000) >> 8) |\
(((_val) >> 24) & 0xff))
#define lswaps(_val) ((((_val) & 0xff) << 8) | (((_val) >> 8) & 0xff))
#define ICE_CONNECTION_REPLY 1
#define ICE_CONNECTION_ERROR 2
#define ICE_PROTOCOL_REPLY 3
#define ICE_PROTOCOL_ERROR 4
typedef struct {
int type;
int version_index;
char *vendor;
char *release;
} _IceConnectionReply;
typedef struct {
int type;
char *error_message;
} _IceConnectionError;
typedef struct {
int type;
int major_opcode;
int version_index;
char *vendor;
char *release;
} _IceProtocolReply;
typedef struct {
int type;
char *error_message;
} _IceProtocolError;
typedef union {
int type;
_IceConnectionReply connection_reply;
_IceConnectionError connection_error;
_IceProtocolReply protocol_reply;
_IceProtocolError protocol_error;
} _IceReply;
typedef struct _IceWatchedConnection {
IceConn iceConn;
IcePointer watch_data;
struct _IceWatchedConnection *next;
} _IceWatchedConnection;
typedef struct _IceWatchProc {
IceWatchProc watch_proc;
IcePointer client_data;
_IceWatchedConnection *watched_connections;
struct _IceWatchProc *next;
} _IceWatchProc;
#define IceLockConn(_iceConn)
#define IceUnlockConn(_iceConn)
extern IceConn _IceConnectionObjs[];
extern char *_IceConnectionStrings[];
extern int _IceConnectionCount;
extern _IceProtocol _IceProtocols[];
extern int _IceLastMajorOpcode;
extern int _IceAuthCount;
extern char *_IceAuthNames[];
extern IcePoAuthProc _IcePoAuthProcs[];
extern IcePaAuthProc _IcePaAuthProcs[];
extern int _IceVersionCount;
extern _IceVersion _IceVersions[];
extern _IceWatchProc *_IceWatchProcs;
extern IceErrorHandler _IceErrorHandler;
extern IceIOErrorHandler _IceIOErrorHandler;
extern void _IceErrorBadMajor (
IceConn ,
int ,
int ,
int
);
extern void _IceErrorNoAuthentication (
IceConn ,
int
);
extern void _IceErrorNoVersion (
IceConn ,
int
);
extern void _IceErrorSetupFailed (
IceConn ,
int ,
char *
);
extern void _IceErrorAuthenticationRejected (
IceConn ,
int ,
char *
);
extern void _IceErrorAuthenticationFailed (
IceConn ,
int ,
char *
);
extern void _IceErrorProtocolDuplicate (
IceConn ,
char *
);
extern void _IceErrorMajorOpcodeDuplicate (
IceConn ,
int
);
extern void _IceErrorUnknownProtocol (
IceConn ,
char *
);
extern void _IceAddOpcodeMapping (
IceConn ,
int ,
int
);
extern char *_IceGetPeerName (
IceConn
);
extern void _IceFreeConnection (
IceConn
);
extern void _IceAddReplyWait (
IceConn ,
IceReplyWaitInfo *
);
extern IceReplyWaitInfo *_IceSearchReplyWaits (
IceConn ,
int
);
extern void _IceSetReplyReady (
IceConn ,
IceReplyWaitInfo *
);
extern Bool _IceCheckReplyReady (
IceConn ,
IceReplyWaitInfo *
);
extern void _IceConnectionOpened (
IceConn
);
extern void _IceConnectionClosed (
IceConn
);
extern void _IceGetPoAuthData (
char * ,
char * ,
char * ,
unsigned short * ,
char **
);
extern void _IceGetPaAuthData (
char * ,
char * ,
char * ,
unsigned short * ,
char **
);
extern void _IceGetPoValidAuthIndices (
char * ,
char * ,
int ,
char ** ,
int * ,
int *
);
extern void _IceGetPaValidAuthIndices (
char * ,
char * ,
int ,
char ** ,
int * ,
int *
);
#endif