Blame doc/xsmp.xml

Packit Service 752078
Packit Service 752078
Packit Service 752078
                   "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
Packit Service 752078
[
Packit Service 752078
 %defs;
Packit Service 752078
]>
Packit Service 752078
Packit Service 752078
Packit Service 752078
Packit Service 752078
<book id="xsmp">
Packit Service 752078
Packit Service 752078
<bookinfo>
Packit Service 752078
   <title>X Session Management Protocol</title>
Packit Service 752078
   <subtitle>X Consortium Standard</subtitle>
Packit Service 752078
   <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo>
Packit Service 752078
   <releaseinfo>Version 1.0</releaseinfo>
Packit Service 752078
   <authorgroup>
Packit Service 752078
      <author>
Packit Service 752078
         <firstname>Mike</firstname><surname>Wexler</surname>
Packit Service 752078
         <affiliation><orgname>Kubota Pacific Computer, Inc</orgname></affiliation>
Packit Service 752078
      </author>
Packit Service 752078
   </authorgroup>
Packit Service 752078
   <copyright>
Packit Service 752078
     <year>1992</year><year>1993</year><year>1994</year><year>2002</year>
Packit Service 752078
     <holder>The Open Group</holder>
Packit Service 752078
   </copyright>
Packit Service 752078
Packit Service 752078
   <legalnotice>
Packit Service 752078
     <para>
Packit Service 752078
Permission is hereby granted, free of charge, to any person
Packit Service 752078
obtaining a copy of this software and associated documentation files
Packit Service 752078
(the “Software”), to deal in the Software without
Packit Service 752078
restriction, including without limitation the rights to use, copy,
Packit Service 752078
modify, merge, publish, distribute, sublicense, and/or sell copies of
Packit Service 752078
the Software, and to permit persons to whom the Software is furnished
Packit Service 752078
to do so, subject to the following conditions:
Packit Service 752078
     </para>
Packit Service 752078
Packit Service 752078
     <para>
Packit Service 752078
The above copyright notice and this permission notice shall be
Packit Service 752078
included in all copies or substantial portions of the Software.
Packit Service 752078
     </para>
Packit Service 752078
Packit Service 752078
     <para>
Packit Service 752078
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY
Packit Service 752078
OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
Packit Service 752078
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Packit Service 752078
NONINFRINGEMENT.  IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY
Packit Service 752078
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
Packit Service 752078
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Packit Service 752078
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit Service 752078
     </para>
Packit Service 752078
Packit Service 752078
     <para>
Packit Service 752078
Except as contained in this notice, the name of the X Consortium
Packit Service 752078
shall not be used in advertising or otherwise to promote the sale, use
Packit Service 752078
or other dealings in this Software without prior written authorization
Packit Service 752078
from the X Consortium.
Packit Service 752078
     </para>
Packit Service 752078
Packit Service 752078
     <para>
Packit Service 752078
X Window System is a trademark of The Open Group.
Packit Service 752078
     </para>
Packit Service 752078
   </legalnotice>
Packit Service 752078
Packit Service 752078
   <abstract>
Packit Service 752078
     <para>
Packit Service 752078
This document specifies a protocol that facilitates the management of
Packit Service 752078
groups of client applications by a session manager.  The session
Packit Service 752078
manager can cause clients to save their state, to shut down, and to be
Packit Service 752078
restarted into a previously saved state.  This protocol is layered on
Packit Service 752078
top of the X.Org ICE protocol.
Packit Service 752078
     </para>
Packit Service 752078
   </abstract>
Packit Service 752078
Packit Service 752078
</bookinfo>
Packit Service 752078
Packit Service 752078
<chapter id='Acknowledgments'>
Packit Service 752078
  <title>Acknowledgments</title>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
First I would like to thank the entire ICCCM and Intrinsics
Packit Service 752078
working groups for the comments and suggestions. I would like to make special
Packit Service 752078
thanks to the following people (in alphabetical order), Jordan Brown,
Packit Service 752078
Ellis Cohen, Donna Converse, Vania Joloboff, Stuart Marks, Ralph Mor
Packit Service 752078
and Bob Scheifler.
Packit Service 752078
  </para>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Definitions_and_Goals'>
Packit Service 752078
  <title>Definitions and Goals</title>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The purpose of the X Session Management Protocol (XSMP) is
Packit Service 752078
to provide a uniform mechanism for users to save and restore their sessions.
Packit Service 752078
A <firstterm>session</firstterm> is a group of clients, each
Packit Service 752078
of which has a particular state.  The session is controlled by a
Packit Service 752078
network service called the <firstterm>session manager</firstterm>.
Packit Service 752078
The session manager issues commands to its
Packit Service 752078
clients on behalf of the user.  These commands may cause clients to
Packit Service 752078
save their state or to terminate.  It is expected that the client will
Packit Service 752078
save its state in such a way that the client can be restarted at a
Packit Service 752078
later time and resume its operation as if it had never been
Packit Service 752078
terminated.  A client's state might include information about the file
Packit Service 752078
currently being edited, the current position of the insertion point
Packit Service 752078
within the file, or the start of an uncommitted transaction.  The
Packit Service 752078
means by which clients are restarted is unspecified by this
Packit Service 752078
protocol.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
For purposes of this protocol, a <firstterm>client</firstterm>
Packit Service 752078
of the session manager is defined as a connection to the session
Packit Service 752078
manager.  A client is typically, though not necessarily, a process
Packit Service 752078
running an application program connected to an X Window System
Packit Service 752078
display.  However, a client may be connected to more than one X
Packit Service 752078
display or not be connected to any X displays at all.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
This protocol is layered on top of the X Consortium's ICE protocol and
Packit Service 752078
relies on the ICE protocol to handle connection management and authentication.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Overview_of_the_Protocol'>
Packit Service 752078
  <title>Overview of the Protocol</title>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Clients use XSMP to register themselves with the session manager (SM).
Packit Service 752078
When a client starts up, it should connect to the SM.  The client
Packit Service 752078
should remain connected for as long as it runs.  A client may resign
Packit Service 752078
from the session by issuing the proper protocol messages before
Packit Service 752078
disconnecting.  Termination of the connection without notice will be
Packit Service 752078
taken as an indication that the client died unexpectedly.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Clients are expected to save their state in such a way as to allow
Packit Service 752078
multiple instantiations of themselves to be managed independently.  A
Packit Service 752078
unique value called a <firstterm>client-ID</firstterm> is
Packit Service 752078
provided by the protocol for the purpose of disambiguating multiple
Packit Service 752078
instantiations of clients.  Clients may use this ID, for example, as
Packit Service 752078
part of a filename in which to store the state for a particular
Packit Service 752078
instantiation.  The client-ID should be saved as part of the command
Packit Service 752078
used to restart this client
Packit Service 752078
(the <property>RestartCommand</property>) so that the client
Packit Service 752078
will retain the same ID after it is restarted.  Certain small pieces
Packit Service 752078
of state might also be stored in the RestartCommand.  For example, an
Packit Service 752078
X11 client might place a '-twoWindow' option in its RestartCommand to
Packit Service 752078
indicate that it should start up in two window mode when it is
Packit Service 752078
restarted.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The client finds the network address of the SM in a system-dependent
Packit Service 752078
way.  On POSIX systems an environment
Packit Service 752078
variable called <envar>SESSION_MANAGER</envar>
Packit Service 752078
will contain a list of network IDs.  Each id will contain the
Packit Service 752078
transport name followed by a slash and the (transport-specific)
Packit Service 752078
address.  A TCP/IP address would look like this:
Packit Service 752078
    <informalexample><para>
Packit Service 752078
      <literal>tcp/</literal><replaceable>hostname</replaceable><literal>:</literal><replaceable>portnumber</replaceable>
Packit Service 752078
    </para></informalexample>
Packit Service 752078
where the hostname is a fully qualified domain name.
Packit Service 752078
A Unix Domain address looks like this:
Packit Service 752078
    <informalexample><para>
