1 /******************************************************************************
2 
3 
4 Copyright 1993, 1998  The Open Group
5 
6 Permission to use, copy, modify, distribute, and sell this software and its
7 documentation for any purpose is hereby granted without fee, provided that
8 the above copyright notice appear in all copies and that both that
9 copyright notice and this permission notice appear in supporting
10 documentation.
11 
12 The above copyright notice and this permission notice shall be included in
13 all copies or substantial portions of the Software.
14 
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
18 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
19 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 
22 Except as contained in this notice, the name of The Open Group shall not be
23 used in advertising or otherwise to promote the sale, use or other dealings
24 in this Software without prior written authorization from The Open Group.
25 
26 Author: Ralph Mor, X Consortium
27 ******************************************************************************/
28 
29 #ifndef _ICELIB_H_
30 #define _ICELIB_H_
31 
32 #include <X11/ICE/ICE.h>
33 #include <X11/Xfuncproto.h>
34 
35 #define Bool int
36 #define Status int
37 #define True 1
38 #define False 0
39 
40 typedef void *IcePointer;
41 
42 typedef enum {
43     IcePoAuthHaveReply,
44     IcePoAuthRejected,
45     IcePoAuthFailed,
46     IcePoAuthDoneCleanup
47 } IcePoAuthStatus;
48 
49 typedef enum {
50     IcePaAuthContinue,
51     IcePaAuthAccepted,
52     IcePaAuthRejected,
53     IcePaAuthFailed
54 } IcePaAuthStatus;
55 
56 typedef enum {
57     IceConnectPending,
58     IceConnectAccepted,
59     IceConnectRejected,
60     IceConnectIOError
61 } IceConnectStatus;
62 
63 typedef enum {
64     IceProtocolSetupSuccess,
65     IceProtocolSetupFailure,
66     IceProtocolSetupIOError,
67     IceProtocolAlreadyActive
68 } IceProtocolSetupStatus;
69 
70 typedef enum {
71     IceAcceptSuccess,
72     IceAcceptFailure,
73     IceAcceptBadMalloc
74 } IceAcceptStatus;
75 
76 typedef enum {
77     IceClosedNow,
78     IceClosedASAP,
79     IceConnectionInUse,
80     IceStartedShutdownNegotiation
81 } IceCloseStatus;
82 
83 typedef enum {
84     IceProcessMessagesSuccess,
85     IceProcessMessagesIOError,
86     IceProcessMessagesConnectionClosed
87 } IceProcessMessagesStatus;
88 
89 typedef struct {
90     unsigned long	sequence_of_request;
91     int			major_opcode_of_request;
92     int			minor_opcode_of_request;
93     IcePointer		reply;
94 } IceReplyWaitInfo;
95 
96 typedef struct _IceConn *IceConn;
97 typedef struct _IceListenObj *IceListenObj;
98 
99 typedef void (*IceWatchProc) (
100     IceConn		/* iceConn */,
101     IcePointer		/* clientData */,
102     Bool		/* opening */,
103     IcePointer *	/* watchData */
104 );
105 
106 typedef void (*IcePoProcessMsgProc) (
107     IceConn 		/* iceConn */,
108     IcePointer		/* clientData */,
109     int			/* opcode */,
110     unsigned long	/* length */,
111     Bool		/* swap */,
112     IceReplyWaitInfo *  /* replyWait */,
113     Bool *		/* replyReadyRet */
114 );
115 
116 typedef void (*IcePaProcessMsgProc) (
117     IceConn 		/* iceConn */,
118     IcePointer		/* clientData */,
119     int			/* opcode */,
120     unsigned long	/* length */,
121     Bool		/* swap */
122 );
123 
124 typedef struct {
125     int			 major_version;
126     int			 minor_version;
127     IcePoProcessMsgProc  process_msg_proc;
128 } IcePoVersionRec;
129 
130 typedef struct {
131     int			 major_version;
132     int			 minor_version;
133     IcePaProcessMsgProc  process_msg_proc;
134 } IcePaVersionRec;
135 
136 typedef IcePoAuthStatus (*IcePoAuthProc) (
137     IceConn		/* iceConn */,
138     IcePointer *	/* authStatePtr */,
139     Bool		/* cleanUp */,
140     Bool		/* swap */,
141     int			/* authDataLen */,
142     IcePointer		/* authData */,
143     int *		/* replyDataLenRet */,
144     IcePointer *	/* replyDataRet */,
145     char **		/* errorStringRet */
146 );
147 
148 typedef IcePaAuthStatus (*IcePaAuthProc) (
149     IceConn		/* iceConn */,
150     IcePointer *	/* authStatePtr */,
151     Bool		/* swap */,
152     int			/* authDataLen */,
153     IcePointer		/* authData */,
154     int *		/* replyDataLenRet */,
155     IcePointer *	/* replyDataRet */,
156     char **		/* errorStringRet */
157 );
158 
159 typedef Bool (*IceHostBasedAuthProc) (
160     char *		/* hostName */
161 );
162 
163 typedef Status (*IceProtocolSetupProc) (
164     IceConn 		/* iceConn */,
165     int			/* majorVersion */,
166     int			/* minorVersion */,
167     char *		/* vendor */,
168     char *		/* release */,
169     IcePointer *	/* clientDataRet */,
170     char **		/* failureReasonRet */
171 );
172 
173 typedef void (*IceProtocolActivateProc) (
174     IceConn 		/* iceConn */,
175     IcePointer		/* clientData */
176 );
177 
178 typedef void (*IceIOErrorProc) (
179     IceConn 		/* iceConn */
180 );
181 
182 typedef void (*IcePingReplyProc) (
183     IceConn 		/* iceConn */,
184     IcePointer		/* clientData */
185 );
186 
187 typedef void (*IceErrorHandler) (
188     IceConn 		/* iceConn */,
189     Bool		/* swap */,
190     int			/* offendingMinorOpcode */,
191     unsigned long 	/* offendingSequence */,
192     int 		/* errorClass */,
193     int			/* severity */,
194     IcePointer		/* values */
195 );
196 
197 typedef void (*IceIOErrorHandler) (
198     IceConn 		/* iceConn */
199 );
200 
201 
202 /*
203  * Function prototypes
204  */
205 
206 _XFUNCPROTOBEGIN
207 
208 extern int IceRegisterForProtocolSetup (
209     const char *		/* protocolName */,
210     const char *		/* vendor */,
211     const char *		/* release */,
212     int				/* versionCount */,
213     IcePoVersionRec *		/* versionRecs */,
214     int				/* authCount */,
215     const char **		/* authNames */,
216     IcePoAuthProc *		/* authProcs */,
217     IceIOErrorProc		/* IOErrorProc */
218 );
219 
220 extern int IceRegisterForProtocolReply (
221     const char *		/* protocolName */,
222     const char *		/* vendor */,
223     const char *		/* release */,
224     int				/* versionCount */,
225     IcePaVersionRec *		/* versionRecs */,
226     int				/* authCount */,
227     const char **		/* authNames */,
228     IcePaAuthProc *		/* authProcs */,
229     IceHostBasedAuthProc	/* hostBasedAuthProc */,
230     IceProtocolSetupProc	/* protocolSetupProc */,
231     IceProtocolActivateProc	/* protocolActivateProc */,
232     IceIOErrorProc		/* IOErrorProc */
233 );
234 
235 extern IceConn IceOpenConnection (
236     char *		/* networkIdsList */,
237     IcePointer		/* context */,
238     Bool		/* mustAuthenticate */,
239     int			/* majorOpcodeCheck */,
240     int			/* errorLength */,
241     char *		/* errorStringRet */
242 );
243 
244 extern IcePointer IceGetConnectionContext (
245     IceConn		/* iceConn */
246 );
247 
248 extern Status IceListenForConnections (
249     int *		/* countRet */,
250     IceListenObj **	/* listenObjsRet */,
251     int			/* errorLength */,
252     char *		/* errorStringRet */
253 );
254 
255 extern Status IceListenForWellKnownConnections (
256     char *		/* port */,
257     int *		/* countRet */,
258     IceListenObj **	/* listenObjsRet */,
259     int			/* errorLength */,
260     char *		/* errorStringRet */
261 );
262 
263 extern int IceGetListenConnectionNumber (
264     IceListenObj	/* listenObj */
265 );
266 
267 extern char *IceGetListenConnectionString (
268     IceListenObj	/* listenObj */
269 );
270 
271 extern char *IceComposeNetworkIdList (
272     int			/* count */,
273     IceListenObj *	/* listenObjs */
274 );
275 
276 extern void IceFreeListenObjs (
277     int			/* count */,
278     IceListenObj *	/* listenObjs */
279 );
280 
281 extern void IceSetHostBasedAuthProc (
282     IceListenObj		/* listenObj */,
283     IceHostBasedAuthProc   	/* hostBasedAuthProc */
284 );
285 
286 extern IceConn IceAcceptConnection (
287     IceListenObj	/* listenObj */,
288     IceAcceptStatus *	/* statusRet */
289 );
290 
291 extern void IceSetShutdownNegotiation (
292     IceConn		/* iceConn */,
293     Bool		/* negotiate */
294 );
295 
296 extern Bool IceCheckShutdownNegotiation (
297     IceConn		/* iceConn */
298 );
299 
300 extern IceCloseStatus IceCloseConnection (
301     IceConn		/* iceConn */
302 );
303 
304 extern Status IceAddConnectionWatch (
305     IceWatchProc		/* watchProc */,
306     IcePointer			/* clientData */
307 );
308 
309 extern void IceRemoveConnectionWatch (
310     IceWatchProc		/* watchProc */,
311     IcePointer			/* clientData */
312 );
313 
314 extern IceProtocolSetupStatus IceProtocolSetup (
315     IceConn		/* iceConn */,
316     int 		/* myOpcode */,
317     IcePointer		/* clientData */,
318     Bool		/* mustAuthenticate */,
319     int	*		/* majorVersionRet */,
320     int	*		/* minorVersionRet */,
321     char **		/* vendorRet */,
322     char **		/* releaseRet */,
323     int			/* errorLength */,
324     char *		/* errorStringRet */
325 );
326 
327 extern Status IceProtocolShutdown (
328     IceConn		/* iceConn */,
329     int			/* majorOpcode */
330 );
331 
332 extern IceProcessMessagesStatus IceProcessMessages (
333     IceConn		/* iceConn */,
334     IceReplyWaitInfo *	/* replyWait */,
335     Bool *		/* replyReadyRet */
336 );
337 
338 extern Status IcePing (
339    IceConn		/* iceConn */,
340    IcePingReplyProc	/* pingReplyProc */,
341    IcePointer		/* clientData */
342 );
343 
344 extern char *IceAllocScratch (
345    IceConn		/* iceConn */,
346    unsigned long	/* size */
347 );
348 
349 extern int IceFlush (
350    IceConn		/* iceConn */
351 );
352 
353 extern int IceGetOutBufSize (
354    IceConn		/* iceConn */
355 );
356 
357 extern int IceGetInBufSize (
358    IceConn		/* iceConn */
359 );
360 
361 extern IceConnectStatus IceConnectionStatus (
362     IceConn		/* iceConn */
363 );
364 
365 extern char *IceVendor (
366     IceConn		/* iceConn */
367 );
368 
369 extern char *IceRelease (
370     IceConn		/* iceConn */
371 );
372 
373 extern int IceProtocolVersion (
374     IceConn		/* iceConn */
375 );
376 
377 extern int IceProtocolRevision (
378     IceConn		/* iceConn */
379 );
380 
381 extern int IceConnectionNumber (
382     IceConn		/* iceConn */
383 );
384 
385 extern char *IceConnectionString (
386     IceConn		/* iceConn */
387 );
388 
389 extern unsigned long IceLastSentSequenceNumber (
390     IceConn		/* iceConn */
391 );
392 
393 extern unsigned long IceLastReceivedSequenceNumber (
394     IceConn		/* iceConn */
395 );
396 
397 extern Bool IceSwapping (
398     IceConn		/* iceConn */
399 );
400 
401 extern IceErrorHandler IceSetErrorHandler (
402     IceErrorHandler 	/* handler */
403 );
404 
405 extern IceIOErrorHandler IceSetIOErrorHandler (
406     IceIOErrorHandler 	/* handler */
407 );
408 
409 extern char *IceGetPeerName (
410     IceConn		/* iceConn */
411 );
412 
413 /*
414  * Multithread Routines
415  */
416 
417 extern Status IceInitThreads (
418     void
419 );
420 
421 extern void IceAppLockConn (
422     IceConn		/* iceConn */
423 );
424 
425 extern void IceAppUnlockConn (
426     IceConn		/* iceConn */
427 );
428 
429 _XFUNCPROTOEND
430 
431 #endif /* _ICELIB_H_ */
432