1 /*
2 
3 Copyright 1993, 1998  The Open Group
4 
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
9 documentation.
10 
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 
21 Except as contained in this notice, the name of The Open Group shall not be
22 used in advertising or otherwise to promote the sale, use or other dealings
23 in 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 
42 typedef IcePointer SmPointer;
43 
44 
45 /*
46  * Connection objects.  Defined in SMlibint.h
47  */
48 
49 typedef struct _SmcConn *SmcConn;
50 typedef struct _SmsConn *SmsConn;
51 
52 
53 /*
54  * Session Management property
55  */
56 
57 typedef struct {
58     int		length;		/* length (in bytes) of the value */
59     SmPointer   value;		/* the value */
60 } SmPropValue;
61 
62 typedef 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 
75 typedef enum {
76     SmcClosedNow,
77     SmcClosedASAP,
78     SmcConnectionInUse
79 } SmcCloseStatus;
80 
81 
82 
83 /*
84  * Client callbacks
85  */
86 
87 typedef void (*SmcSaveYourselfProc) (
88     SmcConn		/* smcConn */,
89     SmPointer		/* clientData */,
90     int  		/* saveType */,
91     Bool		/* shutdown */,
92     int			/* interactStyle */,
93     Bool		/* fast */
94 );
95 
96 typedef void (*SmcSaveYourselfPhase2Proc) (
97     SmcConn		/* smcConn */,
98     SmPointer		/* clientData */
99 );
100 
101 typedef void (*SmcInteractProc) (
102     SmcConn		/* smcConn */,
103     SmPointer		/* clientData */
104 );
105 
106 typedef void (*SmcDieProc) (
107     SmcConn		/* smcConn */,
108     SmPointer		/* clientData */
109 );
110 
111 typedef void (*SmcShutdownCancelledProc) (
112     SmcConn		/* smcConn */,
113     SmPointer		/* clientData */
114 );
115 
116 typedef void (*SmcSaveCompleteProc) (
117     SmcConn		/* smcConn */,
118     SmPointer		/* clientData */
119 );
120 
121 typedef 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 
133 typedef 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 
168 typedef Status (*SmsRegisterClientProc) (
169     SmsConn 		/* smsConn */,
170     SmPointer		/* managerData */,
171     char *		/* previousId */
172 );
173 
174 typedef void (*SmsInteractRequestProc) (
175     SmsConn		/* smsConn */,
176     SmPointer		/* managerData */,
177     int			/* dialogType */
178 );
179 
180 typedef void (*SmsInteractDoneProc) (
181     SmsConn		/* smsConn */,
182     SmPointer		/* managerData */,
183     Bool		/* cancelShutdown */
184 );
185 
186 typedef 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 
196 typedef void (*SmsSaveYourselfPhase2RequestProc) (
197     SmsConn		/* smsConn */,
198     SmPointer		/* managerData */
199 );
200 
201 typedef void (*SmsSaveYourselfDoneProc) (
202     SmsConn		/* smsConn */,
203     SmPointer		/* managerData */,
204     Bool		/* success */
205 );
206 
207 typedef void (*SmsCloseConnectionProc) (
208     SmsConn		/* smsConn */,
209     SmPointer		/* managerData */,
210     int			/* count */,
211     char **		/* reasonMsgs */
212 );
213 
214 typedef void (*SmsSetPropertiesProc) (
215     SmsConn		/* smsConn */,
216     SmPointer		/* managerData */,
217     int			/* numProps */,
218     SmProp **		/* props */
219 );
220 
221 typedef void (*SmsDeletePropertiesProc) (
222     SmsConn		/* smsConn */,
223     SmPointer		/* managerData */,
224     int			/* numProps */,
225     char **		/* propNames */
226 );
227 
228 typedef 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 
238 typedef 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 
306 typedef 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 
320 typedef 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 
330 typedef 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 
348 extern 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 
361 extern SmcCloseStatus SmcCloseConnection (
362     SmcConn		/* smcConn */,
363     int			/* count */,
364     char **		/* reasonMsgs */
365 );
366 
367 extern void SmcModifyCallbacks (
368     SmcConn		/* smcConn */,
369     unsigned long	/* mask */,
370     SmcCallbacks *	/* callbacks */
371 );
372 
373 extern void SmcSetProperties (
374     SmcConn		/* smcConn */,
375     int      	        /* numProps */,
376     SmProp **		/* props */
377 );
378 
379 extern void SmcDeleteProperties (
380     SmcConn		/* smcConn */,
381     int      	        /* numProps */,
382     char **		/* propNames */
383 );
384 
385 extern Status SmcGetProperties (
386     SmcConn		/* smcConn */,
387     SmcPropReplyProc	/* propReplyProc */,
388     SmPointer		/* clientData */
389 );
390 
391 extern Status SmcInteractRequest (
392     SmcConn		/* smcConn */,
393     int			/* dialogType */,
394     SmcInteractProc	/* interactProc */,
395     SmPointer		/* clientData */
396 );
397 
398 extern void SmcInteractDone (
399     SmcConn		/* smcConn */,
400     Bool 		/* cancelShutdown */
401 );
402 
403 extern void SmcRequestSaveYourself (
404     SmcConn		/* smcConn */,
405     int			/* saveType */,
406     Bool 		/* shutdown */,
407     int			/* interactStyle */,
408     Bool		/* fast */,
409     Bool		/* global */
410 );
411 
412 extern Status SmcRequestSaveYourselfPhase2 (
413     SmcConn			/* smcConn */,
414     SmcSaveYourselfPhase2Proc	/* saveYourselfPhase2Proc */,
415     SmPointer			/* clientData */
416 );
417 
418 extern void SmcSaveYourselfDone (
419     SmcConn		/* smcConn */,
420     Bool		/* success */
421 );
422 
423 extern int SmcProtocolVersion (
424     SmcConn		/* smcConn */
425 );
426 
427 extern int SmcProtocolRevision (
428     SmcConn		/* smcConn */
429 );
430 
431 extern char *SmcVendor (
432     SmcConn		/* smcConn */
433 );
434 
435 extern char *SmcRelease (
436     SmcConn		/* smcConn */
437 );
438 
439 extern char *SmcClientID (
440     SmcConn		/* smcConn */
441 );
442 
443 extern IceConn SmcGetIceConnection (
444     SmcConn		/* smcConn */
445 );
446 
447 extern 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 
457 extern char *SmsClientHostName (
458     SmsConn		/* smsConn */
459 );
460 
461 extern char *SmsGenerateClientID (
462     SmsConn		/* smsConn */
463 );
464 
465 extern Status SmsRegisterClientReply (
466     SmsConn		/* smsConn */,
467     char *		/* clientId */
468 );
469 
470 extern void SmsSaveYourself (
471     SmsConn		/* smsConn */,
472     int			/* saveType */,
473     Bool 		/* shutdown */,
474     int			/* interactStyle */,
475     Bool		/* fast */
476 );
477 
478 extern void SmsSaveYourselfPhase2 (
479     SmsConn		/* smsConn */
480 );
481 
482 extern void SmsInteract (
483     SmsConn		/* smsConn */
484 );
485 
486 extern void SmsDie (
487     SmsConn		/* smsConn */
488 );
489 
490 extern void SmsSaveComplete (
491     SmsConn		/* smsConn */
492 );
493 
494 extern void SmsShutdownCancelled (
495     SmsConn		/* smsConn */
496 );
497 
498 extern void SmsReturnProperties (
499     SmsConn		/* smsConn */,
500     int			/* numProps */,
501     SmProp **		/* props */
502 );
503 
504 extern void SmsCleanUp (
505     SmsConn		/* smsConn */
506 );
507 
508 extern int SmsProtocolVersion (
509     SmsConn		/* smsConn */
510 );
511 
512 extern int SmsProtocolRevision (
513     SmsConn		/* smsConn */
514 );
515 
516 extern char *SmsClientID (
517     SmsConn		/* smsConn */
518 );
519 
520 extern IceConn SmsGetIceConnection (
521     SmsConn		/* smsConn */
522 );
523 
524 extern SmcErrorHandler SmcSetErrorHandler (
525     SmcErrorHandler 	/* handler */
526 );
527 
528 extern SmsErrorHandler SmsSetErrorHandler (
529     SmsErrorHandler 	/* handler */
530 );
531 
532 extern void SmFreeProperty (
533     SmProp *		/* prop */
534 );
535 
536 extern void SmFreeReasons (
537     int			/* count */,
538     char **		/* reasonMsgs */
539 );
540 
541 _XFUNCPROTOEND
542 
543 #endif /* _SMLIB_H_ */
544