Packit Service 752078
	<literal>local/</literal><replaceable>hostname</replaceable><literal>:</literal><replaceable>path</replaceable>
Packit Service 752078
    </para></informalexample>
Packit Service 752078
A DECnet address would look like this:
Packit Service 752078
    <informalexample><para>
Packit Service 752078
	<literal>decnet/</literal><replaceable>nodename</replaceable><literal>::</literal><replaceable>objname</replaceable>
Packit Service 752078
    </para></informalexample>
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
If multiple network IDs are specified, they should be separated by commas.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <note><title>Rationale</title>
Packit Service 752078
    <para>
Packit Service 752078
There was much discussion over whether the XSMP protocol should use X
Packit Service 752078
as the transport protocol or whether it should use its own independent
Packit Service 752078
transport.  It was decided that it would use an independent protocol
Packit Service 752078
for several reasons.  First, the Session Manager should be able to
Packit Service 752078
manage programs that do not maintain an X connection.  Second, the X
Packit Service 752078
protocol is not appropriate to use as a general-purpose transport
Packit Service 752078
protocol.  Third, a session might span multiple displays.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
The protocol is connection based, because there is no other way for
Packit Service 752078
the SM to determine reliably when clients terminate.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
It should be noted that this protocol introduces another single point
Packit Service 752078
of failure into the system.  Although it is possible for clients to
Packit Service 752078
continue running after the SM has exited, this will probably not be
Packit Service 752078
the case in normal practice.  Normally the program that starts the SM
Packit Service 752078
will consider the session to be terminated when the SM exits (either
Packit Service 752078
normally or abnormally).
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
To get around this would require some sort of rendezvous server that
Packit Service 752078
would also introduce a single point of failure.  In the absence of a
Packit Service 752078
generally available rendezvous server, XSMP is kept simple in the
Packit Service 752078
hopes of making simple reliable SMs.
Packit Service 752078
    </para>
Packit Service 752078
  </note>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Some clients may wish to manage the programs they start.  For example,
Packit Service 752078
a mail program could start a text editor for editing the text of a
Packit Service 752078
mail message.  A client that does this is a session manager itself; it
Packit Service 752078
should supply the clients it starts with the appropriate connection
Packit Service 752078
information (i.e., the <envar>SESSION_MANAGER</envar> environment variable)
Packit Service 752078
that specifies a connection to itself instead of to the top level session
Packit Service 752078
manager.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Each client has associated with it a list of properties.  A property
Packit Service 752078
set by one client is not visible to any other client.  These
Packit Service 752078
properties are used for the client to inform the SM of the client's
Packit Service 752078
current state.  When a client initially connects to the SM, there are
Packit Service 752078
no properties set.
Packit Service 752078
  </para>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Data_Types'>
Packit Service 752078
  <title>Data Types</title>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
XSMP messages contain several types of data.  Both the SM and the
Packit Service 752078
client always send messages in their native byte order.  Thus, both
Packit Service 752078
sides may need to byte-swap the messages received.  The need to do
Packit Service 752078
byte-swapping is determined at run-time by the ICE protocol.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
If an invalid value is specified for a field of any of the enumerated
Packit Service 752078
types, a <errorname>BadValue</errorname> error message must be sent by
Packit Service 752078
the receiver of the message to the sender of the message.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
<informaltable frame='topbot'>
Packit Service 752078
  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='3.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row rowsep='1'>
Packit Service 752078
        <entry>Type Name</entry>
Packit Service 752078
        <entry>Description</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry><para><constant>False</constant> or <constant>True</constant></para></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>INTERACT_STYLE</entry>
Packit Service 752078
        <entry><function>None</function> <function>Errors</function> or <function>Any</function></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>DIALOG_TYPE</entry>
Packit Service 752078
        <entry><function>Error</function> or <function>Normal</function></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>SAVE_TYPE</entry>
Packit Service 752078
        <entry><function>Global</function> <function>Local</function> or <function>Both</function></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>CARD8</entry>
Packit Service 752078
        <entry>a one-byte unsigned integer</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>CARD16</entry>
Packit Service 752078
        <entry>a two-byte unsigned integer</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>CARD32</entry>
Packit Service 752078
        <entry>a four-byte unsigned integer</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>a sequence of CARD8s</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>a sequence of ARRAY8s</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>PROPERTY</entry>
Packit Service 752078
        <entry>a property name (an ARRAY8), a type name, and a value of that type</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>LISTofPROPERTY</entry>
Packit Service 752078
        <entry>a counted collection of ­PROPERTYs.</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
</informaltable>
Packit Service 752078
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Protocol_Setup_and_Message_Format'>
Packit Service 752078
  <title>Protocol Setup and Message Format</title>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
To start the XSMP protocol, the client sends the server an
Packit Service 752078
ICE <function>ProtocolSetup</function> message.  All XSMP messages are
Packit Service 752078
in the standard ICE message format.  The message's major opcode is
Packit Service 752078
assigned to XSMP by ICE at run-time.  The different parties (client
Packit Service 752078
and SM) may be assigned different major opcodes for XSMP.  Once
Packit Service 752078
assigned, all XSMP messages issued by this party will use the same
Packit Service 752078
major opcode.  The message's minor opcode specifies which protocol
Packit Service 752078
message this message contains.
Packit Service 752078
  </para>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Client_Identification_String'>
Packit Service 752078
  <title>Client Identification String</title>
Packit Service 752078
  <para>
Packit Service 752078
A client ID is a string of XPCS characters encoded in ISO Latin 1 (ISO
Packit Service 752078
8859-1).  No null characters are allowed in this string.  The client
Packit Service 752078
ID string is used in the <function>Register­Client</function>
Packit Service 752078
and <function>Register­ClientReply</function> messages.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Client IDs consist of the pieces described below.  The ID is formed by
Packit Service 752078
concatenating the pieces in sequence, without separator characters.
Packit Service 752078
All pieces are padded on the left with '<literal>0</literal>'
Packit Service 752078
characters so as to fill the specified length.  Decimal numbers are
Packit Service 752078
encoded using the characters '<literal>0</literal>' through
Packit Service 752078
'<literal>9</literal>', and hexadecimal numbers using the characters
Packit Service 752078
'<literal>0</literal>' through '<literal>9</literal>' and
Packit Service 752078
'<literal>A</literal>' through '<literal>F</literal>'.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <itemizedlist mark='bullet'>
Packit Service 752078
     <listitem><para>
Packit Service 752078
Version.  This is currently the character '<literal>1</literal>'.
Packit Service 752078
     </para></listitem>
Packit Service 752078
     <listitem>
Packit Service 752078
       <para>Address type and address.  The address type will be one of
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
     '<literal>1</literal>'     a 4-byte IPv4 address encoded as 8 hexadecimal digits
Packit Service 752078
     '<literal>2</literal>'     a 6-byte DECNET address encoded as 12 hexadecimal digits
Packit Service 752078
     '<literal>6</literal>'     a 16-byte IPv6 address encoded as 32 hexadecimal digits
Packit Service 752078
</literallayout>
Packit Service 752078
       </para>
Packit Service 752078
Packit Service 752078
       <para>
Packit Service 752078
The address is the one of the network addresses of the machine where
Packit Service 752078
the session manager (not the client) is running.  For example, the IP
Packit Service 752078
address 198.112.45.11 would be encoded as the string
Packit Service 752078
"<literal>QC6702D0B</literal>".
Packit Service 752078
       </para>
Packit Service 752078
     </listitem>
Packit Service 752078
     <listitem><para>
Packit Service 752078
	 Time stamp.  A 13-digit decimal number specifying
Packit Service 752078
	 the number of milliseconds since 00:00:00 UTC, January 1, 1970.
Packit Service 752078
     </para></listitem>
Packit Service 752078
     <listitem>
Packit Service 752078
       <para>
Packit Service 752078
	Process-ID type and process-ID.  The process-ID type will be one of
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
     '<literal>1</literal>'	a POSIX process-ID encoded as a 10-digit decimal number.
