summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@sun.com>2009-10-10 00:46:05 -0700
committerAlan Coopersmith <alan.coopersmith@sun.com>2009-10-10 00:47:03 -0700
commitfb6bf562b558b59a9d0e06dd8886ff93deeee1dd (patch)
tree1e604e5043b939495774bc6abb740d4a2827bf19
parent2b2cf62524e99075b6c613e38310748e769efddb (diff)
Move session management specs to libSM module
Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-rw-r--r--Makefile.am2
-rw-r--r--specs/SM/SMlib.ms2710
-rw-r--r--specs/SM/xsmp.ms1621
3 files changed, 0 insertions, 4333 deletions
diff --git a/Makefile.am b/Makefile.am
index 07929fc..dc5229b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -55,8 +55,6 @@ EXTRA_DIST = \
specs/SIAddresses/IPv6.txt \
specs/SIAddresses/localuser.txt \
specs/SIAddresses/README \
- specs/SM/SMlib.ms \
- specs/SM/xsmp.ms \
specs/specindex.html \
specs/X11/abstract.t \
specs/X11/AppA \
diff --git a/specs/SM/SMlib.ms b/specs/SM/SMlib.ms
deleted file mode 100644
index e8ad489..0000000
--- a/specs/SM/SMlib.ms
+++ /dev/null
@@ -1,2710 +0,0 @@
-.\" $Xorg: SMlib.ms,v 1.3 2000/08/17 19:42:19 cpqbld Exp $
-.\" $XdotOrg: xc/doc/specs/SM/SMlib.ms,v 1.2 2004/04/23 18:42:16 eich Exp $
-.\"
-.\" Use tbl, -ms, and macros.t
-.\" edited for DP edits and code consistency w/ core protocol/xlib 4/18/96
-.\" macro: start marker
-.de sM
-.ne 4
-.sp 1
-\\h'-0.3i'\\L'-1v'\\v'3p'\\l'1v'\\v'1v-3p'
-.sp -1
-..
-.\" macro: end marker
-.de eM
-.sp -1
-\\h'-0.3i'\\L'-1v'\\v'1v+4p'\\l'1v'\\v'-4p'
-.sp 1
-..
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.ad b
-.sp 10
-.TL
-\s+2\fBX Session Management Library\fP\s-2
-.sp
-Version 1.0
-.sp
-X Consortium Standard
-.sp
-X Version 11, Release 6.8
-.AU
-Ralph Mor
-.AI
-X Consortium
-.LP
-.DS C
-Copyright \(co 1993, 1994 X Consortium
-.DE
-.LP
-.sp 5
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the ``Software''), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-.LP
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-.LP
-THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.LP
-Except as contained in this notice, the name of the X Consortium shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from the X Consortium.
-.sp 3
-X Window System is a trademark of The Open Group.
-.bp
-.bp 1
-.EH '\fBX Session Management Library\fP''\fBX11, Release 6.8\fP'
-.OH '\fBX Session Management Library\fP''\fBX11, Release 6.8\fP'
-.EF ''\- \\\\n(PN \-''
-.OF ''\- \\\\n(PN \-''
-.NH 1
-Overview of Session Management
-.XS
-\*(SN Overview of Session Management
-.XE
-.LP
-The purpose of the X Session Management Protocol (XSMP) is to provide a
-uniform mechanism for users to save and restore their sessions. A
-\fIsession\fP is a group of clients, each of which has a particular state.
-The session is controlled by a network service called the \fIsession
-manager\fP\^. The session manager issues commands to its clients on behalf
-of the user. These commands may cause clients to save their state or to
-terminate. It is expected that the client will save its state in such a
-way that the client can be restarted at a later time and resume its
-operation as if it had never been terminated. A client's state might
-include information about the file currently being edited, the current
-position of the insertion point within the file, or the start of an
-uncommitted transaction. The means by which clients are restarted is
-unspecified by this protocol.
-.LP
-For purposes of this protocol, a \fIclient\fP\^ of the session manager is
-defined as a connection to the session manager. A client is typically,
-though not necessarily, a process running an application program connected
-to an X display. However, a client may be connected to more
-than one X display or not be connected to any X displays at all.
-.NH 1
-The Session Management Library
-.XS
-\*(SN The Session Management Library
-.XE
-.LP
-The Session Management Library (SMlib) is a low-level "C" language
-interface to XSMP. It is expected that higher level toolkits, such as
-Xt, will hide many of
-the details of session management from clients. Higher level toolkits
-might also be developed for session managers to use, but no such effort
-is currently under way.
-.LP
-SMlib has two parts to it:
-.IP \(bu 5
-One set of functions for clients that want to be part of a session
-.IP \(bu 5
-One set of functions for session managers to call
-.LP
-Some applications will use both sets of functions and act as \fInested
-session managers\fP\^.
-That is, they will be both a session manager and a client of another session.
-An example is a mail program that could start a text editor for editing
-the text of a mail message. The mail program is part of
-a regular session and, at the same time, is also acting as a session manager
-to the editor.
-.LP
-Clients initialize by connecting to the session manager and obtaining
-a \fIclient-ID\fP\^ that uniquely identifies them in the session.
-The session manager maintains a list of properties for each client in
-the session. These properties describe the client's environment
-and, most importantly, describe how the client can be restarted (via an
-.PN SmRestartCommand ).
-Clients are expected to save their state in such a way as to allow multiple
-instantiations of themselves to be managed independently. For example,
-clients may use their client-ID as part of a filename in which
-to store the state for a particular instantiation. The client-ID
-should be saved as part of the
-.PN SmRestartCommand
-so that the client will retain the same ID after it is restarted.
-.LP
-Once the client initializes itself with the session manager, it must be
-ready to respond to messages from the session manager. For example, it
-might be asked to save its state or to terminate. In the case of a shutdown,
-the session manager might give each client a chance to interact with the
-user and cancel the shutdown.
-.NH 1
-Understanding SMlib's Dependence on ICE
-.XS
-\*(SN Understanding SMlib's Dependence on ICE
-.XE
-.LP
-The X Session Management Protocol is layered on top of the Inter-Client
-Exchange (ICE) Protocol. The ICE protocol is designed to multiplex several
-protocols over a single connection. As a result, working with SMlib requires
-a little knowledge of how the ICE library works.
-.LP
-The ICE library utilizes callbacks to process messages. When a client
-detects that there is data to read on an ICE connection, it should call
-the
-.PN IceProcessMessages
-function.
-.PN IceProcessMessages
-will read the message header and look at the major opcode in order
-to determine which protocol the message was intended for. The appropriate
-protocol library will then be triggered to unpack the message and hand it
-off to the client via a callback.
-.LP
-The main point to be aware of is that an application using SMlib must
-have some code that detects when there is data to read on an ICE connection.
-This can be done via a
-.PN select
-call on the file descriptor for the ICE connection, but more typically,
-.PN XtAppAddInput
-will be used to register a callback that will invoke
-.PN IceProcessMessages
-each time there is data to read on the ICE connection.
-.LP
-To further complicate things, knowing which file descriptors to call
-.PN select
-on requires an understanding of how ICE connections are created.
-On the client side, a call must be made to
-.PN SmcOpenConnection
-in order to open a connection with a session manager.
-.PN SmcOpenConnection
-will internally make a call into
-.PN IceOpenConnection ,
-which will, in turn, determine if an ICE connection already exists between
-the client and session manager. Most likely, a connection will not already
-exist and a new ICE connection will be created. The main point to be aware
-of is that, on the client side, it is not obvious when ICE connections get
-created or destroyed, because connections are shared when possible.
-To deal with this, the ICE library lets the application register
-watch procedures that will be invoked each time an ICE connection
-is opened or closed.
-These watch procedures could be used to add or remove ICE file descriptors
-from the list of descriptors to call
-.PN select
-on.
-.LP
-On the session manager side, things work a bit differently. The session
-manager has complete control over the creation
-of ICE connections. The session manager has to first call
-.PN IceListenForConnections
-in order to start listening for connections from clients. Once a connection
-attempt is detected,
-.PN IceAcceptConnection
-must be called, and the session manager can simply add the new ICE
-file descriptor to the list of descriptors to call
-.PN select
-on.
-.LP
-For further information on the library functions related to ICE connections,
-see the \fIInter-Client Exchange Library\fP\^ standard.
-.NH 1
-Header Files and Library Name
-.XS
-\*(SN Header Files and Library Name
-.XE
-.LP
-Applications (both session managers and clients) should include the
-header file
-.Pn < X11/SM/SMlib.h >.
-This header file defines all of the SMlib data structures
-and function prototypes.
-.PN SMlib.h
-includes the header file
-.Pn < X11/SM/SM.h >,
-which defines all of the SMlib constants.
-.LP
-Because SMlib is dependent on ICE, applications should link against
-SMlib and ICElib by using
-.PN -lSM
-.PN -lICE .
-.NH 1
-Session Management Client (Smc) Functions
-.XS
-\*(SN Session Management Client (Smc) Functions
-.XE
-.LP
-This section discusses how Session Management clients:
-.IP \(bu 5
-Connect to the Session Manager
-.IP \(bu 5
-Close the connection
-.IP \(bu 5
-Modify callbacks
-.IP \(bu 5
-Set, delete, and retrieve Session Manager properties
-.IP \(bu 5
-Interact with the user
-.IP \(bu 5
-Request a ``Save Yourself''
-.IP \(bu 5
-Request a ``Save Yourself Phase 2''
-.IP \(bu 5
-Complete a ``Save Yourself''
-.IP \(bu 5
-Use Smc informational functions
-.IP \(bu 5
-Handle Errors
-.NH 2
-Connecting to the Session Manager
-.XS
-\*(SN Connecting to the Session Manager
-.XE
-.LP
-To open a connection with a session manager, use
-.PN SmcOpenConnection .
-.sM
-.FD 0
-SmcConn SmcOpenConnection\^(\^\fInetwork_ids_list\fP, \fIcontext\fP\^, \fIxsmp_major_rev\fP\^, \fIxsmp_minor_rev\fP\^,
-.br
- \fImask\fP\^, \fIcallbacks\fP\^, \fIprevious_id\fP\^, \fIclient_id_ret\fP\^, \fIerror_length\fP\^, \fIerror_string_ret\fP\^)
-.br
- char *\fInetwork_ids_list\fP\^;
-.br
- SmPointer \fIcontext\fP\^;
-.br
- int \fIxsmp_major_rev\fP\^;
-.br
- int \fIxsmp_minor_rev\fP\^;
-.br
- unsigned long \fImask\fP\^;
-.br
- SmcCallbacks *\fIcallbacks\fP\^;
-.br
- char *\fIprevious_id\fP\^;
-.br
- char **\fIclient_id_ret\fP\^;
-.br
- int \fIerror_length\fP\^;
-.br
- char *\fIerror_string_ret\fP\^;
-.FN
-.IP \fInetwork_ids_list\fP 1i
-Specifies the network ID(s) of the session manager.
-.IP \fIcontext\fP 1i
-A pointer to an opaque object or NULL. Used to determine if an
-ICE connection can be shared (see below).
-.IP \fIxsmp_major_rev\fP 1i
-The highest major version of the XSMP the application supports.
-.IP \fIxsmp_minor_rev\fP 1i
-The highest minor version of the XSMP the application supports (for the
-specified xsmp_major_rev).
-.IP \fImask\fP\^ 1i
-A mask indicating which callbacks to register.
-.IP \fIcallbacks\fP 1i
-The callbacks to register. These callbacks are used to respond to messages
-from the session manager.
-.IP \fIprevious_id\fP 1i
-The client ID from the previous session.
-.IP \fIclient_id_ret\fP 1i
-The client ID for the current session is returned.
-.IP \fIerror_length\fP 1i
-Length of the error_string_ret argument passed in.
-.IP \fIerror_string_ret\fP 1i
-Returns a null-terminated error message, if any.
-The error_string_ret argument points to user supplied memory.
-No more than error_length bytes are used.
-.LP
-.eM
-The network_ids_list argument is a null-terminated string containing a list of
-network IDs for the session manager, separated by commas.
-If network_ids_list is NULL,
-the value of the
-.PN SESSION_MANAGER
-environment variable will be used.
-Each network ID has the following format:
-.TS
-lw(0.25i) lw(2.5i) lw(1i).
- tcp/<hostname>:<portnumber> or
- decnet/<hostname>::<objname> or
- local/<hostname>:<path>
-.TE
-.LP
-An attempt will be made to use the first network ID. If that fails,
-an attempt will be made using the second network ID, and so on.
-.LP
-After the connection is established,
-.PN SmcOpenConnection
-registers the client with the session manager. If the client is being
-restarted from a previous session, previous_id should contain a null
-terminated string representing the client ID from the previous session.
-If the client is first joining the session, previous_id should be
-set to NULL.
-If previous_id is specified but is determined to be invalid by the
-session manager, SMlib will re-register
-the client with previous_id set to NULL.
-.LP
-If
-.PN SmcOpenConnection
-succeeds, it returns an opaque connection pointer of type
-.PN SmcConn
-and the client_id_ret argument contains the client ID to be used for
-this session.
-The client_id_ret should be freed with a call to
-.PN free
-when no longer needed. On failure,
-.PN SmcOpenConnection
-returns NULL,
-and the reason for failure is returned in error_string_ret.
-.LP
-Note that SMlib uses the ICE protocol to establish a connection with
-the session manager. If an ICE connection already exists between the
-client and session manager, it might be possible for the same ICE connection
-to be used for session management.
-.LP
-The context argument indicates how willing the client is to share
-the ICE connection with other protocols. If context is NULL,
-then the caller is always willing to share the connection.
-If context is not NULL,
-then the caller is not willing to use a previously opened ICE connection
-that has a different non-NULL context associated with it.
-.LP
-As previously discussed (section 3, ``Understanding SMlib's Dependence
-on ICE''), the client will have to keep track of when ICE connections
-are created or destroyed (using
-.PN IceAddConnectionWatch
-and
-.PN IceRemoveConnectionWatch ),
-and will have to call
-.PN IceProcessMessages
-each time a
-.PN select
-shows that there is data to read on an ICE connection.
-For further information, see the
-\fIInter-Client Exchange Library\fP\^ standard.
-.LP
-The callbacks argument contains a set of callbacks used to respond to session
-manager events. The mask argument specifies which callbacks are set.
-All of the callbacks specified in this version of SMlib are mandatory. The
-mask argument is necessary in order to maintain backwards compatibility
-in future versions of the library.
-.LP
-The following values may be ORed together to obtain a mask value:
-.LP
-.Ds 0
-.PN SmcSaveYourselfProcMask
-.PN SmcDieProcMask
-.PN SmcSaveCompleteProcMask
-.PN SmcShutdownCancelledProcMask
-.De
-.LP
-For each callback, the client can register a pointer to client data.
-When SMlib invokes the callback, it will pass the client data pointer.
-.LP
-.sM
-.Ds 0
-.TA .5i 1i 1.5i
-.ta .5i 1i 1.5i
-typedef struct {
-
- struct {
- SmcSaveYourselfProc callback;
- SmPointer client_data;
- } save_yourself;
-
- struct {
- SmcDieProc callback;
- SmPointer client_data;
- } die;
-
- struct {
- SmcSaveCompleteProc callback;
- SmPointer client_data;
- } save_complete;
-
- struct {
- SmcShutdownCancelledProc callback;
- SmPointer client_data;
- } shutdown_cancelled;
-
-} SmcCallbacks;
-.De
-.LP
-.eM
-.NH 3
-The Save Yourself Callback
-.XS
-\*(SN The Save Yourself Callback
-.XE
-.LP
-The Save Yourself callback is of type
-.PN SmcSaveYourselfProc .
-.sM
-.FD 0
-typedef void (*SmcSaveYourselfProc)();
-
-void SaveYourselfProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.br
- int \fIsave_type\fP\^;
-.br
- Bool \fIshutdown\fP\^;
-.br
- int \fIinteract_style\fP\^;
-.br
- Bool \fIfast\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIclient_data\fP 1i
-Client data specified when the callback was registered.
-.IP \fIsave_type\fP 1i
-Specifies the type of information that should be saved.
-.IP \fIshutdown\fP 1i
-Specifies if a shutdown is taking place.
-.IP \fIinteract_style\fP 1i
-The type of interaction allowed with the user.
-.IP \fIfast\fP 1i
-If
-.PN True ,
-the client should save its state as quickly as possible.
-.LP
-.eM
-The session manager sends a ``Save Yourself'' message to a client
-either to checkpoint it or just before
-termination so that it can save its state.
-The client responds with zero or more calls to
-.PN SmcSetProperties
-to update the properties indicating how to restart the client.
-When all the properties have been set, the client calls
-.PN SmcSaveYourselfDone .
-.LP
-If interact_style is
-.PN SmInteractStyleNone ,
-the client must not interact with the
-user while saving state.
-If interact_style is
-.PN SmInteractStyleErrors ,
-the client may interact with the user only if an error condition arises.
-If interact_style is
-.PN SmInteractStyleAny ,
-then the client may interact with the user for any purpose.
-Because only one client can interact with the user at a time,
-the client must call
-.PN SmcInteractRequest
-and wait for an ``Interact'' message from the session manager.
-When the client is done interacting with the user, it calls
-.PN SmcInteractDone .
-The client may only call
-.PN SmcInteractRequest
-after it receives a ``Save Yourself'' message and before it
-calls
-.PN SmcSaveYourselfDone .
-.LP
-If save_type is
-.PN SmSaveLocal ,
-the client must update the properties to reflect its current state.
-Specifically, it should save enough information to restore
-the state as seen by the user of this client. It should not affect the
-state as seen by other users. If save_type is
-.PN SmSaveGlobal ,
-the user wants the client to commit all of its data to permanent,
-globally accessible storage. If save_type is
-.PN SmSaveBoth ,
-the client should do both of these (it should first commit the data to
-permanent storage before updating its properties).
-.LP
-Some examples are as follows:
-.LP
-.IP \(bu 5
-If a word processor were sent a ``Save Yourself'' with a type of
-.PN SmSaveLocal ,
-it could create a temporary file that included the
-current contents of the file, the location of the cursor, and
-other aspects of the current editing session.
-It would then update its SmRestartCommand property
-with enough information to find this temporary file.
-.IP \(bu 5
-If a word processor were sent a ``Save Yourself'' with a type of
-.PN SmSaveGlobal ,
-it would simply save the currently edited file.
-.IP \(bu 5
-If a word processor were sent a ``Save Yourself'' with a type of
-.PN SmSaveBoth ,
-it would first save the currently edited file.
-It would then create a temporary file with information
-such as the current position of the cursor
-and what file is being edited.
-Finally, it would update its SmRestartCommand property
-with enough information to find the temporary file.
-.LP
-The shutdown argument specifies whether the system is being
-shut down. The interaction is different depending on whether or not
-shutdown is set. If not shutting down, the client should save its
-state and wait for a ``Save Complete'' message. If shutting down,
-the client must save state and
-then prevent interaction until it receives either a ``Die''
-or a ``Shutdown Cancelled.''
-.LP
-The fast argument specifies that the client should save its state
-as quickly as possible. For example, if the session manager knows that
-power is about to fail, it would set fast to
-.PN True .
-.NH 3
-The Die Callback
-.XS
-\*(SN The Die Callback
-.XE
-.LP
-The Die callback is of type
-.PN SmcDieProc .
-.sM
-.FD 0
-typedef void (*SmcDieProc)();
-
-void DieProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIclient_data\fP 1i
-Client data specified when the callback was registered.
-.LP
-.eM
-The session manager sends a ``Die'' message to a client
-when it wants it to die. The client should respond by calling
-.PN SmcCloseConnection .
-A session manager that behaves properly will send a
-``Save Yourself'' message before the ``Die'' message.
-.NH 3
-The Save Complete Callback
-.XS
-\*(SN The Save Complete Callback
-.XE
-.LP
-The Save Complete callback is of type
-.PN SmcSaveCompleteProc .
-.sM
-.FD 0
-typedef void (*SmcSaveCompleteProc)();
-
-void SaveCompleteProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIclient_data\fP 1i
-Client data specified when the callback was registered.
-.LP
-.eM
-When the session manager is done with a checkpoint, it will send each of
-the clients a ``Save Complete'' message. The client is then free to
-change its state.
-.NH 3
-The Shutdown Cancelled Callback
-.XS
-\*(SN The Shutdown Cancelled Callback
-.XE
-.LP
-The Shutdown Cancelled callback is of type
-.PN SmcShutdownCancelledProc .
-.sM
-.FD 0
-typedef void (*SmcShutdownCancelledProc)();
-
-void ShutdownCancelledProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIclient_data\fP 1i
-Client data specified when the callback was registered.
-.LP
-.eM
-The session manager sends a ``Shutdown Cancelled'' message
-when the user cancelled the shutdown during an interaction
-(see section 5.5, ``Interacting With the User'').
-The client can now continue as if the shutdown had never happened.
-If the client has not called
-.PN SmcSaveYourselfDone
-yet, it can either abort the save and then call
-.PN SmcSaveYourselfDone
-with the success argument set to
-.PN False ,
-or it can continue with the save and then call
-.PN SmcSaveYourselfDone
-with the success argument set to reflect the outcome of the save.
-.NH 2
-Closing the Connection
-.XS
-\*(SN Closing the Connection
-.XE
-.LP
-To close a connection with a session manager, use
-.PN SmcCloseConnection .
-.LP
-.sM
-.FD 0
-SmcCloseStatus SmcCloseConnection\^(\^\fIsmc_conn\fP, \fIcount\fP\^, \fIreason_msgs\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- int \fIcount\fP\^;
-.br
- char **\fIreason_msgs\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIcount\fP 1i
-The number of reason messages.
-.IP \fIreason_msgs\fP 1i
-The reasons for closing the connection.
-.LP
-.eM
-The reason_msgs argument will most likely be NULL if resignation
-is expected by the client.
-Otherwise, it contains a list of null-terminated Compound Text strings
-representing the reason for termination.
-The session manager should display these reason messages
-to the user.
-.LP
-Note that SMlib used the ICE protocol to establish a connection with
-the session manager, and various protocols other than session management
-may be active on the ICE connection. When
-.PN SmcCloseConnection
-is called, the ICE connection will be closed only if all protocols
-have been shutdown on the connection. Check the ICElib
-standard for
-.PN IceAddConnectionWatch
-and
-.PN IceRemoveConnectionWatch
-to learn how to set up a callback to be invoked each time an ICE connection is
-opened or closed. Typically this callback adds/removes the ICE file
-descriptor from the list of active descriptors to call
-.PN select
-on (or calls
-.PN XtAppAddInput
-or
-.PN XtRemoveInput ).
-.LP
-.PN SmcCloseConnection
-returns one of the following values:
-.IP \(bu 5
-.PN SmcClosedNow
-\- the ICE connection was closed at this time, the watch procedures were
-invoked, and the connection was freed.
-.IP \(bu 5
-.PN SmcClosedASAP
-\- an IO error had occurred on the connection, but
-.PN SmcCloseConnection
-is being called within a nested
-.PN IceProcessMessages .
-The watch procedures have been invoked at this time, but the connection
-will be freed as soon as possible (when the nesting level reaches zero and
-.PN IceProcessMessages
-returns a status of
-.PN IceProcessMessagesConnectionClosed ).
-.IP \(bu 5
-.PN SmcConnectionInUse
-\- the connection was not closed at this time, because it is being used by
-other active protocols.
-.NH 2
-Modifying Callbacks
-.XS
-\*(SN Modifying Callbacks
-.XE
-.LP
-To modify callbacks set up in
-.PN SmcOpenConnection ,
-use
-.PN SmcModifyCallbacks .
-.sM
-.FD 0
-void SmcModifyCallbacks\^(\^\fIsmc_conn\fP, \fImask\fP\^, \fIcallbacks\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- unsigned long \fImask\fP\^;
-.br
- SmcCallbacks *\fIcallbacks\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fImask\fP 1i
-A mask indicating which callbacks to modify.
-.IP \fIcallbacks\fP 1i
-The new callbacks.
-.LP
-.eM
-When specifying a value for the mask argument, the following
-values may be ORed together:
-.LP
-.Ds 0
-.PN SmcSaveYourselfProcMask
-.PN SmcDieProcMask
-.PN SmcSaveCompleteProcMask
-.PN SmcShutdownCancelledProcMask
-.De
-.NH 2
-Setting, Deleting, and Retrieving Session Management Properties
-.XS
-\*(SN Setting, Deleting, and Retrieving Session Management Properties
-.XE
-.LP
-To set session management properties for this client, use
-.PN SmcSetProperties .
-.sM
-.FD 0
-void SmcSetProperties\^(\^\fIsmc_conn\fP, \fInum_props\fP\^, \fIprops\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- int \fInum_props\fP\^;
-.br
- SmProp **\fIprops\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fInum_props\fP 1i
-The number of properties.
-.IP \fIprops\fP 1i
-The list of properties to set.
-.LP
-.eM
-The properties are specified as an array of property pointers.
-Previously set property values may be over-written using the
-.PN SmcSetProperties
-function. Note that the session manager is not
-expected to restore property values when the session is restarted. Because
-of this, clients should not try to use the session manager as
-a database for storing application specific state.
-.LP
-For a description of session management properties and the
-.PN SmProp
-structure, see section 7, ``Session Management Properties.''
-.sp
-.LP
-To delete properties previously set by the client, use
-.PN SmcDeleteProperties .
-.sM
-.FD 0
-void SmcDeleteProperties\^(\^\fIsmc_conn\fP, \fInum_props\fP\^, \fIprop_names\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- int \fInum_props\fP\^;
-.br
- char **\fIprop_names\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fInum_props\fP 1i
-The number of properties.
-.IP \fIprop_names\fP 1i
-The list of properties to delete.
-.LP
-.eM
-.LP
-To get properties previously stored by the client, use
-.PN SmcGetProperties .
-.sM
-.FD 0
-Status SmcGetProperties\^(\^\fIsmc_conn\fP, \fIprop_reply_proc\fP\^, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmcPropReplyProc \fIprop_reply_proc\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIprop_reply_proc\fP 1i
-The callback to be invoked when the properties reply comes back.
-.IP \fIclient_data\fP 1i
-This pointer to client data will be passed to the
-.PN SmcPropReplyProc
-callback.
-.LP
-.eM
-The return value of
-.PN SmcGetProperties
-is zero for failure and a positive value for success.
-.LP
-Note that the library does not block until the properties reply comes back.
-Rather, a callback of type
-.PN SmcPropReplyProc
-is invoked when the data is ready.
-.sM
-.FD 0
-typedef void (*SmcPropReplyProc)();
-
-void PropReplyProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^, \fInum_props\fP\^, \fIprops\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.br
- int \fInum_props\fP\^;
-.br
- SmProp **\fIprops\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIclient_data\fP 1i
-Client data specified when the callback was registered.
-.IP \fInum_props\fP 1i
-The number of properties returned.
-.IP \fIprops\fP 1i
-The list of properties returned.
-.LP
-.eM
-To free each property, use
-.PN SmFreeProperty
-(see section 8, ``Freeing Data'').
-To free the actual array of pointers, use
-.PN free .
-.NH 2
-Interacting With the User
-.XS
-\*(SN Interacting With the User
-.XE
-.LP
-After receiving a ``Save Yourself'' message with an interact_style of
-.PN SmInteractStyleErrors
-or
-.PN SmInteractStyleAny ,
-the client may choose to interact with the user.
-Because only one client can interact with the user at a time, the client
-must call
-.PN SmcInteractRequest
-and wait for an ``Interact'' message from the session manager.
-.sM
-.FD 0
-Status SmcInteractRequest\^(\^\fIsmc_conn\fP, \fIdialog_type\fP\^, \fIinteract_proc\fP\^, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- int \fIdialog_type\fP\^;
-.br
- SmcInteractProc \fIinteract_proc\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIdialog_type\fP 1i
-The type of dialog the client wishes to present to the user.
-.IP \fIinteract_proc\fP 1i
-The callback to be invoked when the ``Interact'' message arrives from
-the session manager.
-.IP \fIclient_data\fP 1i
-This pointer to client data will be passed to the
-.PN SmcInteractProc
-callback when the ``Interact'' message arrives.
-.LP
-.eM
-The return value of
-.PN SmcInteractRequest
-is zero for failure and a positive value for success.
-.LP
-The dialog_type argument specifies either
-.PN SmDialogError ,
-indicating that the client wants to start an error dialog, or
-.PN SmDialogNormal ,
-meaning that the client wishes to start a nonerror dialog.
-.LP
-Note that if a shutdown is in progress, the user may have the option of
-cancelling the shutdown. If the shutdown is cancelled, the clients that
-have not interacted yet with the user will receive a
-``Shutdown Cancelled'' message instead of the ``Interact'' message.
-.LP
-The
-.PN SmcInteractProc
-callback will be invoked when the ``Interact'' message arrives from
-the session manager.
-.sM
-.FD 0
-typedef void (*SmcInteractProc)();
-
-void InteractProc\^(\^\fIsmc_conn\fP, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIclient_data\fP 1i
-Client data specified when the callback was registered.
-.LP
-.eM
-.LP
-After interacting with the user (in response to an ``Interact'' message),
-you should call
-.PN SmcInteractDone .
-.sM
-.FD 0
-void SmcInteractDone\^(\^\fIsmc_conn\fP, \fIcancel_shutdown\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- Bool \fIcancel_shutdown\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIcancel_shutdown\fP 1i
-If
-.PN True ,
-indicates that the user requests that the entire shutdown be cancelled.
-.LP
-.eM
-The cancel_shutdown argument may only be
-.PN True
-if the corresponding ``Save Yourself'' specified
-.PN True
-for shutdown and
-.PN SmInteractStyleErrors
-or
-.PN SmInteractStyleAny
-for the interact_style.
-.NH 2
-Requesting a Save Yourself
-.XS
-\*(SN Requesting a Save Yourself
-.XE
-.LP
-To request a checkpoint from the session manager, use
-.PN SmcRequestSaveYourself .
-.sM
-.FD 0
-void SmcRequestSaveYourself\^(\^\fIsmc_conn\fP, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^, \fIglobal\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- int \fIsave_type\fP\^;
-.br
- Bool \fIshutdown\fP\^;
-.br
- int \fIinteract_style\fP\^;
-.br
- Bool \fIfast\fP\^;
-.br
- Bool \fIglobal\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIsave_type\fP 1i
-Specifies the type of information that should be saved.
-.IP \fIshutdown\fP 1i
-Specifies if a shutdown is taking place.
-.IP \fIinteract_style\fP 1i
-The type of interaction allowed with the user.
-.IP \fIfast\fP 1i
-If
-.PN True ,
-the client should save its state as quickly as possible.
-.IP \fIglobal\fP 1i
-Controls who gets the ``Save Yourself.''
-.LP
-.eM
-The save_type, shutdown, interact_style, and
-fast arguments are discussed in more detail in section 5.1.1,
-``The Save Yourself Callback.''
-.LP
-If global is set to
-.PN True ,
-then the resulting ``Save Yourself'' should be
-sent to all clients in the session. For example, a vendor of a
-Uninterruptible Power Supply (UPS) might include a Session
-Management client that would monitor the status of the UPS
-and generate a fast shutdown if the power is about to be lost.
-.LP
-If global is set to
-.PN False ,
-then the ``Save Yourself'' should only be sent to the client that
-requested it.
-.NH 2
-Requesting a Save Yourself Phase 2
-.XS
-\*(SN Requesting a Save Yourself Phase 2
-.XE
-.LP
-In response to a ``Save Yourself, the client may request to be informed
-when all the other clients are quiescent so that it can save their state.
-To do so, use
-.PN SmcRequestSaveYourselfPhase2 .
-.sM
-.FD 0
-Status SmcRequestSaveYourselfPhase2\^(\^\fIsmc_conn\fP, \fIsave_yourself_phase2_proc\fP\^, \fIclient_data\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- SmcSaveYourselfPhase2Proc \fIsave_yourself_phase2_proc\fP\^;
-.br
- SmPointer \fIclient_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIsave_yourself_phase2_proc\fP 1i
-The callback to be invoked when the ``Save Yourself Phase 2'' message
-arrives from the session manager.
-.IP \fIclient_data\fP 1i
-This pointer to client data will be passed to the
-.PN SmcSaveYourselfPhase2Proc
-callback when the ``Save Yourself Phase 2'' message arrives.
-.LP
-.eM
-The return value of
-.PN SmcRequestSaveYourselfPhase2
-is zero for failure and a positive value for success.
-.LP
-This request is needed by clients that manage other clients (for example,
-window managers, workspace managers, and so on).
-The manager must make sure that all of the clients that are being managed
-are in an idle state so that their state can be saved.
-.NH 2
-Completing a Save Yourself
-.XS
-\*(SN Completing a Save Yourself
-.XE
-.LP
-After saving state in response to a ``Save Yourself'' message,
-you should call
-.PN SmcSaveYourselfDone .
-.sM
-.FD 0
-void SmcSaveYourselfDone\^(\^\fIsmc_conn\fP, \fIsuccess\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- Bool \fIsuccess\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIsuccess\fP 1i
-If
-.PN True ,
-the ``Save Yourself'' operation was completed successfully.
-.LP
-.eM
-Before calling
-.PN SmcSaveYourselfDone ,
-the client must have set each required property at least once since
-the client registered with the session manager.
-.NH 2
-Using Smc Informational Functions
-.XS
-\*(SN Using Smc Informational Functions
-.XE
-.LP
-.sM
-.FD 0
-int SmcProtocolVersion\^(\^\fIsmc_conn\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.FN
-.eM
-.PN SmcProtocolVersion
-returns the major version of the session management protocol
-associated with this session.
-.sp
-.LP
-.sM
-.FD 0
-int SmcProtocolRevision\^(\^\fIsmc_conn\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.FN
-.eM
-.PN SmcProtocolRevision
-returns the minor version of the session management protocol
-associated with this session.
-.sp
-.LP
-.sM
-.FD 0
-char *SmcVendor\^(\^\fIsmc_conn\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.FN
-.eM
-.PN SmcVendor
-returns a string that provides some identification of the owner of
-the session manager. The string should be freed with a call to
-.PN free .
-.sp
-.LP
-.sM
-.FD 0
-char *SmcRelease\^(\^\fIsmc_conn\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.FN
-.eM
-.PN SmcRelease
-returns a string that provides the release number of the session manager.
-The string should be freed with a call to
-.PN free .
-.sp
-.LP
-.sM
-.FD 0
-char *SmcClientID\^(\^\fIsmc_conn\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.FN
-.eM
-.PN SmcClientID
-returns a null-terminated string for the client ID associated with
-this connection. This information was also returned in
-.PN SmcOpenConnection
-(it is provided here for convenience).
-Call
-.PN free
-on this pointer when the client ID is no longer needed.
-.sp
-.LP
-.sM
-.FD 0
-IceConn SmcGetIceConnection\^(\^\fIsmc_conn\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.FN
-.eM
-.PN SmcGetIceConnection
-returns the ICE connection object associated with this session management
-connection object. The ICE connection object can be used to get some
-additional information about the connection. Some of the more useful
-functions which can be used on the IceConn are
-.PN IceConnectionNumber ,
-.PN IceConnectionString ,
-.PN IceLastSentSequenceNumber ,
-.PN IceLastReceivedSequenceNumber ,
-and
-.PN IcePing .
-For further information,
-see the \fIInter-Client Exchange Library\fP standard.
-.NH 2
-Error Handling
-.XS
-\*(SN Error Handling
-.XE
-.LP
-If the client receives an unexpected protocol error from the session manager,
-an error handler is invoked by SMlib. A default error handler exists that
-simply prints the error message to
-.PN stderr
-and exits if the severity of the error is fatal.
-The client can change this error handler by calling the
-.PN SmcSetErrorHandler
-function.
-.sM
-.FD 0
-SmcErrorHandler SmcSetErrorHandler\^(\^\fIhandler\fP\^)
-.br
- SmcErrorHandler \fIhandler\fP\^;
-.FN
-.IP \fIhandler\fP 1i
-The error handler. You should pass NULL to restore the default handler.
-.LP
-.eM
-.PN SmcSetErrorHandler
-returns the previous error handler.
-.LP
-The
-.PN SmcErrorHandler
-has the following type:
-.sM
-.FD 0
-typedef void (*SmcErrorHandler)();
-
-void ErrorHandler\^(\^\fIsmc_conn\fP, \fIswap\fP\^, \fIoffending_minor_opcode\fP\^, \fIoffending_sequence_num\fP\^, \fIerror_class\fP\^, \fIseverity\fP\^, \fIvalues\fP\^)
-.br
- SmcConn \fIsmc_conn\fP\^;
-.br
- Bool \fIswap\fP\^;
-.br
- int \fIoffending_minor_opcode\fP\^;
-.br
- unsigned long \fIoffending_sequence_num\fP\^;
-.br
- int \fIerror_class\fP\^;
-.br
- int \fIseverity\fP\^;
-.br
- IcePointer \fIvalues\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fIswap\fP 1i
-A flag that indicates if the specified values need byte swapping.
-.IP \fIoffending_minor_opcode\fP 1i
-The minor opcode of the offending message.
-.IP \fIoffending_sequence_num\fP 1i
-The sequence number of the offending message.
-.IP \fIerror_class\fP 1i
-The error class of the offending message.
-.IP \fIseverity\fP 1i
-.PN IceCanContinue ,
-.PN IceFatalToProtocol ,
-or
-.PN IceFatalToConnection .
-.IP \fIvalues\fP 1i
-Any additional error values specific to the minor opcode and class.
-.LP
-.eM
-Note that this error handler is invoked for protocol related errors.
-To install an error handler to be invoked when an IO error occurs, use
-.PN IceSetIOErrorHandler .
-For further information,
-see the \fIInter-Client Exchange Library\fP\^ standard.
-.NH 1
-Session Management Server (Sms) Functions
-.XS
-\*(SN Session Management Server (Sms) Functions
-.XE
-.LP
-This section discusses how Session Management servers:
-.IP \(bu 5
-Initialize the library
-.IP \(bu 5
-Register the client
-.IP \(bu 5
-Send a ``Save Yourself'' message
-.IP \(bu 5
-Send a ``Save Yourself Phase 2'' message
-.IP \(bu 5
-Send an ``Interact'' message
-.IP \(bu 5
-Send a ``Save Complete'' message
-.IP \(bu 5
-Send a ``Die'' message
-.IP \(bu 5
-Cancel a shutdown
-.IP \(bu 5
-Return properties
-.IP \(bu 5
-Ping a client
-.IP \(bu 5
-Clean up after a client disconnects
-.IP \(bu 5
-Use Sms informational functions
-.IP \(bu 5
-Handle errors
-.NH 2
-Initializing the Library
-.XS
-\*(SN Initializing the Library
-.XE
-.LP
-.PN SmsInitialize
-is the first SMlib function that should be called by a
-session manager. It provides information about the session manager
-and registers a callback that will be invoked each
-time a new client connects to the session manager.
-.sM
-.FD 0
-Status SmsInitialize\^(\^\fIvendor\fP, \fIrelease\fP\^, \fInew_client_proc\fP\^, \fImanager_data\fP\^, \fIhost_based_auth_proc\fP\^,
-.br
- \fIerror_length\fP\^, \fIerror_string_ret\fP\^)
-.br
- char *\fIvendor\fP\^;
-.br
- char *\fIrelease\fP\^;
-.br
- SmsNewClientProc \fInew_client_proc\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- IceHostBasedAuthProc \fIhost_based_auth_proc\fP\^;
-.br
- int \fIerror_length\fP\^;
-.br
- char *\fIerror_string_ret\fP\^;
-.FN
-.IP \fIvendor\fP 1i
-A string specifying the session manager vendor.
-.IP \fIrelease\fP 1i
-A string specifying the session manager release number.
-.IP \fInew_client_proc\fP 1i
-Callback to be invoked each time a new client connects to the session manager.
-.IP \fImanager_data\fP 1i
-When the
-.PN SmsNewClientProc
-callback is invoked, this pointer to manager data will be passed.
-.IP \fIhost_based_auth_proc\fP 1i
-Host based authentication callback.
-.IP \fIerror_length\fP 1i
-Length of the error_string_ret argument passed in.
-.IP \fIerror_string_ret\fP 1i
-Returns a null-terminated error message, if any.
-The error_string_ret points to user supplied memory.
-No more than error_length bytes are used.
-.LP
-.eM
-After the
-.PN SmsInitialize
-function is called, the session manager should call the
-.PN IceListenForConnections
-function to listen for new connections. Afterwards, each time a
-client connects, the session manager should call
-.PN IceAcceptConnection .
-.LP
-See section 9, ``Authentication of Clients,''
-for more details on authentication (including host based authentication).
-Also see the \fIInter-Client Exchange Library\fP\^ standard
-for further details on listening for and accepting ICE connections.
-.LP
-Each time a new client connects to the session manager, the
-.PN SmsNewClientProc
-callback is invoked. The session manager obtains a new opaque connection
-object that it should use for all future interaction with the client. At
-this time, the session manager must also register a set of callbacks to
-respond to the different messages that the client might send.
-.sM
-.FD 0
-typedef Status (*SmsNewClientProc)();
-
-Status NewClientProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fImask_ret\fP\^, \fIcallbacks_ret\fP\^, \fIfailure_reason_ret\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- unsigned long *\fImask_ret\fP\^;
-.br
- SmsCallbacks *\fIcallbacks_ret\fP\^;
-.br
- char **\fIfailure_reason_ret\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-A new opaque connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fImask_ret\fP 1i
-On return, indicates which callbacks were set by the session manager.
-.IP \fIcallbacks_ret\fP 1i
-On return, contains the callbacks registered by the session manager.
-.IP \fIfailure_reason_ret\fP 1i
-Failure reason returned.
-.LP
-.eM
-If a failure occurs, the
-.PN SmsNewClientProc
-should return a zero status as well as allocate and return a failure
-reason string in failure_reason_ret.
-SMlib will be responsible for freeing this memory.
-.LP
-The session manager must register a set of callbacks to respond to client
-events. The mask_ret argument specifies which callbacks are set.
-All of the callbacks specified in this version of SMlib are mandatory. The
-mask_ret argument is necessary in order to maintain backwards
-compatibility in future versions of the library.
-.LP
-The following values may be ORed together to obtain a mask value:
-.LP
-.Ds 0
-.PN SmsRegisterClientProcMask
-.PN SmsInteractRequestProcMask
-.PN SmsInteractDoneProcMask
-.PN SmsSaveYourselfRequestProcMask
-.PN SmsSaveYourselfP2RequestProcMask
-.PN SmsSaveYourselfDoneProcMask
-.PN SmsCloseConnectionProcMask
-.PN SmsSetPropertiesProcMask
-.PN SmsDeletePropertiesProcMask
-.PN SmsGetPropertiesProcMask
-.De
-.LP
-For each callback, the session manager can register a pointer to manager
-data specific to that callback. This pointer will be passed to the callback
-when it is invoked by SMlib.
-.sM
-.LP
-.Ds 0
-.TA .5i 1i 1.5i
-.ta .5i 1i 1.5i
-typedef struct {
- struct {
- SmsRegisterClientProc callback;
- SmPointer manager_data;
- } register_client;
-
- struct {
- SmsInteractRequestProc callback;
- SmPointer manager_data;
- } interact_request;
-
- struct {
- SmsInteractDoneProc callback;
- SmPointer manager_data;
- } interact_done;
-
- struct {
- SmsSaveYourselfRequestProc callback;
- SmPointer manager_data;
- } save_yourself_request;
-
- struct {
- SmsSaveYourselfPhase2RequestProc callback;
- SmPointer manager_data;
- } save_yourself_phase2_request;
-
- struct {
- SmsSaveYourselfDoneProc callback;
- SmPointer manager_data;
- } save_yourself_done;
-
- struct {
- SmsCloseConnectionProc callback;
- SmPointer manager_data;
- } close_connection;
-
- struct {
- SmsSetPropertiesProc callback;
- SmPointer manager_data;
- } set_properties;
-
- struct {
- SmsDeletePropertiesProc callback;
- SmPointer manager_data;
- } delete_properties;
-
- struct {
- SmsGetPropertiesProc callback;
- SmPointer manager_data;
- } get_properties;
-
-} SmsCallbacks;
-.De
-.LP
-.eM
-.NH 3
-The Register Client Callback
-.XS
-\*(SN The Register Client Callback
-.XE
-.LP
-The Register Client callback is the first callback that will be
-invoked after the client connects to the session manager. Its type is
-.PN SmsRegisterClientProc .
-.sM
-.FD 0
-typedef Status (*SmsRegisterClientProc();
-
-Status RegisterClientProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIprevious_id\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- char *\fIprevious_id\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fIprevious_id\fP 1i
-The client ID from the previous session.
-.LP
-.eM
-Before any further interaction takes place with the client,
-the client must be registered with the session manager.
-.LP
-If the client is being restarted from a previous session,
-previous_id will contain a null-terminated string representing
-the client ID from the previous session. Call
-.PN free
-on the previous_id pointer when it is no longer needed.
-If the client is first joining the session, previous_id will be NULL.
-.LP
-If previous_id is invalid, the session manager should not register
-the client at this time. This callback should return a status of zero,
-which will cause an error message to be sent to the client.
-The client should re-register with previous_id set to NULL.
-.LP
-Otherwise, the session manager should register the client with a
-unique client ID by calling the
-.PN SmsRegisterClientReply
-function (to be discussed shortly), and the
-.PN SmsRegisterClientProc
-callback should return a status of one.
-.NH 3
-The Interact Request Callback
-.XS
-\*(SN The Interact Request Callback
-.XE
-.LP
-The Interact Request callback is of type
-.PN SmsInteractRequestProc .
-.sM
-.FD 0
-typedef void (*SmsInteractRequestProc)();
-
-void InteractRequestProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIdialog_type\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- int \fIdialog_type\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fIdialog_type\fP 1i
-The type of dialog the client wishes to present to the user.
-.LP
-.eM
-When a client receives a ``Save Yourself'' message with an
-interact_style of
-.PN SmInteractStyleErrors
-or
-.PN SmInteractStyleAny ,
-the client may choose to interact with the user.
-Because only one client can interact with the user at a time, the client
-must request to interact with the user. The session manager should keep
-a queue of all clients wishing to interact. It should send an ``Interact''
-message to one client at a time and wait for an ``Interact Done'' message
-before continuing with the next client.
-.LP
-The dialog_type argument specifies either
-.PN SmDialogError ,
-indicating that the client wants to start an error dialog,
-or
-.PN SmDialogNormal ,
-meaning that the client wishes to start a nonerror dialog.
-.LP
-If a shutdown is in progress, the user may have the option of cancelling
-the shutdown. If the shutdown is cancelled (specified in the ``Interact
-Done'' message), the session manager should send a
-``Shutdown Cancelled'' message to each client that requested to interact.
-.NH 3
-The Interact Done Callback
-.XS
-\*(SN The Interact Done Callback
-.XE
-.LP
-When the client is done interacting with the user, the
-.PN SmsInteractDoneProc
-callback will be invoked.
-.sM
-.FD 0
-typedef void (*SmsInteractDoneProc)();
-
-void InteractDoneProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIcancel_shutdown\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- Bool \fIcancel_shutdown\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fIcancel_shutdown\fP 1i
-Specifies if the user requests that the entire shutdown be cancelled.
-.LP
-.eM
-Note that the shutdown can be cancelled only if the corresponding
-``Save Yourself'' specified
-.PN True
-for shutdown and
-.PN SmInteractStyleErrors
-or
-.PN SmInteractStyleAny
-for the interact_style.
-.NH 3
-The Save Yourself Request Callback
-.XS
-\*(SN The Save Yourself Request Callback
-.XE
-.LP
-The Save Yourself Request callback is of type
-.PN SmsSaveYourselfRequestProc .
-.sM
-.FD 0
-typedef void (*SmsSaveYourselfRequestProc)();
-
-void SaveYourselfRequestProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^, \fIglobal\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- int \fIsave_type\fP\^;
-.br
- Bool \fIshutdown\fP\^;
-.br
- int \fIinteract_style\fP\^;
-.br
- Bool \fIfast\fP\^;
-.br
- Bool \fIglobal\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fIsave_type\fP 1i
-Specifies the type of information that should be saved.
-.IP \fIshutdown\fP 1i
-Specifies if a shutdown is taking place.
-.IP \fIinteract_style\fP 1i
-The type of interaction allowed with the user.
-.IP \fIfast\fP 1i
-If
-.PN True ,
-the client should save its state as quickly as possible.
-.IP \fIglobal\fP 1i
-Controls who gets the ``Save Yourself.''
-.LP
-.eM
-The Save Yourself Request prompts the session manager to
-initiate a checkpoint or shutdown.
-For information on the save_type, shutdown, interact_style, and fast arguments,
-see section 6.3, ``Sending a Save Yourself Message.''
-.LP
-If global is set to
-.PN True ,
-then the resulting ``Save Yourself'' should be
-sent to all applications. If global is set to
-.PN False ,
-then the ``Save Yourself'' should only be sent to the client
-that requested it.
-.NH 3
-The Save Yourself Phase 2 Request Callback
-.XS
-\*(SN The Save Yourself Phase 2 Request Callback
-.XE
-.LP
-The Save Yourself Phase 2 Request callback is of type
-.PN SmsSaveYourselfPhase2RequestProc .
-.sM
-.FD 0
-typedef void (*SmsSaveYourselfPhase2RequestProc)();
-
-void SmsSaveYourselfPhase2RequestProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.LP
-.eM
-This request is sent by clients that manage other clients (for example,
-window managers, workspace managers, and so on).
-Such managers must make sure that all of the clients that are being managed
-are in an idle state so that their state can be saved.
-.NH 3
-The Save Yourself Done Callback
-.XS
-\*(SN The Save Yourself Done Callback
-.XE
-.LP
-When the client is done saving its state in response to a
-``Save Yourself'' message, the
-.PN SmsSaveYourselfDoneProc
-will be invoked.
-.sM
-.FD 0
-typedef void (*SmsSaveYourselfDoneProc)();
-
-void SaveYourselfDoneProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIsuccess\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- Bool \fIsuccess\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fIsuccess\fP 1i
-If
-.PN True ,
-the Save Yourself operation was completed successfully.
-.LP
-.eM
-Before the ``Save Yourself Done'' was sent, the client must have
-set each required property at least once since it registered with the
-session manager.
-.NH 3
-The Connection Closed Callback
-.XS
-\*(SN The Connection Closed Callback
-.XE
-.LP
-If the client properly terminates (that is, it calls
-.PN SmcCloseConnection ),
-the
-.PN SmsCloseConnectionProc
-callback is invoked.
-.sM
-.FD 0
-typedef void (*SmsCloseConnectionProc)();
-
-void CloseConnectionProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fIcount\fP\^, \fIreason_msgs\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- int \fIcount\fP\^;
-.br
- char **\fIreason_msgs\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fIcount\fP 1i
-The number of reason messages.
-.IP \fIreason_msgs\fP 1i
-The reasons for closing the connection.
-.LP
-.eM
-The reason_msgs argument will most likely be NULL
-and the count argument zero (0) if resignation is expected by the user.
-Otherwise, it contains a list
-of null-terminated Compound Text strings representing the reason for
-termination. The session manager should display these reason messages
-to the user.
-.LP
-Call
-.PN SmFreeReasons
-to free the reason messages.
-For further information, see section 8, ``Freeing Data.''
-.NH 3
-The Set Properties Callback
-.XS
-\*(SN The Set Properties Callback
-.XE
-.LP
-When the client sets session management properties, the
-.PN SmsSetPropertiesProc
-callback will be invoked.
-.sM
-.FD 0
-typedef void (*SmsSetPropertiesProc)();
-
-void SetPropertiesProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fInum_props\fP\^, \fIprops\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- int \fInum_props\fP\^;
-.br
- SmProp **\fIprops\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fInum_props\fP 1i
-The number of properties.
-.IP \fIprops\fP 1i
-The list of properties to set.
-.LP
-.eM
-The properties are specified as an array of property pointers.
-For a description of session management properties and the
-.PN SmProp
-structure, see section 7, ``Session Management Properties.''
-.LP
-Previously set property values may be over-written. Some properties
-have predefined semantics.
-The session manager is required to store
-nonpredefined properties.
-.LP
-To free each property, use
-.PN SmFreeProperty .
-For further information, see section 8, ``Freeing Data.''
-You should free the actual array of pointers with a call to
-.PN free .
-.NH 3
-The Delete Properties Callback
-.XS
-\*(SN The Delete Properties Callback
-.XE
-.LP
-When the client deletes session management properties, the
-.PN SmsDeletePropertiesProc
-callback will be invoked.
-.sM
-.FD 0
-typedef void (*SmsDeletePropertiesProc)();
-
-void DeletePropertiesProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^, \fInum_props\fP\^, \fIprop_names\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.br
- int \fInum_props\fP\^;
-.br
- char **\fIprop_names\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.IP \fInum_props\fP 1i
-The number of properties.
-.IP \fIprop_names\fP 1i
-The list of properties to delete.
-.LP
-.eM
-The properties are specified as an array of strings.
-For a description of session management properties and the
-.PN SmProp
-structure, see section 7, ``Session Management Properties.''
-.NH 3
-The Get Properties Callback
-.XS
-\*(SN The Get Properties Callback
-.XE
-.LP
-The
-.PN SmsGetPropertiesProc
-callback is invoked when the client wants to retrieve properties it set.
-.sM
-.FD 0
-typedef void (*SmsGetPropertiesProc)();
-
-void GetPropertiesProc\^(\^\fIsms_conn\fP, \fImanager_data\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- SmPointer \fImanager_data\fP\^;
-.FN
-.IP \fIsmc_conn\fP 1i
-The session management connection object.
-.IP \fImanager_data\fP 1i
-Manager data specified when the callback was registered.
-.LP
-.eM
-The session manager should respond by calling
-.PN SmsReturnProperties .
-All of the properties set for this client should be returned.
-.NH 2
-Registering the Client
-.XS
-\*(SN Registering the Client
-.XE
-.LP
-To register a client (in response to a
-.PN SmsRegisterClientProc
-callback), use
-.PN SmsRegisterClientReply .
-.sM
-.FD 0
-Status SmsRegisterClientReply\^(\^\fIsms_conn\fP, \fIclient_id\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- char *\fIclient_id\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fIclient_id\fP 1i
-A null-terminated string representing a unique client ID.
-.LP
-.eM
-The return value of
-.PN SmsRegisterClientReply
-is zero for failure and a positive value for success. Failure will
-occur if SMlib can not allocate memory to hold a copy of the client ID
-for it's own internal needs.
-.LP
-If a non-NULL previous_id was specified when the client registered
-itself, client_id should be identical to previous_id.
-.LP
-Otherwise, client_id should be a unique ID freshly generated by
-the session manager. In addition, the session manager should send
-a ``Save Yourself'' message with type = Local, shutdown = False,
-interact-style = None, and fast = False immediately after registering the
-client.
-.LP
-Note that once a client ID has been assigned to the client, the client keeps
-this ID indefinitely. If the client is terminated and restarted, it
-will be reassigned the same ID. It is desirable to be able to pass
-client IDs around from machine to machine, from user to user, and
-from session manager to session manager, while retaining the
-identity of the client. This, combined with the indefinite
-persistence of client IDs, means that client IDs need to be globally
-unique.
-.LP
-You should call the
-.PN SmsGenerateClientID
-function to generate a globally unique client ID.
-.sM
-.FD 0
-char *SmsGenerateClientID\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-NULL will be returned if the ID could not be generated. Otherwise, the return
-value of the function is the client ID. It should be freed with a call to
-.PN free
-when no longer needed.
-.NH 2
-Sending a Save Yourself Message
-.XS
-\*(SN Sending a Save Yourself Message
-.XE
-.LP
-To send a ``Save Yourself'' to a client, use
-.PN SmsSaveYourself .
-.sM
-.FD 0
-void SmsSaveYourself\^(\^\fIsms_conn\fP, \fIsave_type\fP\^, \fIshutdown\fP\^, \fIinteract_style\fP\^, \fIfast\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- int \fIsave_type\fP\^;
-.br
- Bool \fIshutdown\fP\^;
-.br
- int \fIinteract_style\fP\^;
-.br
- Bool \fIfast\fP\^;
-.FN
-.ne 7
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fIsave_type\fP 1i
-Specifies the type of information that should be saved.
-.IP \fIshutdown\fP 1i
-Specifies if a shutdown is taking place.
-.IP \fIinteract_style\fP 1i
-The type of interaction allowed with the user.
-.IP \fIfast\fP 1i
-If
-.PN True ,
-the client should save its state as quickly as possible.
-.LP
-.eM
-The session manager sends a ``Save Yourself'' message to a client
-either to checkpoint it or just before
-termination so that it can save its state.
-The client responds with zero or more ``Set Properties'' messages
-to update the properties indicating how to restart the client.
-When all the properties have been set, the client sends a
-``Save Yourself Done'' message.
-.LP
-If interact_style is
-.PN SmInteractStyleNone ,
-the client must not interact with the
-user while saving state.
-If interact_style is
-.PN SmInteractStyleErrors ,
-the client may interact with the user only if an error condition arises. If
-interact_style is
-.PN SmInteractStyleAny ,
-then the client may interact with the user for any purpose.
-The client must send an ``Interact Request'' message
-and wait for an ``Interact'' message from the session manager
-before it can interact with the user. When the client is done
-interacting with the user, it should send an ``Interact Done'' message.
-The ``Interact Request'' message can be sent any time after a
-``Save Yourself'' and before a ``Save Yourself Done.''
-.LP
-If save_type is
-.PN SmSaveLocal ,
-the client must update the properties to reflect its current state.
-Specifically, it should save enough information to restore
-the state as seen by the user of this client. It should not affect the
-state as seen by other users. If save_type is
-.PN SmSaveGlobal
-the user wants the client to commit all of its data to permanent,
-globally accessible storage. If save_type is
-.PN SmSaveBoth ,
-the client should do both of these (it should first commit the data to
-permanent storage before updating its properties).
-.LP
-The shutdown argument specifies whether the session is being
-shut down. The interaction is different depending on whether or not
-shutdown is set. If not shutting down, then the client can save and
-resume normal operation. If shutting down, the client must save and
-then must prevent interaction until it receives either a ``Die''
-or a ``Shutdown Cancelled,'' because anything the user does after
-the save will be lost.
-.LP
-The fast argument specifies that the client should save its state
-as quickly as possible. For example, if the session manager knows that
-power is about to fail, it should set fast to
-.PN True .
-.NH 2
-Sending a Save Yourself Phase 2 Message
-.XS
-\*(SN Sending a Save Yourself Phase 2 Message
-.XE
-.LP
-In order to send a ``Save Yourself Phase 2'' message to a client, use
-.PN SmsSaveYourselfPhase2 .
-.sM
-.FD 0
-void SmsSaveYourselfPhase2\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-The session manager sends this message to a client that has previously sent a
-``Save Yourself Phase 2 Request'' message. This message informs the
-client that all other clients are in a fixed state and this client can save
-state that is associated with other clients.
-.NH 2
-Sending an Interact Message
-.XS
-\*(SN Sending an Interact Message
-.XE
-.LP
-To send an ``Interact'' message to a client, use
-.PN SmsInteract .
-.sM
-.FD 0
-void SmsInteract\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-The ``Interact'' message grants the client the privilege of interacting
-with the user. When the client is done interacting with the user, it must
-send an ``Interact Done'' message to the session manager.
-.NH 2
-Sending a Save Complete Message
-.XS
-\*(SN Sending a Save Complete Message
-.XE
-.LP
-To send a ``Save Complete'' message to a client, use
-.PN SmsSaveComplete .
-.sM
-.FD 0
-void SmsSaveComplete\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-The session manager sends this message when it is done with a checkpoint.
-The client is then free to change its state.
-.NH 2
-Sending a Die Message
-.XS
-\*(SN Sending a Die Message
-.XE
-.LP
-To send a ``Die'' message to a client, use
-.PN SmsDie .
-.sM
-.FD 0
-void SmsDie\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-Before the session manager terminates, it should wait for a
-``Connection Closed'' message from each client that it sent
-a ``Die'' message to, timing out appropriately.
-.NH 2
-Cancelling a Shutdown
-.XS
-\*(SN Cancelling a Shutdown
-.XE
-.LP
-To cancel a shutdown, use
-.PN SmsShutdownCancelled .
-.sM
-.FD 0
-void SmsShutdownCancelled\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-The client can now continue as if the shutdown had never happened.
-If the client has not sent a ``Save Yourself Done'' message yet, it can
-either abort the save and send a ``Save Yourself Done''
-with the success argument set to
-.PN False ,
-or it can continue with the save and send a ``Save Yourself Done''
-with the success argument set to reflect the outcome of the save.
-.NH 2
-Returning Properties
-.XS
-\*(SN Returning Properties
-.XE
-.LP
-In response to a ``Get Properties'' message, the session manager should call
-.PN SmsReturnProperties .
-.sM
-.FD 0
-void SmsReturnProperties\^(\^\fIsms_conn\fP\^, \fInum_props\fP\^, \fIprops\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- int \fInum_props\fP\^;
-.br
- SmProp **\fIprops\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fInum_props\fP 1i
-The number of properties.
-.IP \fIprops\fP 1i
-The list of properties to return to the client.
-.LP
-.eM
-The properties are returned as an array of property pointers.
-For a description of session management properties and the
-.PN SmProp
-structure, see section 7, ``Session Management Properties.''
-.NH 2
-Pinging a Client
-.XS
-\*(SN Pinging a Client
-.XE
-.LP
-To check that a client is still alive, you should use the
-.PN IcePing
-function provided by the ICE library.
-To do so, the ICE
-connection must be obtained using the
-.PN SmsGetIceConnection
-(see section 6.12, ``Using Sms Informational Functions'').
-.LP
-.sM
-.FD 0
-void IcePing\^(\^\fIice_conn\fP, \fIping_reply_proc\fP\^, \fIclient_data\fP\^)
-.br
- IceConn \fIice_conn\fP\^;
-.br
- IcePingReplyProc \fIping_reply_proc\fP\^;
-.br
- IcePointer \fIclient_data\fP\^;
-.FN
-.IP \fIice_conn\fP 1i
-A valid ICE connection object.
-.IP \fIping_reply_proc\fP 1i
-The callback to invoke when the Ping reply arrives.
-.IP \fIclient_data\fP 1i
-This pointer will be passed to the
-.PN IcePingReplyProc
-callback.
-.LP
-.eM
-When the Ping reply is ready (if ever), the
-.PN IcePingReplyProc
-callback will be invoked. A session manager should have some sort
-of timeout period, after which it assumes the client has unexpectedly died.
-.LP
-.sM
-.FD 0
-typedef void (*IcePingReplyProc)();
-
-void PingReplyProc\^(\^\fIice_conn\fP, \fIclient_data\fP\^)
-.br
- IceConn \fIice_conn\fP\^;
-.br
- IcePointer \fIclient_data\fP\^;
-.FN
-.IP \fIice_conn\fP 1i
-The ICE connection object.
-.IP \fIclient_data\fP 1i
-The client data specified in the call to
-.PN IcePing .
-.LP
-.eM
-.NH 2
-Cleaning Up After a Client Disconnects
-.XS
-\*(SN Cleaning Up After a Client Disconnects
-.XE
-.LP
-When the session manager receives a ``Connection Closed'' message or
-otherwise detects that the client aborted the connection, it should
-call the
-.PN SmsCleanUp
-function in order to free up the connection object.
-.sM
-.FD 0
-void SmsCleanUp\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.LP
-.eM
-.NH 2
-Using Sms Informational Functions
-.XS
-\*(SN Using Sms Informational Functions
-.XE
-.LP
-.sM
-.FD 0
-int SmsProtocolVersion\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.LP
-.eM
-.PN SmsProtocolVersion
-returns the major version of the session management protocol
-associated with this session.
-.sp
-.LP
-.sM
-.FD 0
-int SmsProtocolRevision\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.LP
-.eM
-.PN SmsProtocolRevision
-returns the minor version of the session management protocol
-associated with this session.
-.sp
-.LP
-.sM
-.FD 0
-char *SmsClientID\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.LP
-.eM
-.PN SmsClientID
-returns a null-terminated string for the client ID associated with
-this connection.
-You should call
-.PN free
-on this pointer when the client ID is no longer needed.
-.sp
-.LP
-To obtain the host name of a client, use
-.PN SmsClientHostName .
-This host name will be needed to restart the client.
-.sM
-.FD 0
-char *SmsClientHostName\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.eM
-The string returned is of the form \fIprotocol\fP\^/\^\fIhostname\fP\^,
-where \fIprotocol\fP\^ is one of {tcp, decnet, local}.
-You should call
-.PN free
-on the string returned when it is no longer needed.
-.sp
-.LP
-.sM
-.FD 0
-IceConn SmsGetIceConnection\^(\^\fIsms_conn\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.FN
-.eM
-.PN SmsGetIceConnection
-returns the ICE connection object associated with this session management
-connection object. The ICE connection object can be used to get some
-additional information about the connection. Some of the more useful
-functions which can be used on the IceConn are
-.PN IceConnectionNumber ,
-and
-.PN IceLastSequenceNumber .
-For further information,
-see the \fIInter-Client Exchange Library\fP\^ standard.
-.NH 2
-Error Handling
-.XS
-\*(SN Error Handling
-.XE
-.LP
-If the session manager receives an unexpected protocol error from a client,
-an error handler is invoked by SMlib. A default error handler exists which
-simply prints the error message (it does not exit). The session manager can
-change this error handler by calling
-.PN SmsSetErrorHandler .
-.sM
-.FD 0
-SmsErrorHandler SmsSetErrorHandler\^(\^\fIhandler\fP\^)
-.br
- SmsErrorHandler \fIhandler\fP\^;
-.FN
-.IP \fIhandler\fP 1i
-The error handler.
-You should pass NULL to restore the default handler.
-.LP
-.eM
-.PN SmsSetErrorHandler
-returns the previous error handler.
-The
-.PN SmsErrorHandler
-has the following type:
-.sM
-.FD 0
-typedef void (*SmsErrorHandler)();
-
-void ErrorHandler\^(\^\fIsms_conn\fP, \fIswap\fP\^, \fIoffending_minor_opcode\fP\^, \fIoffending_sequence_num\fP\^, \fIerror_class\fP\^, \fIseverity\fP\^, \fIvalues\fP\^)
-.br
- SmsConn \fIsms_conn\fP\^;
-.br
- Bool \fIswap\fP\^;
-.br
- int \fIoffending_minor_opcode\fP\^;
-.br
- unsigned long \fIoffending_sequence_num\fP\^;
-.br
- int \fIerror_class\fP\^;
-.br
- int \fIseverity\fP\^;
-.br
- IcePointer \fIvalues\fP\^;
-.FN
-.IP \fIsms_conn\fP 1i
-The session management connection object.
-.IP \fIswap\fP 1i
-A flag which indicates if the specified values need byte swapping.
-.IP \fIoffending_minor_opcode\fP 1i
-The minor opcode of the offending message.
-.IP \fIoffending_sequence_num\fP 1i
-The sequence number of the offending message.
-.IP \fIerror_class\fP 1i
-The error class of the offending message.
-.IP \fIseverity\fP 1i
-.PN IceCanContinue ,
-.PN IceFatalToProtocol ,
-or
-.PN IceFatalToConnection .
-.IP \fIvalues\fP 1i
-Any additional error values specific to the minor opcode and class.
-.LP
-.eM
-Note that this error handler is invoked for protocol related errors.
-To install an error handler to be invoked when an IO error occurs, use
-.PN IceSetIOErrorHandler .
-For further information,
-see the \fIInter-Client Exchange Library\fP\^ standard.
-.NH 1
-Session Management Properties
-.XS
-\*(SN Session Management Properties
-.XE
-.LP
-Each property is defined by the
-.PN SmProc
-structure:
-.LP
-.Ds 0
-.TA .5i 2.5i
-.ta .5i 2.5i
-typedef struct {
- char *name; /* name of property */
- char *type; /* type of property */
- int num_vals; /* number of values */
- SmPropValue *vals; /* the list of values */
-} SmProp;
-
-typedef struct {
- int length; /* the length of the value */
- SmPointer value; /* the value */
-} SmPropValue;
-.De
-.LP
-The X Session Management Protocol defines a list of predefined properties,
-several of which are required to be set by the client. The following table
-specifies the predefined properties and indicates which ones are required.
-Each property has a type associated with it.
-.LP
-A type of SmCARD8 indicates that there is a single 1-byte value.
-A type of SmARRAY8 indicates that there is a single array of bytes.
-A type of SmLISTofARRAY8 indicates that there is a list of array of bytes.
-.LP
-.TS H
-l l l c .
-_
-.sp 6p
-.B
-Name Type POSIX Type Required
-.R
-.sp 6p
-_
-.sp 6p
-.TH
-SmCloneCommand OS-specific SmLISTofARRAY8 Yes
-SmCurrentDirectory OS-specific SmARRAY8 No
-SmDiscardCommand OS-specific SmLISTofARRAY8 No*
-SmEnvironment OS-specific SmLISTofARRAY8 No
-SmProcessID OS-specific SmARRAY8 No
-SmProgram OS-specific SmARRAY8 Yes
-SmRestartCommand OS-specific SmLISTofARRAY8 Yes
-SmResignCommand OS-specific SmLISTofARRAY8 No
-SmRestartStyleHint SmCARD8 SmCARD8 No
-SmShutdownCommand OS-specific SmLISTofARRAY8 No
-SmUserID SmARRAY8 SmARRAY8 Yes
-.sp 6p
-_
-.TE
-.LP
-* Required if any state is stored in an external repository
-(for example, state file).
-.IP \(bu 5
-SmCloneCommand
-.IP
-This is like the SmRestartCommand,
-except it restarts a copy of the
-application. The only difference is that the application does not
-supply its client ID at register time. On POSIX systems, this should
-be of type SmLISTofARRAY8.
-.IP \(bu 5
-SmCurrentDirectory
-.IP
-On POSIX-based systems, this specifies the value of the current directory that
-needs to be set up prior to starting the SmProgram and should of type SmARRAY8.
-.IP \(bu 5
-SmDiscardCommand
-.IP
-The discard command contains a command that when delivered to the host that
-the client is running on (determined from the connection), will
-cause it to discard any information about the current state. If this command
-is not specified, the Session Manager will assume that all of the client's
-state is encoded in the SmRestartCommand.
-On POSIX systems, the type should be SmLISTofARRAY8.
-.IP \(bu 5
-SmEnvironment
-.IP
-On POSIX based systems, this will be of type SmLISTofARRAY8,
-where the ARRAY8s alternate between environment variable name and environment
-variable value.
-.IP \(bu 5
-SmProcessID
-.IP
-This specifies an OS-specific identifier for the process. On POSIX
-systems, this should contain the return value of
-.PN getpid
-turned into a Latin-1 (decimal) string.
-.IP \(bu 5
-SmProgram
-.IP
-This is the name of the program that is running.
-On POSIX systems, this should be first parameter passed to
-.PN execve
-and should be of type SmARRAY8.
-.IP \(bu 5
-SmRestartCommand
-.IP
-The restart command contains a command that, when delivered to the
-host that the client is running on (determined from the connection),
-will cause the client to restart in
-its current state. On POSIX-based systems, this is of type SmLISTofARRAY8,
-and each of the elements in the array represents an element in the
-.PN argv
-array.
-This restart command should ensure that the client restarts with the specified
-client-ID.
-.IP \(bu 5
-SmResignCommand
-.IP
-A client that sets the SmRestartStyleHint to SmRestartAnway
-uses this property to specify a command
-that undoes the effect of the client and removes
-any saved state.
-As an example, consider a user that runs
-.PN xmodmap ,
-which registers with the Session Manager, sets SmRestartStyleHint to
-SmRestartAnyway, and then terminates. To allow the Session Manager (at the
-user's request) to undo this,
-.PN xmodmap
-would register a SmResignCommand that undoes the effects of the
-.PN xmodmap .
-.IP \(bu 5
-SmRestartStyleHint
-.IP
-If the RestartStyleHint property is present, it will contain the
-style of restarting the client prefers. If this style is not specified,
-SmRestartIfRunning is assumed.
-The possible values are as follows:
-.TS H
-l n.
-_
-.sp 6p
-.B
-Name Value
-.sp 6p
-_
-.sp 6p
-.TH
-.R
-SmRestartIfRunning 0
-SmRestartAnyway 1
-SmRestartImmediately 2
-SmRestartNever 3
-.sp 6p
-_
-.TE
-.IP
-The SmRestartIfRunning style is used in the usual case. The client should
-be restarted in the next session if it was running at the end of the
-current session.
-.IP
-The SmRestartAnyway style is used to tell the Session Manager
-that the application should be restarted in the next session
-even if it exits before the current session is terminated.
-It should be noted that this is only
-a hint and the Session Manager will follow the policies specified
-by its users in determining what applications to restart.
-.IP
-A client that uses SmRestartAnyway should also set the
-SmResignCommand and SmShutdownCommand properties to commands
-that undo the state of the client after it exits.
-.IP
-The SmRestartImmediately style is like SmRestartAnyway,
-but, in addition, the client is meant to run continuously.
-If the client exits,
-the Session Manager should try to restart it in the current session.
-.IP
-SmRestartNever style specifies that the client
-does not wish to be restarted in the next session.
-.IP \(bu 5
-SmShutdownCommand
-.IP
-This command is executed at shutdown time to clean up after a client that
-is no longer running but retained its state by setting SmRestartStyleHint
-to SmRestartAnyway.
-The client must not remove any saved state as the client is still part of
-the session.
-As an example, consider a client that turns on a camera at start up time.
-This client then exits.
-At session shutdown, the user wants the camera turned off.
-This client would set the SmRestartStyleHint to SmRestartAnyway
-and would register a SmShutdownCommand that would turn off the camera.
-.IP \(bu 5
-SmUserID
-.IP
-Specifies the user ID. On POSIX-based systems, this
-will contain the user's name (the pw_name member of struct
-.PN passwd ).
-.NH 1
-Freeing Data
-.XS
-\*(SN Freeing Data
-.XE
-.LP
-To free an individual property, use
-.PN SmFreeProperty .
-.sM
-.FD 0
-void SmFreeProperty\^(\^\fIprop\fP\^)
-.br
- SmProp *\fIprop\fP\^;
-.FN
-.IP \fIprop\fP 1i
-The property to free.
-.LP
-.eM
-.LP
-To free the reason strings from the
-.PN SmsCloseConnectionProc
-callback, use
-.PN SmFreeReasons .
-.sM
-.FD 0
-void SmFreeReasons\^(\^\fIcount\fP, \fIreasons\fP\^)
-.br
- int \fIcount\fP\^;
-.br
- char **\fIreasons\fP\^;
-.FN
-.IP \fIcount\fP 1i
-The number of reason strings.
-.IP \fIreasons\fP 1i
-The list of reason strings to free.
-.LP
-.eM
-.NH 1
-Authentication of Clients
-.XS
-\*(SN Authentication of Clients
-.XE
-.LP
-As stated earlier, the session management protocol is layered on top
-of ICE. Authentication occurs at two levels in the ICE protocol:
-.IP \(bu 5
-The first is when an ICE connection is opened.
-.IP \(bu 5
-The second is when a Protocol Setup occurs on an ICE connection.
-.LP
-The authentication methods that are available are implementation-dependent
-(that is., dependent on the ICElib and SMlib implementations in use).
-For further information,
-see the \fIInter-Client Exchange Library\fP\^ standard.
-.NH 1
-Working in a Multi-Threaded Environment
-.XS
-\*(SN Working in a Multi-Threaded Environment
-.XE
-.LP
-To declare that multiple threads in an application will be using SMlib
-(or any other library layered on top of ICElib), you should call
-.PN IceInitThreads .
-For further information,
-see the \fIInter-Client Exchange Library\fP\^ standard.
-.NH 1
-Acknowledgements
-.XS
-\*(SN Acknowledgements
-.XE
-.LP
-Thanks to the following people for their participation in the
-X Session Management design: Jordan Brown, Ellis Cohen,
-Donna Converse, Stephen Gildea, Vania Joloboff, Stuart Marks, Bob Scheifler,
-Ralph Swick, and Mike Wexler.
-.LP
-.EH ''''
-.OH ''''
-.YZ 3
diff --git a/specs/SM/xsmp.ms b/specs/SM/xsmp.ms
deleted file mode 100644
index de73625..0000000
--- a/specs/SM/xsmp.ms
+++ /dev/null
@@ -1,1621 +0,0 @@
-.\" Use tbl, -ms, and macros.t
-.\" $Xorg: xsmp.ms,v 1.3 2000/08/17 19:42:19 cpqbld Exp $
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.ps 10
-.nr PS 10
-\&
-.TL
-\s+2\fBX Session Management Protocol\fP\s-2
-.sp
-X.Org Standard
-.sp
-X Version 11, Release 6.8
-.AU
-Mike Wexler
-.AI
-Kubota Pacific Computer, Inc.
-.AB
-.LP
-This document specifies a protocol that facilitates the management of groups
-of client applications by a session manager. The session manager can cause
-clients to save their state, to shut down, and to be restarted into a
-previously saved state. This protocol is layered on top of the X.Org
-ICE protocol.
-.AE
-.LP
-.bp
-\&
-.sp 8
-.LP
-.DS C
-X Window System is a trademark of The Open Group.
-.sp
-Copyright \(co 1992, 1993, 1994, 2002 The Open Group.
-.DE
-.sp 3
-.LP
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the ``Software''), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-.LP
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-.LP
-THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-.af PN i
-.EF ''\\\\n(PN''
-.OF ''\\\\n(PN''
-.bp 1
-.af PN 1
-.EH '\fBX Session Management Protocol\fP''\fBX11, Release 6.8\fP'
-.OH '\fBX Session Management Protocol\fP''\fBX11, Release 6.8\fP'
-.EF ''\fB\\\\n(PN\fP''
-.OF ''\fB\\\\n(PN\fP''
-.nH 1 "Acknowledgements"
-.LP
-First I would like to thank the entire ICCCM and Intrinsics working groups for
-the comments and suggestions. I would like to make special thanks to the
-following people (in alphabetical order), Jordan Brown, Ellis Cohen, Donna
-Converse, Vania Joloboff, Stuart Marks, Ralph Mor and Bob Scheifler.
-.nH 1 "Definitions and Goals"
-.LP
-The purpose of the X Session Management Protocol (XSMP) is to provide a
-uniform mechanism for users to save and restore their sessions. A
-\fIsession\fP is a group of clients, each of which has a particular state.
-The session is controlled by a network service called the \fIsession
-manager\fP\^. The session manager issues commands to its clients on behalf
-of the user. These commands may cause clients to save their state or to
-terminate. It is expected that the client will save its state in such a
-way that the client can be restarted at a later time and resume its
-operation as if it had never been terminated. A client's state might
-include information about the file currently being edited, the current
-position of the insertion point within the file, or the start of an
-uncommitted transaction.
-The means by which clients are
-restarted is unspecified by this protocol.
-.LP
-For purposes of this protocol, a \fIclient\fP of the session manager is
-defined as a connection to the session manager. A client is typically,
-though not necessarily, a process running an application program connected
-to an X Window System display. However, a client may be connected to more
-than one X display or not be connected to any X displays at all.
-.LP
-This protocol is layered on top of the X Consortium's ICE protocol and relies on
-the ICE protocol to handle connection management and authentication.
-.LP
-.nH 1 "Overview of the Protocol"
-.LP
-Clients use XSMP to register themselves with the session manager (SM). When
-a client starts up, it should connect to the SM. The client should remain
-connected for as long as it runs. A client may resign from the session by
-issuing the proper protocol messages before disconnecting. Termination of
-the connection without notice will be taken as an indication that the client
-died unexpectedly.
-.LP
-Clients are expected to save their state in such a way as to allow multiple
-instantiations of themselves to be managed independently. A unique value
-called a \fIclient-ID\fP is provided by the protocol for the purpose of
-disambiguating multiple instantiations of clients. Clients may use this ID,
-for example, as part of a filename in which to store the state for a
-particular instantiation. The client-ID should be saved as part of the
-command used to restart this client (the \fIRestartCommand\fP\^) so that the
-client will retain the same ID after it is restarted. Certain small pieces
-of state might also be stored in the RestartCommand. For example, an X11 client
-might place a `\-twoWindow' option in its RestartCommand to indicate that it
-should start up in two window mode when it is restarted.
-.LP
-The client finds the network address of the SM in a system-dependent way.
-On POSIX systems an environment variable called SESSION_MANAGER will contain
-a list of network IDs. Each id will contain the transport name followed by a
-slash and the (transport-specific)
-address. A TCP/IP address would look like this:
-.ID
- \fCtcp/\fP\fIhostname\fP\^\fC:\fP\^\fIportnumber\fP
-.DE
-where the hostname is a fully qualified domain name.
-A Unix Domain address looks like this:
-.ID
- \fClocal/\fP\fIhostname\fP\^\fC:\fP\^\fIpath\fP
-.DE
-A DECnet address would look like this:
-.ID
- \fCdecnet/\fP\fInodename\fP\^\fC::\fP\^\fIobjname\fP
-.DE
-If multiple network IDs are specified, they should be separated by commas.
-.NT Rationale
-There was much discussion over whether the XSMP protocol should use X as
-the transport protocol or whether it should use its own independent
-transport. It was decided that it would use an independent protocol for
-several reasons. First, the Session Manager should be able to
-manage programs that
-do not maintain an X connection. Second, the X protocol is not appropriate to
-use as a general-purpose transport protocol. Third, a session might
-span multiple displays.
-.LP
-The protocol is connection based, because there is no other way for the SM
-to determine reliably when clients terminate.
-.LP
-It should be noted that this protocol introduces another single point of
-failure into the system. Although it is possible for clients to continue
-running after the SM has exited, this will probably not be the case in
-normal practice. Normally the program that starts the SM will consider the
-session to be terminated when the SM exits (either normally or abnormally).
-.LP
-To get around this would require some sort of
-rendezvous server that would also introduce a single point of failure. In the
-absence of a generally available rendezvous server, XSMP is kept simple in
-the hopes of making simple reliable SMs.
-.NE
-.LP
-Some clients may wish to manage the programs they start. For example, a
-mail program could start a text editor for editing the text of a mail
-message. A client that does this is a session manager itself;
-it should supply the clients it starts with the appropriate connection
-information (i.e., the SESSION_MANAGER environment variable) that specifies
-a connection to itself instead of to the top level session manager.
-.LP
-Each client has associated with it a list of properties.
-A property set by one client is not visible to any other client.
-These properties are used for the client to inform the SM of the client's
-current state.
-When a client initially connects to the SM, there are no properties set.
-.nH 1 "Data Types"
-.LP
-XSMP messages contain several types of data. Both the SM and the client
-always send messages in their native byte order. Thus, both sides may need
-to byte-swap the messages received. The need to do byte-swapping is
-determined at run-time by the ICE protocol.
-.LP
-If an invalid value is specified for a field of any of the enumerated types, a
-.PN BadValue
-error message must be sent by the receiver of the message to the sender of the
-message.
-.br
-.ne 6
-.TS H
-l lw(4.5i).
-_
-.sp 6p
-.B
-Type Name Description
-.R
-.sp 6p
-_
-.sp 6p
-.TH
-BOOL T{
-.PN False
-or
-.PN True
-T}
-INTERACT_STYLE T{
-.PN None ,
-.PN Errors ,
-or
-.PN Any
-T}
-DIALOG_TYPE T{
-.PN Error
-or
-.PN Normal
-T}
-SAVE_TYPE T{
-.PN Global ,
-.PN Local ,
-or
-.PN Both
-T}
-CARD8 a one-byte unsigned integer
-CARD16 a two-byte unsigned integer
-CARD32 a four-byte unsigned integer
-ARRAY8 a sequence of CARD8s
-LISTofARRAY8 a sequence of ARRAY8s
-PROPERTY a property name (an ARRAY8), a type name, and a value of that type
-LISTofPROPERTY T{
-a counted collection of \%PROPERTYs.
-T}
-.sp 6p
-_
-.TE
-.nH 1 "Protocol Setup and Message Format"
-.LP
-To start the XSMP protocol, the client sends the server an ICE
-.PN ProtocolSetup
-message.
-All XSMP messages are in the standard ICE message format. The message's major
-opcode is assigned to XSMP by ICE at run-time. The different parties
-(client and SM) may be assigned different major opcodes for XSMP. Once
-assigned, all XSMP messages issued by this party will use the same major
-opcode. The message's minor opcode specifies which protocol message this
-message contains.
-.nH 1 "Client Identification String"
-.LP
-A client ID is a string of XPCS characters encoded in ISO Latin 1 (ISO
-8859-1). No null characters are allowed in this string. The client ID
-string is used in the
-.PN Register\%Client
-and
-.PN Register\%ClientReply
-messages.
-.LP
-Client IDs consist of the pieces described below. The ID is
-formed by concatenating the pieces in sequence, without
-separator characters. All pieces are padded on the left
-with '0' characters
-so as to fill the specified length.
-Decimal numbers are
-encoded using the characters `0' through `9', and
-hexadecimal numbers using the characters `0' through `9'
-and `A' through `F'.
-.IP \(bu 4
-Version. This is currently the character `1'.
-.IP \(bu 4
-Address type and address. The address type will be one of
-.DS
-.ta 0.5i
-`1' a 4-byte IPv4 address encoded as 8 hexadecimal digits
-`2' a 6-byte DECNET address encoded as 12 hexadecimal digits
-`6' a 16-byte IPv6 address encoded as 32 hexadecimal digits
-.DE
-.IP
-The address is the one of the network addresses of the machine where the
-session manager (not the client) is running. For example, the IP address
-198.112.45.11 would be encoded as the string \*QC6702D0B\*U.
-.IP \(bu 4
-Time stamp. A 13-digit decimal number specifying the number of
-milliseconds since 00:00:00 UTC, January 1, 1970.
-.IP \(bu 4
-Process-ID type and process-ID. The process-ID type will be one of
-.DS
-.ta 0.5i
-`1' a POSIX process-ID encoded as a 10-digit decimal number.
-.DE
-.IP
-The process-ID is the process-ID of the session manager, not of a client.
-.IP \(bu 4
-Sequence number. This is a four-digit decimal number. It is incremented
-every time the session manager creates an ID. After reaching \*Q9999\*U it
-wraps to \*Q0000\*U.
-.NT "Rationale"
-Once a client ID has been assigned to the client, the client keeps
-this ID indefinitely. If the client is terminated and restarted, it
-will be reassigned the same ID. It is desirable to be able to pass
-client IDs around from machine to machine, from user to user, and
-from session manager to session manager, while retaining the
-identity of the client. This, combined with the indefinite
-persistence of client IDs, means that client IDs need to be globally
-unique. The construction specified above will ensure that any
-client ID created by any user, session manager, and machine will be
-different from any other.
-.NE
-.nH 1 "Protocol"
-.LP
-The protocol consists of a sequence of messages as described below. Each
-message type is specified by an ICE minor opcode. A given message type is
-sent either from a client to the session manager or from the session manager
-to a client; the appropriate direction is listed with each message's
-description. For each message type, the set of
-valid responses and possible error
-messages are listed. The ICE severity is given in parentheses following
-each error class.
-.LP
-.sM
-.PN RegisterClient
-[Client \(-> SM]
-.RS
-.LP
-\fIprevious-ID\fP\^: ARRAY8
-.LP
-Valid Responses:
-.PN RegisterClientReply
-.LP
-Possible Errors:
-.PN BadValue
-.Pn ( CanContinue )
-.RE
-.eM
-.LP
-The client must send this message to the SM to register the client's existence.
-If a client is being restarted from a previous
-session, the previous-ID field must contain the client ID from the
-previous session.
-For new clients, previous-ID should be of zero length.
-.LP
-If previous-ID is not valid, the SM will send a
-.PN BadValue
-error message to the client.
-At this point the SM reverts to the register state and waits for another
-.PN RegisterClient .
-The client should then send a
-.PN RegisterClient
-with a null previous-ID field.
-.LP
-.sM
-.PN RegisterClientReply
-[Client \(<- SM]
-.RS
-.LP
-\fIclient-ID\fP\^: ARRAY8
-.RE
-.eM
-.LP
-The client-ID specifies a unique identification for this client.
-If the client had specified an ID in the previous-ID field of the
-.PN RegisterClient
-message, client-ID will be identical to the previously specified ID. If
-previous-ID was null, client-ID will be a unique ID freshly generated by the
-SM. The client-ID format is specified in section 6.
-.LP
-If the client didn't supply a previous-ID field to the
-.PN Register\%Client
-message, the SM must send a
-.PN SaveYourself
-message with type = Local, shutdown = False, interact-style = None,
-and fast = False immediately after the
-.PN RegisterClientReply .
-The client should respond to this like any other
-.PN Save\%Yourself
-message.
-.LP
-.sM
-.PN SaveYourself
-[Client \(<- SM]
-.RS
-.LP
-\fItype\fP\^: SAVE_TYPE
-.br
-\fIshutdown\fP\^: BOOL
-.br
-\fIinteract-style\fP\^: INTERACT_STYLE
-.br
-\fIfast\fP\^: BOOL
-.LP
-Valid Responses:
-.PN SetProperties ,
-.PN DeleteProperties ,
-.PN GetProperties ,
-.PN SaveYourselfDone ,
-.PN SaveYourselfPhase2Request ,
-.PN InteractRequest
-.RE
-.eM
-.LP
-The SM sends this message to a client to ask it to save
-its state. The client writes a state file, if necessary,
-and, if necessary, uses
-.PN SetProperties
-to inform the SM of
-how to restart it and how to discard the saved state. During
-this process it can, if allowed by interact-style, request
-permission to interact with the user by sending an
-.PN InteractRequest
-message.
-After the state has been saved, or
-if it cannot be successfully saved, and the properties
-are appropriately set, the client sends a
-.PN SaveYourselfDone
-message.
-If the client wants to save additional information after all the
-other clients have finished changing their own state, the client
-should send
-.PN SaveYourselfPhase2Request
-instead of
-.PN SaveYourselfDone .
-The client must then
-freeze interaction with the user and wait until it
-receives a
-.PN SaveComplete ,
-.PN Die ,
-or a
-.PN ShutdownCancelled
-message.
-.LP
-If interact-style is
-.PN None ,
-the client must not interact with the
-user while saving state. If the interact-style is
-.PN Errors ,
-the client
-may interact with the user only if an error condition arises. If
-interact-style is
-.PN Any ,
-then the client may interact with the user for
-any purpose.
-This is done by sending an
-.PN Interact\%Request
-message. The SM will send an
-.PN Interact
-message to
-each client that sent an
-.PN Interact\%Request .
-The client must postpone all
-interaction until it gets the
-.PN Interact
-message. When the client is done
-interacting it should send the SM an
-.PN Interact\%Done
-message. The
-.PN Interact\%Request
-message can be sent any time after a
-.PN Save\%Yourself
-and before a
-.PN Save\%Yourself\%Done .
-.LP
-Unusual circumstances may dictate multiple interactions.
-The client may initiate as many
-.PN Interact\%Request
-\-
-.PN Interact
-\-
-.PN InteractDone
-sequences as it needs before it sends
-.PN SaveYourselfDone .
-.LP
-When a client receives
-.PN Save\%Yourself
-and has not yet responded
-.PN Save\%Yourself\%Done
-to a previous
-.PN Save\%Yourself ,
-it must send a
-.PN Save\%Yourself\%Done
-and may then begin responding as appropriate
-to the newly received
-.PN Save\%Yourself .
-.LP
-The type field specifies the type of information that should be saved:
-.PN Global ,
-.PN Local ,
-or
-.PN Both .
-The
-.PN Local
-type indicates that the application must update the
-properties to reflect its current state, send a
-.PN Save\%Yourself\%Done
-and continue. Specifically it should save enough information to restore
-the state as seen by the user of this client. It should not affect the
-state as seen by other users.
-The
-.PN Global
-type indicates that the user wants the client to
-commit all of its data to permanent, globally-accessible
-storage.
-.PN Both
-indicates that the client should do both of these. If
-.PN Both
-is specified, the client should first commit the data to permanent storage
-before updating its SM properties.
-.NT Examples
-If a word processor was sent a
-.PN SaveYourself
-with a type of
-.PN Local ,
-it could create a temporary file that included the
-current contents of the file, the location of the cursor, and
-other aspects of the current editing session.
-It would then update its
-.PN Restart\%Command
-property with enough information to find the temporary file,
-and its
-.PN Discard\%Command
-with enough information to remove it.
-.LP
-If a word processor was sent a
-.PN SaveYourself
-with a type of
-.PN Global ,
-it would simply save the currently edited file.
-.LP
-If a word processor was sent a
-.PN SaveYourself
-with a type of
-.PN Both ,
-it would first save the currently edited file. It would then create a
-temporary file with information such as the current position of the cursor
-and what file is being edited.
-It would then update its
-.PN Restart\%Command
-property with enough information to find the temporary file,
-and its
-.PN Discard\%Command
-with enough information to remove it.
-.LP
-Once the SM has send
-.PN SaveYourself
-to a client, it can't send another
-.PN SaveYourself
-to that client until the client either
-responds with a
-.PN SaveYourselfDone
-or the SM sends a
-.PN ShutdownCancelled .
-.NE
-.NT "Advice to Implementors"
-If the client stores local any state in a file or similar
-\*Qexternal\*U storage, it must create a distinct
-copy in response to each
-.PN SaveYourself
-message.
-It \fImust not\fP simply refer to a previous copy, because
-the SM may discard that previous saved state using a
-.PN DiscardCommand
-without knowing that it is needed for the new checkpoint.
-.NE
-.LP
-The shutdown field specifies whether the system is being shut down.
-.NT Rationale
-The interaction
-may be different depending on whether or not shutdown is set.
-.NE
-The client must save and then must prevent interaction
-until it receives a
-.PN SaveComplete ,
-.PN Die ,
-or a
-.PN Shutdown\%Cancelled ,
-because anything the user does after the save will be lost.
-.LP
-The fast field specifies whether or not the client should save its state as quickly as
-possible. For example, if the SM knows that power is about to fail, it
-should set the fast field to
-.PN True .
-.LP
-.sM
-.PN SaveYourselfPhase2
-[Client \(<- SM]
-.RS
-.LP
-.LP
-Valid Responses:
-.PN SetProperties ,
-.PN DeleteProperties ,
-.PN GetProperties ,
-.PN SaveYourselfDone ,
-.PN InteractRequest
-.RE
-.eM
-.LP
-The SM sends this message to a client that has previously sent a
-.PN SaveYourselfPhase2Request
-message.
-This message informs the client that all other clients are in a fixed
-state and this client can save state that is associated with other clients.
-.NT "Rationale"
-Clients that manager other clients (window managers, workspace managers, etc)
-need to know when all clients they are managing are idle, so that the manager
-can save state related to each of the clients without being concerned with
-that state changing.
-.NE
-The client writes a state file, if necessary, and, if necessary, uses
-.PN SetProperties
-to inform the SM of
-how to restart it and how to discard the saved state. During
-this process it can request
-permission to interact with the user by sending an
-.PN InteractRequest
-message.
-This should only be done if an error occurs that requires user interaction
-to resolve.
-After the state has been saved, or
-if it cannot be successfully saved, and the properties
-are appropriately set, the client sends a
-.PN SaveYourselfDone
-message.
-.LP
-.LP
-.sM
-.PN SaveYourselfRequest
-[Client \(-> SM]
-.RS
-.LP
-\fItype\fP\^: SAVE_TYPE
-.br
-\fIshutdown\fP\^: BOOL
-.br
-\fIinteract-style\fP\^: INTERACT_STYLE
-.br
-\fIfast\fP\^: BOOL
-.br
-\fIglobal\fP\^: BOOL
-.LP
-Valid Responses:
-.PN SaveYourself
-.RE
-.eM
-.LP
-An application sends this to the SM to request a checkpoint.
-When the SM receives this request it may generate a
-.PN SaveYourself
-message in response and it may leave the fields intact.
-.NT Example
-A vendor of a UPS (Uninterruptible Power Supply) might include an
-SM client that would monitor the status of the UPS and generate
-a fast shutdown if the power is about to be lost.
-.NE
-.LP
-If global is set to
-.PN True ,
-then the resulting
-.PN SaveYourself
-should be
-sent to all applications. If global is set to
-.PN False ,
-then the resulting
-.PN SaveYourself
-should be sent to the application that sent the
-.PN Save\%Yourself\%Request .
-.LP
-.sM
-.PN InteractRequest
-[Client \(-> SM]
-.RS
-.LP
-\fIdialog-type\fP\^: DIALOG_TYPE
-.LP
-Valid Responses:
-.PN Interact ,
-.PN ShutdownCancelled
-.LP
-Possible Errors:
-.PN BadState
-.Pn ( CanContinue )
-.RE
-.eM
-.LP
-During a checkpoint or session-save operation,
-only one client at a time might be granted the privilege of interacting with
-the user. The
-.PN InteractRequest
-message causes the SM to emit an
-.PN Interact
-message at some later time if the shutdown is not cancelled
-by another client first.
-.LP
-The dialog-type field specifies either
-.PN Errors ,
-indicating that the
-client wants to start an error dialog or
-.PN Normal ,
-meaning the client
-wishes to start a non-error dialog.
-.LP
-.sM
-.PN Interact
-[Client \(<- SM]
-.RS
-.LP
-Valid Responses:
-.PN InteractDone
-.LP
-.RE
-.eM
-.LP
-This message grants the client the privilege of interacting with the
-user. When the client is done interacting with the user it must
-send an
-.PN InteractDone
-message to the SM unless a shutdown cancel is received.
-.NT "Advice to Implementors"
-If a client receives a ShutdownCancelled after receiving an
-.PN Interact
-message, but before sending a
-.PN InteractDone ,
-the client should abort the interaction and send a
-.PN SaveYourselfDone .
-.NE
-.LP
-.sM
-.PN InteractDone
-[Client \(-> SM]
-.RS
-.LP
-\fIcancel-shutdown\fP\^: BOOL
-.br
-.LP
-Valid Responses:
-.PN ShutdownCancelled
-.LP
-.RE
-.eM
-.LP
-This message is used by a client to notify the SM that it is done interacting.
-.LP
-Setting the cancel-shutdown field to
-.PN True
-indicates that
-the user has requested that the entire shutdown be cancelled.
-Cancel-shutdown may only be
-.PN True
-if the corresponding
-.PN SaveYourself
-message specified
-.PN True
-for the shutdown field and
-.PN Any
-or
-.PN Errors
-for the interact-style field. Otherwise, cancel-shutdown must be
-.PN False .
-.LP
-.sM
-.PN SaveYourselfDone
-[Client \(-> SM]
-.RS
-.LP
-\fIsuccess\fP\^: BOOL
-.LP
-Valid Responses:
-.PN SaveComplete ,
-.PN Die ,
-.PN ShutdownCancelled
-.LP
-.RE
-.eM
-.LP
-This message is sent by a client to indicate that all of the properties
-representing its state have been updated.
-After sending
-.PN SaveYourselfDone
-the client must
-wait for a
-.PN SaveComplete ,
-.PN ShutdownCancelled ,
-or
-.PN Die
-message before changing its state.
-If the
-.PN SaveYourself
-operation was successful, then the client
-should set the success field to
-.PN True ;
-otherwise the client should set
-it to
-.PN False .
-.NT Example
-If a client tries to save its state and runs out of disk space,
-it should return
-.PN False
-in the success
-field of the
-.PN SaveYourselfDone
-message.
-.NE
-.LP
-.sM
-.PN SaveYourselfPhase2Request
-[Client \(-> SM]
-.RS
-.LP
-Valid Responses:
-.PN ShutdownCancelled ,
-.PN SaveYourselfPhase2
-.LP
-.RE
-.eM
-.LP
-This message is sent by a client to indicate that it needs to be informed
-when all the other clients are quiescent, so it can continue its state.
-.LP
-.sM
-.PN Die
-[Client \(<- SM]
-.RS
-.LP
-Valid Responses:
-.PN ConnectionClosed
-.RE
-.eM
-.LP
-When the SM wants a client to die it sends a
-.PN Die
-message. Before the client dies it responds
-by sending a
-.PN ConnectionClosed
-message and may then close
-its connection to the SM at any time.
-.LP
-.sM
-.PN SaveComplete
-[Client \(<- SM]
-.RS
-.LP
-Valid Responses:
-.RE
-.eM
-.LP
-When the SM is done with a checkpoint, it will send each of the clients a
-.PN SaveComplete
-message.
-The client is then free to change its state.
-.LP
-.sM
-.PN ShutdownCancelled
-[Client \(<- SM]
-.RS
-.RE
-.eM
-.LP
-The shutdown currently in process has been aborted. The client can now
-continue as if the shutdown had never happened.
-If the client has not sent
-.PN SaveYourselfDone
-yet, the client can either
-abort the save and send
-.PN SaveYourselfDone
-with the success field
-set to
-.PN False ,
-or it can continue with the save and send a
-.PN SaveYourselfDone
-with the success field set to reflect the outcome
-of the save.
-.LP
-.sM
-.PN ConnectionClosed
-[Client \(-> SM]
-.RS
-.LP
-\fIreason\fP\^: LISTofARRAY8
-.RE
-.eM
-.LP
-Specifies that the client has decided to terminate.
-It should be immediately followed by closing the connection.
-.LP
-The reason field specifies why the client is resigning from the session. It
-is encoded as an array of Compound Text strings. If the resignation is
-expected by the user, there will typically be zero ARRAY8s here. But if the
-client encountered an unexpected fatal error, the error message (which might
-otherwise be printed on stderr on a POSIX system) should be forwarded to the
-SM here, one ARRAY8 per line of the message. It is the responsibility of
-the SM to display this reason to the user.
-.LP
-After sending this message, the client must not send any additional XSMP
-messages to the SM.
-.NT "Advice to Implementors"
-If additional messages are received, they should be discarded.
-.NE
-.NT Rationale
-The reason for sending the
-.PN ConnectionClosed
-message before
-actually closing the connections is that some transport protocols will
-not provide immediate notification of connection closure.
-.NE
-.LP
-.sM
-.PN SetProperties
-[Client \(-> SM]
-.RS
-.LP
-\fIproperties\fP: LISTofPROPERTY
-.RE
-.eM
-.LP
-Sets the specified properties to the specified values.
-Existing properties not specified in the
-.PN Set\%Properties
-message are unaffected.
-Some properties have predefined semantics.
-See section 11, \*QPredefined Properties.\*U
-.LP
-The protocol specification recommends that property names used
-for properties not defined by the standard should begin with an underscore.
-To prevent conflicts among organizations,
-additional prefixes should be chosen
-(for example, _KPC_FAST_SAVE_OPTION).
-The organizational prefixes should be registered with the X Registry.
-The XSMP reserves all property names not beginning with an underscore for
-future use.
-.LP
-.sM
-.PN DeleteProperties
-[Client \(-> SM]
-.RS
-.LP
-.br
-\fIproperty-names\fP: LISTofARRAY8
-.RE
-.eM
-.LP
-Removes the named properties.
-.LP
-.sM
-.PN GetProperties
-[Client \(-> SM]
-.RS
-.LP
-Valid Responses:
-.PN GetPropertiesReply
-.RE
-.eM
-.LP
-Requests that the SM respond with the
-values of all the properties for this client.
-.LP
-.sM
-.PN GetPropertiesReply
-[Client \(<- SM]
-.RS
-.LP
-\fIvalues\fP\^: LISTofPROPERTY
-.RE
-.eM
-.LP
-This message is sent in reply to a
-.PN GetProperties
-message and includes
-the values of all the properties.
-.nH 1 "Errors"
-.LP
-When the receiver of a message detects an error condition,
-the receiver sends
-an ICE error message to the sender.
-There are only two types of errors that are used by the XSMP:
-.PN BadValue
-and
-.PN BadState .
-These are both defined in the ICE protocol.
-.LP
-Any message received out-of-sequence
-will generate a
-.PN BadState
-error message.
-.nH 1 "State Diagrams"
-.LP
-These state diagrams are designed to cover all actions of both
-the client and the SM.
-.nH 2 "Client State Diagram"
-.LP
-.nf
-.DS L 0
-\fIstart:\fP
- ICE protocol setup complete \(-> \fCregister\fP
-.DE
-.sp
-.DS L 0
-\fIregister:\fP
- send \fBRegisterClient\fP \(-> \fCcollect-id\fP
-.DE
-.sp
-.DS L 0
-\fIcollect-id:\fP
- receive \fBRegisterClientReply\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIshutdown-cancelled:\fP
- send \fBSaveYourselfDone\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIidle:\fP [Undoes any freeze of interaction with user.]
- receive \fBDie\fP \(-> \fCdie\fP
- receive \fBSaveYourself\fP \(-> \fCfreeze-interaction\fP
- send \fBGetProperties\fP \(-> \fCidle\fP
- receive \fBGetPropertiesReply\fP \(-> \fCidle\fP
- send \fBSetProperties\fP \(-> \fCidle\fP
- send \fBDeleteProperties\fP \(-> \fCidle\fP
- send \fBConnectionClosed\fP \(-> \fCconnection-closed\fP
- send \fBSaveYourselfRequest\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIdie:\fP
- send \fBConnectionClosed\fP \(-> \fCconnection-closed\fP
-.DE
-.sp
-.DS L 0
-\fIfreeze-interaction:\fP
- freeze interaction with user \(-> \fCsave-yourself\fP
-.DE
-.sp
-.DS L 0
-\fIsave-yourself:\fP
- receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP
- send \fBSetProperties\fP \(-> \fCsave-yourself\fP
- send \fBDeleteProperties\fP \(-> \fCsave-yourself\fP
- send \fBGetProperties\fP \(-> \fCsave-yourself\fP
- receive \fBGetPropertiesReply\fP \(-> \fCsave-yourself\fP
- send \fBInteractRequest\fP \(-> \fCinteract-request\fP
- send \fBSaveYourselfPhase2Request\fP -> waiting-for-phase2
- if shutdown mode:
- send \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP
- otherwise:
- send \fBSaveYourselfDone\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIwaiting-for-phase2:\fP
- receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP
- receive \fBSaveYourselfPhase2\fP \(-> \fCphase2\fP
-.DE
-.sp
-.DS L 0
-\fIphase2:\fP
- receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP
- send \fBSetProperties\fP \(-> \fCsave-yourself\fP
- send \fBDeleteProperties\fP \(-> \fCsave-yourself\fP
- send \fBGetProperties\fP \(-> \fCsave-yourself\fP
- receive \fBGetPropertiesReply\fP \(-> \fCsave-yourself\fP
- send \fBInteractRequest\fP \(-> \fCinteract-request\fP (errors only)
- if shutdown mode:
- send \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP
- otherwise:
- send \fBSaveYourselfDone\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIinteract-request:\fP
- receive \fBInteract\fP \(-> \fCinteract\fP
- receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP
-.DE
-.sp
-.DS L 0
-\fIinteract:\fP
- send \fBInteractDone\fP \(-> \fCsave-yourself\fP
- receive \fBShutdownCancelled\fP \(-> \fCshutdown-cancelled\fP
-.DE
-.sp
-.DS L 0
-\fIsave-yourself-done:\fP (changing state is forbidden)
- receive \fBSaveComplete\fP \(-> \fCidle\fP
- receive \fBDie\fP \(-> \fCdie\fP
- receive \fBShutdownCancelled\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIconnection-closed:\fP
- client stops participating in session
-.DE
-.ne 1i
-.nH 2 "Session Manager State Diagram"
-.LP
-.nf
-.DS L 0
-\fIstart:\fP
- receive \fBProtocolSetup\fP \(-> \fCprotocol-setup\fP
-.DE
-.sp
-.DS L 0
-\fIprotocol-setup:\fP
- send \fBProtocolSetupReply\fP \(-> \fCregister\fP
-.DE
-.sp
-.DS L 0
-\fIregister:\fP
- receive \fBRegisterClient\fP \(-> \fCacknowledge-register\fP
-.DE
-.sp
-.DS L 0
-\fIacknowledge-register:\fP
- send \fBRegisterClientReply\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIidle:\fP
- receive \fBSetProperties\fP \(-> \fCidle\fP
- receive \fBDeleteProperties\fP \(-> \fCidle\fP
- receive \fBConnectionClosed\fP \(-> \fCstart\fP
- receive \fBGetProperties\fP \(-> \fCget-properties\fP
- receive \fBSaveYourselfRequest\fP \(-> \fCsave-yourself\fP
- send \fBSaveYourself\fP \(-> \fCsaving-yourself\fP
-.DE
-.sp
-.DS L 0
-\fIsave-yourself:\fP
- send \fBSaveYourself\fP \(-> \fCsaving-yourself\fP
-.DE
-.sp
-.DS L 0
-\fIget-properties:\fP
- send \fBGetPropertiesReply\fP \(-> \fCidle\fP
-.DE
-.sp
-.DS L 0
-\fIsaving-get-properties:\fP
- send \fBGetPropertiesReply\fP \(-> \fCsaving-yourself\fP
-.DE
-.sp
-.DS L 0
-\fIsaving-yourself:\fP
- receive \fBInteractRequest\fP \(-> \fCsaving-yourself\fP
- send \fBInteract\fP \(-> \fCsaving-yourself\fP
- send \fBShutdownCancelled\fP -> \fCidle\fP
- receive \fBInteractDone\fP \(-> \fCsaving-yourself\fP
- receive \fBSetProperties\fP \(-> \fCsaving-yourself\fP
- receive \fBDeleteProperties\fP \(-> \fCsaving-yourself\fP
- receive \fBGetProperties\fP \(-> \fCsaving-get-properties\fP
- receive \fBSaveYourselfPhase2Request\fP \(-> \fCstart-phase2\fP
- receive \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP
-.DE
-.sp
-.DS L 0
-\fIstart-phase2:\fP
- If all clients have sent either \fBSaveYourselfPhase2Request\fP or \fBSaveYourselfDone\fP:
- send \fBSaveYourselfPhase2\fP \(-> \fCphase2\fP
- else
- \(-> \fCsaving-yourself\fP
-.DE
-.sp
-.DS L 0
-\fIphase2:\fP
- receive \fBInteractRequest\fP \(-> \fCsaving-yourself\fP
- send \fBInteract\fP \(-> \fCsaving-yourself\fP
- send \fBShutdownCancelled\fP -> \fCidle\fP
- receive \fBInteractDone\fP \(-> \fCsaving-yourself\fP
- receive \fBSetProperties\fP \(-> \fCsaving-yourself\fP
- receive \fBDeleteProperties\fP \(-> \fCsaving-yourself\fP
- receive \fBGetProperties\fP \(-> \fCsaving-get-properties\fP
- receive \fBSaveYourselfDone\fP \(-> \fCsave-yourself-done\fP
-.DE
-.sp
-.DS L 0
-\fIsave-yourself-done:\fP
- If all clients are saved:
- If shutting down:
- send \fBDie\fP \(-> \fCdie\fP
- otherwise
- send \fBSaveComplete\fP \(-> \fCidle\fP
-.sp
- If some clients are not saved:
- \(-> \fCsaving-yourself\fP
-.DE
-.sp
-.DS L 0
-\fIdie:\fP
- SM stops accepting connections
-.DE
-.nH 1 "Protocol Encoding"
-.nH 2 "Types"
-.LP
-.nf
-.ta .2i .5i 2.0i
-BOOL
- 0 False
- 1 True
-.sp
-INTERACT_STYLE
- 0 None
- 1 Errors
- 2 Any
-.sp
-DIALOG_TYPE
- 0 Error
- 1 Normal
-.sp
-SAVE_TYPE
- 0 Global
- 1 Local
- 2 Both
-.sp
-.ne .75i
-ARRAY8
- 4 CARD32 length
- n LISTofCARD8 the array
- p p = pad (4 + n, 8)
-.sp
-LISTofARRAY8
- 4 CARD32 count
- 4 unused
- a ARRAY8 first array
- b ARRAY8 second array
- \&.
- \&.
- \&.
- q ARRAY8 last array
-.sp
-PROPERTY
- a ARRAY8 name
- b ARRAY8 type (XPCS encoded in Latin-1, case sensitive)
- c LISTofARRAY8 values
-.sp
-LISTofPROPERTY
- 4 CARD32 count
- 4 unused
- a PROPERTY first property
- b PROPERTY second property
- \&.
- \&.
- \&.
- q PROPERTY last property
-.nH 2 "Messages"
-.LP
-XSMP is a sub-protocol of ICE. The major opcode is assigned at run-time
-by ICE and is represented here by `?'.
-.LP
-To start the XSMP protocol, the client sends the server an ICE
-.PN ProtocolSetup
-message.
-The protocol-name field should be specified as \*QXSMP\*U, the major
-version of the protocol is 1, the minor version is 0.
-These values may change if the protocol is revised. The minor version
-number will be incremented if the change is compatible, otherwise the major
-version number will be incremented.
-.LP
-In
-.PN ProtocolReply
-message sent by the session manager,
-the XSMP protocol defines the vendor parameter as product identification
-of the session manager, and defines the release parameter as
-the software release identification of the session manager.
-The session manager should supply this information in the
-ICE
-.PN ProtocolReply
-message.
-.LP
-.nf
-.ta .2i .5i 2.0i
-.ne 3
-.PN RegisterClient
- 1 ? XSMP
- 1 1 opcode
- 2 unused
- 4 a/8 length of remaining data in 8-byte units
- a ARRAY8 previous-ID
-.ne 6
-.sp
-.PN RegisterClientReply
- 1 ? XSMP
- 1 2 opcode
- 2 unused
- 4 a/8 length of remaining data in 8-byte units
- a ARRAY8 client-ID
-.ne 4
-.sp
-.PN SaveYourself
- 1 ? XSMP
- 1 3 opcode
- 2 unused
- 4 1 length of remaining data in 8-byte units
- 1 SAVE_TYPE type
- 1 BOOL shutdown
- 1 INTERACT_STYLE interact-style
- 1 BOOL fast
- 4 unused
-.ne 4
-.sp
-.PN SaveYourselfRequest
- 1 ? XSMP
- 1 4 opcode
- 2 unused
- 4 1 length of remaining data in 8-byte units
- 1 SAVE_TYPE type
- 1 BOOL shutdown
- 1 INTERACT_STYLE interact-style
- 1 BOOL fast
- 1 BOOL global
- 3 unused
-.ne 4
-.sp
-.PN InteractRequest
- 1 ? XSMP
- 1 5 opcode
- 1 DIALOG_TYPE dialog type
- 1 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN Interact
- 1 ? XSMP
- 1 6 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN InteractDone
- 1 ? XSMP
- 1 7 opcode
- 1 BOOL cancel-shutdown
- 1 unused
- 4 0 length of remaining data in 8-byte units
-.ne 6
-.sp
-.PN SaveYourselfDone
- 1 ? XSMP
- 1 8 opcode
- 1 BOOL success
- 1 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN Die
- 1 ? XSMP
- 1 9 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN ShutdownCancelled
- 1 ? XSMP
- 1 10 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN ConnectionClosed
- 1 ? XSMP
- 1 11 opcode
- 2 unused
- 4 a/8 length of remaining data in 8-byte units
- a LISTofARRAY8 reason
-.ne 4
-.sp
-.PN SetProperties
- 1 ? XSMP
- 1 12 opcode
- 2 unused
- 4 a/8 length of remaining data in 8-byte units
- a LISTofPROPERTY properties
-.ne 4
-.sp
-.PN DeleteProperties
- 1 ? XSMP
- 1 13 opcode
- 2 unused
- 4 a/8 length of remaining data in 8-byte units
- a LISTofARRAY8 properties
-.ne 4
-.sp
-.PN GetProperties
- 1 ? XSMP
- 1 14 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN GetPropertiesReply
- 1 ? XSMP
- 1 15 opcode
- 2 unused
- 4 a/8 length of remaining data in 8-byte units
- a LISTofPROPERTY properties
-.ne 4
-.sp
-.PN SaveYourselfPhase2Request
- 1 ? XSMP
- 1 16 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-.ne 4
-.sp
-.PN SaveYourselfPhase2
- 1 ? XSMP
- 1 17 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-
-.sp
-.PN SaveComplete
- 1 ? XSMP
- 1 18 opcode
- 2 unused
- 4 0 length of remaining data in 8-byte units
-
-.nH 1 "Predefined Properties"
-.LP
-All property values are stored in a LISTofARRAY8. If the type of the
-property is CARD8, the value is stored as a LISTofARRAY8 with one ARRAY8
-that is one byte long. That single byte contains the CARD8. If the type of
-the property is ARRAY8, the value is stored in the first element of a single
-element LISTofARRAY8.
-.LP
-The required properties must be set each time a client
-connects with the SM. The properties must be set after
-the client sends
-.PN RegisterClient
-and before the client sends
-.PN SaveYourselfDone .
-Otherwise, the behavior of
-the session manager is not defined.
-.LP
-Clients may set, get, and delete nonstandard properties.
-The lifetime of stored properties does not extend into
-subsequent sessions.
-.br
-.ne 6
-.TS H
-l l l c .
-_
-.sp 6p
-.B
-Name Type Posix Type Required?
-.R
-.sp 6p
-_
-.sp 6p
-.TH
-CloneCommand OS-specific LISTofARRAY8 Yes
-CurrentDirectory OS-specific ARRAY8 No
-DiscardCommand OS-specific LISTofARRAY8 No*
-Environment OS-specific LISTofARRAY8 No
-ProcessID OS-specific ARRAY8 No
-Program OS-specific ARRAY8 Yes
-RestartCommand OS-specific LISTofARRAY8 Yes
-ResignCommand OS-specific LISTofARRAY8 No
-RestartStyleHint CARD8 CARD8 No
-ShutdownCommand OS-specific LISTofARRAY8 No
-UserID ARRAY8 ARRAY8 Yes
-.sp 6p
-_
-.TE
-.LP
-* Required if any state is stored in an external repository (e.g., state file).
-.IP CloneCommand 3
-This is like the
-.PN RestartCommand
-except it restarts a copy of the
-application. The only difference is that the application doesn't
-supply its client id at register time. On POSIX systems the type
-should be a LISTofARRAY8.
-.IP CurrentDirectory 3
-On POSIX-based systems specifies the value of the current directory that
-needs to be set up prior to starting the program and should be of type
-ARRAY8.
-.IP DiscardCommand 3
-The discard command contains a command that when delivered to the host that
-the client is running on (determined from the connection), will
-cause it to discard any information about the current state. If this command
-is not specified, the SM will assume that all of the client's state is encoded
-in the
-.PN Restart\%Command .
-On POSIX systems the type should be LISTofARRAY8.
-.IP Environment 3
-On POSIX based systems, this will be of type LISTofARRAY8 where
-the ARRAY8s alternate between environment variable name and environment
-variable value.
-.IP ProcessID 3
-This specifies an OS-specific identifier for the process. On POSIX
-systems this should of type ARRAY8 and contain the return value
-of getpid() turned into a Latin-1 (decimal) string.
-.IP Program 3
-The name of the program that is running. On POSIX systems this
-should be the
-first parameter passed to execve and should be of type ARRAY8.
-.IP RestartCommand 3
-The restart command contains a command that when delivered to the
-host that the client is running on (determined from the connection),
-will cause the client to restart in
-its current state. On POSIX-based systems this is of type LISTofARRAY8
-and each of the elements in the array represents an element in
-the argv array.
-This restart command should ensure that the client restarts with the specified
-client-ID.
-.IP ResignCommand 3
-A client that sets the
-.PN RestartStyleHint
-to
-.PN RestartAnyway
-uses this property to specify a command
-that undoes the effect of the client and removes
-any saved state.
-.NT Example
-A user runs xmodmap. xmodmap registers with the SM, sets
-.PN Restart\%Style\%Hint
-to
-.PN Restart\%Anyway ,
-and then terminates. In order to allow the SM (at the
-user's request) to undo this, xmodmap would register a
-.PN Resign\%Command
-that undoes the effects of the xmodmap.
-.NE
-.IP RestartStyleHint 3
-.RS
-.LP
-If the RestartStyleHint property is present, it will contain the
-style of restarting the client prefers. If this flag isn't specified,
-.PN RestartIfRunning
-is assumed.
-The possible values are as follows:
-.br
-.ne 6
-.TS H
-l n.
-_
-.sp 6p
-.B
-Name Value
-.R
-.sp 6p
-_
-.sp 6p
-.TH
-RestartIfRunning 0
-RestartAnyway 1
-RestartImmediately 2
-RestartNever 3
-.sp 6p
-_
-.TE
-.LP
-The
-.PN RestartIfRunning
-style is used in the usual case. The client should
-be restarted in the next session if it is connected to the
-session manager at the end of the current session.
-.LP
-The
-.PN RestartAnyway
-style is used to tell the SM that the application
-should be restarted in the next session even if it exits before the
-current session is terminated.
-It should be noted that this is only a hint and the SM
-will follow the policies specified by its users in determining what applications
-to restart.
-.LP
-.NT Rationale
-This can be specified by a client which supports (as MS-Windows clients
-do) a means for the user to indicate while exiting that
-restarting is desired. It can also be used for clients that
-spawn other clients and then go away, but which want to be
-restarted.
-.NE
-.LP
-A client that uses
-.PN RestartAnyway
-should also set the
-.PN ResignCommand
-and
-.PN ShutdownCommand
-properties to commands that undo the state of the client
-after it exits.
-.LP
-The
-.PN RestartImmediately
-style is like
-.PN RestartAnyway ,
-but in addition, the
-client is meant to run continuously. If the client exits, the
-SM should try to restart it in the current session.
-.NT "Advice to Implementors"
-It would be wise to sanity-check the frequency which which
-.PN RestartImmediately
-clients are restarted, to avoid a sick
-client being restarted continuously.
-.NE
-The
-.PN RestartNever
-style specifies that the client
-does not wish to be restarted in the next session.
-.NT "Advice To Implementors"
-This should be used rarely, if at all. It will cause the client
-to be silently left out of sessions when they are restarted and
-will probably be confusing to users.
-.NE
-.RE
-.IP ShutdownCommand
-This command is executed at shutdown time to clean up after a client that
-is no longer running but retained its state by setting
-.PN RestartStyleHint
-to
-.PN RestartAnyway .
-The command must not remove any saved state as the client is still part of
-the session.
-.NT Example
-A client is run at start up time that turns on a camera. This client then
-exits. At session shutdown, the user wants the camera turned off. This client
-would set the
-.PN Restart\%Style\%Hint
-to
-.PN Restart\%Anyway
-and would register a
-.PN Shutdown\%Command
-that would turn off the camera.
-.NE
-.IP UserID 3
-Specifies the user's ID. On POSIX-based systems this
-will contain the the user's name (the pw_name field of struct passwd).
-.\" Finish up.
-.YZ 3