ICElibint.h revision a3129944
1266e564dSmrg/****************************************************************************** 2266e564dSmrg 3266e564dSmrg 4266e564dSmrgCopyright 1993, 1998 The Open Group 5266e564dSmrg 6266e564dSmrgPermission to use, copy, modify, distribute, and sell this software and its 7266e564dSmrgdocumentation for any purpose is hereby granted without fee, provided that 8266e564dSmrgthe above copyright notice appear in all copies and that both that 9266e564dSmrgcopyright notice and this permission notice appear in supporting 10266e564dSmrgdocumentation. 11266e564dSmrg 12266e564dSmrgThe above copyright notice and this permission notice shall be included in 13266e564dSmrgall copies or substantial portions of the Software. 14266e564dSmrg 15266e564dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16266e564dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17266e564dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18266e564dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 19266e564dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20266e564dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21266e564dSmrg 22266e564dSmrgExcept as contained in this notice, the name of The Open Group shall not be 23266e564dSmrgused in advertising or otherwise to promote the sale, use or other dealings 24266e564dSmrgin this Software without prior written authorization from The Open Group. 25266e564dSmrg 26266e564dSmrgAuthor: Ralph Mor, X Consortium 27266e564dSmrg******************************************************************************/ 28266e564dSmrg 29266e564dSmrg#ifndef _ICELIBINT_H_ 30266e564dSmrg#define _ICELIBINT_H_ 31266e564dSmrg 32266e564dSmrg#include <X11/Xos.h> 33266e564dSmrg#include <X11/Xfuncs.h> 34266e564dSmrg#include <X11/Xmd.h> 35266e564dSmrg#include <X11/ICE/ICEproto.h> 36266e564dSmrg#include <X11/ICE/ICEconn.h> 37266e564dSmrg#include <X11/ICE/ICEmsg.h> 38698f425bSmrg#include <X11/ICE/ICEutil.h> 39c5629e66Smrg#ifdef WIN32 40c5629e66Smrg#include <X11/Xwindows.h> 41c5629e66Smrg#endif 42266e564dSmrg 43266e564dSmrg#include <stdlib.h> 44266e564dSmrg#include <stddef.h> 45266e564dSmrg 46266e564dSmrg 47266e564dSmrg/* 48266e564dSmrg * Vendor & Release 49266e564dSmrg */ 50266e564dSmrg 51266e564dSmrg#define IceVendorString "MIT" 52266e564dSmrg#define IceReleaseString "1.0" 53266e564dSmrg 54266e564dSmrg 55266e564dSmrg/* 56266e564dSmrg * Pad to a 64 bit boundary 57266e564dSmrg */ 58266e564dSmrg 59266e564dSmrg#define PAD64(_bytes) ((8 - ((unsigned int) (_bytes) % 8)) % 8) 60266e564dSmrg 61fb5e8d76Smrg#define PADDED_BYTES64(_bytes) ((unsigned int) _bytes + PAD64 (_bytes)) 62266e564dSmrg 63266e564dSmrg 64266e564dSmrg/* 65266e564dSmrg * Pad to 32 bit boundary 66266e564dSmrg */ 67266e564dSmrg 68266e564dSmrg#define PAD32(_bytes) ((4 - ((unsigned int) (_bytes) % 4)) % 4) 69266e564dSmrg 70fb5e8d76Smrg#define PADDED_BYTES32(_bytes) ((unsigned int) _bytes + PAD32 (_bytes)) 71266e564dSmrg 72266e564dSmrg 73266e564dSmrg/* 74266e564dSmrg * Number of 8 byte units in _bytes. 75266e564dSmrg */ 76266e564dSmrg 77266e564dSmrg#define WORD64COUNT(_bytes) (((unsigned int) ((_bytes) + 7)) >> 3) 78266e564dSmrg 79266e564dSmrg 80266e564dSmrg/* 81266e564dSmrg * Number of 4 byte units in _bytes. 82266e564dSmrg */ 83266e564dSmrg 84266e564dSmrg#define WORD32COUNT(_bytes) (((unsigned int) ((_bytes) + 3)) >> 2) 85266e564dSmrg 86266e564dSmrg 87266e564dSmrg/* 88266e564dSmrg * Given a string, compute the number of bytes for the STRING representation 89266e564dSmrg */ 90266e564dSmrg 91266e564dSmrg#define STRING_BYTES(_string) \ 92266e564dSmrg (2 + strlen (_string) + PAD32 (2 + strlen (_string))) 93266e564dSmrg 94266e564dSmrg 95266e564dSmrg/* 96266e564dSmrg * Size of ICE input/output buffers 97266e564dSmrg */ 98266e564dSmrg 99266e564dSmrg#define ICE_INBUFSIZE 1024 100266e564dSmrg 101266e564dSmrg#define ICE_OUTBUFSIZE 1024 102266e564dSmrg 103266e564dSmrg 104266e564dSmrg/* 105266e564dSmrg * Maxium number of ICE authentication methods allowed, and maxiumum 106266e564dSmrg * number of authentication data entries allowed to be set in the 107266e564dSmrg * IceSetPaAuthData function. 108266e564dSmrg * 109266e564dSmrg * We should use linked lists, but this is easier and should suffice. 110266e564dSmrg */ 111266e564dSmrg 112266e564dSmrg#define MAX_ICE_AUTH_NAMES 32 113266e564dSmrg#define ICE_MAX_AUTH_DATA_ENTRIES 100 114266e564dSmrg 115266e564dSmrg 116266e564dSmrg/* 117266e564dSmrg * ICE listen object 118266e564dSmrg */ 119266e564dSmrg 120266e564dSmrgstruct _IceListenObj { 121266e564dSmrg struct _XtransConnInfo *trans_conn; /* transport connection object */ 122266e564dSmrg char *network_id; 123266e564dSmrg IceHostBasedAuthProc host_based_auth_proc; 124266e564dSmrg}; 125266e564dSmrg 126266e564dSmrg 127266e564dSmrg/* 128266e564dSmrg * Some internal data structures for processing ICE messages. 129266e564dSmrg */ 130266e564dSmrg 131266e564dSmrgtypedef void (*_IceProcessCoreMsgProc) ( 132266e564dSmrg IceConn /* iceConn */, 133266e564dSmrg int /* opcode */, 134266e564dSmrg unsigned long /* length */, 135266e564dSmrg Bool /* swap */, 136266e564dSmrg IceReplyWaitInfo * /* replyWait */, 137266e564dSmrg Bool * /* replyReadyRet */, 138266e564dSmrg Bool * /* connectionClosedRet */ 139266e564dSmrg); 140266e564dSmrg 141266e564dSmrgtypedef struct { 142266e564dSmrg int major_version; 143266e564dSmrg int minor_version; 144266e564dSmrg _IceProcessCoreMsgProc process_core_msg_proc; 145266e564dSmrg} _IceVersion; 146266e564dSmrg 147266e564dSmrg 148266e564dSmrg/* 149266e564dSmrg * STORE FOO 150266e564dSmrg */ 151266e564dSmrg 152266e564dSmrg#define STORE_CARD8(_pBuf, _val) \ 153266e564dSmrg{ \ 154266e564dSmrg *((CARD8 *) _pBuf) = _val; \ 155266e564dSmrg _pBuf += 1; \ 156266e564dSmrg} 157266e564dSmrg 158266e564dSmrg#define STORE_CARD16(_pBuf, _val) \ 159266e564dSmrg{ \ 160266e564dSmrg *((CARD16 *) _pBuf) = _val; \ 161266e564dSmrg _pBuf += 2; \ 162266e564dSmrg} 163266e564dSmrg 164266e564dSmrg#define STORE_CARD32(_pBuf, _val) \ 165266e564dSmrg{ \ 166266e564dSmrg *((CARD32 *) _pBuf) = _val; \ 167266e564dSmrg _pBuf += 4; \ 168266e564dSmrg} 169266e564dSmrg 170266e564dSmrg 171266e564dSmrg#define STORE_STRING(_pBuf, _string) \ 172266e564dSmrg{ \ 173fb5e8d76Smrg CARD16 _len = (CARD16) strlen (_string); \ 174266e564dSmrg STORE_CARD16 (_pBuf, _len); \ 175266e564dSmrg memcpy (_pBuf, _string, _len); \ 176266e564dSmrg _pBuf += _len; \ 177266e564dSmrg if (PAD32 (2 + _len)) \ 178266e564dSmrg _pBuf += PAD32 (2 + _len); \ 179266e564dSmrg} 180266e564dSmrg 181266e564dSmrg 182266e564dSmrg/* 183266e564dSmrg * EXTRACT FOO 184266e564dSmrg */ 185266e564dSmrg 186266e564dSmrg#define EXTRACT_CARD8(_pBuf, _val) \ 187266e564dSmrg{ \ 188266e564dSmrg _val = *((CARD8 *) _pBuf); \ 189266e564dSmrg _pBuf += 1; \ 190266e564dSmrg} 191266e564dSmrg 192266e564dSmrg#define EXTRACT_CARD16(_pBuf, _swap, _val) \ 193266e564dSmrg{ \ 194266e564dSmrg _val = *((CARD16 *) _pBuf); \ 195266e564dSmrg _pBuf += 2; \ 196266e564dSmrg if (_swap) \ 197266e564dSmrg _val = lswaps (_val); \ 198266e564dSmrg} 199266e564dSmrg 200266e564dSmrg#define EXTRACT_CARD32(_pBuf, _swap, _val) \ 201266e564dSmrg{ \ 202266e564dSmrg _val = *((CARD32 *) _pBuf); \ 203266e564dSmrg _pBuf += 4; \ 204266e564dSmrg if (_swap) \ 205266e564dSmrg _val = lswapl (_val); \ 206266e564dSmrg} 207266e564dSmrg 208266e564dSmrg 209266e564dSmrg#define EXTRACT_STRING(_pBuf, _swap, _string) \ 210266e564dSmrg{ \ 211266e564dSmrg CARD16 _len; \ 212266e564dSmrg EXTRACT_CARD16 (_pBuf, _swap, _len); \ 213fb5e8d76Smrg _string = malloc (_len + 1); \ 214266e564dSmrg memcpy (_string, _pBuf, _len); \ 215266e564dSmrg _pBuf += _len; \ 216266e564dSmrg _string[_len] = '\0'; \ 217266e564dSmrg if (PAD32 (2 + _len)) \ 218266e564dSmrg _pBuf += PAD32 (2 + _len); \ 219266e564dSmrg} 220266e564dSmrg 221266e564dSmrg#define EXTRACT_LISTOF_STRING(_pBuf, _swap, _count, _strings) \ 222266e564dSmrg{ \ 223266e564dSmrg int _i; \ 224266e564dSmrg for (_i = 0; _i < _count; _i++) \ 225266e564dSmrg EXTRACT_STRING (_pBuf, _swap, _strings[_i]); \ 226266e564dSmrg} 227266e564dSmrg 228266e564dSmrg 229266e564dSmrg#define SKIP_STRING(_pBuf, _swap, _end, _bail) \ 230266e564dSmrg{ \ 231266e564dSmrg CARD16 _len; \ 232266e564dSmrg EXTRACT_CARD16 (_pBuf, _swap, _len); \ 233266e564dSmrg _pBuf += _len + PAD32(2+_len); \ 234266e564dSmrg if (_pBuf > _end) { \ 235266e564dSmrg _bail; \ 236266e564dSmrg } \ 2379ef0b394Smrg} 238266e564dSmrg 239266e564dSmrg#define SKIP_LISTOF_STRING(_pBuf, _swap, _count, _end, _bail) \ 240266e564dSmrg{ \ 241266e564dSmrg int _i; \ 242266e564dSmrg for (_i = 0; _i < _count; _i++) \ 243266e564dSmrg SKIP_STRING (_pBuf, _swap, _end, _bail); \ 244266e564dSmrg} 245266e564dSmrg 246266e564dSmrg 247a3129944Smrg 248266e564dSmrg/* 249266e564dSmrg * Byte swapping 250266e564dSmrg */ 251266e564dSmrg 252266e564dSmrg/* byte swap a long literal */ 253266e564dSmrg#define lswapl(_val) ((((_val) & 0xff) << 24) |\ 254266e564dSmrg (((_val) & 0xff00) << 8) |\ 255266e564dSmrg (((_val) & 0xff0000) >> 8) |\ 256266e564dSmrg (((_val) >> 24) & 0xff)) 257266e564dSmrg 258266e564dSmrg/* byte swap a short literal */ 259266e564dSmrg#define lswaps(_val) ((((_val) & 0xff) << 8) | (((_val) >> 8) & 0xff)) 260266e564dSmrg 261266e564dSmrg 262a3129944Smrg 263266e564dSmrg/* 264266e564dSmrg * ICE replies (not processed via callbacks because we block) 265266e564dSmrg */ 266266e564dSmrg 267266e564dSmrg#define ICE_CONNECTION_REPLY 1 268266e564dSmrg#define ICE_CONNECTION_ERROR 2 269266e564dSmrg#define ICE_PROTOCOL_REPLY 3 270266e564dSmrg#define ICE_PROTOCOL_ERROR 4 271266e564dSmrg 272266e564dSmrgtypedef struct { 273266e564dSmrg int type; 274266e564dSmrg int version_index; 275266e564dSmrg char *vendor; 276266e564dSmrg char *release; 277266e564dSmrg} _IceConnectionReply; 278266e564dSmrg 279266e564dSmrgtypedef struct { 280266e564dSmrg int type; 281266e564dSmrg char *error_message; 282266e564dSmrg} _IceConnectionError; 283266e564dSmrg 284266e564dSmrgtypedef struct { 285266e564dSmrg int type; 286266e564dSmrg int major_opcode; 287266e564dSmrg int version_index; 288266e564dSmrg char *vendor; 289266e564dSmrg char *release; 290266e564dSmrg} _IceProtocolReply; 291266e564dSmrg 292266e564dSmrgtypedef struct { 293266e564dSmrg int type; 294266e564dSmrg char *error_message; 295266e564dSmrg} _IceProtocolError; 296266e564dSmrg 297266e564dSmrg 298266e564dSmrgtypedef union { 299266e564dSmrg int type; 300266e564dSmrg _IceConnectionReply connection_reply; 301266e564dSmrg _IceConnectionError connection_error; 302266e564dSmrg _IceProtocolReply protocol_reply; 303266e564dSmrg _IceProtocolError protocol_error; 304266e564dSmrg} _IceReply; 305266e564dSmrg 306266e564dSmrg 307266e564dSmrg/* 308266e564dSmrg * Watch for ICE connection create/destroy. 309266e564dSmrg */ 310266e564dSmrg 311266e564dSmrgtypedef struct _IceWatchedConnection { 312266e564dSmrg IceConn iceConn; 313266e564dSmrg IcePointer watch_data; 314266e564dSmrg struct _IceWatchedConnection *next; 315266e564dSmrg} _IceWatchedConnection; 316266e564dSmrg 317266e564dSmrgtypedef struct _IceWatchProc { 318266e564dSmrg IceWatchProc watch_proc; 319266e564dSmrg IcePointer client_data; 320266e564dSmrg _IceWatchedConnection *watched_connections; 321266e564dSmrg struct _IceWatchProc *next; 322266e564dSmrg} _IceWatchProc; 323266e564dSmrg 324266e564dSmrg 325266e564dSmrg/* 326266e564dSmrg * Locking 327266e564dSmrg */ 328266e564dSmrg 329266e564dSmrg#define IceLockConn(_iceConn) 330266e564dSmrg#define IceUnlockConn(_iceConn) 331266e564dSmrg 332266e564dSmrg 333266e564dSmrg/* 334266e564dSmrg * Extern declarations 335266e564dSmrg */ 336266e564dSmrg 337a3129944Smrgextern IceConn _IceConnectionObjs[]; 338a3129944Smrgextern char *_IceConnectionStrings[]; 339a3129944Smrgextern int _IceConnectionCount; 340266e564dSmrg 341a3129944Smrgextern _IceProtocol _IceProtocols[]; 342a3129944Smrgextern int _IceLastMajorOpcode; 343266e564dSmrg 344a3129944Smrgextern int _IceAuthCount; 345a3129944Smrgextern const char *_IceAuthNames[]; 346a3129944Smrgextern IcePoAuthProc _IcePoAuthProcs[]; 347a3129944Smrgextern IcePaAuthProc _IcePaAuthProcs[]; 348266e564dSmrg 349a3129944Smrgextern const int _IceVersionCount; 350a3129944Smrgextern const _IceVersion _IceVersions[]; 351266e564dSmrg 352a3129944Smrgextern _IceWatchProc *_IceWatchProcs; 353266e564dSmrg 354a3129944Smrgextern IceErrorHandler _IceErrorHandler; 355a3129944Smrgextern IceIOErrorHandler _IceIOErrorHandler; 356266e564dSmrg 357a3129944Smrgextern IceAuthDataEntry _IcePaAuthDataEntries[]; 358a3129944Smrgextern int _IcePaAuthDataEntryCount; 359266e564dSmrg 360266e564dSmrgextern void _IceErrorBadMajor ( 361266e564dSmrg IceConn /* iceConn */, 362266e564dSmrg int /* offendingMajor */, 363266e564dSmrg int /* offendingMinor */, 364266e564dSmrg int /* severity */ 365266e564dSmrg); 366266e564dSmrg 367266e564dSmrgextern void _IceErrorNoAuthentication ( 368266e564dSmrg IceConn /* iceConn */, 369266e564dSmrg int /* offendingMinor */ 370266e564dSmrg); 371266e564dSmrg 372266e564dSmrgextern void _IceErrorNoVersion ( 373266e564dSmrg IceConn /* iceConn */, 374266e564dSmrg int /* offendingMinor */ 375266e564dSmrg); 376266e564dSmrg 377266e564dSmrgextern void _IceErrorSetupFailed ( 378266e564dSmrg IceConn /* iceConn */, 379266e564dSmrg int /* offendingMinor */, 3809ef0b394Smrg const char * /* reason */ 381266e564dSmrg); 382266e564dSmrg 383266e564dSmrgextern void _IceErrorAuthenticationRejected ( 384266e564dSmrg IceConn /* iceConn */, 385266e564dSmrg int /* offendingMinor */, 3869ef0b394Smrg const char * /* reason */ 387266e564dSmrg); 388266e564dSmrg 389266e564dSmrgextern void _IceErrorAuthenticationFailed ( 390266e564dSmrg IceConn /* iceConn */, 391266e564dSmrg int /* offendingMinor */, 3929ef0b394Smrg const char * /* reason */ 393266e564dSmrg); 394266e564dSmrg 395266e564dSmrgextern void _IceErrorProtocolDuplicate ( 396266e564dSmrg IceConn /* iceConn */, 3979ef0b394Smrg const char * /* protocolName */ 398266e564dSmrg); 399266e564dSmrg 400266e564dSmrgextern void _IceErrorMajorOpcodeDuplicate ( 401266e564dSmrg IceConn /* iceConn */, 402266e564dSmrg int /* majorOpcode */ 403266e564dSmrg); 404266e564dSmrg 405266e564dSmrgextern void _IceErrorUnknownProtocol ( 406266e564dSmrg IceConn /* iceConn */, 4079ef0b394Smrg const char * /* protocolName */ 408266e564dSmrg); 409266e564dSmrg 410266e564dSmrgextern void _IceAddOpcodeMapping ( 411266e564dSmrg IceConn /* iceConn */, 412266e564dSmrg int /* hisOpcode */, 413266e564dSmrg int /* myOpcode */ 414266e564dSmrg); 415266e564dSmrg 416266e564dSmrgextern char *_IceGetPeerName ( 417266e564dSmrg IceConn /* iceConn */ 418266e564dSmrg); 419266e564dSmrg 420266e564dSmrgextern void _IceFreeConnection ( 421266e564dSmrg IceConn /* iceConn */ 422266e564dSmrg); 423266e564dSmrg 424266e564dSmrgextern void _IceAddReplyWait ( 425266e564dSmrg IceConn /* iceConn */, 426266e564dSmrg IceReplyWaitInfo * /* replyWait */ 427266e564dSmrg); 428266e564dSmrg 429266e564dSmrgextern IceReplyWaitInfo *_IceSearchReplyWaits ( 430266e564dSmrg IceConn /* iceConn */, 431266e564dSmrg int /* majorOpcode */ 432266e564dSmrg); 433266e564dSmrg 434266e564dSmrgextern void _IceSetReplyReady ( 435266e564dSmrg IceConn /* iceConn */, 436266e564dSmrg IceReplyWaitInfo * /* replyWait */ 437266e564dSmrg); 438266e564dSmrg 439266e564dSmrgextern Bool _IceCheckReplyReady ( 440266e564dSmrg IceConn /* iceConn */, 441266e564dSmrg IceReplyWaitInfo * /* replyWait */ 442266e564dSmrg); 443266e564dSmrg 444266e564dSmrgextern void _IceConnectionOpened ( 445266e564dSmrg IceConn /* iceConn */ 446266e564dSmrg); 447266e564dSmrg 448266e564dSmrgextern void _IceConnectionClosed ( 449266e564dSmrg IceConn /* iceConn */ 450266e564dSmrg); 451266e564dSmrg 452266e564dSmrgextern void _IceGetPoAuthData ( 4539ef0b394Smrg const char * /* protocol_name */, 4549ef0b394Smrg const char * /* address */, 4559ef0b394Smrg const char * /* auth_name */, 456266e564dSmrg unsigned short * /* auth_data_length_ret */, 457266e564dSmrg char ** /* auth_data_ret */ 458266e564dSmrg); 459266e564dSmrg 460266e564dSmrgextern void _IceGetPaAuthData ( 4619ef0b394Smrg const char * /* protocol_name */, 4629ef0b394Smrg const char * /* address */, 4639ef0b394Smrg const char * /* auth_name */, 464266e564dSmrg unsigned short * /* auth_data_length_ret */, 465266e564dSmrg char ** /* auth_data_ret */ 466266e564dSmrg); 467266e564dSmrg 468266e564dSmrgextern void _IceGetPoValidAuthIndices ( 4699ef0b394Smrg const char * /* protocol_name */, 4709ef0b394Smrg const char * /* address */, 471266e564dSmrg int /* num_auth_names */, 4729ef0b394Smrg const char ** /* auth_names */, 473266e564dSmrg int * /* num_indices_ret */, 474266e564dSmrg int * /* indices_ret */ 475266e564dSmrg); 476266e564dSmrg 477266e564dSmrgextern void _IceGetPaValidAuthIndices ( 4789ef0b394Smrg const char * /* protocol_name */, 4799ef0b394Smrg const char * /* address */, 480266e564dSmrg int /* num_auth_names */, 4819ef0b394Smrg const char ** /* auth_names */, 482266e564dSmrg int * /* num_indices_ret */, 483266e564dSmrg int * /* indices_ret */ 484266e564dSmrg); 485266e564dSmrg 486266e564dSmrg#endif /* _ICELIBINT_H_ */ 487