Packit Service 752078
</literallayout>
Packit Service 752078
       </para>
Packit Service 752078
       <para>
Packit Service 752078
The process-ID is the process-ID of the session manager, not of a client.
Packit Service 752078
       </para>
Packit Service 752078
     </listitem>
Packit Service 752078
     <listitem>
Packit Service 752078
       <para>
Packit Service 752078
Sequence number.  This is a four-digit decimal number.  It is
Packit Service 752078
incremented every time the session manager creates an ID.  After
Packit Service 752078
reaching "Q9999" it wraps to "Q0000".
Packit Service 752078
       </para>
Packit Service 752078
       <note><title>Rationale</title>
Packit Service 752078
	 <para>
Packit Service 752078
Once a client ID has been assigned to the client, the client keeps
Packit Service 752078
this ID indefinitely.  If the client is terminated and restarted, it
Packit Service 752078
will be reassigned the same ID.  It is desirable to be able to pass
Packit Service 752078
client IDs around from machine to machine, from user to user, and from
Packit Service 752078
session manager to session manager, while retaining the identity of
Packit Service 752078
the client.  This, combined with the indefinite persistence of client
Packit Service 752078
IDs, means that client IDs need to be globally unique.  The
Packit Service 752078
construction specified above will ensure that any client ID created by
Packit Service 752078
any user, session manager, and machine will be different from any other.
Packit Service 752078
	 </para>
Packit Service 752078
       </note>
Packit Service 752078
     </listitem>
Packit Service 752078
  </itemizedlist>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Protocol'>
Packit Service 752078
  <title>Protocol</title>
Packit Service 752078
  <para>
Packit Service 752078
The protocol consists of a sequence of messages as described below.
Packit Service 752078
Each message type is specified by an ICE minor opcode.  A given
Packit Service 752078
message type is sent either from a client to the session manager or
Packit Service 752078
from the session manager to a client; the appropriate direction is
Packit Service 752078
listed with each message's description.  For each message type, the
Packit Service 752078
set of valid responses and possible error messages are listed.  The
Packit Service 752078
ICE severity is given in parentheses following each error class.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>RegisterClient</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>previous-ID</parameter>: ARRAY8
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>RegisterClientReply</function>
Packit Service 752078
Packit Service 752078
  Possible Errors: <errorname>BadValue</errorname> (<symbol role='Pn'>CanContinue</symbol>)
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The client must send this message to the SM to register the client's
Packit Service 752078
existence.  If a client is being restarted from a previous session,
Packit Service 752078
the <parameter>previous-ID</parameter> field must contain the client
Packit Service 752078
ID from the previous session.  For new clients,
Packit Service 752078
<parameter>previous-ID</parameter> should be of zero length.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
If <parameter>previous-ID</parameter> is not valid,
Packit Service 752078
the SM will send a <errorname>BadValue</errorname>
Packit Service 752078
error message to the client.  At this point the SM reverts to the
Packit Service 752078
register state and waits for another <function>RegisterClient</function>
Packit Service 752078
The client should then send a <function>RegisterClient</function> with a
Packit Service 752078
null <parameter>previous-ID</parameter> field.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>RegisterClientReply</function> [Client ← SM]
Packit Service 752078
Packit Service 752078
  <parameter>client-ID</parameter>: <type>ARRAY8</type>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The <parameter>client-ID</parameter> specifies a unique identification
Packit Service 752078
for this client.  If the client had specified an ID in the
Packit Service 752078
<parameter>previous-ID</parameter> field of the
Packit Service 752078
<function>RegisterClient</function> message,
Packit Service 752078
<parameter>client-ID</parameter> will be identical to the previously
Packit Service 752078
specified ID.  If <parameter>previous-ID</parameter> was null,
Packit Service 752078
<parameter>client-ID</parameter> will be a unique ID freshly generated
Packit Service 752078
by the SM.  The <parameter>client-ID</parameter> format is specified in
Packit Service 752078
<link linkend='Client_Identification_String'>section 6</link>.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
If the client didn't supply a <parameter>previous-ID</parameter> field to
Packit Service 752078
the <function>Register­Client</function> message, the SM must send
Packit Service 752078
a <function>SaveYourself</function> message with type = Local,
Packit Service 752078
shutdown = False, interact-style = None, and fast = False immediately
Packit Service 752078
after the <function>RegisterClientReply</function> The client should
Packit Service 752078
respond to this like any other <function>Save­Yourself</function>
Packit Service 752078
message.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SaveYourself</function> [Client ← SM]
Packit Service 752078
Packit Service 752078
  <parameter>type</parameter>: <type>SAVE_TYPE</type>
Packit Service 752078
  <parameter>shutdown</parameter>: <type>BOOL</type>
Packit Service 752078
  <parameter>interact-style</parameter>: <type>INTERACT_STYLE</type>
Packit Service 752078
  <parameter>fast</parameter>: <type>BOOL</type>
Packit Service 752078
Packit Service 752078
  Valid Responses:
Packit Service 752078
    <function>SetProperties</function>
Packit Service 752078
    <function>DeleteProperties</function>
Packit Service 752078
    <function>GetProperties</function>
Packit Service 752078
    <function>SaveYourselfDone</function>
Packit Service 752078
    <function>SaveYourselfPhase2Request</function>
Packit Service 752078
    <function>InteractRequest</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The SM sends this message to a client to ask it to save its state.
Packit Service 752078
The client writes a state file, if necessary, and, if necessary,
Packit Service 752078
uses <function>SetProperties</function> to inform the SM of how to
Packit Service 752078
restart it and how to discard the saved state.  During this process it
Packit Service 752078
can, if allowed by <parameter>interact-style</parameter>, request permission
Packit Service 752078
to interact with
Packit Service 752078
the user by sending an <function>InteractRequest</function> message.
Packit Service 752078
After the state has been saved, or if it cannot be successfully saved,
Packit Service 752078
and the properties are appropriately set, the client sends
Packit Service 752078
a <function>SaveYourselfDone</function> message.  If the client wants
Packit Service 752078
to save additional information after all the other clients have
Packit Service 752078
finished changing their own state, the client should
Packit Service 752078
send <function>SaveYourselfPhase2Request</function> instead
Packit Service 752078
of <function>SaveYourselfDone</function> The client must then freeze
Packit Service 752078
interaction with the user and wait until it receives
Packit Service 752078
a <function>SaveComplete</function> <function>Die</function> or
Packit Service 752078
a <function>ShutdownCancelled</function> message.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
If <parameter>interact-style</parameter> is <function>None</function> the
Packit Service 752078
client must not interact with the user while saving state.  If the
Packit Service 752078
<parameter>interact-style</parameter>
Packit Service 752078
is <function>Errors</function> the client may interact with the user
Packit Service 752078
only if an error condition arises.  If <parameter>interact-style</parameter>
Packit Service 752078
is <function>Any</function> then the client may interact with the user
Packit Service 752078
for any purpose.  This is done by sending
Packit Service 752078
an <function>Interact­Request</function> message.  The SM will
Packit Service 752078
send an <function>Interact</function> message to each client that sent
Packit Service 752078
an <function>Interact­Request</function> The client must postpone
Packit Service 752078
all interaction until it gets the <function>Interact</function>
Packit Service 752078
message.  When the client is done interacting it should send the SM
Packit Service 752078
an <function>Interact­Done</function> message.
Packit Service 752078
The <function>Interact­Request</function> message can be sent any
Packit Service 752078
time after a <function>Save­Yourself</function> and before
Packit Service 752078
a <function>Save­Yourself­Done</function>
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Unusual circumstances may dictate multiple interactions.  The client
Packit Service 752078
may initiate as many <function>Interact­Request</function>
Packit Service 752078
- <function>Interact</function> - <function>InteractDone</function>
Packit Service 752078
sequences as it needs before it sends <function>SaveYourselfDone</function>
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
When a client receives <function>Save­Yourself</function> and has
Packit Service 752078
not yet responded <function>Save­Yourself­Done</function> to a
Packit Service 752078
previous <function>Save­Yourself</function> it must send
Packit Service 752078
a <function>Save­Yourself­Done</function> and may then begin
Packit Service 752078
responding as appropriate to the newly received
Packit Service 752078
<function>Save­Yourself</function>
Packit Service 752078
</para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The <parameter>type</parameter> field specifies the type of information that
Packit Service 752078
should be saved: <function>Global</function> <function>Local</function>
Packit Service 752078
or <function>Both</function> The <function>Local</function> type
Packit Service 752078
indicates that the application must update the properties to reflect
Packit Service 752078
its current state, send
Packit Service 752078
a <function>Save­Yourself­Done</function> and continue.
Packit Service 752078
Specifically it should save enough information to restore the state as
Packit Service 752078
seen by the user of this client.  It should not affect the state as
Packit Service 752078
seen by other users.  The <function>Global</function> type indicates
Packit Service 752078
that the user wants the client to commit all of its data to permanent,
Packit Service 752078
globally-accessible storage.  <function>Both</function> indicates that
Packit Service 752078
the client should do both of these.  If <function>Both</function> is
Packit Service 752078
specified, the client should first commit the data to permanent
Packit Service 752078
storage before updating its SM properties.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <note><title>Examples</title>
Packit Service 752078
    <para>
