1/*
2
3Copyright 1993, 1998  The Open Group
4
5Permission to use, copy, modify, distribute, and sell this software and its
6documentation for any purpose is hereby granted without fee, provided that
7the above copyright notice appear in all copies and that both that
8copyright notice and this permission notice appear in supporting
9documentation.
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21Except as contained in this notice, the name of The Open Group shall not be
22used in advertising or otherwise to promote the sale, use or other dealings
23in this Software without prior written authorization from The Open Group.
24
25*/
26
27/*
28 * Author: Ralph Mor, X Consortium
29 */
30
31#ifndef _SMLIB_H_
32#define _SMLIB_H_
33
34#include <X11/SM/SM.h>
35#include <X11/ICE/ICElib.h>
36
37
38/*
39 * Generic SM pointer
40 */
41
42typedef IcePointer SmPointer;
43
44
45/*
46 * Connection objects.  Defined in SMlibint.h
47 */
48
49typedef struct _SmcConn *SmcConn;
50typedef struct _SmsConn *SmsConn;
51
52
53/*
54 * Session Management property
55 */
56
57typedef struct {
58    int		length;		/* length (in bytes) of the value */
59    SmPointer   value;		/* the value */
60} SmPropValue;
61
62typedef struct {
63    char	*name;		/* name of property */
64    char	*type;		/* type of property */
65    int		num_vals;	/* number of values in property */
66    SmPropValue *vals;		/* the values */
67} SmProp;
68
69
70
71/*
72 * SmcCloseConnection status return
73 */
74
75typedef enum {
76    SmcClosedNow,
77    SmcClosedASAP,
78    SmcConnectionInUse
79} SmcCloseStatus;
80
81
82
83/*
84 * Client callbacks
85 */
86
87typedef void (*SmcSaveYourselfProc) (
88    SmcConn		/* smcConn */,
89    SmPointer		/* clientData */,
90    int  		/* saveType */,
91    Bool		/* shutdown */,
92    int			/* interactStyle */,
93    Bool		/* fast */
94);
95
96typedef void (*SmcSaveYourselfPhase2Proc) (
97    SmcConn		/* smcConn */,
98    SmPointer		/* clientData */
99);
100
101typedef void (*SmcInteractProc) (
102    SmcConn		/* smcConn */,
103    SmPointer		/* clientData */
104);
105
106typedef void (*SmcDieProc) (
107    SmcConn		/* smcConn */,
108    SmPointer		/* clientData */
109);
110
111typedef void (*SmcShutdownCancelledProc) (
112    SmcConn		/* smcConn */,
113    SmPointer		/* clientData */
114);
115
116typedef void (*SmcSaveCompleteProc) (
117    SmcConn		/* smcConn */,
118    SmPointer		/* clientData */
119);
120
121typedef void (*SmcPropReplyProc) (
122    SmcConn		/* smcConn */,
123    SmPointer		/* clientData */,
124    int			/* numProps */,
125    SmProp **		/* props */
126);
127
128
129/*
130 * Callbacks set up at SmcOpenConnection time
131 */
132
133typedef struct {
134
135    struct {
136	SmcSaveYourselfProc	 callback;
137	SmPointer		 client_data;
138    } save_yourself;
139
140    struct {
141	SmcDieProc		 callback;
142	SmPointer		 client_data;
143    } die;
144
145    struct {
146	SmcSaveCompleteProc	 callback;
147	SmPointer		 client_data;
148    } save_complete;
149
150    struct {
151	SmcShutdownCancelledProc callback;
152	SmPointer		 client_data;
153    } shutdown_cancelled;
154
155} SmcCallbacks;
156
157#define SmcSaveYourselfProcMask		(1L << 0)
158#define SmcDieProcMask			(1L << 1)
159#define SmcSaveCompleteProcMask		(1L << 2)
160#define SmcShutdownCancelledProcMask	(1L << 3)
161
162
163
164/*
165 * Session manager callbacks
166 */
167
168typedef Status (*SmsRegisterClientProc) (
169    SmsConn 		/* smsConn */,
170    SmPointer		/* managerData */,
171    char *		/* previousId */
172);
173
174typedef void (*SmsInteractRequestProc) (
175    SmsConn		/* smsConn */,
176    SmPointer		/* managerData */,
177    int			/* dialogType */
178);
179
180typedef void (*SmsInteractDoneProc) (
181    SmsConn		/* smsConn */,
182    SmPointer		/* managerData */,
183    Bool		/* cancelShutdown */
184);
185
186typedef void (*SmsSaveYourselfRequestProc) (
187    SmsConn		/* smsConn */,
188    SmPointer		/* managerData */,
189    int  		/* saveType */,
190    Bool		/* shutdown */,
191    int			/* interactStyle */,
192    Bool		/* fast */,
193    Bool		/* global */
194);
195
196typedef void (*SmsSaveYourselfPhase2RequestProc) (
197    SmsConn		/* smsConn */,
198    SmPointer		/* managerData */
199);
200
201typedef void (*SmsSaveYourselfDoneProc) (
202    SmsConn		/* smsConn */,
203    SmPointer		/* managerData */,
204    Bool		/* success */
205);
206
207typedef void (*SmsCloseConnectionProc) (
208    SmsConn		/* smsConn */,
209    SmPointer		/* managerData */,
210    int			/* count */,
211    char **		/* reasonMsgs */
212);
213
214typedef void (*SmsSetPropertiesProc) (
215    SmsConn		/* smsConn */,
216    SmPointer		/* managerData */,
217    int			/* numProps */,
218    SmProp **		/* props */
219);
220
221typedef void (*SmsDeletePropertiesProc) (
222    SmsConn		/* smsConn */,
223    SmPointer		/* managerData */,
224    int			/* numProps */,
225    char **		/* propNames */
226);
227
228typedef void (*SmsGetPropertiesProc) (
229    SmsConn		/* smsConn */,
230    SmPointer		/* managerData */
231);
232
233
234/*
235 * Callbacks set up by a session manager when a new client connects.
236 */
237
238typedef struct {
239
240    struct {
241	SmsRegisterClientProc	callback;
242	SmPointer		manager_data;
243    } register_client;
244
245    struct {
246	SmsInteractRequestProc	callback;
247	SmPointer		manager_data;
248    } interact_request;
249
250    struct {
251	SmsInteractDoneProc	callback;
252	SmPointer		manager_data;
253    } interact_done;
254
255    struct {
256	SmsSaveYourselfRequestProc	callback;
257	SmPointer			manager_data;
258    } save_yourself_request;
259
260    struct {
261	SmsSaveYourselfPhase2RequestProc	callback;
262	SmPointer				manager_data;
263    } save_yourself_phase2_request;
264
265    struct {
266	SmsSaveYourselfDoneProc	callback;
267	SmPointer		manager_data;
268    } save_yourself_done;
269
270    struct {
271	SmsCloseConnectionProc	callback;
272	SmPointer		manager_data;
273    } close_connection;
274
275    struct {
276	SmsSetPropertiesProc	callback;
277	SmPointer		manager_data;
278    } set_properties;
279
280    struct {
281	SmsDeletePropertiesProc	callback;
282	SmPointer		manager_data;
283    } delete_properties;
284
285    struct {
286	SmsGetPropertiesProc	callback;
287	SmPointer		manager_data;
288    } get_properties;
289
290} SmsCallbacks;
291
292
293#define SmsRegisterClientProcMask		(1L << 0)
294#define SmsInteractRequestProcMask		(1L << 1)
295#define SmsInteractDoneProcMask			(1L << 2)
296#define SmsSaveYourselfRequestProcMask  	(1L << 3)
297#define SmsSaveYourselfP2RequestProcMask	(1L << 4)
298#define SmsSaveYourselfDoneProcMask		(1L << 5)
299#define SmsCloseConnectionProcMask		(1L << 6)
300#define SmsSetPropertiesProcMask		(1L << 7)
301#define SmsDeletePropertiesProcMask		(1L << 8)
302#define SmsGetPropertiesProcMask		(1L << 9)
303
304
305
306typedef Status (*SmsNewClientProc) (
307    SmsConn 		/* smsConn */,
308    SmPointer		/* managerData */,
309    unsigned long *	/* maskRet */,
310    SmsCallbacks *	/* callbacksRet */,
311    char **		/* failureReasonRet */
312);
313
314
315
316/*
317 * Error handlers
318 */
319
320typedef void (*SmcErrorHandler) (
321    SmcConn		/* smcConn */,
322    Bool		/* swap */,
323    int			/* offendingMinorOpcode */,
324    unsigned long 	/* offendingSequence */,
325    int 		/* errorClass */,
326    int			/* severity */,
327    SmPointer		/* values */
328);
329
330typedef void (*SmsErrorHandler) (
331    SmsConn		/* smsConn */,
332    Bool		/* swap */,
333    int			/* offendingMinorOpcode */,
334    unsigned long 	/* offendingSequence */,
335    int 		/* errorClass */,
336    int			/* severity */,
337    SmPointer		/* values */
338);
339
340
341
342/*
343 * Function Prototypes
344 */
345
346_XFUNCPROTOBEGIN
347
348extern SmcConn SmcOpenConnection (
349    char *		/* networkIdsList */,
350    SmPointer		/* context */,
351    int			/* xsmpMajorRev */,
352    int			/* xsmpMinorRev */,
353    unsigned long	/* mask */,
354    SmcCallbacks *	/* callbacks */,
355    const char *	/* previousId */,
356    char **		/* clientIdRet */,
357    int			/* errorLength */,
358    char *		/* errorStringRet */
359);
360
361extern SmcCloseStatus SmcCloseConnection (
362    SmcConn		/* smcConn */,
363    int			/* count */,
364    char **		/* reasonMsgs */
365);
366
367extern void SmcModifyCallbacks (
368    SmcConn		/* smcConn */,
369    unsigned long	/* mask */,
370    SmcCallbacks *	/* callbacks */
371);
372
373extern void SmcSetProperties (
374    SmcConn		/* smcConn */,
375    int      	        /* numProps */,
376    SmProp **		/* props */
377);
378
379extern void SmcDeleteProperties (
380    SmcConn		/* smcConn */,
381    int      	        /* numProps */,
382    char **		/* propNames */
383);
384
385extern Status SmcGetProperties (
386    SmcConn		/* smcConn */,
387    SmcPropReplyProc	/* propReplyProc */,
388    SmPointer		/* clientData */
389);
390
391extern Status SmcInteractRequest (
392    SmcConn		/* smcConn */,
393    int			/* dialogType */,
394    SmcInteractProc	/* interactProc */,
395    SmPointer		/* clientData */
396);
397
398extern void SmcInteractDone (
399    SmcConn		/* smcConn */,
400    Bool 		/* cancelShutdown */
401);
402
403extern void SmcRequestSaveYourself (
404    SmcConn		/* smcConn */,
405    int			/* saveType */,
406    Bool 		/* shutdown */,
407    int			/* interactStyle */,
408    Bool		/* fast */,
409    Bool		/* global */
410);
411
412extern Status SmcRequestSaveYourselfPhase2 (
413    SmcConn			/* smcConn */,
414    SmcSaveYourselfPhase2Proc	/* saveYourselfPhase2Proc */,
415    SmPointer			/* clientData */
416);
417
418extern void SmcSaveYourselfDone (
419    SmcConn		/* smcConn */,
420    Bool		/* success */
421);
422
423extern int SmcProtocolVersion (
424    SmcConn		/* smcConn */
425);
426
427extern int SmcProtocolRevision (
428    SmcConn		/* smcConn */
429);
430
431extern char *SmcVendor (
432    SmcConn		/* smcConn */
433);
434
435extern char *SmcRelease (
436    SmcConn		/* smcConn */
437);
438
439extern char *SmcClientID (
440    SmcConn		/* smcConn */
441);
442
443extern IceConn SmcGetIceConnection (
444    SmcConn		/* smcConn */
445);
446
447extern Status SmsInitialize (
448    const char *		/* vendor */,
449    const char *		/* release */,
450    SmsNewClientProc		/* newClientProc */,
451    SmPointer			/* managerData */,
452    IceHostBasedAuthProc	/* hostBasedAuthProc */,
453    int				/* errorLength */,
454    char *			/* errorStringRet */
455);
456
457extern char *SmsClientHostName (
458    SmsConn		/* smsConn */
459);
460
461extern char *SmsGenerateClientID (
462    SmsConn		/* smsConn */
463);
464
465extern Status SmsRegisterClientReply (
466    SmsConn		/* smsConn */,
467    char *		/* clientId */
468);
469
470extern void SmsSaveYourself (
471    SmsConn		/* smsConn */,
472    int			/* saveType */,
473    Bool 		/* shutdown */,
474    int			/* interactStyle */,
475    Bool		/* fast */
476);
477
478extern void SmsSaveYourselfPhase2 (
479    SmsConn		/* smsConn */
480);
481
482extern void SmsInteract (
483    SmsConn		/* smsConn */
484);
485
486extern void SmsDie (
487    SmsConn		/* smsConn */
488);
489
490extern void SmsSaveComplete (
491    SmsConn		/* smsConn */
492);
493
494extern void SmsShutdownCancelled (
495    SmsConn		/* smsConn */
496);
497
498extern void SmsReturnProperties (
499    SmsConn		/* smsConn */,
500    int			/* numProps */,
501    SmProp **		/* props */
502);
503
504extern void SmsCleanUp (
505    SmsConn		/* smsConn */
506);
507
508extern int SmsProtocolVersion (
509    SmsConn		/* smsConn */
510);
511
512extern int SmsProtocolRevision (
513    SmsConn		/* smsConn */
514);
515
516extern char *SmsClientID (
517    SmsConn		/* smsConn */
518);
519
520extern IceConn SmsGetIceConnection (
521    SmsConn		/* smsConn */
522);
523
524extern SmcErrorHandler SmcSetErrorHandler (
525    SmcErrorHandler 	/* handler */
526);
527
528extern SmsErrorHandler SmsSetErrorHandler (
529    SmsErrorHandler 	/* handler */
530);
531
532extern void SmFreeProperty (
533    SmProp *		/* prop */
534);
535
536extern void SmFreeReasons (
537    int			/* count */,
538    char **		/* reasonMsgs */
539);
540
541_XFUNCPROTOEND
542
543#endif /* _SMLIB_H_ */
544