ICElibint.h revision 3bf3b463
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
463bf3b463Smrg#ifdef O_CLOEXEC
473bf3b463Smrg#define FOPEN_CLOEXEC "e"
483bf3b463Smrg#else
493bf3b463Smrg#define FOPEN_CLOEXEC ""
503bf3b463Smrg#define O_CLOEXEC 0
513bf3b463Smrg#endif
52266e564dSmrg
53266e564dSmrg/*
54266e564dSmrg * Vendor & Release
55266e564dSmrg */
56266e564dSmrg
57266e564dSmrg#define IceVendorString  "MIT"
58266e564dSmrg#define IceReleaseString "1.0"
59266e564dSmrg
60266e564dSmrg
61266e564dSmrg/*
62266e564dSmrg * Pad to a 64 bit boundary
63266e564dSmrg */
64266e564dSmrg
65266e564dSmrg#define PAD64(_bytes) ((8 - ((unsigned int) (_bytes) % 8)) % 8)
66266e564dSmrg
67fb5e8d76Smrg#define PADDED_BYTES64(_bytes) ((unsigned int) _bytes + PAD64 (_bytes))
68266e564dSmrg
69266e564dSmrg
70266e564dSmrg/*
71266e564dSmrg * Pad to 32 bit boundary
72266e564dSmrg */
73266e564dSmrg
74266e564dSmrg#define PAD32(_bytes) ((4 - ((unsigned int) (_bytes) % 4)) % 4)
75266e564dSmrg
76fb5e8d76Smrg#define PADDED_BYTES32(_bytes) ((unsigned int) _bytes + PAD32 (_bytes))
77266e564dSmrg
78266e564dSmrg
79266e564dSmrg/*
80266e564dSmrg * Number of 8 byte units in _bytes.
81266e564dSmrg */
82266e564dSmrg
83266e564dSmrg#define WORD64COUNT(_bytes) (((unsigned int) ((_bytes) + 7)) >> 3)
84266e564dSmrg
85266e564dSmrg
86266e564dSmrg/*
87266e564dSmrg * Number of 4 byte units in _bytes.
88266e564dSmrg */
89266e564dSmrg
90266e564dSmrg#define WORD32COUNT(_bytes) (((unsigned int) ((_bytes) + 3)) >> 2)
91266e564dSmrg
92266e564dSmrg
93266e564dSmrg/*
94266e564dSmrg * Given a string, compute the number of bytes for the STRING representation
95266e564dSmrg */
96266e564dSmrg
97266e564dSmrg#define STRING_BYTES(_string) \
98266e564dSmrg    (2 + strlen (_string) + PAD32 (2 + strlen (_string)))
99266e564dSmrg
100266e564dSmrg
101266e564dSmrg/*
102266e564dSmrg * Size of ICE input/output buffers
103266e564dSmrg */
104266e564dSmrg
105266e564dSmrg#define ICE_INBUFSIZE 1024
106266e564dSmrg
107266e564dSmrg#define ICE_OUTBUFSIZE 1024
108266e564dSmrg
109266e564dSmrg
110266e564dSmrg/*
1111009a292Smrg * Maximum number of ICE authentication methods allowed, and maximum
112266e564dSmrg * number of authentication data entries allowed to be set in the
113266e564dSmrg * IceSetPaAuthData function.
114266e564dSmrg *
115266e564dSmrg * We should use linked lists, but this is easier and should suffice.
116266e564dSmrg */
117266e564dSmrg
118266e564dSmrg#define MAX_ICE_AUTH_NAMES 32
119266e564dSmrg#define ICE_MAX_AUTH_DATA_ENTRIES 100
120266e564dSmrg
121266e564dSmrg
122266e564dSmrg/*
123266e564dSmrg * ICE listen object
124266e564dSmrg */
125266e564dSmrg
126266e564dSmrgstruct _IceListenObj {
127266e564dSmrg    struct _XtransConnInfo 	*trans_conn; /* transport connection object */
128266e564dSmrg    char			*network_id;
129266e564dSmrg    IceHostBasedAuthProc 	host_based_auth_proc;
130266e564dSmrg};
131266e564dSmrg
132266e564dSmrg
133266e564dSmrg/*
134266e564dSmrg * Some internal data structures for processing ICE messages.
135266e564dSmrg */
136266e564dSmrg
137266e564dSmrgtypedef void (*_IceProcessCoreMsgProc) (
138266e564dSmrg    IceConn 		/* iceConn */,
139266e564dSmrg    int			/* opcode */,
140266e564dSmrg    unsigned long	/* length */,
141266e564dSmrg    Bool		/* swap */,
142266e564dSmrg    IceReplyWaitInfo *  /* replyWait */,
143266e564dSmrg    Bool *		/* replyReadyRet */,
144266e564dSmrg    Bool *		/* connectionClosedRet */
145266e564dSmrg);
146266e564dSmrg
147266e564dSmrgtypedef struct {
148266e564dSmrg    int 			major_version;
149266e564dSmrg    int 			minor_version;
150266e564dSmrg    _IceProcessCoreMsgProc	process_core_msg_proc;
151266e564dSmrg} _IceVersion;
152266e564dSmrg
153266e564dSmrg
154266e564dSmrg/*
155266e564dSmrg * STORE FOO
156266e564dSmrg */
157266e564dSmrg
158266e564dSmrg#define STORE_CARD8(_pBuf, _val) \
1593bf3b463Smrgdo { \
160266e564dSmrg    *((CARD8 *) _pBuf) = _val; \
161266e564dSmrg    _pBuf += 1; \
1623bf3b463Smrg} while (0)
163266e564dSmrg
164266e564dSmrg#define STORE_CARD16(_pBuf, _val) \
1653bf3b463Smrgdo { \
166266e564dSmrg    *((CARD16 *) _pBuf) = _val; \
167266e564dSmrg    _pBuf += 2; \
1683bf3b463Smrg} while (0)
169266e564dSmrg
170266e564dSmrg#define STORE_CARD32(_pBuf, _val) \
1713bf3b463Smrgdo { \
172266e564dSmrg    *((CARD32 *) _pBuf) = _val; \
173266e564dSmrg    _pBuf += 4; \
1743bf3b463Smrg} while (0)
175266e564dSmrg
176266e564dSmrg
177266e564dSmrg#define STORE_STRING(_pBuf, _string) \
1783bf3b463Smrgdo { \
179fb5e8d76Smrg    CARD16 _len = (CARD16) strlen (_string); \
180266e564dSmrg    STORE_CARD16 (_pBuf, _len); \
181266e564dSmrg    memcpy (_pBuf, _string, _len); \
182266e564dSmrg    _pBuf += _len; \
183266e564dSmrg    if (PAD32 (2 + _len)) \
184266e564dSmrg        _pBuf += PAD32 (2 + _len); \
1853bf3b463Smrg} while (0)
186266e564dSmrg
187266e564dSmrg
1881009a292Smrg/*
1891009a292Smrg * SEND FOO - write to connection instead of buffer
1901009a292Smrg */
1911009a292Smrg#define SEND_STRING(_iceConn, _string) \
1923bf3b463Smrgdo { \
1931009a292Smrg    char _padding[3] = { 0 }; \
1941009a292Smrg    CARD16 _len = (CARD16) strlen (_string); \
1951009a292Smrg    IceWriteData32 (_iceConn, 2, &_len); \
1961009a292Smrg    if (_len) \
1971009a292Smrg        IceSendData (_iceConn, _len, (char *) _string);  \
1981009a292Smrg    if (PAD32 (2 + _len)) \
1991009a292Smrg        IceSendData (_iceConn, PAD32 (2 + _len), _padding); \
2003bf3b463Smrg} while (0)
2011009a292Smrg
202266e564dSmrg/*
203266e564dSmrg * EXTRACT FOO
204266e564dSmrg */
205266e564dSmrg
206266e564dSmrg#define EXTRACT_CARD8(_pBuf, _val) \
2073bf3b463Smrgdo { \
208266e564dSmrg    _val = *((CARD8 *) _pBuf); \
209266e564dSmrg    _pBuf += 1; \
2103bf3b463Smrg} while (0)
211266e564dSmrg
212266e564dSmrg#define EXTRACT_CARD16(_pBuf, _swap, _val) \
2133bf3b463Smrgdo { \
214266e564dSmrg    _val = *((CARD16 *) _pBuf); \
215266e564dSmrg    _pBuf += 2; \
216266e564dSmrg    if (_swap) \
217266e564dSmrg        _val = lswaps (_val); \
2183bf3b463Smrg} while (0)
219266e564dSmrg
220266e564dSmrg#define EXTRACT_CARD32(_pBuf, _swap, _val) \
2213bf3b463Smrgdo { \
222266e564dSmrg    _val = *((CARD32 *) _pBuf); \
223266e564dSmrg    _pBuf += 4; \
224266e564dSmrg    if (_swap) \
225266e564dSmrg        _val = lswapl (_val); \
2263bf3b463Smrg} while (0)
227266e564dSmrg
228266e564dSmrg
229266e564dSmrg#define EXTRACT_STRING(_pBuf, _swap, _string) \
2303bf3b463Smrgdo { \
231266e564dSmrg    CARD16 _len; \
232266e564dSmrg    EXTRACT_CARD16 (_pBuf, _swap, _len); \
233fb5e8d76Smrg    _string = malloc (_len + 1); \
2343bf3b463Smrg    if (_string != NULL) { \
2353bf3b463Smrg        memcpy (_string, _pBuf, _len); \
2363bf3b463Smrg        _string[_len] = '\0'; \
2373bf3b463Smrg    } \
238266e564dSmrg    _pBuf += _len; \
239266e564dSmrg    if (PAD32 (2 + _len)) \
240266e564dSmrg        _pBuf += PAD32 (2 + _len); \
2413bf3b463Smrg} while (0)
242266e564dSmrg
243266e564dSmrg#define EXTRACT_LISTOF_STRING(_pBuf, _swap, _count, _strings) \
2443bf3b463Smrgdo { \
245266e564dSmrg    int _i; \
246266e564dSmrg    for (_i = 0; _i < _count; _i++) \
247266e564dSmrg        EXTRACT_STRING (_pBuf, _swap, _strings[_i]); \
2483bf3b463Smrg} while (0)
249266e564dSmrg
250266e564dSmrg
251266e564dSmrg#define SKIP_STRING(_pBuf, _swap, _end, _bail) \
2523bf3b463Smrgdo { \
253266e564dSmrg    CARD16 _len; \
254266e564dSmrg    EXTRACT_CARD16 (_pBuf, _swap, _len); \
255266e564dSmrg    _pBuf += _len + PAD32(2+_len); \
256266e564dSmrg    if (_pBuf > _end) { \
257266e564dSmrg	_bail; \
258266e564dSmrg    } \
2593bf3b463Smrg} while (0)
260266e564dSmrg
261266e564dSmrg#define SKIP_LISTOF_STRING(_pBuf, _swap, _count, _end, _bail) \
2623bf3b463Smrgdo { \
263266e564dSmrg    int _i; \
264266e564dSmrg    for (_i = 0; _i < _count; _i++) \
265266e564dSmrg        SKIP_STRING (_pBuf, _swap, _end, _bail); \
2663bf3b463Smrg} while (0)
267266e564dSmrg
268266e564dSmrg
269a3129944Smrg
270266e564dSmrg/*
271266e564dSmrg * Byte swapping
272266e564dSmrg */
273266e564dSmrg
274266e564dSmrg/* byte swap a long literal */
275266e564dSmrg#define lswapl(_val) ((((_val) & 0xff) << 24) |\
276266e564dSmrg		   (((_val) & 0xff00) << 8) |\
277266e564dSmrg		   (((_val) & 0xff0000) >> 8) |\
278266e564dSmrg		   (((_val) >> 24) & 0xff))
279266e564dSmrg
280266e564dSmrg/* byte swap a short literal */
281266e564dSmrg#define lswaps(_val) ((((_val) & 0xff) << 8) | (((_val) >> 8) & 0xff))
282266e564dSmrg
283266e564dSmrg
284a3129944Smrg
285266e564dSmrg/*
286266e564dSmrg * ICE replies (not processed via callbacks because we block)
287266e564dSmrg */
288266e564dSmrg
289266e564dSmrg#define ICE_CONNECTION_REPLY	1
290266e564dSmrg#define ICE_CONNECTION_ERROR	2
291266e564dSmrg#define ICE_PROTOCOL_REPLY	3
292266e564dSmrg#define ICE_PROTOCOL_ERROR	4
293266e564dSmrg
294266e564dSmrgtypedef struct {
295266e564dSmrg    int		  type;
296266e564dSmrg    int 	  version_index;
297266e564dSmrg    char	  *vendor;
298266e564dSmrg    char          *release;
299266e564dSmrg} _IceConnectionReply;
300266e564dSmrg
301266e564dSmrgtypedef struct {
302266e564dSmrg    int		  type;
303266e564dSmrg    char	  *error_message;
304266e564dSmrg} _IceConnectionError;
305266e564dSmrg
306266e564dSmrgtypedef struct {
307266e564dSmrg    int		  type;
308266e564dSmrg    int 	  major_opcode;
309266e564dSmrg    int		  version_index;
310266e564dSmrg    char	  *vendor;
311266e564dSmrg    char	  *release;
312266e564dSmrg} _IceProtocolReply;
313266e564dSmrg
314266e564dSmrgtypedef struct {
315266e564dSmrg    int		  type;
316266e564dSmrg    char	  *error_message;
317266e564dSmrg} _IceProtocolError;
318266e564dSmrg
319266e564dSmrg
320266e564dSmrgtypedef union {
321266e564dSmrg    int			type;
322266e564dSmrg    _IceConnectionReply	connection_reply;
323266e564dSmrg    _IceConnectionError	connection_error;
324266e564dSmrg    _IceProtocolReply	protocol_reply;
325266e564dSmrg    _IceProtocolError	protocol_error;
326266e564dSmrg} _IceReply;
327266e564dSmrg
328266e564dSmrg
329266e564dSmrg/*
330266e564dSmrg * Watch for ICE connection create/destroy.
331266e564dSmrg */
332266e564dSmrg
333266e564dSmrgtypedef struct _IceWatchedConnection {
334266e564dSmrg    IceConn				iceConn;
335266e564dSmrg    IcePointer				watch_data;
336266e564dSmrg    struct _IceWatchedConnection	*next;
337266e564dSmrg} _IceWatchedConnection;
338266e564dSmrg
339266e564dSmrgtypedef struct _IceWatchProc {
340266e564dSmrg    IceWatchProc		watch_proc;
341266e564dSmrg    IcePointer			client_data;
342266e564dSmrg    _IceWatchedConnection	*watched_connections;
343266e564dSmrg    struct _IceWatchProc	*next;
344266e564dSmrg} _IceWatchProc;
345266e564dSmrg
346266e564dSmrg
347266e564dSmrg/*
348266e564dSmrg * Locking
349266e564dSmrg */
350266e564dSmrg
351266e564dSmrg#define IceLockConn(_iceConn)
352266e564dSmrg#define IceUnlockConn(_iceConn)
353266e564dSmrg
354266e564dSmrg
355266e564dSmrg/*
356266e564dSmrg * Extern declarations
357266e564dSmrg */
358266e564dSmrg
359a3129944Smrgextern IceConn			_IceConnectionObjs[];
360a3129944Smrgextern char			*_IceConnectionStrings[];
361a3129944Smrgextern int			_IceConnectionCount;
362266e564dSmrg
363a3129944Smrgextern _IceProtocol		_IceProtocols[];
364a3129944Smrgextern int			_IceLastMajorOpcode;
365266e564dSmrg
366a3129944Smrgextern int			_IceAuthCount;
367a3129944Smrgextern const char		*_IceAuthNames[];
368a3129944Smrgextern IcePoAuthProc		_IcePoAuthProcs[];
369a3129944Smrgextern IcePaAuthProc		_IcePaAuthProcs[];
370266e564dSmrg
371a3129944Smrgextern const int		_IceVersionCount;
372a3129944Smrgextern const _IceVersion	_IceVersions[];
373266e564dSmrg
374a3129944Smrgextern _IceWatchProc		*_IceWatchProcs;
375266e564dSmrg
376a3129944Smrgextern IceErrorHandler		_IceErrorHandler;
377a3129944Smrgextern IceIOErrorHandler	_IceIOErrorHandler;
378266e564dSmrg
379a3129944Smrgextern IceAuthDataEntry		_IcePaAuthDataEntries[];
380a3129944Smrgextern int			_IcePaAuthDataEntryCount;
381266e564dSmrg
382266e564dSmrgextern void _IceErrorBadMajor (
383266e564dSmrg    IceConn		/* iceConn */,
384266e564dSmrg    int			/* offendingMajor */,
385266e564dSmrg    int			/* offendingMinor */,
386266e564dSmrg    int			/* severity */
387266e564dSmrg);
388266e564dSmrg
389266e564dSmrgextern void _IceErrorNoAuthentication (
390266e564dSmrg    IceConn		/* iceConn */,
391266e564dSmrg    int			/* offendingMinor */
392266e564dSmrg);
393266e564dSmrg
394266e564dSmrgextern void _IceErrorNoVersion (
395266e564dSmrg    IceConn		/* iceConn */,
396266e564dSmrg    int			/* offendingMinor */
397266e564dSmrg);
398266e564dSmrg
399266e564dSmrgextern void _IceErrorSetupFailed (
400266e564dSmrg    IceConn		/* iceConn */,
401266e564dSmrg    int			/* offendingMinor */,
4029ef0b394Smrg    const char *	/* reason */
403266e564dSmrg);
404266e564dSmrg
405266e564dSmrgextern void _IceErrorAuthenticationRejected (
406266e564dSmrg    IceConn		/* iceConn */,
407266e564dSmrg    int			/* offendingMinor */,
4089ef0b394Smrg    const char *	/* reason */
409266e564dSmrg);
410266e564dSmrg
411266e564dSmrgextern void _IceErrorAuthenticationFailed (
412266e564dSmrg    IceConn		/* iceConn */,
413266e564dSmrg    int			/* offendingMinor */,
4149ef0b394Smrg    const char *	/* reason */
415266e564dSmrg);
416266e564dSmrg
417266e564dSmrgextern void _IceErrorProtocolDuplicate (
418266e564dSmrg    IceConn		/* iceConn */,
4199ef0b394Smrg    const char *	/* protocolName */
420266e564dSmrg);
421266e564dSmrg
422266e564dSmrgextern void _IceErrorMajorOpcodeDuplicate (
423266e564dSmrg    IceConn		/* iceConn */,
424266e564dSmrg    int			/* majorOpcode */
425266e564dSmrg);
426266e564dSmrg
427266e564dSmrgextern void _IceErrorUnknownProtocol (
428266e564dSmrg    IceConn		/* iceConn */,
4299ef0b394Smrg    const char *	/* protocolName */
430266e564dSmrg);
431266e564dSmrg
432266e564dSmrgextern void _IceAddOpcodeMapping (
433266e564dSmrg    IceConn		/* iceConn */,
434266e564dSmrg    int			/* hisOpcode */,
435266e564dSmrg    int			/* myOpcode */
436266e564dSmrg);
437266e564dSmrg
438266e564dSmrgextern char *_IceGetPeerName (
439266e564dSmrg    IceConn		/* iceConn */
440266e564dSmrg);
441266e564dSmrg
442266e564dSmrgextern void _IceFreeConnection (
443266e564dSmrg    IceConn		/* iceConn */
444266e564dSmrg);
445266e564dSmrg
446266e564dSmrgextern void _IceAddReplyWait (
447266e564dSmrg    IceConn		/* iceConn */,
448266e564dSmrg    IceReplyWaitInfo *	/* replyWait */
449266e564dSmrg);
450266e564dSmrg
451266e564dSmrgextern IceReplyWaitInfo *_IceSearchReplyWaits (
452266e564dSmrg    IceConn		/* iceConn */,
453266e564dSmrg    int			/* majorOpcode */
454266e564dSmrg);
455266e564dSmrg
456266e564dSmrgextern void _IceSetReplyReady (
457266e564dSmrg    IceConn		/* iceConn */,
458266e564dSmrg    IceReplyWaitInfo *	/* replyWait */
459266e564dSmrg);
460266e564dSmrg
461266e564dSmrgextern Bool _IceCheckReplyReady (
462266e564dSmrg    IceConn		/* iceConn */,
463266e564dSmrg    IceReplyWaitInfo *	/* replyWait */
464266e564dSmrg);
465266e564dSmrg
466266e564dSmrgextern void _IceConnectionOpened (
467266e564dSmrg    IceConn		/* iceConn */
468266e564dSmrg);
469266e564dSmrg
470266e564dSmrgextern void _IceConnectionClosed (
471266e564dSmrg    IceConn		/* iceConn */
472266e564dSmrg);
473266e564dSmrg
474266e564dSmrgextern void _IceGetPoAuthData (
4759ef0b394Smrg    const char *	/* protocol_name */,
4769ef0b394Smrg    const char *	/* address */,
4779ef0b394Smrg    const char *	/* auth_name */,
478266e564dSmrg    unsigned short *	/* auth_data_length_ret */,
479266e564dSmrg    char **		/* auth_data_ret */
480266e564dSmrg);
481266e564dSmrg
482266e564dSmrgextern void _IceGetPaAuthData (
4839ef0b394Smrg    const char *	/* protocol_name */,
4849ef0b394Smrg    const char *	/* address */,
4859ef0b394Smrg    const char *	/* auth_name */,
486266e564dSmrg    unsigned short *	/* auth_data_length_ret */,
487266e564dSmrg    char **		/* auth_data_ret */
488266e564dSmrg);
489266e564dSmrg
490266e564dSmrgextern void _IceGetPoValidAuthIndices (
4919ef0b394Smrg    const char *	/* protocol_name */,
4929ef0b394Smrg    const char *	/* address */,
493266e564dSmrg    int			/* num_auth_names */,
4949ef0b394Smrg    const char **	/* auth_names */,
495266e564dSmrg    int	*		/* num_indices_ret */,
496266e564dSmrg    int	*		/* indices_ret */
497266e564dSmrg);
498266e564dSmrg
499266e564dSmrgextern void _IceGetPaValidAuthIndices (
5009ef0b394Smrg    const char *	/* protocol_name */,
5019ef0b394Smrg    const char *	/* address */,
502266e564dSmrg    int			/* num_auth_names */,
5039ef0b394Smrg    const char **	/* auth_names */,
504266e564dSmrg    int	*		/* num_indices_ret */,
505266e564dSmrg    int	*		/* indices_ret */
506266e564dSmrg);
507266e564dSmrg
508266e564dSmrg#endif /* _ICELIBINT_H_ */
509