Packit Service 752078
If a word processor was sent a <function>SaveYourself</function> with
Packit Service 752078
a type of <function>Local</function> it could create a temporary file
Packit Service 752078
that included the current contents of the file, the location of the
Packit Service 752078
cursor, and other aspects of the current editing session.  It would
Packit Service 752078
then update its <function>Restart­Command</function> property with
Packit Service 752078
enough information to find the temporary file, and
Packit Service 752078
its <function>Discard­Command</function> with enough information
Packit Service 752078
to remove it.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
If a word processor was sent a <function>SaveYourself</function> with
Packit Service 752078
a type of <function>Global</function> it would simply save the
Packit Service 752078
currently edited file.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
If a word processor was sent a <function>SaveYourself</function> with
Packit Service 752078
a type of <function>Both</function> it would first save the currently
Packit Service 752078
edited file.  It would then create a temporary file with information
Packit Service 752078
such as the current position of the cursor and what file is being
Packit Service 752078
edited.  It would then update
Packit Service 752078
its <function>Restart­Command</function> property with enough
Packit Service 752078
information to find the temporary file, and
Packit Service 752078
its <function>Discard­Command</function> with enough information
Packit Service 752078
to remove it.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
Once the SM has send <function>SaveYourself</function> to a client, it
Packit Service 752078
can't send another <function>SaveYourself</function> to that client until
Packit Service 752078
the client either responds with a <function>SaveYourselfDone</function> or
Packit Service 752078
the SM sends a <function>ShutdownCancelled</function>
Packit Service 752078
    </para>
Packit Service 752078
  </note>
Packit Service 752078
Packit Service 752078
  <note><title>Advice to Implementors</title>
Packit Service 752078
    <para>
Packit Service 752078
If the client stores local any state in a file or similar "external"
Packit Service 752078
storage, it must create a distinct copy in response to
Packit Service 752078
each <function>SaveYourself</function> message.
Packit Service 752078
It <emphasis remap='I'>must not</emphasis> simply refer to a previous
Packit Service 752078
copy, because the SM may discard that previous saved state using
Packit Service 752078
a <function>DiscardCommand</function> without knowing that it is
Packit Service 752078
needed for the new checkpoint.
Packit Service 752078
    </para>
Packit Service 752078
  </note>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The <parameter>shutdown</parameter> field specifies whether the system is
Packit Service 752078
being shut down.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <note><title>Rationale</title>
Packit Service 752078
    <para>
Packit Service 752078
The interaction may be different depending on whether or not shutdown is set.
Packit Service 752078
    </para>
Packit Service 752078
  </note>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The client must save and then must prevent interaction until it
Packit Service 752078
receives a <function>SaveComplete</function> <function>Die</function>
Packit Service 752078
or a <function>Shutdown­Cancelled</function> because anything the
Packit Service 752078
user does after the save will be lost.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The <parameter>fast</parameter> field specifies whether or not the client
Packit Service 752078
should save its state as quickly as possible.  For example, if the SM knows
Packit Service 752078
that power is about to fail, it should set the <parameter>fast</parameter>
Packit Service 752078
field to <constant>True</constant>.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SaveYourselfPhase2</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  Valid Responses:
Packit Service 752078
    <function>SetProperties</function>
Packit Service 752078
    <function>DeleteProperties</function>
Packit Service 752078
    <function>GetProperties</function>
Packit Service 752078
    <function>SaveYourselfDone</function>
Packit Service 752078
    <function>InteractRequest</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The SM sends this message to a client that has previously sent
Packit Service 752078
a <function>SaveYourselfPhase2Request</function> message.  This
Packit Service 752078
message informs the client that all other clients are in a fixed state
Packit Service 752078
and this client can save state that is associated with other clients.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <note><title>Rationale</title>
Packit Service 752078
    <para>
Packit Service 752078
Clients that manager other clients (window managers, workspace
Packit Service 752078
managers, etc) need to know when all clients they are managing are
Packit Service 752078
idle, so that the manager can save state related to each of the
Packit Service 752078
clients without being concerned with that state changing.
Packit Service 752078
    </para>
Packit Service 752078
  </note>
Packit Service 752078
  <para>
Packit Service 752078
The client writes a state file, if necessary, and, if necessary,
Packit Service 752078
uses <function>SetProperties</function> to inform the SM of how to
Packit Service 752078
restart it and how to discard the saved state.  During this process it
Packit Service 752078
can request permission to interact with the user by sending
Packit Service 752078
an <function>InteractRequest</function> message.  This should only be
Packit Service 752078
done if an error occurs that requires user interaction to resolve.
Packit Service 752078
After the state has been saved, or if it cannot be successfully saved,
Packit Service 752078
and the properties are appropriately set, the client sends
Packit Service 752078
a <function>SaveYourselfDone</function> message.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SaveYourselfRequest</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>type</parameter>: <type>SAVE_TYPE</type>
Packit Service 752078
  <parameter>shutdown</parameter>: <type>BOOL</type>
Packit Service 752078
  <parameter>interact-style</parameter>: <type>INTERACT_STYLE</type>
Packit Service 752078
  <parameter>fast</parameter>: <type>BOOL</type>
Packit Service 752078
  <parameter>global</parameter>: <type>BOOL</type>
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>SaveYourself</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
An application sends this to the SM to request a checkpoint.  When the
Packit Service 752078
SM receives this request it may generate a <function>SaveYourself</function>
Packit Service 752078
message in response and it may leave the fields intact.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <note><title>Example</title> <para>
Packit Service 752078
A vendor of a UPS (Uninterruptible Power Supply)
Packit Service 752078
might include an SM client that would monitor the status of
Packit Service 752078
the UPS and generate a fast shutdown if the power
Packit Service 752078
is about to be lost.
Packit Service 752078
  </para></note>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
If <parameter>global</parameter> is set to <constant>True</constant> then the
Packit Service 752078
resulting <function>SaveYourself</function> should be sent to all
Packit Service 752078
applications.  If <parameter>global</parameter> is set to
Packit Service 752078
<constant>False</constant> then the
Packit Service 752078
resulting <function>SaveYourself</function> should be sent to the
Packit Service 752078
application that sent the <function>Save­Yourself­Request</function>
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>InteractRequest</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>dialog-type</parameter>: <type>DIALOG_TYPE</type>
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>Interact</function> <function>ShutdownCancelled</function>
Packit Service 752078
Packit Service 752078
  Possible Errors: <errorname>BadState</errorname> (<symbol role='Pn'>CanContinue</symbol>)
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
During a checkpoint or session-save operation, only one client at a
Packit Service 752078
time might be granted the privilege of interacting with the user.
Packit Service 752078
The <function>InteractRequest</function> message causes the SM to emit
Packit Service 752078
an <function>Interact</function> message at some later time if the
Packit Service 752078
shutdown is not cancelled by another client first.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The <parameter>dialog-type</parameter> field specifies either
Packit Service 752078
<function>Errors</function> indicating that the client wants to start an
Packit Service 752078
error dialog or <function>Normal</function> meaning the client wishes
Packit Service 752078
to start a non-error dialog.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>Interact</function> [Client ← SM]
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>InteractDone</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
This message grants the client the privilege of interacting with the
Packit Service 752078
user.  When the client is done interacting with the user it must send
Packit Service 752078
an <function>InteractDone</function> message to the SM unless a
Packit Service 752078
shutdown cancel is received.
Packit Service 752078
  </para>
Packit Service 752078
  <note><title>Advice to Implementors</title>
Packit Service 752078
    <para>If a client receives a ShutdownCancelled
Packit Service 752078
after receiving an <function>Interact</function> message, but before
Packit Service 752078
sending a <function>InteractDone</function> the client should abort
Packit Service 752078
the interaction and send a <function>SaveYourselfDone</function>
Packit Service 752078
  </para></note>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>InteractDone</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>cancel-shutdown</parameter>: <type>BOOL</type>
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>ShutdownCancelled</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
This message is used by a client to notify the SM that it is done interacting.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Setting the <parameter>cancel-shutdown</parameter> field to <constant>True</constant>
Packit Service 752078
indicates that the user has requested that the entire shutdown be
Packit Service 752078
cancelled.  <parameter>Cancel-shutdown</parameter> may only be <constant>True</constant> if
Packit Service 752078
the corresponding <function>SaveYourself</function> message
Packit Service 752078
specified <constant>True</constant> for the shutdown field
Packit Service 752078
and <function>Any</function> or <function>Errors</function> for the
Packit Service 752078
<parameter>interact-style</parameter> field.  Otherwise,
Packit Service 752078
<parameter>cancel-shutdown</parameter> must be <constant>False</constant>.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SaveYourselfDone</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>success</parameter>: <type>BOOL</type>
Packit Service 752078
Packit Service 752078
  Valid Responses:
Packit Service 752078
    <function>SaveComplete</function>
Packit Service 752078
    <function>Die</function>
Packit Service 752078
    <function>ShutdownCancelled</function>
Packit Service 752078
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
This message is sent by a client to indicate that all of the
Packit Service 752078
properties representing its state have been updated.  After
Packit Service 752078
sending <function>SaveYourselfDone</function> the client must wait for
Packit Service 752078
a <function>SaveComplete</function> <function>ShutdownCancelled</function>
Packit Service 752078
or <function>Die</function> message before changing its state.  If
Packit Service 752078
the <function>SaveYourself</function> operation was successful, then
Packit Service 752078
the client should set the <parameter>success</parameter> field to
Packit Service 752078
<constant>True</constant> otherwise the client should set it to
Packit Service 752078
<constant>False</constant>.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <note><title>Example</title>
Packit Service 752078
    <para>
Packit Service 752078
If a client tries to save its state and runs out of disk space, it
Packit Service 752078
should return <constant>False</constant> in the <parameter>success</parameter>
Packit Service 752078
field of the <function>SaveYourselfDone</function> message.
Packit Service 752078
    </para>
Packit Service 752078
  </note>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SaveYourselfPhase2Request</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  Valid Responses:
Packit Service 752078
    <function>ShutdownCancelled</function>
Packit Service 752078
    <function>SaveYourselfPhase2</function>
Packit Service 752078
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
This message is sent by a client to indicate that it needs to be informed
Packit Service 752078
when all the other clients are quiescent, so it can continue its state.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>Die</function> [Client ← SM]
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>ConnectionClosed</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
When the SM wants a client to die it sends a <function>Die</function>
Packit Service 752078
message.  Before the client dies it responds by sending
Packit Service 752078
a <function>ConnectionClosed</function> message and may then close its
Packit Service 752078
connection to the SM at any time.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SaveComplete</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  Valid Responses:
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
When the SM is done with a checkpoint, it will send each of the
Packit Service 752078
clients a <function>SaveComplete</function> message.  The client is
Packit Service 752078
then free to change its state.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>ShutdownCancelled</function> [Client ← SM]
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The shutdown currently in process has been aborted.  The client can
Packit Service 752078
now continue as if the shutdown had never happened.  If the client has
Packit Service 752078
not sent <function>SaveYourselfDone</function> yet, the client can
Packit Service 752078
either abort the save and send <function>SaveYourselfDone</function>
Packit Service 752078
with the success field set to <constant>False</constant> or it can
Packit Service 752078
continue with the save and send a <function>SaveYourselfDone</function>
Packit Service 752078
with the success field set to reflect the outcome of the save.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>ConnectionClosed</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>reason</parameter>: <type>LISTofARRAY8</type>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Specifies that the client has decided to terminate.  It should be
Packit Service 752078
immediately followed by closing the connection.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The <parameter>reason</parameter> field specifies why the client is resigning
Packit Service 752078
from the session.  It is encoded as an array of Compound Text strings.  If the
Packit Service 752078
resignation is expected by the user, there will typically be zero
Packit Service 752078
ARRAY8s here.  But if the client encountered an unexpected fatal
Packit Service 752078
error, the error message (which might otherwise be printed on stderr
Packit Service 752078
on a POSIX system) should be forwarded to the SM here, one ARRAY8 per
Packit Service 752078
line of the message.  It is the responsibility of the SM to display
Packit Service 752078
this reason to the user.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
After sending this message, the client must not send any additional
Packit Service 752078
XSMP messages to the SM.
Packit Service 752078
  </para>
Packit Service 752078
  <note><title>Advice to Implementors</title><para>
Packit Service 752078
If additional messages are received, they should be discarded.
Packit Service 752078
  </para></note>
Packit Service 752078
  <note><title>Rationale</title><para>
Packit Service 752078
The reason for sending the <function>ConnectionClosed</function>
Packit Service 752078
message before actually closing the connections is that some transport
Packit Service 752078
protocols will not provide immediate notification of connection
Packit Service 752078
closure.
Packit Service 752078
  </para></note>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>SetProperties</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>properties</parameter>: <type>LISTofPROPERTY</type>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Sets the specified <parameter>properties</parameter> to the specified values.
Packit Service 752078
Existing
Packit Service 752078
properties not specified in the <function>Set­Properties</function>
Packit Service 752078
message are unaffected. Some properties have predefined semantics.
Packit Service 752078
See <link linkend='Predefined_Properties'>section 11, 
Packit Service 752078
“Predefined Properties.”</link>
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The protocol specification recommends that property names used for
Packit Service 752078
properties not defined by the standard should begin with an
Packit Service 752078
underscore.  To prevent conflicts among organizations, additional
Packit Service 752078
prefixes should be chosen (for example, _KPC_FAST_SAVE_OPTION).  The
Packit Service 752078
organizational prefixes should be registered with the X Registry.  The
Packit Service 752078
XSMP reserves all property names not beginning with an underscore for
Packit Service 752078
future use.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>DeleteProperties</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  <parameter>property-names</parameter>: <type>LISTofARRAY8</type>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>Removes the named properties.</para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>GetProperties</function> [Client → SM]
Packit Service 752078
Packit Service 752078
  Valid Responses: <function>GetPropertiesReply</function>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Requests that the SM respond with the values of all the properties for
Packit Service 752078
this client.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <synopsis>
Packit Service 752078
<function>GetPropertiesReply</function> [Client ← SM]
Packit Service 752078
Packit Service 752078
  <parameter>values</parameter>: <type>LISTofPROPERTY</type>
Packit Service 752078
  </synopsis>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
This message is sent in reply to a <function>GetProperties</function>
Packit Service 752078
message and includes the <parameter>values</parameter> of all the properties.
Packit Service 752078
  </para>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Errors'>
Packit Service 752078
  <title>Errors</title>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
When the receiver of a message detects an error condition, the
Packit Service 752078
receiver sends an ICE error message to the sender.  There are only two
Packit Service 752078
types of errors that are used by the XSMP:
Packit Service 752078
<errorname>BadValue</errorname> and <errorname>BadState</errorname>
Packit Service 752078
These are both defined in the ICE protocol.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Any message received out-of-sequence will generate
Packit Service 752078
a <errorname>BadState</errorname> error message.
Packit Service 752078
  </para>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='State_Diagrams'>
Packit Service 752078
  <title>State Diagrams</title>
Packit Service 752078
  <para>
Packit Service 752078
These state diagrams are designed to cover all actions of both the
Packit Service 752078
client and the SM.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <sect1 id='Client_State_Diagram'>
Packit Service 752078
<title>Client State Diagram</title>
Packit Service 752078
Packit Service 752078
Packit Service 752078
<literallayout>
Packit Service 752078
<emphasis remap='I'>start:</emphasis>
Packit Service 752078
     ICE protocol setup complete → <emphasis remap='C'>register</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout>
Packit Service 752078
<emphasis remap='I'>register:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>RegisterClient</emphasis> → <emphasis remap='C'>collect-id</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>collect-id:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>RegisterClientReply</emphasis> → <emphasis remap='C'>idle</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>shutdown-cancelled:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>idle</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>idle:</emphasis> [Undoes any freeze of interaction with user.]
Packit Service 752078
     receive <emphasis remap='B'>Die</emphasis> → <emphasis remap='C'>die</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SaveYourself</emphasis> → <emphasis remap='C'>freeze-interaction</emphasis>
Packit Service 752078
     send <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     send <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     send <emphasis remap='B'>ConnectionClosed</emphasis> → <emphasis remap='C'>connection-closed</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SaveYourselfRequest</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
</literallayout> 
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>die:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>ConnectionClosed</emphasis> → <emphasis remap='C'>connection-closed</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>freeze-interaction:</emphasis>
Packit Service 752078
     freeze interaction with user → <emphasis remap='C'>save-yourself</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>save-yourself:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>shutdown-cancelled</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>InteractRequest</emphasis> → <emphasis remap='C'>interact-request</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SaveYourselfPhase2Request</emphasis> → waiting-for-phase2
Packit Service 752078
Packit Service 752078
<emphasis remap='I'>save-yourself:</emphasis>
Packit Service 752078
     if shutdown mode:
Packit Service 752078
          send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>save-yourself-done</emphasis>
Packit Service 752078
     otherwise:
Packit Service 752078
          send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>idle</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>waiting-for-phase2:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>shutdown-cancelled</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SaveYourselfPhase2</emphasis> → <emphasis remap='C'>phase2</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>phase2:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>shutdown-cancelled</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>InteractRequest</emphasis> → <emphasis remap='C'>interact-request</emphasis> (errors only)
Packit Service 752078
     if shutdown mode:
Packit Service 752078
          send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>save-yourself-done</emphasis>
Packit Service 752078
     otherwise:
Packit Service 752078
          send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>idle</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>interact-request:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>Interact</emphasis> → <emphasis remap='C'>interact</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>shutdown-cancelled</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>interact:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>InteractDone</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>shutdown-cancelled</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>save-yourself-done:</emphasis> (changing state is forbidden)
Packit Service 752078
     receive <emphasis remap='B'>SaveComplete</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>Die</emphasis> → <emphasis remap='C'>die</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>idle</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>connection-closed:</emphasis>
Packit Service 752078
     client stops participating in session </literallayout>
Packit Service 752078
</sect1>
Packit Service 752078
Packit Service 752078
<sect1 id='Session_Manager_State_Diagram'>
Packit Service 752078
<title>Session Manager State Diagram</title>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>start:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ProtocolSetup</emphasis> → <emphasis remap='C'>protocol-setup</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>protocol-setup:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>ProtocolSetupReply</emphasis> → <emphasis remap='C'>register</emphasis></literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>register:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>RegisterClient</emphasis> → <emphasis remap='C'>acknowledge-register</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>acknowledge-register:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>RegisterClientReply</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>idle:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>ConnectionClosed</emphasis> → <emphasis remap='C'>start</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>get-properties</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SaveYourselfRequest</emphasis> → <emphasis remap='C'>save-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SaveYourself</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>save-yourself:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>SaveYourself</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>get-properties:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>saving-get-properties:</emphasis>
Packit Service 752078
     send <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>saving-yourself:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>InteractRequest</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>Interact</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>InteractDone</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
      receive <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>saving-get-properties</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SaveYourselfPhase2Request</emphasis> → <emphasis remap='C'>start-phase2</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>save-yourself-done</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>start-phase2:</emphasis>
Packit Service 752078
     If all clients have sent either SaveYourselfPhase2Request or SaveYourselfDone:
Packit Service 752078
          send <emphasis remap='B'>SaveYourselfPhase2</emphasis> → <emphasis remap='C'>phase2</emphasis>
Packit Service 752078
     else
Packit Service 752078
          → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>phase2:</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>InteractRequest</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>Interact</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     send <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>InteractDone</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
      receive <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>saving-get-properties</emphasis>
Packit Service 752078
     receive <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>save-yourself-done</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>save-yourself-done:</emphasis>
Packit Service 752078
     If all clients are saved:
Packit Service 752078
          If shutting down:
Packit Service 752078
               send <emphasis remap='B'>Die</emphasis> → <emphasis remap='C'>die</emphasis>
Packit Service 752078
          otherwise
Packit Service 752078
               send <emphasis remap='B'>SaveComplete</emphasis> → <emphasis remap='C'>idle</emphasis>
Packit Service 752078
Packit Service 752078
     If some clients are not saved:
Packit Service 752078
     → <emphasis remap='C'>saving-yourself</emphasis>
Packit Service 752078
</literallayout>
Packit Service 752078
Packit Service 752078
<literallayout remap='DS'>
Packit Service 752078
<emphasis remap='I'>die:</emphasis>
Packit Service 752078
     SM stops accepting connections
Packit Service 752078
</literallayout>
Packit Service 752078
  </sect1>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Protocol_Encoding'>
Packit Service 752078
  <title>Protocol Encoding</title>
Packit Service 752078
  <sect1 id='Types'>
Packit Service 752078
<title>Types</title>
Packit Service 752078
Packit Service 752078
<informaltable frame='none'>
Packit Service 752078
  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='10.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">BOOL</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>False</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>True</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='10.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">INTERACT_STYLE</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>None</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>Errors</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry>Any</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='10.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">DIALOG_TYPE</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>Error</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>Normal</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='10.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">SAVE_TYPE</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>Global</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>Local</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry>Both</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">ARRAY8</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>CARD32</entry>
Packit Service 752078
        <entry>length</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>n</entry>
Packit Service 752078
        <entry>ListofCARD8, the array</entry>
Packit Service 752078
        <entry>p = pad (4 + n, 8)</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry>Both</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">LISTofARRAY8</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>CARD32</entry>
Packit Service 752078
        <entry>count</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>first array</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>b</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>second array</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>.</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>.</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>.</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>q</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>last array</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">PROPERTY</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>name</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>b</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>type (XPCS encoded in Latin-1, case sensitive)</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>c</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>values</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='32' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c2'><emphasis role="bold">LISTofPROPERTY</emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>CARD32</entry>
Packit Service 752078
        <entry>count</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>PROPERTY</entry>
Packit Service 752078
        <entry>first property</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>b</entry>
Packit Service 752078
        <entry>PROPERTY</entry>
Packit Service 752078
        <entry>second property</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>.</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>.</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>.</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>q</entry>
Packit Service 752078
        <entry>PROPERTY</entry>
Packit Service 752078
        <entry>last property</entry>
Packit Service 752078
      </row>
Packit Service 752078
     
Packit Service 752078
  </tgroup>
Packit Service 752078
</informaltable>
Packit Service 752078
Packit Service 752078
  </sect1>
Packit Service 752078
Packit Service 752078
  <sect1 id='Messages'>
Packit Service 752078
<title>Messages</title>
Packit Service 752078
    <para>
Packit Service 752078
XSMP is a sub-protocol of ICE.  The major opcode is
Packit Service 752078
assigned at run-time by ICE and is represented here
Packit Service 752078
by '<literal>?</literal>'.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
To start the XSMP protocol, the client sends the server an
Packit Service 752078
ICE <function>ProtocolSetup</function> message.
Packit Service 752078
The protocol-name field should be specified as "<literal>XSMP</literal>",
Packit Service 752078
the major version of the protocol is 1, the minor version is 0.  These
Packit Service 752078
values may change if the protocol is revised.  The minor version
Packit Service 752078
number will be incremented if the change is compatible, otherwise the
Packit Service 752078
major version number will be incremented.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
    <para>
Packit Service 752078
In <function>ProtocolReply</function> message sent by the session
Packit Service 752078
manager, the XSMP protocol defines the vendor parameter as product
Packit Service 752078
identification of the session manager, and defines the release
Packit Service 752078
parameter as the software release identification of the session
Packit Service 752078
manager.  The session manager should supply this information in the
Packit Service 752078
ICE <function>ProtocolReply</function> message.
Packit Service 752078
    </para>
Packit Service 752078
Packit Service 752078
<informaltable frame='none'>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
	<entry namest="c1" nameend="c3"><emphasis role="bold"><function>RegisterClient</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>a/8</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>previous-ID</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c3'><emphasis role="bold"><function>RegisterClientReply</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>a/8</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>client-ID</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest='c1' nameend='c3'><emphasis role="bold"><function>SaveYourself</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>3</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>SAVE_TYPE</entry>
Packit Service 752078
        <entry>type</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>shutdown</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>INTERACT_STYLE</entry>
Packit Service 752078
        <entry>interact-style</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>fast</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>SaveYourselfRequest</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>length of remainning data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>SAVE_TYPE</entry>
Packit Service 752078
        <entry>type</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>shutdown</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>INTERACT_STYLE</entry>
Packit Service 752078
        <entry>interact-style</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>fast</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>3</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>InteractRequest</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>5</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>DIALOG_TYPE</entry>
Packit Service 752078
        <entry>dialog type</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>Interact</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>6</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>InteractDone</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>7</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>cancel-shutdown</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>InteractDone</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>7</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>cancel-shutdown</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>SaveYourselfDone</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>8</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>BOOL</entry>
Packit Service 752078
        <entry>success</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>Die</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>9</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>ShutdownCancelled</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>10</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>ConnectionClosed</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>11</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>a/8</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>reason</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>SetProperties</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>12</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>a/8</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>LISTofPROPERTY</entry>
Packit Service 752078
        <entry>properties</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>DeleteProperties</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>13</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>a/8</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>LISTofPROPERTY</entry>
Packit Service 752078
        <entry>properties</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>GetProperties</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>14</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>GetPropertiesReply</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>15</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>a/8</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>a</entry>
Packit Service 752078
        <entry>LISTofPROPERTY</entry>
Packit Service 752078
        <entry>properties</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>SaveYourselfPhase2Request</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>16</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>SaveYourselfPhase2</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>17</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
  <tgroup cols='3' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='5.0*'/>
Packit Service 752078
    <colspec colname='c3' colwidth='5.0*'/>
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry namest="c1" nameend="c3"><emphasis role="bold"><function>SaveComplete</function></emphasis></entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>?</entry>
Packit Service 752078
        <entry>XSMP</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
        <entry>18</entry>
Packit Service 752078
        <entry>opcode</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
        <entry></entry>
Packit Service 752078
        <entry>unused</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>4</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
        <entry>length of remaining data in 8-byte units</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
</informaltable>
Packit Service 752078
Packit Service 752078
  </sect1>
Packit Service 752078
</chapter>
Packit Service 752078
Packit Service 752078
<chapter id='Predefined_Properties'>
Packit Service 752078
  <title>Predefined Properties</title>
Packit Service 752078
  <para>
Packit Service 752078
All property values are stored in a LISTofARRAY8.  If the type of the
Packit Service 752078
property is CARD8, the value is stored as a LISTofARRAY8 with one
Packit Service 752078
ARRAY8 that is one byte long.  That single byte contains the CARD8.
Packit Service 752078
If the type of the property is ARRAY8, the value is stored in the
Packit Service 752078
first element of a single element LISTofARRAY8.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
The required properties must be set each time a client connects with
Packit Service 752078
the SM.  The properties must be set after the client
Packit Service 752078
sends <function>RegisterClient</function> and before the client
Packit Service 752078
sends <function>SaveYourselfDone</function> Otherwise, the behavior of
Packit Service 752078
the session manager is not defined.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
Clients may set, get, and delete nonstandard properties.  The lifetime
Packit Service 752078
of stored properties does not extend into subsequent sessions.
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
<informaltable frame='topbot'>
Packit Service 752078
  <tgroup cols='4' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    <colspec colname='c1' colwidth='2.0*' />
Packit Service 752078
    <colspec colname='c2' colwidth='2.0*' />
Packit Service 752078
    <colspec colname='c3' colwidth='2.0*' />
Packit Service 752078
    <colspec colname='c4' colwidth='1.0*' />
Packit Service 752078
    
Packit Service 752078
      <row rowsep='1'>
Packit Service 752078
        <entry>Name</entry>
Packit Service 752078
        <entry>Type</entry>
Packit Service 752078
        <entry>Posix Type</entry>
Packit Service 752078
        <entry>Required?</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>CloneCommand</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>Yes</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>CurrentDirectory</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>No</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>DiscardCommand</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>No*</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>Environment</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>No</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>ProcessID</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>No</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>Program</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>Yes</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>RestartCommand</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>Yes</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>ResignCommand</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>No</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>RestartStyleHint</entry>
Packit Service 752078
        <entry>CARD8</entry>
Packit Service 752078
        <entry>CARD8</entry>
Packit Service 752078
        <entry>No</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>ShutdownCommand</entry>
Packit Service 752078
        <entry>OS-specific</entry>
Packit Service 752078
        <entry>LISTofARRAY8</entry>
Packit Service 752078
        <entry>No</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>UserID</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>ARRAY8</entry>
Packit Service 752078
        <entry>Yes</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
</informaltable>
Packit Service 752078
Packit Service 752078
  <para>
Packit Service 752078
* Required if any state is stored in an external repository (e.g., state file).
Packit Service 752078
  </para>
Packit Service 752078
Packit Service 752078
  <variablelist remap='IP'>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>CloneCommand</term>
Packit Service 752078
      <listitem> <para>
Packit Service 752078
This is like the <function>RestartCommand</function> except it
Packit Service 752078
restarts a copy of the application.  The only difference is that the
Packit Service 752078
application doesn't supply its client id at register time.  On POSIX
Packit Service 752078
systems the type should be a LISTofARRAY8.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>CurrentDirectory</term>
Packit Service 752078
      <listitem><para>
Packit Service 752078
On POSIX-based systems specifies the value of the current directory that
Packit Service 752078
needs to be set up prior to starting the program and should be of type ARRAY8.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>DiscardCommand</term>
Packit Service 752078
      <listitem><para>
Packit Service 752078
The discard command contains a command that when delivered to the host
Packit Service 752078
that the client is running on (determined from the connection), will
Packit Service 752078
cause it to discard any information about the current state.  If this
Packit Service 752078
command is not specified, the SM will assume that all of the client's
Packit Service 752078
state is encoded in the <function>Restart­Command</function> On
Packit Service 752078
POSIX systems the type should be LISTofARRAY8.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>Environment</term>
Packit Service 752078
      <listitem><para>
Packit Service 752078
On POSIX based systems, this will be of type LISTofARRAY8 where the
Packit Service 752078
ARRAY8s alternate between environment variable name and environment
Packit Service 752078
variable value.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>ProcessID</term>
Packit Service 752078
      <listitem><para>
Packit Service 752078
This specifies an OS-specific identifier for the process.  On POSIX
Packit Service 752078
systems this should of type ARRAY8 and contain the return value of
Packit Service 752078
getpid() turned into a Latin-1 (decimal) string.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>Program</term>
Packit Service 752078
      <listitem><para>
Packit Service 752078
The name of the program that is running.  On POSIX systems this should
Packit Service 752078
be the first parameter passed to execve and should be of type ARRAY8.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>RestartCommand</term>
Packit Service 752078
      <listitem><para>
Packit Service 752078
The restart command contains a command that when delivered to the host
Packit Service 752078
that the client is running on (determined from the connection), will
Packit Service 752078
cause the client to restart in its current state.  On POSIX-based
Packit Service 752078
systems this is of type LISTofARRAY8 and each of the elements in the
Packit Service 752078
array represents an element in the argv array.  This restart command
Packit Service 752078
should ensure that the client restarts with the specified
Packit Service 752078
client-ID.
Packit Service 752078
      </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>ResignCommand</term>
Packit Service 752078
      <listitem>
Packit Service 752078
	<para>
Packit Service 752078
A client that sets the <function>RestartStyleHint</function>
Packit Service 752078
to <function>RestartAnyway</function> uses this property to specify a
Packit Service 752078
command that undoes the effect of the client and removes any saved
Packit Service 752078
state.
Packit Service 752078
	</para>
Packit Service 752078
	<note><title>Example</title><para>
Packit Service 752078
A user runs xmodmap.  xmodmap registers with the SM,
Packit Service 752078
sets <function>Restart­Style­Hint</function>
Packit Service 752078
to <function>Restart­Anyway</function> and then terminates.  In
Packit Service 752078
order to allow the SM (at the user's request) to undo this, xmodmap
Packit Service 752078
would register a <function>Resign­Command</function> that undoes
Packit Service 752078
the effects of the xmodmap.
Packit Service 752078
	</para></note>
Packit Service 752078
      </listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>RestartStyleHint</term>
Packit Service 752078
      <listitem>
Packit Service 752078
	<para>
Packit Service 752078
If the RestartStyleHint property is present, it will contain the style
Packit Service 752078
of restarting the client prefers.  If this flag isn't
Packit Service 752078
specified, <function>RestartIfRunning</function> is assumed.  The
Packit Service 752078
possible values are as follows:
Packit Service 752078
	</para>
Packit Service 752078
Packit Service 752078
<informaltable frame='topbot'>
Packit Service 752078
  
Packit Service 752078
  <tgroup cols='2' align='left' colsep='0' rowsep='0'>
Packit Service 752078
    <colspec colname='c1' colwidth='1.0*'/>
Packit Service 752078
    <colspec colname='c2' colwidth='2.5*'/>
Packit Service 752078
    
Packit Service 752078
      <row rowsep='1'>
Packit Service 752078
        <entry>Name</entry>
Packit Service 752078
        <entry>Value</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
    
Packit Service 752078
      <row>
Packit Service 752078
        <entry>RestartIfRunning</entry>
Packit Service 752078
        <entry>0</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>RestartAnyway</entry>
Packit Service 752078
        <entry>1</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>RestartImmediately</entry>
Packit Service 752078
        <entry>2</entry>
Packit Service 752078
      </row>
Packit Service 752078
      <row>
Packit Service 752078
        <entry>RestartNever</entry>
Packit Service 752078
        <entry>3</entry>
Packit Service 752078
      </row>
Packit Service 752078
    
Packit Service 752078
  </tgroup>
Packit Service 752078
</informaltable>
Packit Service 752078
Packit Service 752078
	<para>
Packit Service 752078
The <function>RestartIfRunning</function> style is used in the usual
Packit Service 752078
case.  The client should be restarted in the next session if it is
Packit Service 752078
connected to the session manager at the end of the current session.
Packit Service 752078
	</para>
Packit Service 752078
Packit Service 752078
	<para>
Packit Service 752078
The <function>RestartAnyway</function> style is used to tell the SM
Packit Service 752078
that the application should be restarted in the next session even if
Packit Service 752078
it exits before the current session is terminated.  It should be noted
Packit Service 752078
that this is only a hint and the SM will follow the policies specified
Packit Service 752078
by its users in determining what applications to restart.
Packit Service 752078
	</para>
Packit Service 752078
Packit Service 752078
	<note><title>Rationale</title><para>
Packit Service 752078
This can be specified by a client which supports (as MS-Windows
Packit Service 752078
clients do) a means for the user to indicate while exiting that
Packit Service 752078
restarting is desired.  It can also be used for clients that spawn
Packit Service 752078
other clients and then go away, but which want to be restarted.
Packit Service 752078
	</para></note>
Packit Service 752078
Packit Service 752078
	<para>
Packit Service 752078
A client that uses <function>RestartAnyway</function> should also set
Packit Service 752078
the <function>ResignCommand</function> and <function>ShutdownCommand</function>
Packit Service 752078
properties to commands that undo the state of the client after it exits.
Packit Service 752078
	</para>
Packit Service 752078
Packit Service 752078
	<para>
Packit Service 752078
The <function>RestartImmediately</function> style is
Packit Service 752078
like <function>RestartAnyway</function> but in addition, the client is
Packit Service 752078
meant to run continuously.  If the client exits, the SM should try to
Packit Service 752078
restart it in the current session.
Packit Service 752078
	</para>
Packit Service 752078
Packit Service 752078
	<note><title>Advice to Implementors</title><para>
Packit Service 752078
It would be wise to sanity-check the frequency which
Packit Service 752078
which <function>RestartImmediately</function> clients are restarted,
Packit Service 752078
to avoid a sick client being restarted continuously.
Packit Service 752078
	</para></note>
Packit Service 752078
Packit Service 752078
	<para>
Packit Service 752078
The <function>RestartNever</function> style specifies that the client
Packit Service 752078
does not wish to be restarted in the next session.
Packit Service 752078
	</para>
Packit Service 752078
Packit Service 752078
	<note><title>Advice to Implementors</title> <para>
Packit Service 752078
This should be used rarely, if at all.  It will cause the client to be
Packit Service 752078
silently left out of sessions when they are restarted and will
Packit Service 752078
probably be confusing to users.
Packit Service 752078
	</para></note> 
Packit Service 752078
	
Packit Service 752078
      </listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>ShutdownCommand</term>
Packit Service 752078
      <listitem>
Packit Service 752078
	<para>
Packit Service 752078
This command is executed at shutdown time to clean up after a client
Packit Service 752078
that is no longer running but retained its state by
Packit Service 752078
setting <function>RestartStyleHint</function>
Packit Service 752078
to <function>RestartAnyway</function> The command must not remove any
Packit Service 752078
saved state as the client is still part of the session.
Packit Service 752078
	</para>
Packit Service 752078
	<note><title>Example</title><para>
Packit Service 752078
A client is run at start up time that turns on a camera.  This client
Packit Service 752078
then exits.  At session shutdown, the user wants the camera turned
Packit Service 752078
off.  This client would set the <function>Restart­Style­Hint</function>
Packit Service 752078
to <function>Restart­Anyway</function> and would register a
Packit Service 752078
<function>Shutdown­Command</function> that would turn off the camera.
Packit Service 752078
	</para></note>
Packit Service 752078
      </listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
    <varlistentry>
Packit Service 752078
      <term>UserID</term>
Packit Service 752078
    <listitem><para>
Packit Service 752078
Specifies the user's ID.  On POSIX-based systems
Packit Service 752078
this will contain the the user's name (the <structfield>pw_name</structfield>
Packit Service 752078
field of <structname>struct passwd</structname>).
Packit Service 752078
    </para></listitem>
Packit Service 752078
    </varlistentry>
Packit Service 752078
  </variablelist>
Packit Service 752078
</chapter>
Packit Service 752078
</book>