xsmp.xml revision 555991fd
1555991fdSmrg<?xml version="1.0" encoding="UTF-8" ?>
2555991fdSmrg<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3555991fdSmrg                   "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
4555991fdSmrg
5555991fdSmrg
6555991fdSmrg<!-- lifted from troff+ms+XMan by doclifter -->
7555991fdSmrg<book id="xsmpms">
8555991fdSmrg
9555991fdSmrg<bookinfo>
10555991fdSmrg   <title>X Session Management Protocol</title>
11555991fdSmrg   <subtitle>X Consortium Standard</subtitle>
12555991fdSmrg   <releaseinfo>X Version 11, Release 7</releaseinfo>
13555991fdSmrg   <authorgroup>
14555991fdSmrg      <author>
15555991fdSmrg         <firstname>Mike</firstname><surname>Wexler</surname>
16555991fdSmrg      </author>
17555991fdSmrg   </authorgroup>
18555991fdSmrg   <corpname>Kubota Pacific Computer, Inc</corpname>
19555991fdSmrg   <copyright>
20555991fdSmrg     <year>1992</year><year>1993</year><year>1994</year><year>2002</year>
21555991fdSmrg     <holder>The Open Group</holder>
22555991fdSmrg   </copyright>
23555991fdSmrg   <releaseinfo>Version 1.0</releaseinfo>
24555991fdSmrg   <affiliation><orgname>X Consortium</orgname></affiliation>
25555991fdSmrg   <productnumber>X Version 11, Release 7</productnumber>
26555991fdSmrg
27555991fdSmrg   <legalnotice>
28555991fdSmrg     <para>
29555991fdSmrgPermission is hereby granted, free of charge, to any person
30555991fdSmrgobtaining a copy of this software and associated documentation files
31555991fdSmrg(the &ldquo;Software&rdquo;), to deal in the Software without
32555991fdSmrgrestriction, including without limitation the rights to use, copy,
33555991fdSmrgmodify, merge, publish, distribute, sublicense, and/or sell copies of
34555991fdSmrgthe Software, and to permit persons to whom the Software is furnished
35555991fdSmrgto do so, subject to the following conditions:
36555991fdSmrg     </para>
37555991fdSmrg
38555991fdSmrg     <para>
39555991fdSmrgThe above copyright notice and this permission notice shall be
40555991fdSmrgincluded in all copies or substantial portions of the Software.
41555991fdSmrg     </para>
42555991fdSmrg
43555991fdSmrg     <para>
44555991fdSmrgTHE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY
45555991fdSmrgOF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
46555991fdSmrgWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
47555991fdSmrgNONINFRINGEMENT.  IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY
48555991fdSmrgCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
49555991fdSmrgTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
50555991fdSmrgSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
51555991fdSmrg     </para>
52555991fdSmrg
53555991fdSmrg     <para>
54555991fdSmrgExcept as contained in this notice, the name of the X Consortium
55555991fdSmrgshall not be used in advertising or otherwise to promote the sale, use
56555991fdSmrgor other dealings in this Software without prior written authorization
57555991fdSmrgfrom the X Consortium.
58555991fdSmrg     </para>
59555991fdSmrg
60555991fdSmrg     <para>
61555991fdSmrgX Window System is a trademark of The Open Group.
62555991fdSmrg     </para>
63555991fdSmrg   </legalnotice>
64555991fdSmrg
65555991fdSmrg   <abstract>
66555991fdSmrg     <para>
67555991fdSmrgThis document specifies a protocol that facilitates the management of
68555991fdSmrggroups of client applications by a session manager.  The session
69555991fdSmrgmanager can cause clients to save their state, to shut down, and to be
70555991fdSmrgrestarted into a previously saved state.  This protocol is layered on
71555991fdSmrgtop of the X.Org <acronym>ICE</acronym> protocol.
72555991fdSmrg     </para>
73555991fdSmrg   </abstract>
74555991fdSmrg
75555991fdSmrg</bookinfo>
76555991fdSmrg
77555991fdSmrg<chapter id="acknowledgments">
78555991fdSmrg  <title>Acknowledgments</title>
79555991fdSmrg
80555991fdSmrg  <para>
81555991fdSmrgFirst I would like to thank the entire <acronym>ICCCM</acronym> and Intrinsics
82555991fdSmrgworking groups for the comments and suggestions. I would like to make special
83555991fdSmrgthanks to the following people (in alphabetical order), Jordan Brown,
84555991fdSmrgEllis Cohen, Donna Converse, Vania Joloboff, Stuart Marks, Ralph Mor
85555991fdSmrgand Bob Scheifler.
86555991fdSmrg  </para>
87555991fdSmrg</chapter>
88555991fdSmrg
89555991fdSmrg<chapter id="definitions_and_goals">
90555991fdSmrg  <title>Definitions and Goals</title>
91555991fdSmrg
92555991fdSmrg  <para>
93555991fdSmrgThe purpose of the X Session Management Protocol (<acronym>XSMP</acronym>) is
94555991fdSmrgto provide a uniform mechanism for users to save and restore their sessions.
95555991fdSmrgA <firstterm>session</firstterm> is a group of clients, each
96555991fdSmrgof which has a particular state.  The session is controlled by a
97555991fdSmrgnetwork service called the <firstterm>session manager</firstterm>.
98555991fdSmrgThe session manager issues commands to its
99555991fdSmrgclients on behalf of the user.  These commands may cause clients to
100555991fdSmrgsave their state or to terminate.  It is expected that the client will
101555991fdSmrgsave its state in such a way that the client can be restarted at a
102555991fdSmrglater time and resume its operation as if it had never been
103555991fdSmrgterminated.  A client's state might include information about the file
104555991fdSmrgcurrently being edited, the current position of the insertion point
105555991fdSmrgwithin the file, or the start of an uncommitted transaction.  The
106555991fdSmrgmeans by which clients are restarted is unspecified by this
107555991fdSmrgprotocol.
108555991fdSmrg  </para>
109555991fdSmrg
110555991fdSmrg  <para>
111555991fdSmrgFor purposes of this protocol, a <firstterm>client</firstterm>
112555991fdSmrgof the session manager is defined as a connection to the session
113555991fdSmrgmanager.  A client is typically, though not necessarily, a process
114555991fdSmrgrunning an application program connected to an X Window System
115555991fdSmrgdisplay.  However, a client may be connected to more than one X
116555991fdSmrgdisplay or not be connected to any X displays at all.
117555991fdSmrg  </para>
118555991fdSmrg
119555991fdSmrg  <para>
120555991fdSmrgThis protocol is layered on top of the X Consortium's <acronym>ICE</acronym> protocol and
121555991fdSmrgrelies on the <acronym>ICE</acronym> protocol to handle connection management and authentication.
122555991fdSmrg  </para>
123555991fdSmrg
124555991fdSmrg</chapter>
125555991fdSmrg
126555991fdSmrg<chapter id="overview_of_the_protocol">
127555991fdSmrg  <title>Overview of the Protocol</title>
128555991fdSmrg
129555991fdSmrg  <para>
130555991fdSmrgClients use XSMP to register themselves with the session manager (SM).
131555991fdSmrgWhen a client starts up, it should connect to the SM.  The client
132555991fdSmrgshould remain connected for as long as it runs.  A client may resign
133555991fdSmrgfrom the session by issuing the proper protocol messages before
134555991fdSmrgdisconnecting.  Termination of the connection without notice will be
135555991fdSmrgtaken as an indication that the client died unexpectedly.
136555991fdSmrg  </para>
137555991fdSmrg
138555991fdSmrg  <para>
139555991fdSmrgClients are expected to save their state in such a way as to allow
140555991fdSmrgmultiple instantiations of themselves to be managed independently.  A
141555991fdSmrgunique value called a <firstterm>client-ID</firstterm> is
142555991fdSmrgprovided by the protocol for the purpose of disambiguating multiple
143555991fdSmrginstantiations of clients.  Clients may use this ID, for example, as
144555991fdSmrgpart of a filename in which to store the state for a particular
145555991fdSmrginstantiation.  The client-ID should be saved as part of the command
146555991fdSmrgused to restart this client
147555991fdSmrg(the <property>RestartCommand</property>) so that the client
148555991fdSmrgwill retain the same ID after it is restarted.  Certain small pieces
149555991fdSmrgof state might also be stored in the RestartCommand.  For example, an
150555991fdSmrgX11 client might place a '-twoWindow' option in its RestartCommand to
151555991fdSmrgindicate that it should start up in two window mode when it is
152555991fdSmrgrestarted.
153555991fdSmrg  </para>
154555991fdSmrg
155555991fdSmrg  <para>
156555991fdSmrgThe client finds the network address of the SM in a system-dependent
157555991fdSmrgway.  On <acronym>POSIX</acronym> systems an environment
158555991fdSmrgvariable called <envar>SESSION_MANAGER</envar>
159555991fdSmrgwill contain a list of network IDs.  Each id will contain the
160555991fdSmrgtransport name followed by a slash and the (transport-specific)
161555991fdSmrgaddress.  A TCP/IP address would look like this:
162555991fdSmrg    <informalexample><para>
163555991fdSmrg      <literal>tcp/</literal><replaceable>hostname</replaceable><literal>:</literal><replaceable>portnumber</replaceable>
164555991fdSmrg    </para></informalexample>
165555991fdSmrgwhere the hostname is a fully qualified domain name.
166555991fdSmrgA Unix Domain address looks like this:
167555991fdSmrg    <informalexample><para>
168555991fdSmrg	<literal>local/</literal><replaceable>hostname</replaceable><literal>:</literal><replaceable>path</replaceable>
169555991fdSmrg    </para></informalexample>
170555991fdSmrgA DECnet address would look like this:
171555991fdSmrg    <informalexample><para>
172555991fdSmrg	<literal>decnet/</literal><replaceable>nodename</replaceable><literal>::</literal><replaceable>objname</replaceable>
173555991fdSmrg    </para></informalexample>
174555991fdSmrg  </para>
175555991fdSmrg
176555991fdSmrg  <para>
177555991fdSmrgIf multiple network IDs are specified, they should be separated by commas.
178555991fdSmrg  </para>
179555991fdSmrg
180555991fdSmrg  <note><title>Rationale</title>
181555991fdSmrg    <para>
182555991fdSmrgThere was much discussion over whether the XSMP protocol should use X
183555991fdSmrgas the transport protocol or whether it should use its own independent
184555991fdSmrgtransport.  It was decided that it would use an independent protocol
185555991fdSmrgfor several reasons.  First, the Session Manager should be able to
186555991fdSmrgmanage programs that do not maintain an X connection.  Second, the X
187555991fdSmrgprotocol is not appropriate to use as a general-purpose transport
188555991fdSmrgprotocol.  Third, a session might span multiple displays.
189555991fdSmrg    </para>
190555991fdSmrg
191555991fdSmrg    <para>
192555991fdSmrgThe protocol is connection based, because there is no other way for
193555991fdSmrgthe SM to determine reliably when clients terminate.
194555991fdSmrg    </para>
195555991fdSmrg
196555991fdSmrg    <para>
197555991fdSmrgIt should be noted that this protocol introduces another single point
198555991fdSmrgof failure into the system.  Although it is possible for clients to
199555991fdSmrgcontinue running after the SM has exited, this will probably not be
200555991fdSmrgthe case in normal practice.  Normally the program that starts the SM
201555991fdSmrgwill consider the session to be terminated when the SM exits (either
202555991fdSmrgnormally or abnormally).
203555991fdSmrg    </para>
204555991fdSmrg
205555991fdSmrg    <para>
206555991fdSmrgTo get around this would require some sort of rendezvous server that
207555991fdSmrgwould also introduce a single point of failure.  In the absence of a
208555991fdSmrggenerally available rendezvous server, XSMP is kept simple in the
209555991fdSmrghopes of making simple reliable SMs.
210555991fdSmrg    </para>
211555991fdSmrg  </note>
212555991fdSmrg
213555991fdSmrg  <para>
214555991fdSmrgSome clients may wish to manage the programs they start.  For example,
215555991fdSmrga mail program could start a text editor for editing the text of a
216555991fdSmrgmail message.  A client that does this is a session manager itself; it
217555991fdSmrgshould supply the clients it starts with the appropriate connection
218555991fdSmrginformation (i.e., the <envar>SESSION_MANAGER</envar> environment variable)
219555991fdSmrgthat specifies a connection to itself instead of to the top level session
220555991fdSmrgmanager.
221555991fdSmrg  </para>
222555991fdSmrg
223555991fdSmrg  <para>
224555991fdSmrgEach client has associated with it a list of properties.  A property
225555991fdSmrgset by one client is not visible to any other client.  These
226555991fdSmrgproperties are used for the client to inform the SM of the client's
227555991fdSmrgcurrent state.  When a client initially connects to the SM, there are
228555991fdSmrgno properties set.
229555991fdSmrg  </para>
230555991fdSmrg</chapter>
231555991fdSmrg
232555991fdSmrg<chapter id="data_types">
233555991fdSmrg  <title>Data Types</title>
234555991fdSmrg
235555991fdSmrg  <para>
236555991fdSmrgXSMP messages contain several types of data.  Both the SM and the
237555991fdSmrgclient always send messages in their native byte order.  Thus, both
238555991fdSmrgsides may need to byte-swap the messages received.  The need to do
239555991fdSmrgbyte-swapping is determined at run-time by the <acronym>ICE</acronym> protocol.
240555991fdSmrg  </para>
241555991fdSmrg
242555991fdSmrg  <para>
243555991fdSmrgIf an invalid value is specified for a field of any of the enumerated
244555991fdSmrgtypes, a <errorname>BadValue</errorname> error message must be sent by
245555991fdSmrgthe receiver of the message to the sender of the message.
246555991fdSmrg  </para>
247555991fdSmrg
248555991fdSmrg<informaltable pgwide='0' frame='none'>
249555991fdSmrg  <tgroup cols='2' align='left'>
250555991fdSmrg    <colspec colname='c1'/>
251555991fdSmrg    <colspec colname='c2'/>
252555991fdSmrg    <thead>
253555991fdSmrg      <row>
254555991fdSmrg        <entry>Type Name</entry>
255555991fdSmrg        <entry>Description</entry>
256555991fdSmrg      </row>
257555991fdSmrg    </thead>
258555991fdSmrg    <tbody>
259555991fdSmrg      <row>
260555991fdSmrg        <entry>BOOL</entry>
261555991fdSmrg        <entry><para><constant>False</constant> or <constant>True</constant></para></entry>
262555991fdSmrg      </row>
263555991fdSmrg      <row>
264555991fdSmrg        <entry>INTERACT_STYLE</entry>
265555991fdSmrg        <entry><function>None</function> <function>Errors</function> or <function>Any</function></entry>
266555991fdSmrg      </row>
267555991fdSmrg      <row>
268555991fdSmrg        <entry>DIALOG_TYPE</entry>
269555991fdSmrg        <entry><function>Error</function> or <function>Normal</function></entry>
270555991fdSmrg      </row>
271555991fdSmrg      <row>
272555991fdSmrg        <entry>SAVE_TYPE</entry>
273555991fdSmrg        <entry><function>Global</function> <function>Local</function> or <function>Both</function></entry>
274555991fdSmrg      </row>
275555991fdSmrg      <row>
276555991fdSmrg        <entry>CARD8</entry>
277555991fdSmrg        <entry>a one-byte unsigned integer</entry>
278555991fdSmrg      </row>
279555991fdSmrg      <row>
280555991fdSmrg        <entry>CARD16</entry>
281555991fdSmrg        <entry>a two-byte unsigned integer</entry>
282555991fdSmrg      </row>
283555991fdSmrg      <row>
284555991fdSmrg        <entry>CARD32</entry>
285555991fdSmrg        <entry>a four-byte unsigned integer</entry>
286555991fdSmrg      </row>
287555991fdSmrg      <row>
288555991fdSmrg        <entry>ARRAY8</entry>
289555991fdSmrg        <entry>a sequence of CARD8s</entry>
290555991fdSmrg      </row>
291555991fdSmrg      <row>
292555991fdSmrg        <entry>LISTofARRAY8</entry>
293555991fdSmrg        <entry>a sequence of ARRAY8s</entry>
294555991fdSmrg      </row>
295555991fdSmrg      <row>
296555991fdSmrg        <entry>PROPERTY</entry>
297555991fdSmrg        <entry>a property name (an ARRAY8), a type name, and a value of that type</entry>
298555991fdSmrg      </row>
299555991fdSmrg      <row>
300555991fdSmrg        <entry>LISTofPROPERTY</entry>
301555991fdSmrg        <entry>a counted collection of &shy;PROPERTYs.</entry>
302555991fdSmrg      </row>
303555991fdSmrg    </tbody>
304555991fdSmrg  </tgroup>
305555991fdSmrg</informaltable>
306555991fdSmrg
307555991fdSmrg</chapter>
308555991fdSmrg
309555991fdSmrg<chapter id="protocol_setup_and_message_format">
310555991fdSmrg  <title>Protocol Setup and Message Format</title>
311555991fdSmrg
312555991fdSmrg  <para>
313555991fdSmrgTo start the XSMP protocol, the client sends the server an
314555991fdSmrg<acronym>ICE</acronym> <function>ProtocolSetup</function> message.  All XSMP messages are
315555991fdSmrgin the standard <acronym>ICE</acronym> message format.  The message's major opcode is
316555991fdSmrgassigned to XSMP by <acronym>ICE</acronym> at run-time.  The different parties (client
317555991fdSmrgand SM) may be assigned different major opcodes for XSMP.  Once
318555991fdSmrgassigned, all XSMP messages issued by this party will use the same
319555991fdSmrgmajor opcode.  The message's minor opcode specifies which protocol
320555991fdSmrgmessage this message contains.
321555991fdSmrg  </para>
322555991fdSmrg</chapter>
323555991fdSmrg
324555991fdSmrg<chapter id="client_identification_string">
325555991fdSmrg  <title>Client Identification String</title>
326555991fdSmrg  <para>
327555991fdSmrgA client ID is a string of XPCS characters encoded in ISO Latin 1 (ISO
328555991fdSmrg8859-1).  No null characters are allowed in this string.  The client
329555991fdSmrgID string is used in the <function>Register&shy;Client</function>
330555991fdSmrgand <function>Register&shy;ClientReply</function> messages.
331555991fdSmrg  </para>
332555991fdSmrg
333555991fdSmrg  <para>
334555991fdSmrgClient IDs consist of the pieces described below.  The ID is formed by
335555991fdSmrgconcatenating the pieces in sequence, without separator characters.
336555991fdSmrgAll pieces are padded on the left with '<literal>0</literal>'
337555991fdSmrgcharacters so as to fill the specified length.  Decimal numbers are
338555991fdSmrgencoded using the characters '<literal>0</literal>' through
339555991fdSmrg'<literal>9</literal>', and hexadecimal numbers using the characters
340555991fdSmrg'<literal>0</literal>' through '<literal>9</literal>' and
341555991fdSmrg'<literal>A</literal>' through '<literal>F</literal>'.
342555991fdSmrg  </para>
343555991fdSmrg
344555991fdSmrg  <itemizedlist mark='bullet'>
345555991fdSmrg     <listitem><para>
346555991fdSmrgVersion.  This is currently the character '<literal>1</literal>'.
347555991fdSmrg     </para></listitem>
348555991fdSmrg     <listitem>
349555991fdSmrg       <para>Address type and address.  The address type will be one of
350555991fdSmrg<literallayout remap='DS'>
351555991fdSmrg     '<literal>1</literal>'     a 4-byte IPv4 address encoded as 8 hexadecimal digits
352555991fdSmrg     '<literal>2</literal>'     a 6-byte DECNET address encoded as 12 hexadecimal digits
353555991fdSmrg     '<literal>6</literal>'     a 16-byte IPv6 address encoded as 32 hexadecimal digits
354555991fdSmrg</literallayout>
355555991fdSmrg       </para>
356555991fdSmrg
357555991fdSmrg       <para>
358555991fdSmrgThe address is the one of the network addresses of the machine where
359555991fdSmrgthe session manager (not the client) is running.  For example, the IP
360555991fdSmrgaddress 198.112.45.11 would be encoded as the string
361555991fdSmrg"<literal>QC6702D0B</literal>".
362555991fdSmrg       </para>
363555991fdSmrg     </listitem>
364555991fdSmrg     <listitem><para>
365555991fdSmrg	 Time stamp.  A 13-digit decimal number specifying
366555991fdSmrg	 the number of milliseconds since 00:00:00 UTC, January 1, 1970.
367555991fdSmrg     </para></listitem>
368555991fdSmrg     <listitem>
369555991fdSmrg       <para>
370555991fdSmrg	Process-ID type and process-ID.  The process-ID type will be one of
371555991fdSmrg<literallayout remap='DS'>
372555991fdSmrg     '<literal>1</literal>'	a <acronym>POSIX</acronym> process-ID encoded as a 10-digit decimal number.
373555991fdSmrg</literallayout>
374555991fdSmrg       </para>
375555991fdSmrg       <para>
376555991fdSmrgThe process-ID is the process-ID of the session manager, not of a client.
377555991fdSmrg       </para>
378555991fdSmrg     </listitem>
379555991fdSmrg     <listitem>
380555991fdSmrg       <para>
381555991fdSmrgSequence number.  This is a four-digit decimal number.  It is
382555991fdSmrgincremented every time the session manager creates an ID.  After
383555991fdSmrgreaching "Q9999" it wraps to "Q0000".
384555991fdSmrg       </para>
385555991fdSmrg       <note><title>Rationale</title>
386555991fdSmrg	 <para>
387555991fdSmrgOnce a client ID has been assigned to the client, the client keeps
388555991fdSmrgthis ID indefinitely.  If the client is terminated and restarted, it
389555991fdSmrgwill be reassigned the same ID.  It is desirable to be able to pass
390555991fdSmrgclient IDs around from machine to machine, from user to user, and from
391555991fdSmrgsession manager to session manager, while retaining the identity of
392555991fdSmrgthe client.  This, combined with the indefinite persistence of client
393555991fdSmrgIDs, means that client IDs need to be globally unique.  The
394555991fdSmrgconstruction specified above will ensure that any client ID created by
395555991fdSmrgany user, session manager, and machine will be different from any other.
396555991fdSmrg	 </para>
397555991fdSmrg       </note>
398555991fdSmrg     </listitem>
399555991fdSmrg  </itemizedlist>
400555991fdSmrg</chapter>
401555991fdSmrg
402555991fdSmrg<chapter id="protocol">
403555991fdSmrg  <title>Protocol</title>
404555991fdSmrg  <para>
405555991fdSmrgThe protocol consists of a sequence of messages as described below.
406555991fdSmrgEach message type is specified by an <acronym>ICE</acronym> minor opcode.  A given
407555991fdSmrgmessage type is sent either from a client to the session manager or
408555991fdSmrgfrom the session manager to a client; the appropriate direction is
409555991fdSmrglisted with each message's description.  For each message type, the
410555991fdSmrgset of valid responses and possible error messages are listed.  The
411555991fdSmrg<acronym>ICE</acronym> severity is given in parentheses following each error class.
412555991fdSmrg  </para>
413555991fdSmrg
414555991fdSmrg  <synopsis>
415555991fdSmrg<function>RegisterClient</function> [Client &rarr; SM]
416555991fdSmrg
417555991fdSmrg  <parameter>previous-ID</parameter>: ARRAY8
418555991fdSmrg
419555991fdSmrg  Valid Responses: <function>RegisterClientReply</function>
420555991fdSmrg
421555991fdSmrg  Possible Errors: <errorname>BadValue</errorname> (<symbol role='Pn'>CanContinue</symbol>)
422555991fdSmrg  </synopsis>
423555991fdSmrg
424555991fdSmrg  <para>
425555991fdSmrgThe client must send this message to the SM to register the client's
426555991fdSmrgexistence.  If a client is being restarted from a previous session,
427555991fdSmrgthe <parameter>previous-ID</parameter> field must contain the client
428555991fdSmrgID from the previous session.  For new clients, 
429555991fdSmrg<parameter>previous-ID</parameter> should be of zero length.
430555991fdSmrg  </para>
431555991fdSmrg
432555991fdSmrg  <para>
433555991fdSmrgIf <parameter>previous-ID</parameter> is not valid, 
434555991fdSmrgthe SM will send a <errorname>BadValue</errorname>
435555991fdSmrgerror message to the client.  At this point the SM reverts to the
436555991fdSmrgregister state and waits for another <function>RegisterClient</function>
437555991fdSmrgThe client should then send a <function>RegisterClient</function> with a
438555991fdSmrgnull <parameter>previous-ID</parameter> field.
439555991fdSmrg  </para>
440555991fdSmrg
441555991fdSmrg  <synopsis>
442555991fdSmrg<function>RegisterClientReply</function> [Client &larr; SM]
443555991fdSmrg
444555991fdSmrg  <parameter>client-ID</parameter>: <type>ARRAY8</type>
445555991fdSmrg  </synopsis>
446555991fdSmrg
447555991fdSmrg  <para>
448555991fdSmrgThe <parameter>client-ID</parameter> specifies a unique identification
449555991fdSmrgfor this client.  If the client had specified an ID in the 
450555991fdSmrg<parameter>previous-ID</parameter> field of the 
451555991fdSmrg<function>RegisterClient</function> message, 
452555991fdSmrg<parameter>client-ID</parameter> will be identical to the previously
453555991fdSmrgspecified ID.  If <parameter>previous-ID</parameter> was null,
454555991fdSmrg<parameter>client-ID</parameter> will be a unique ID freshly generated
455555991fdSmrgby the SM.  The <parameter>client-ID</parameter> format is specified in
456555991fdSmrg<link linkend="client_identification_string">section 6</link>.
457555991fdSmrg  </para>
458555991fdSmrg
459555991fdSmrg  <para>
460555991fdSmrgIf the client didn't supply a <parameter>previous-ID</parameter> field to
461555991fdSmrgthe <function>Register&shy;Client</function> message, the SM must send
462555991fdSmrga <function>SaveYourself</function> message with type = Local,
463555991fdSmrgshutdown = False, interact-style = None, and fast = False immediately
464555991fdSmrgafter the <function>RegisterClientReply</function> The client should
465555991fdSmrgrespond to this like any other <function>Save&shy;Yourself</function>
466555991fdSmrgmessage.
467555991fdSmrg  </para>
468555991fdSmrg
469555991fdSmrg  <synopsis>
470555991fdSmrg<function>SaveYourself</function> [Client &larr; SM]
471555991fdSmrg
472555991fdSmrg  <parameter>type</parameter>: <type>SAVE_TYPE</type>
473555991fdSmrg  <parameter>shutdown</parameter>: <type>BOOL</type>
474555991fdSmrg  <parameter>interact-style</parameter>: <type>INTERACT_STYLE</type>
475555991fdSmrg  <parameter>fast</parameter>: <type>BOOL</type>
476555991fdSmrg
477555991fdSmrg  Valid Responses:
478555991fdSmrg    <function>SetProperties</function>
479555991fdSmrg    <function>DeleteProperties</function>
480555991fdSmrg    <function>GetProperties</function>
481555991fdSmrg    <function>SaveYourselfDone</function>
482555991fdSmrg    <function>SaveYourselfPhase2Request</function>
483555991fdSmrg    <function>InteractRequest</function>
484555991fdSmrg  </synopsis>
485555991fdSmrg
486555991fdSmrg  <para>
487555991fdSmrgThe SM sends this message to a client to ask it to save its state.
488555991fdSmrgThe client writes a state file, if necessary, and, if necessary,
489555991fdSmrguses <function>SetProperties</function> to inform the SM of how to
490555991fdSmrgrestart it and how to discard the saved state.  During this process it
491555991fdSmrgcan, if allowed by <parameter>interact-style</parameter>, request permission
492555991fdSmrgto interact with
493555991fdSmrgthe user by sending an <function>InteractRequest</function> message.
494555991fdSmrgAfter the state has been saved, or if it cannot be successfully saved,
495555991fdSmrgand the properties are appropriately set, the client sends
496555991fdSmrga <function>SaveYourselfDone</function> message.  If the client wants
497555991fdSmrgto save additional information after all the other clients have
498555991fdSmrgfinished changing their own state, the client should
499555991fdSmrgsend <function>SaveYourselfPhase2Request</function> instead
500555991fdSmrgof <function>SaveYourselfDone</function> The client must then freeze
501555991fdSmrginteraction with the user and wait until it receives
502555991fdSmrga <function>SaveComplete</function> <function>Die</function> or
503555991fdSmrga <function>ShutdownCancelled</function> message.
504555991fdSmrg  </para>
505555991fdSmrg
506555991fdSmrg  <para>
507555991fdSmrgIf <parameter>interact-style</parameter> is <function>None</function> the
508555991fdSmrgclient must not interact with the user while saving state.  If the
509555991fdSmrg<parameter>interact-style</parameter>
510555991fdSmrgis <function>Errors</function> the client may interact with the user
511555991fdSmrgonly if an error condition arises.  If <parameter>interact-style</parameter>
512555991fdSmrgis <function>Any</function> then the client may interact with the user
513555991fdSmrgfor any purpose.  This is done by sending
514555991fdSmrgan <function>Interact&shy;Request</function> message.  The SM will
515555991fdSmrgsend an <function>Interact</function> message to each client that sent
516555991fdSmrgan <function>Interact&shy;Request</function> The client must postpone
517555991fdSmrgall interaction until it gets the <function>Interact</function>
518555991fdSmrgmessage.  When the client is done interacting it should send the SM
519555991fdSmrgan <function>Interact&shy;Done</function> message.
520555991fdSmrgThe <function>Interact&shy;Request</function> message can be sent any
521555991fdSmrgtime after a <function>Save&shy;Yourself</function> and before
522555991fdSmrga <function>Save&shy;Yourself&shy;Done</function>
523555991fdSmrg  </para>
524555991fdSmrg
525555991fdSmrg  <para>
526555991fdSmrgUnusual circumstances may dictate multiple interactions.  The client
527555991fdSmrgmay initiate as many <function>Interact&shy;Request</function>
528555991fdSmrg- <function>Interact</function> - <function>InteractDone</function>
529555991fdSmrgsequences as it needs before it sends <function>SaveYourselfDone</function>
530555991fdSmrg  </para>
531555991fdSmrg
532555991fdSmrg  <para>
533555991fdSmrgWhen a client receives <function>Save&shy;Yourself</function> and has
534555991fdSmrgnot yet responded <function>Save&shy;Yourself&shy;Done</function> to a
535555991fdSmrgprevious <function>Save&shy;Yourself</function> it must send
536555991fdSmrga <function>Save&shy;Yourself&shy;Done</function> and may then begin
537555991fdSmrgresponding as appropriate to the newly received
538555991fdSmrg<function>Save&shy;Yourself</function>
539555991fdSmrg</para>
540555991fdSmrg
541555991fdSmrg  <para>
542555991fdSmrgThe <parameter>type</parameter> field specifies the type of information that
543555991fdSmrgshould be saved: <function>Global</function> <function>Local</function>
544555991fdSmrgor <function>Both</function> The <function>Local</function> type
545555991fdSmrgindicates that the application must update the properties to reflect
546555991fdSmrgits current state, send
547555991fdSmrga <function>Save&shy;Yourself&shy;Done</function> and continue.
548555991fdSmrgSpecifically it should save enough information to restore the state as
549555991fdSmrgseen by the user of this client.  It should not affect the state as
550555991fdSmrgseen by other users.  The <function>Global</function> type indicates
551555991fdSmrgthat the user wants the client to commit all of its data to permanent,
552555991fdSmrgglobally-accessible storage.  <function>Both</function> indicates that
553555991fdSmrgthe client should do both of these.  If <function>Both</function> is
554555991fdSmrgspecified, the client should first commit the data to permanent
555555991fdSmrgstorage before updating its SM properties.
556555991fdSmrg  </para>
557555991fdSmrg
558555991fdSmrg  <note><title>Examples</title>
559555991fdSmrg    <para>
560555991fdSmrgIf a word processor was sent a <function>SaveYourself</function> with
561555991fdSmrga type of <function>Local</function> it could create a temporary file
562555991fdSmrgthat included the current contents of the file, the location of the
563555991fdSmrgcursor, and other aspects of the current editing session.  It would
564555991fdSmrgthen update its <function>Restart&shy;Command</function> property with
565555991fdSmrgenough information to find the temporary file, and
566555991fdSmrgits <function>Discard&shy;Command</function> with enough information
567555991fdSmrgto remove it.
568555991fdSmrg    </para>
569555991fdSmrg
570555991fdSmrg    <para>
571555991fdSmrgIf a word processor was sent a <function>SaveYourself</function> with
572555991fdSmrga type of <function>Global</function> it would simply save the
573555991fdSmrgcurrently edited file.
574555991fdSmrg    </para>
575555991fdSmrg
576555991fdSmrg    <para>
577555991fdSmrgIf a word processor was sent a <function>SaveYourself</function> with
578555991fdSmrga type of <function>Both</function> it would first save the currently
579555991fdSmrgedited file.  It would then create a temporary file with information
580555991fdSmrgsuch as the current position of the cursor and what file is being
581555991fdSmrgedited.  It would then update
582555991fdSmrgits <function>Restart&shy;Command</function> property with enough
583555991fdSmrginformation to find the temporary file, and
584555991fdSmrgits <function>Discard&shy;Command</function> with enough information
585555991fdSmrgto remove it.
586555991fdSmrg    </para>
587555991fdSmrg
588555991fdSmrg    <para>
589555991fdSmrgOnce the SM has send <function>SaveYourself</function> to a client, it
590555991fdSmrgcan't send another <function>SaveYourself</function> to that client until
591555991fdSmrgthe client either responds with a <function>SaveYourselfDone</function> or
592555991fdSmrgthe SM sends a <function>ShutdownCancelled</function>
593555991fdSmrg    </para>
594555991fdSmrg  </note>
595555991fdSmrg
596555991fdSmrg  <note><title>Advice to Implementors</title>
597555991fdSmrg    <para>
598555991fdSmrgIf the client stores local any state in a file or similar "external"
599555991fdSmrgstorage, it must create a distinct copy in response to
600555991fdSmrgeach <function>SaveYourself</function> message.
601555991fdSmrgIt <emphasis remap='I'>must not</emphasis> simply refer to a previous
602555991fdSmrgcopy, because the SM may discard that previous saved state using
603555991fdSmrga <function>DiscardCommand</function> without knowing that it is
604555991fdSmrgneeded for the new checkpoint.
605555991fdSmrg    </para>
606555991fdSmrg  </note>
607555991fdSmrg
608555991fdSmrg  <para>
609555991fdSmrgThe <parameter>shutdown</parameter> field specifies whether the system is
610555991fdSmrgbeing shut down.
611555991fdSmrg  </para>
612555991fdSmrg
613555991fdSmrg  <note><title>Rationale</title>
614555991fdSmrg    <para>
615555991fdSmrgThe interaction may be different depending on whether or not shutdown is set.
616555991fdSmrg    </para>
617555991fdSmrg  </note>
618555991fdSmrg
619555991fdSmrg  <para>
620555991fdSmrgThe client must save and then must prevent interaction until it
621555991fdSmrgreceives a <function>SaveComplete</function> <function>Die</function>
622555991fdSmrgor a <function>Shutdown&shy;Cancelled</function> because anything the
623555991fdSmrguser does after the save will be lost.
624555991fdSmrg  </para>
625555991fdSmrg
626555991fdSmrg  <para>
627555991fdSmrgThe <parameter>fast</parameter> field specifies whether or not the client
628555991fdSmrgshould save its state as quickly as possible.  For example, if the SM knows
629555991fdSmrgthat power is about to fail, it should set the <parameter>fast</parameter>
630555991fdSmrgfield to <constant>True</constant>.
631555991fdSmrg  </para>
632555991fdSmrg
633555991fdSmrg  <synopsis>
634555991fdSmrg<function>SaveYourselfPhase2</function> [Client &rarr; SM]
635555991fdSmrg
636555991fdSmrg  Valid Responses:
637555991fdSmrg    <function>SetProperties</function>
638555991fdSmrg    <function>DeleteProperties</function>
639555991fdSmrg    <function>GetProperties</function>
640555991fdSmrg    <function>SaveYourselfDone</function>
641555991fdSmrg    <function>InteractRequest</function>
642555991fdSmrg  </synopsis>
643555991fdSmrg
644555991fdSmrg  <para>
645555991fdSmrgThe SM sends this message to a client that has previously sent
646555991fdSmrga <function>SaveYourselfPhase2Request</function> message.  This
647555991fdSmrgmessage informs the client that all other clients are in a fixed state
648555991fdSmrgand this client can save state that is associated with other clients.
649555991fdSmrg  </para>
650555991fdSmrg
651555991fdSmrg  <note><title>Rationale</title>
652555991fdSmrg    <para>
653555991fdSmrgClients that manager other clients (window managers, workspace
654555991fdSmrgmanagers, etc) need to know when all clients they are managing are
655555991fdSmrgidle, so that the manager can save state related to each of the
656555991fdSmrgclients without being concerned with that state changing.
657555991fdSmrg    </para>
658555991fdSmrg  </note>
659555991fdSmrg  <para>
660555991fdSmrgThe client writes a state file, if necessary, and, if necessary,
661555991fdSmrguses <function>SetProperties</function> to inform the SM of how to
662555991fdSmrgrestart it and how to discard the saved state.  During this process it
663555991fdSmrgcan request permission to interact with the user by sending
664555991fdSmrgan <function>InteractRequest</function> message.  This should only be
665555991fdSmrgdone if an error occurs that requires user interaction to resolve.
666555991fdSmrgAfter the state has been saved, or if it cannot be successfully saved,
667555991fdSmrgand the properties are appropriately set, the client sends
668555991fdSmrga <function>SaveYourselfDone</function> message.
669555991fdSmrg  </para>
670555991fdSmrg
671555991fdSmrg  <synopsis>
672555991fdSmrg<function>SaveYourselfRequest</function> [Client &rarr; SM]
673555991fdSmrg
674555991fdSmrg  <parameter>type</parameter>: <type>SAVE_TYPE</type>
675555991fdSmrg  <parameter>shutdown</parameter>: <type>BOOL</type>
676555991fdSmrg  <parameter>interact-style</parameter>: <type>INTERACT_STYLE</type>
677555991fdSmrg  <parameter>fast</parameter>: <type>BOOL</type>
678555991fdSmrg  <parameter>global</parameter>: <type>BOOL</type>
679555991fdSmrg
680555991fdSmrg  Valid Responses: <function>SaveYourself</function>
681555991fdSmrg  </synopsis>
682555991fdSmrg
683555991fdSmrg  <para>
684555991fdSmrgAn application sends this to the SM to request a checkpoint.  When the
685555991fdSmrgSM receives this request it may generate a <function>SaveYourself</function>
686555991fdSmrgmessage in response and it may leave the fields intact.
687555991fdSmrg  </para>
688555991fdSmrg
689555991fdSmrg  <note><title>Example</title> <para>
690555991fdSmrgA vendor of a <acronym>UPS</acronym> (Uninterruptible Power Supply)
691555991fdSmrgmight include an SM client that would monitor the status of
692555991fdSmrgthe <acronym>UPS</acronym> and generate a fast shutdown if the power
693555991fdSmrgis about to be lost.
694555991fdSmrg  </para></note>
695555991fdSmrg
696555991fdSmrg  <para>
697555991fdSmrgIf <parameter>global</parameter> is set to <constant>True</constant> then the
698555991fdSmrgresulting <function>SaveYourself</function> should be sent to all
699555991fdSmrgapplications.  If <parameter>global</parameter> is set to
700555991fdSmrg<constant>False</constant> then the
701555991fdSmrgresulting <function>SaveYourself</function> should be sent to the
702555991fdSmrgapplication that sent the <function>Save&shy;Yourself&shy;Request</function>
703555991fdSmrg  </para>
704555991fdSmrg
705555991fdSmrg  <synopsis>
706555991fdSmrg<function>InteractRequest</function> [Client &rarr; SM]
707555991fdSmrg
708555991fdSmrg  <parameter>dialog-type</parameter>: <type>DIALOG_TYPE</type>
709555991fdSmrg
710555991fdSmrg  Valid Responses: <function>Interact</function> <function>ShutdownCancelled</function>
711555991fdSmrg
712555991fdSmrg  Possible Errors: <errorname>BadState</errorname> (<symbol role='Pn'>CanContinue</symbol>)
713555991fdSmrg  </synopsis>
714555991fdSmrg
715555991fdSmrg  <para>
716555991fdSmrgDuring a checkpoint or session-save operation, only one client at a
717555991fdSmrgtime might be granted the privilege of interacting with the user.
718555991fdSmrgThe <function>InteractRequest</function> message causes the SM to emit
719555991fdSmrgan <function>Interact</function> message at some later time if the
720555991fdSmrgshutdown is not cancelled by another client first.
721555991fdSmrg  </para>
722555991fdSmrg
723555991fdSmrg  <para>
724555991fdSmrgThe <parameter>dialog-type</parameter> field specifies either
725555991fdSmrg<function>Errors</function> indicating that the client wants to start an
726555991fdSmrgerror dialog or <function>Normal</function> meaning the client wishes
727555991fdSmrgto start a non-error dialog.
728555991fdSmrg  </para>
729555991fdSmrg
730555991fdSmrg  <synopsis>
731555991fdSmrg<function>Interact</function> [Client &larr; SM]
732555991fdSmrg
733555991fdSmrg  Valid Responses: <function>InteractDone</function>
734555991fdSmrg  </synopsis>
735555991fdSmrg
736555991fdSmrg  <para>
737555991fdSmrgThis message grants the client the privilege of interacting with the
738555991fdSmrguser.  When the client is done interacting with the user it must send
739555991fdSmrgan <function>InteractDone</function> message to the SM unless a
740555991fdSmrgshutdown cancel is received.
741555991fdSmrg  </para>
742555991fdSmrg  <note><title>Advice to Implementors</title>
743555991fdSmrg    <para>If a client receives a ShutdownCancelled
744555991fdSmrgafter receiving an <function>Interact</function> message, but before
745555991fdSmrgsending a <function>InteractDone</function> the client should abort
746555991fdSmrgthe interaction and send a <function>SaveYourselfDone</function>
747555991fdSmrg  </para></note>
748555991fdSmrg
749555991fdSmrg  <synopsis>
750555991fdSmrg<function>InteractDone</function> [Client &rarr; SM]
751555991fdSmrg
752555991fdSmrg  <parameter>cancel-shutdown</parameter>: <type>BOOL</type>
753555991fdSmrg
754555991fdSmrg  Valid Responses: <function>ShutdownCancelled</function>
755555991fdSmrg  </synopsis>
756555991fdSmrg
757555991fdSmrg  <para>
758555991fdSmrgThis message is used by a client to notify the SM that it is done interacting.
759555991fdSmrg  </para>
760555991fdSmrg
761555991fdSmrg  <para>
762555991fdSmrgSetting the <parameter>cancel-shutdown</parameter> field to <constant>True</constant>
763555991fdSmrgindicates that the user has requested that the entire shutdown be
764555991fdSmrgcancelled.  <parameter>Cancel-shutdown</parameter> may only be <constant>True</constant> if
765555991fdSmrgthe corresponding <function>SaveYourself</function> message
766555991fdSmrgspecified <constant>True</constant> for the shutdown field
767555991fdSmrgand <function>Any</function> or <function>Errors</function> for the
768555991fdSmrg<parameter>interact-style</parameter> field.  Otherwise,
769555991fdSmrg<parameter>cancel-shutdown</parameter> must be <constant>False</constant>.
770555991fdSmrg  </para>
771555991fdSmrg
772555991fdSmrg  <synopsis>
773555991fdSmrg<function>SaveYourselfDone</function> [Client &rarr; SM]
774555991fdSmrg
775555991fdSmrg  <parameter>success</parameter>: <type>BOOL</type>
776555991fdSmrg
777555991fdSmrg  Valid Responses:
778555991fdSmrg    <function>SaveComplete</function>
779555991fdSmrg    <function>Die</function>
780555991fdSmrg    <function>ShutdownCancelled</function>
781555991fdSmrg  
782555991fdSmrg  </synopsis>
783555991fdSmrg
784555991fdSmrg  <para>
785555991fdSmrgThis message is sent by a client to indicate that all of the
786555991fdSmrgproperties representing its state have been updated.  After
787555991fdSmrgsending <function>SaveYourselfDone</function> the client must wait for
788555991fdSmrga <function>SaveComplete</function> <function>ShutdownCancelled</function>
789555991fdSmrgor <function>Die</function> message before changing its state.  If
790555991fdSmrgthe <function>SaveYourself</function> operation was successful, then
791555991fdSmrgthe client should set the <parameter>success</parameter> field to
792555991fdSmrg<constant>True</constant> otherwise the client should set it to
793555991fdSmrg<constant>False</constant>.
794555991fdSmrg  </para>
795555991fdSmrg
796555991fdSmrg  <note><title>Example</title>
797555991fdSmrg    <para>
798555991fdSmrgIf a client tries to save its state and runs out of disk space, it
799555991fdSmrgshould return <constant>False</constant> in the <parameter>success</parameter>
800555991fdSmrgfield of the <function>SaveYourselfDone</function> message.
801555991fdSmrg    </para>
802555991fdSmrg  </note>
803555991fdSmrg
804555991fdSmrg  <synopsis>
805555991fdSmrg<function>SaveYourselfPhase2Request</function> [Client &rarr; SM]
806555991fdSmrg
807555991fdSmrg  Valid Responses:
808555991fdSmrg    <function>ShutdownCancelled</function>
809555991fdSmrg    <function>SaveYourselfPhase2</function>
810555991fdSmrg  
811555991fdSmrg  </synopsis>
812555991fdSmrg
813555991fdSmrg  <para>
814555991fdSmrgThis message is sent by a client to indicate that it needs to be informed
815555991fdSmrgwhen all the other clients are quiescent, so it can continue its state.
816555991fdSmrg  </para>
817555991fdSmrg
818555991fdSmrg  <synopsis>
819555991fdSmrg<function>Die</function> [Client &larr; SM]
820555991fdSmrg
821555991fdSmrg  Valid Responses: <function>ConnectionClosed</function>
822555991fdSmrg  </synopsis>
823555991fdSmrg
824555991fdSmrg  <para>
825555991fdSmrgWhen the SM wants a client to die it sends a <function>Die</function>
826555991fdSmrgmessage.  Before the client dies it responds by sending
827555991fdSmrga <function>ConnectionClosed</function> message and may then close its
828555991fdSmrgconnection to the SM at any time.
829555991fdSmrg  </para>
830555991fdSmrg
831555991fdSmrg  <synopsis>
832555991fdSmrg<function>SaveComplete</function> [Client &rarr; SM]
833555991fdSmrg
834555991fdSmrg  Valid Responses:
835555991fdSmrg  </synopsis>
836555991fdSmrg
837555991fdSmrg  <para>
838555991fdSmrgWhen the SM is done with a checkpoint, it will send each of the
839555991fdSmrgclients a <function>SaveComplete</function> message.  The client is
840555991fdSmrgthen free to change its state.
841555991fdSmrg  </para>
842555991fdSmrg
843555991fdSmrg  <synopsis>
844555991fdSmrg<function>ShutdownCancelled</function> [Client &larr; SM]
845555991fdSmrg  </synopsis>
846555991fdSmrg
847555991fdSmrg  <para>
848555991fdSmrgThe shutdown currently in process has been aborted.  The client can
849555991fdSmrgnow continue as if the shutdown had never happened.  If the client has
850555991fdSmrgnot sent <function>SaveYourselfDone</function> yet, the client can
851555991fdSmrgeither abort the save and send <function>SaveYourselfDone</function>
852555991fdSmrgwith the success field set to <constant>False</constant> or it can
853555991fdSmrgcontinue with the save and send a <function>SaveYourselfDone</function>
854555991fdSmrgwith the success field set to reflect the outcome of the save.
855555991fdSmrg  </para>
856555991fdSmrg
857555991fdSmrg  <synopsis>
858555991fdSmrg<function>ConnectionClosed</function> [Client &rarr; SM]
859555991fdSmrg
860555991fdSmrg  <parameter>reason</parameter>: <type>LISTofARRAY8</type>
861555991fdSmrg  </synopsis>
862555991fdSmrg
863555991fdSmrg  <para>
864555991fdSmrgSpecifies that the client has decided to terminate.  It should be
865555991fdSmrgimmediately followed by closing the connection.
866555991fdSmrg  </para>
867555991fdSmrg
868555991fdSmrg  <para>
869555991fdSmrgThe <parameter>reason</parameter> field specifies why the client is resigning
870555991fdSmrgfrom the session.  It is encoded as an array of Compound Text strings.  If the
871555991fdSmrgresignation is expected by the user, there will typically be zero
872555991fdSmrgARRAY8s here.  But if the client encountered an unexpected fatal
873555991fdSmrgerror, the error message (which might otherwise be printed on stderr
874555991fdSmrgon a <acronym>POSIX</acronym> system) should be forwarded to the SM here, one ARRAY8 per
875555991fdSmrgline of the message.  It is the responsibility of the SM to display
876555991fdSmrgthis reason to the user.
877555991fdSmrg  </para>
878555991fdSmrg
879555991fdSmrg  <para>
880555991fdSmrgAfter sending this message, the client must not send any additional
881555991fdSmrgXSMP messages to the SM.
882555991fdSmrg  </para>
883555991fdSmrg  <note><title>Advice to Implementors</title><para>
884555991fdSmrgIf additional messages are received, they should be discarded.
885555991fdSmrg  </para></note>
886555991fdSmrg  <note><title>Rationale</title><para>
887555991fdSmrgThe reason for sending the <function>ConnectionClosed</function>
888555991fdSmrgmessage before actually closing the connections is that some transport
889555991fdSmrgprotocols will not provide immediate notification of connection
890555991fdSmrgclosure.
891555991fdSmrg  </para></note>
892555991fdSmrg
893555991fdSmrg  <synopsis>
894555991fdSmrg<function>SetProperties</function> [Client &rarr; SM]
895555991fdSmrg
896555991fdSmrg  <parameter>properties</parameter>: <type>LISTofPROPERTY</type>
897555991fdSmrg  </synopsis>
898555991fdSmrg
899555991fdSmrg  <para>
900555991fdSmrgSets the specified <parameter>properties</parameter> to the specified values.
901555991fdSmrgExisting
902555991fdSmrgproperties not specified in the <function>Set&shy;Properties</function>
903555991fdSmrgmessage are unaffected. Some properties have predefined semantics.
904555991fdSmrgSee <link linkend='predefined_properties'>section 11, 
905555991fdSmrg&ldquo;Predefined Properties.&rdquo;</link>
906555991fdSmrg  </para>
907555991fdSmrg
908555991fdSmrg  <para>
909555991fdSmrgThe protocol specification recommends that property names used for
910555991fdSmrgproperties not defined by the standard should begin with an
911555991fdSmrgunderscore.  To prevent conflicts among organizations, additional
912555991fdSmrgprefixes should be chosen (for example, _KPC_FAST_SAVE_OPTION).  The
913555991fdSmrgorganizational prefixes should be registered with the X Registry.  The
914555991fdSmrgXSMP reserves all property names not beginning with an underscore for
915555991fdSmrgfuture use.
916555991fdSmrg  </para>
917555991fdSmrg
918555991fdSmrg  <synopsis>
919555991fdSmrg<function>DeleteProperties</function> [Client &rarr; SM]
920555991fdSmrg
921555991fdSmrg  <parameter>property-names</parameter>: <type>LISTofARRAY8</type>
922555991fdSmrg  </synopsis>
923555991fdSmrg
924555991fdSmrg  <para>Removes the named properties.</para>
925555991fdSmrg
926555991fdSmrg  <synopsis>
927555991fdSmrg<function>GetProperties</function> [Client &rarr; SM]
928555991fdSmrg
929555991fdSmrg  Valid Responses: <function>GetPropertiesReply</function>
930555991fdSmrg  </synopsis>
931555991fdSmrg
932555991fdSmrg  <para>
933555991fdSmrgRequests that the SM respond with the values of all the properties for
934555991fdSmrgthis client.
935555991fdSmrg  </para>
936555991fdSmrg
937555991fdSmrg  <synopsis>
938555991fdSmrg<function>GetPropertiesReply</function> [Client &larr; SM]
939555991fdSmrg
940555991fdSmrg  <parameter>values</parameter>: <type>LISTofPROPERTY</type>
941555991fdSmrg  </synopsis>
942555991fdSmrg
943555991fdSmrg  <para>
944555991fdSmrgThis message is sent in reply to a <function>GetProperties</function>
945555991fdSmrgmessage and includes the <parameter>values</parameter> of all the properties.
946555991fdSmrg  </para>
947555991fdSmrg</chapter>
948555991fdSmrg
949555991fdSmrg<chapter id="errors">
950555991fdSmrg  <title>Errors</title>
951555991fdSmrg
952555991fdSmrg  <para>
953555991fdSmrgWhen the receiver of a message detects an error condition, the
954555991fdSmrgreceiver sends an <acronym>ICE</acronym> error message to the sender.  There are only two
955555991fdSmrgtypes of errors that are used by the XSMP:
956555991fdSmrg<errorname>BadValue</errorname> and <errorname>BadState</errorname>
957555991fdSmrgThese are both defined in the <acronym>ICE</acronym> protocol.
958555991fdSmrg  </para>
959555991fdSmrg
960555991fdSmrg  <para>
961555991fdSmrgAny message received out-of-sequence will generate
962555991fdSmrga <errorname>BadState</errorname> error message.
963555991fdSmrg  </para>
964555991fdSmrg</chapter>
965555991fdSmrg
966555991fdSmrg<chapter id="state_diagrams">
967555991fdSmrg  <title>State Diagrams</title>
968555991fdSmrg  <para>
969555991fdSmrgThese state diagrams are designed to cover all actions of both the
970555991fdSmrgclient and the SM.
971555991fdSmrg  </para>
972555991fdSmrg
973555991fdSmrg  <sect1 id='client_state_diagram'>
974555991fdSmrg    <title>Client State Diagram</title>
975555991fdSmrg
976555991fdSmrg<!-- <literallayout remap='DS'> -->
977555991fdSmrg<literallayout>
978555991fdSmrg<emphasis remap='I'>start:</emphasis>
979555991fdSmrg     <acronym>ICE</acronym> protocol setup complete &rarr; <emphasis remap='C'>register</emphasis></literallayout>
980555991fdSmrg
981555991fdSmrg<literallayout>
982555991fdSmrg<emphasis remap='I'>register:</emphasis>
983555991fdSmrg     send <emphasis remap='B'>RegisterClient</emphasis> &rarr; <emphasis remap='C'>collect-id</emphasis></literallayout>
984555991fdSmrg
985555991fdSmrg<literallayout remap='DS'>
986555991fdSmrg<emphasis remap='I'>collect-id:</emphasis>
987555991fdSmrg     receive <emphasis remap='B'>RegisterClientReply</emphasis> &rarr; <emphasis remap='C'>idle</emphasis></literallayout>
988555991fdSmrg
989555991fdSmrg<literallayout remap='DS'>
990555991fdSmrg<emphasis remap='I'>shutdown-cancelled:</emphasis>
991555991fdSmrg     send <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>idle</emphasis></literallayout>
992555991fdSmrg
993555991fdSmrg<literallayout remap='DS'>
994555991fdSmrg<emphasis remap='I'>idle:</emphasis> [Undoes any freeze of interaction with user.]
995555991fdSmrg     receive <emphasis remap='B'>Die</emphasis> &rarr; <emphasis remap='C'>die</emphasis>
996555991fdSmrg     receive <emphasis remap='B'>SaveYourself</emphasis> &rarr; <emphasis remap='C'>freeze-interaction</emphasis>
997555991fdSmrg     send <emphasis remap='B'>GetProperties</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
998555991fdSmrg     receive <emphasis remap='B'>GetPropertiesReply</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
999555991fdSmrg     send <emphasis remap='B'>SetProperties</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1000555991fdSmrg     send <emphasis remap='B'>DeleteProperties</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1001555991fdSmrg     send <emphasis remap='B'>ConnectionClosed</emphasis> &rarr; <emphasis remap='C'>connection-closed</emphasis>
1002555991fdSmrg     send <emphasis remap='B'>SaveYourselfRequest</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1003555991fdSmrg</literallayout> <!-- remap='DE' -->
1004555991fdSmrg
1005555991fdSmrg<literallayout remap='DS'>
1006555991fdSmrg<emphasis remap='I'>die:</emphasis>
1007555991fdSmrg     send <emphasis remap='B'>ConnectionClosed</emphasis> &rarr; <emphasis remap='C'>connection-closed</emphasis></literallayout>
1008555991fdSmrg
1009555991fdSmrg<literallayout remap='DS'>
1010555991fdSmrg<emphasis remap='I'>freeze-interaction:</emphasis>
1011555991fdSmrg     freeze interaction with user &rarr; <emphasis remap='C'>save-yourself</emphasis></literallayout>
1012555991fdSmrg
1013555991fdSmrg<literallayout remap='DS'>
1014555991fdSmrg<emphasis remap='I'>save-yourself:</emphasis>
1015555991fdSmrg     receive <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>shutdown-cancelled</emphasis>
1016555991fdSmrg     send <emphasis remap='B'>SetProperties</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1017555991fdSmrg     send <emphasis remap='B'>DeleteProperties</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1018555991fdSmrg     send <emphasis remap='B'>GetProperties</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1019555991fdSmrg     receive <emphasis remap='B'>GetPropertiesReply</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1020555991fdSmrg     send <emphasis remap='B'>InteractRequest</emphasis> &rarr; <emphasis remap='C'>interact-request</emphasis>
1021555991fdSmrg     send <emphasis remap='B'>SaveYourselfPhase2Request</emphasis> &rarr; waiting-for-phase2
1022555991fdSmrg
1023555991fdSmrg<emphasis remap='I'>save-yourself:</emphasis>
1024555991fdSmrg     if shutdown mode:
1025555991fdSmrg          send <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>save-yourself-done</emphasis>
1026555991fdSmrg     otherwise:
1027555991fdSmrg          send <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>idle</emphasis></literallayout>
1028555991fdSmrg
1029555991fdSmrg<literallayout remap='DS'>
1030555991fdSmrg<emphasis remap='I'>waiting-for-phase2:</emphasis>
1031555991fdSmrg     receive <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>shutdown-cancelled</emphasis>
1032555991fdSmrg     receive <emphasis remap='B'>SaveYourselfPhase2</emphasis> &rarr; <emphasis remap='C'>phase2</emphasis></literallayout>
1033555991fdSmrg
1034555991fdSmrg<literallayout remap='DS'>
1035555991fdSmrg<emphasis remap='I'>phase2:</emphasis>
1036555991fdSmrg     receive <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>shutdown-cancelled</emphasis>
1037555991fdSmrg     send <emphasis remap='B'>SetProperties</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1038555991fdSmrg     send <emphasis remap='B'>DeleteProperties</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1039555991fdSmrg     send <emphasis remap='B'>GetProperties</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1040555991fdSmrg     receive <emphasis remap='B'>GetPropertiesReply</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1041555991fdSmrg     send <emphasis remap='B'>InteractRequest</emphasis> &rarr; <emphasis remap='C'>interact-request</emphasis> (errors only)
1042555991fdSmrg     if shutdown mode:
1043555991fdSmrg          send <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>save-yourself-done</emphasis>
1044555991fdSmrg     otherwise:
1045555991fdSmrg          send <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>idle</emphasis></literallayout>
1046555991fdSmrg
1047555991fdSmrg<literallayout remap='DS'>
1048555991fdSmrg<emphasis remap='I'>interact-request:</emphasis>
1049555991fdSmrg     receive <emphasis remap='B'>Interact</emphasis> &rarr; <emphasis remap='C'>interact</emphasis>
1050555991fdSmrg     receive <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>shutdown-cancelled</emphasis></literallayout>
1051555991fdSmrg
1052555991fdSmrg<literallayout remap='DS'>
1053555991fdSmrg<emphasis remap='I'>interact:</emphasis>
1054555991fdSmrg     send <emphasis remap='B'>InteractDone</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1055555991fdSmrg     receive <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>shutdown-cancelled</emphasis></literallayout>
1056555991fdSmrg
1057555991fdSmrg<literallayout remap='DS'>
1058555991fdSmrg<emphasis remap='I'>save-yourself-done:</emphasis> (changing state is forbidden)
1059555991fdSmrg     receive <emphasis remap='B'>SaveComplete</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1060555991fdSmrg     receive <emphasis remap='B'>Die</emphasis> &rarr; <emphasis remap='C'>die</emphasis>
1061555991fdSmrg     receive <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>idle</emphasis></literallayout>
1062555991fdSmrg
1063555991fdSmrg<literallayout remap='DS'>
1064555991fdSmrg<emphasis remap='I'>connection-closed:</emphasis>
1065555991fdSmrg     client stops participating in session </literallayout>
1066555991fdSmrg</sect1>
1067555991fdSmrg
1068555991fdSmrg<sect1 id='session_manager_state_diagram'>
1069555991fdSmrg<title>Session Manager State Diagram</title>
1070555991fdSmrg
1071555991fdSmrg<literallayout remap='DS'>
1072555991fdSmrg<emphasis remap='I'>start:</emphasis>
1073555991fdSmrg     receive <emphasis remap='B'>ProtocolSetup</emphasis> &rarr; <emphasis remap='C'>protocol-setup</emphasis></literallayout>
1074555991fdSmrg
1075555991fdSmrg<literallayout remap='DS'>
1076555991fdSmrg<emphasis remap='I'>protocol-setup:</emphasis>
1077555991fdSmrg     send <emphasis remap='B'>ProtocolSetupReply</emphasis> &rarr; <emphasis remap='C'>register</emphasis></literallayout>
1078555991fdSmrg
1079555991fdSmrg<literallayout remap='DS'>
1080555991fdSmrg<emphasis remap='I'>register:</emphasis>
1081555991fdSmrg     receive <emphasis remap='B'>RegisterClient</emphasis> &rarr; <emphasis remap='C'>acknowledge-register</emphasis>
1082555991fdSmrg</literallayout>
1083555991fdSmrg
1084555991fdSmrg<literallayout remap='DS'>
1085555991fdSmrg<emphasis remap='I'>acknowledge-register:</emphasis>
1086555991fdSmrg     send <emphasis remap='B'>RegisterClientReply</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1087555991fdSmrg</literallayout>
1088555991fdSmrg
1089555991fdSmrg<literallayout remap='DS'>
1090555991fdSmrg<emphasis remap='I'>idle:</emphasis>
1091555991fdSmrg     receive <emphasis remap='B'>SetProperties</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1092555991fdSmrg     receive <emphasis remap='B'>DeleteProperties</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1093555991fdSmrg     receive <emphasis remap='B'>ConnectionClosed</emphasis> &rarr; <emphasis remap='C'>start</emphasis>
1094555991fdSmrg     receive <emphasis remap='B'>GetProperties</emphasis> &rarr; <emphasis remap='C'>get-properties</emphasis>
1095555991fdSmrg     receive <emphasis remap='B'>SaveYourselfRequest</emphasis> &rarr; <emphasis remap='C'>save-yourself</emphasis>
1096555991fdSmrg     send <emphasis remap='B'>SaveYourself</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1097555991fdSmrg</literallayout>
1098555991fdSmrg
1099555991fdSmrg<literallayout remap='DS'>
1100555991fdSmrg<emphasis remap='I'>save-yourself:</emphasis>
1101555991fdSmrg     send <emphasis remap='B'>SaveYourself</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1102555991fdSmrg</literallayout>
1103555991fdSmrg
1104555991fdSmrg<literallayout remap='DS'>
1105555991fdSmrg<emphasis remap='I'>get-properties:</emphasis>
1106555991fdSmrg     send <emphasis remap='B'>GetPropertiesReply</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1107555991fdSmrg</literallayout>
1108555991fdSmrg
1109555991fdSmrg<literallayout remap='DS'>
1110555991fdSmrg<emphasis remap='I'>saving-get-properties:</emphasis>
1111555991fdSmrg     send <emphasis remap='B'>GetPropertiesReply</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1112555991fdSmrg</literallayout>
1113555991fdSmrg
1114555991fdSmrg<literallayout remap='DS'>
1115555991fdSmrg<emphasis remap='I'>saving-yourself:</emphasis>
1116555991fdSmrg     receive <emphasis remap='B'>InteractRequest</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1117555991fdSmrg     send <emphasis remap='B'>Interact</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1118555991fdSmrg     send <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1119555991fdSmrg     receive <emphasis remap='B'>InteractDone</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1120555991fdSmrg     receive <emphasis remap='B'>SetProperties</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1121555991fdSmrg      receive <emphasis remap='B'>DeleteProperties</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1122555991fdSmrg     receive <emphasis remap='B'>GetProperties</emphasis> &rarr; <emphasis remap='C'>saving-get-properties</emphasis>
1123555991fdSmrg     receive <emphasis remap='B'>SaveYourselfPhase2Request</emphasis> &rarr; <emphasis remap='C'>start-phase2</emphasis>
1124555991fdSmrg     receive <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>save-yourself-done</emphasis>
1125555991fdSmrg</literallayout>
1126555991fdSmrg
1127555991fdSmrg<literallayout remap='DS'>
1128555991fdSmrg<emphasis remap='I'>start-phase2:</emphasis>
1129555991fdSmrg     If all clients have sent either SaveYourselfPhase2Request or SaveYourselfDone:
1130555991fdSmrg          send <emphasis remap='B'>SaveYourselfPhase2</emphasis> &rarr; <emphasis remap='C'>phase2</emphasis>
1131555991fdSmrg     else
1132555991fdSmrg          &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1133555991fdSmrg</literallayout>
1134555991fdSmrg
1135555991fdSmrg<literallayout remap='DS'>
1136555991fdSmrg<emphasis remap='I'>phase2:</emphasis>
1137555991fdSmrg     receive <emphasis remap='B'>InteractRequest</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1138555991fdSmrg     send <emphasis remap='B'>Interact</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1139555991fdSmrg     send <emphasis remap='B'>ShutdownCancelled</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1140555991fdSmrg     receive <emphasis remap='B'>InteractDone</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1141555991fdSmrg     receive <emphasis remap='B'>SetProperties</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1142555991fdSmrg      receive <emphasis remap='B'>DeleteProperties</emphasis> &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1143555991fdSmrg     receive <emphasis remap='B'>GetProperties</emphasis> &rarr; <emphasis remap='C'>saving-get-properties</emphasis>
1144555991fdSmrg     receive <emphasis remap='B'>SaveYourselfDone</emphasis> &rarr; <emphasis remap='C'>save-yourself-done</emphasis>
1145555991fdSmrg</literallayout>
1146555991fdSmrg
1147555991fdSmrg<literallayout remap='DS'>
1148555991fdSmrg<emphasis remap='I'>save-yourself-done:</emphasis>
1149555991fdSmrg     If all clients are saved:
1150555991fdSmrg          If shutting down:
1151555991fdSmrg               send <emphasis remap='B'>Die</emphasis> &rarr; <emphasis remap='C'>die</emphasis>
1152555991fdSmrg          otherwise
1153555991fdSmrg               send <emphasis remap='B'>SaveComplete</emphasis> &rarr; <emphasis remap='C'>idle</emphasis>
1154555991fdSmrg
1155555991fdSmrg     If some clients are not saved:
1156555991fdSmrg     &rarr; <emphasis remap='C'>saving-yourself</emphasis>
1157555991fdSmrg</literallayout>
1158555991fdSmrg
1159555991fdSmrg<literallayout remap='DS'>
1160555991fdSmrg<emphasis remap='I'>die:</emphasis>
1161555991fdSmrg     SM stops accepting connections
1162555991fdSmrg</literallayout>
1163555991fdSmrg  </sect1>
1164555991fdSmrg</chapter>
1165555991fdSmrg
1166555991fdSmrg<chapter id='protocol_encoding'>
1167555991fdSmrg  <title>Protocol Encoding</title>
1168555991fdSmrg  <sect1 id="types">
1169555991fdSmrg    <title>Types</title>
1170555991fdSmrg
1171555991fdSmrg<informaltable pgwide='0' frame='none'>
1172555991fdSmrg  <tgroup cols='4'>
1173555991fdSmrg    <colspec colwidth='0.5in' colname='c0'/>
1174555991fdSmrg    <colspec colwidth='1.0in' colname='c1'/>
1175555991fdSmrg    <colspec colwidth='1.0in' colname='c2'/>
1176555991fdSmrg    <colspec colwidth='1.0in' colname='c3'/>
1177555991fdSmrg    <spanspec spanname="typename" namest="c0" nameend="c3" />
1178555991fdSmrg    <tbody>
1179555991fdSmrg      <row>
1180555991fdSmrg        <entry spanname="typename"><emphasis role="bold">BOOL</emphasis></entry>
1181555991fdSmrg      </row>
1182555991fdSmrg      <row>
1183555991fdSmrg        <entry namest="c1">0</entry>
1184555991fdSmrg        <entry namest="c2">False</entry>
1185555991fdSmrg      </row>
1186555991fdSmrg      <row>
1187555991fdSmrg        <entry namest="c1">1</entry>
1188555991fdSmrg        <entry namest="c2">True</entry>
1189555991fdSmrg      </row>
1190555991fdSmrg
1191555991fdSmrg      <row>
1192555991fdSmrg        <entry spanname="typename"><emphasis role="bold">INTERACT_STYLE</emphasis></entry>
1193555991fdSmrg      </row>
1194555991fdSmrg      <row>
1195555991fdSmrg        <entry namest="c1">0</entry>
1196555991fdSmrg        <entry namest="c2">None</entry>
1197555991fdSmrg      </row>
1198555991fdSmrg      <row>
1199555991fdSmrg        <entry namest="c1">1</entry>
1200555991fdSmrg        <entry namest="c2">Errors</entry>
1201555991fdSmrg      </row>
1202555991fdSmrg      <row>
1203555991fdSmrg        <entry namest="c1">2</entry>
1204555991fdSmrg        <entry namest="c2">Any</entry>
1205555991fdSmrg      </row>
1206555991fdSmrg
1207555991fdSmrg      <row>
1208555991fdSmrg        <entry spanname="typename"><emphasis role="bold">DIALOG_TYPE</emphasis></entry>
1209555991fdSmrg      </row>
1210555991fdSmrg      <row>
1211555991fdSmrg        <entry namest="c1">0</entry>
1212555991fdSmrg        <entry namest="c2">Error</entry>
1213555991fdSmrg      </row>
1214555991fdSmrg      <row>
1215555991fdSmrg        <entry namest="c1">1</entry>
1216555991fdSmrg        <entry namest="c2">Normal</entry>
1217555991fdSmrg      </row>
1218555991fdSmrg
1219555991fdSmrg      <row>
1220555991fdSmrg        <entry spanname="typename"><emphasis role="bold">SAVE_TYPE</emphasis></entry>
1221555991fdSmrg      </row>
1222555991fdSmrg      <row>
1223555991fdSmrg        <entry namest="c1">0</entry>
1224555991fdSmrg        <entry namest="c2">Global</entry>
1225555991fdSmrg      </row>
1226555991fdSmrg      <row>
1227555991fdSmrg        <entry namest="c1">1</entry>
1228555991fdSmrg        <entry namest="c2">Local</entry>
1229555991fdSmrg      </row>
1230555991fdSmrg      <row>
1231555991fdSmrg        <entry namest="c1">2</entry>
1232555991fdSmrg        <entry namest="c2">Both</entry>
1233555991fdSmrg      </row>
1234555991fdSmrg
1235555991fdSmrg      <row>
1236555991fdSmrg        <entry spanname="typename"><emphasis role="bold">ARRAY8</emphasis></entry>
1237555991fdSmrg      </row>
1238555991fdSmrg      <row>
1239555991fdSmrg        <entry namest="c1">4</entry>
1240555991fdSmrg        <entry namest="c2">CARD32</entry>
1241555991fdSmrg        <entry namest="c3">length</entry>
1242555991fdSmrg      </row>
1243555991fdSmrg      <row>
1244555991fdSmrg        <entry namest="c1">n</entry>
1245555991fdSmrg        <entry namest="c2">ListofCARD8, the array</entry>
1246555991fdSmrg        <entry namest="c3">p = pad (4 + n, 8)</entry>
1247555991fdSmrg      </row>
1248555991fdSmrg      <row>
1249555991fdSmrg        <entry namest="c1">2</entry>
1250555991fdSmrg        <entry namest="c2">Both</entry>
1251555991fdSmrg      </row>
1252555991fdSmrg
1253555991fdSmrg      <row>
1254555991fdSmrg        <entry spanname="typename"><emphasis role="bold">LISTofARRAY8</emphasis></entry>
1255555991fdSmrg      </row>
1256555991fdSmrg      <row>
1257555991fdSmrg        <entry namest="c1">4</entry>
1258555991fdSmrg        <entry namest="c2">CARD32</entry>
1259555991fdSmrg        <entry namest="c3">count</entry>
1260555991fdSmrg      </row>
1261555991fdSmrg      <row>
1262555991fdSmrg        <entry namest="c1">4</entry>
1263555991fdSmrg        <entry namest="c2"></entry>
1264555991fdSmrg        <entry namest="c3">unused</entry>
1265555991fdSmrg      </row>
1266555991fdSmrg      <row>
1267555991fdSmrg        <entry namest="c1">a</entry>
1268555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1269555991fdSmrg        <entry namest="c3">first array</entry>
1270555991fdSmrg      </row>
1271555991fdSmrg      <row>
1272555991fdSmrg        <entry namest="c1">b</entry>
1273555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1274555991fdSmrg        <entry namest="c3">second array</entry>
1275555991fdSmrg      </row>
1276555991fdSmrg      <row>
1277555991fdSmrg        <entry namest="c1">.</entry>
1278555991fdSmrg        <entry namest="c2"></entry>
1279555991fdSmrg        <entry namest="c3"></entry>
1280555991fdSmrg      </row>
1281555991fdSmrg      <row>
1282555991fdSmrg        <entry namest="c1">.</entry>
1283555991fdSmrg        <entry namest="c2"></entry>
1284555991fdSmrg        <entry namest="c3"></entry>
1285555991fdSmrg      </row>
1286555991fdSmrg      <row>
1287555991fdSmrg        <entry namest="c1">.</entry>
1288555991fdSmrg        <entry namest="c2"></entry>
1289555991fdSmrg        <entry namest="c3"></entry>
1290555991fdSmrg      </row>
1291555991fdSmrg      <row>
1292555991fdSmrg        <entry namest="c1">q</entry>
1293555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1294555991fdSmrg        <entry namest="c3">last array</entry>
1295555991fdSmrg      </row>
1296555991fdSmrg
1297555991fdSmrg      <row>
1298555991fdSmrg        <entry spanname="typename"><emphasis role="bold">PROPERTY</emphasis></entry>
1299555991fdSmrg      </row>
1300555991fdSmrg      <row>
1301555991fdSmrg        <entry namest="c1">a</entry>
1302555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1303555991fdSmrg        <entry namest="c3">name</entry>
1304555991fdSmrg      </row>
1305555991fdSmrg      <row>
1306555991fdSmrg        <entry namest="c1">b</entry>
1307555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1308555991fdSmrg        <entry namest="c3">type (XPCS encoded in Latin-1, case sensitive)</entry>
1309555991fdSmrg      </row>
1310555991fdSmrg      <row>
1311555991fdSmrg        <entry namest="c1">c</entry>
1312555991fdSmrg        <entry namest="c2">LISTofARRAY8</entry>
1313555991fdSmrg        <entry namest="c3">values</entry>
1314555991fdSmrg      </row>
1315555991fdSmrg
1316555991fdSmrg      <row>
1317555991fdSmrg        <entry spanname="typename"><emphasis role="bold">LISTofPROPERTY</emphasis></entry>
1318555991fdSmrg      </row>
1319555991fdSmrg      <row>
1320555991fdSmrg        <entry namest="c1">4</entry>
1321555991fdSmrg        <entry namest="c2">CARD32</entry>
1322555991fdSmrg        <entry namest="c3">count</entry>
1323555991fdSmrg      </row>
1324555991fdSmrg      <row>
1325555991fdSmrg        <entry namest="c1">4</entry>
1326555991fdSmrg        <entry namest="c2"></entry>
1327555991fdSmrg        <entry namest="c3">unused</entry>
1328555991fdSmrg      </row>
1329555991fdSmrg      <row>
1330555991fdSmrg        <entry namest="c1">a</entry>
1331555991fdSmrg        <entry namest="c2">PROPERTY</entry>
1332555991fdSmrg        <entry namest="c3">first property</entry>
1333555991fdSmrg      </row>
1334555991fdSmrg      <row>
1335555991fdSmrg        <entry namest="c1">b</entry>
1336555991fdSmrg        <entry namest="c2">PROPERTY</entry>
1337555991fdSmrg        <entry namest="c3">second property</entry>
1338555991fdSmrg      </row>
1339555991fdSmrg      <row>
1340555991fdSmrg        <entry namest="c1">.</entry>
1341555991fdSmrg        <entry namest="c2"></entry>
1342555991fdSmrg        <entry namest="c3"></entry>
1343555991fdSmrg      </row>
1344555991fdSmrg      <row>
1345555991fdSmrg        <entry namest="c1">.</entry>
1346555991fdSmrg        <entry namest="c2"></entry>
1347555991fdSmrg        <entry namest="c3"></entry>
1348555991fdSmrg      </row>
1349555991fdSmrg      <row>
1350555991fdSmrg        <entry namest="c1">.</entry>
1351555991fdSmrg        <entry namest="c2"></entry>
1352555991fdSmrg        <entry namest="c3"></entry>
1353555991fdSmrg      </row>
1354555991fdSmrg      <row>
1355555991fdSmrg        <entry namest="c1">q</entry>
1356555991fdSmrg        <entry namest="c2">PROPERTY</entry>
1357555991fdSmrg        <entry namest="c3">last property</entry>
1358555991fdSmrg      </row>
1359555991fdSmrg     </tbody>
1360555991fdSmrg  </tgroup>
1361555991fdSmrg</informaltable>
1362555991fdSmrg
1363555991fdSmrg  </sect1>
1364555991fdSmrg
1365555991fdSmrg  <sect1 id='messages'>
1366555991fdSmrg    <title>Messages</title>
1367555991fdSmrg    <para>
1368555991fdSmrgXSMP is a sub-protocol of <acronym>ICE</acronym>.  The major opcode is
1369555991fdSmrgassigned at run-time by <acronym>ICE</acronym> and is represented here
1370555991fdSmrgby '<literal>?</literal>'.
1371555991fdSmrg    </para>
1372555991fdSmrg
1373555991fdSmrg    <para>
1374555991fdSmrgTo start the XSMP protocol, the client sends the server an
1375555991fdSmrg<acronym>ICE</acronym> <function>ProtocolSetup</function> message.
1376555991fdSmrgThe protocol-name field should be specified as "<literal>XSMP</literal>",
1377555991fdSmrgthe major version of the protocol is 1, the minor version is 0.  These
1378555991fdSmrgvalues may change if the protocol is revised.  The minor version
1379555991fdSmrgnumber will be incremented if the change is compatible, otherwise the
1380555991fdSmrgmajor version number will be incremented.
1381555991fdSmrg    </para>
1382555991fdSmrg
1383555991fdSmrg    <para>
1384555991fdSmrgIn <function>ProtocolReply</function> message sent by the session
1385555991fdSmrgmanager, the XSMP protocol defines the vendor parameter as product
1386555991fdSmrgidentification of the session manager, and defines the release
1387555991fdSmrgparameter as the software release identification of the session
1388555991fdSmrgmanager.  The session manager should supply this information in the
1389555991fdSmrg<acronym>ICE</acronym> <function>ProtocolReply</function> message.
1390555991fdSmrg    </para>
1391555991fdSmrg
1392555991fdSmrg<informaltable pgwide='0' frame='none'>
1393555991fdSmrg  <tgroup cols='4' align='left'>
1394555991fdSmrg    <colspec  colwidth='0.5in' colname='c0'/>
1395555991fdSmrg    <colspec  colwidth='0.5in' colname='c1'/>
1396555991fdSmrg    <colspec  colwidth='1.1in' colname='c2'/>
1397555991fdSmrg    <colspec  colwidth='1.0in' colname='c3'/>
1398555991fdSmrg    <spanspec spanname="messagename" namest="c0" nameend="c3" />
1399555991fdSmrg    <tbody>
1400555991fdSmrg      <row>
1401555991fdSmrg	<entry spanname="messagename"><emphasis role="bold"><function>RegisterClient</function></emphasis></entry>
1402555991fdSmrg      </row>
1403555991fdSmrg      <row>
1404555991fdSmrg        <entry namest="c1">1</entry>
1405555991fdSmrg        <entry namest="c2">?</entry>
1406555991fdSmrg        <entry namest="c3">XSMP</entry>
1407555991fdSmrg      </row>
1408555991fdSmrg      <row>
1409555991fdSmrg        <entry namest="c1">1</entry>
1410555991fdSmrg        <entry namest="c2">1</entry>
1411555991fdSmrg        <entry namest="c3">opcode</entry>
1412555991fdSmrg      </row>
1413555991fdSmrg      <row>
1414555991fdSmrg        <entry namest="c1">2</entry>
1415555991fdSmrg        <entry namest="c2"></entry>
1416555991fdSmrg        <entry namest="c3">unused</entry>
1417555991fdSmrg      </row>
1418555991fdSmrg      <row>
1419555991fdSmrg        <entry namest="c1">4</entry>
1420555991fdSmrg        <entry namest="c2">a/8</entry>
1421555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1422555991fdSmrg      </row>
1423555991fdSmrg      <row>
1424555991fdSmrg        <entry namest="c1">a</entry>
1425555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1426555991fdSmrg        <entry namest="c3">previous-ID</entry>
1427555991fdSmrg      </row>
1428555991fdSmrg
1429555991fdSmrg      <row>
1430555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>RegisterClientReply</function></emphasis></entry>
1431555991fdSmrg      </row>
1432555991fdSmrg      <row>
1433555991fdSmrg        <entry namest="c1">1</entry>
1434555991fdSmrg        <entry namest="c2">?</entry>
1435555991fdSmrg        <entry namest="c3">XSMP</entry>
1436555991fdSmrg      </row>
1437555991fdSmrg      <row>
1438555991fdSmrg        <entry namest="c1">1</entry>
1439555991fdSmrg        <entry namest="c2">2</entry>
1440555991fdSmrg        <entry namest="c3">opcode</entry>
1441555991fdSmrg      </row>
1442555991fdSmrg      <row>
1443555991fdSmrg        <entry namest="c1">2</entry>
1444555991fdSmrg        <entry namest="c2"></entry>
1445555991fdSmrg        <entry namest="c3">unused</entry>
1446555991fdSmrg      </row>
1447555991fdSmrg      <row>
1448555991fdSmrg        <entry namest="c1">4</entry>
1449555991fdSmrg        <entry namest="c2">a/8</entry>
1450555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1451555991fdSmrg      </row>
1452555991fdSmrg      <row>
1453555991fdSmrg        <entry namest="c1">a</entry>
1454555991fdSmrg        <entry namest="c2">ARRAY8</entry>
1455555991fdSmrg        <entry namest="c3">client-ID</entry>
1456555991fdSmrg      </row>
1457555991fdSmrg
1458555991fdSmrg      <row>
1459555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SaveYourself</function></emphasis></entry>
1460555991fdSmrg      </row>
1461555991fdSmrg      <row>
1462555991fdSmrg        <entry namest="c1">1</entry>
1463555991fdSmrg        <entry namest="c2">?</entry>
1464555991fdSmrg        <entry namest="c3">XSMP</entry>
1465555991fdSmrg      </row>
1466555991fdSmrg      <row>
1467555991fdSmrg        <entry namest="c1">1</entry>
1468555991fdSmrg        <entry namest="c2">3</entry>
1469555991fdSmrg        <entry namest="c3">opcode</entry>
1470555991fdSmrg      </row>
1471555991fdSmrg      <row>
1472555991fdSmrg        <entry namest="c1">2</entry>
1473555991fdSmrg        <entry namest="c2"></entry>
1474555991fdSmrg        <entry namest="c3">unused</entry>
1475555991fdSmrg      </row>
1476555991fdSmrg      <row>
1477555991fdSmrg        <entry namest="c1">4</entry>
1478555991fdSmrg        <entry namest="c2">1</entry>
1479555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1480555991fdSmrg      </row>
1481555991fdSmrg      <row>
1482555991fdSmrg        <entry namest="c1">1</entry>
1483555991fdSmrg        <entry namest="c2">SAVE_TYPE</entry>
1484555991fdSmrg        <entry namest="c3">type</entry>
1485555991fdSmrg      </row>
1486555991fdSmrg      <row>
1487555991fdSmrg        <entry namest="c1">1</entry>
1488555991fdSmrg        <entry namest="c2">BOOL</entry>
1489555991fdSmrg        <entry namest="c3">shutdown</entry>
1490555991fdSmrg      </row>
1491555991fdSmrg      <row>
1492555991fdSmrg        <entry namest="c1">1</entry>
1493555991fdSmrg        <entry namest="c2">INTERACT_STYLE</entry>
1494555991fdSmrg        <entry namest="c3">interact-style</entry>
1495555991fdSmrg      </row>
1496555991fdSmrg      <row>
1497555991fdSmrg        <entry namest="c1">1</entry>
1498555991fdSmrg        <entry namest="c2">BOOL</entry>
1499555991fdSmrg        <entry namest="c3">fast</entry>
1500555991fdSmrg      </row>
1501555991fdSmrg      <row>
1502555991fdSmrg        <entry namest="c1">4</entry>
1503555991fdSmrg        <entry namest="c2"></entry>
1504555991fdSmrg        <entry namest="c3">unused</entry>
1505555991fdSmrg      </row>
1506555991fdSmrg
1507555991fdSmrg      <row>
1508555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SaveYourselfRequest</function></emphasis></entry>
1509555991fdSmrg      </row>
1510555991fdSmrg      <row>
1511555991fdSmrg        <entry namest="c1">1</entry>
1512555991fdSmrg        <entry namest="c2">?</entry>
1513555991fdSmrg        <entry namest="c3">XSMP</entry>
1514555991fdSmrg      </row>
1515555991fdSmrg      <row>
1516555991fdSmrg        <entry namest="c1">1</entry>
1517555991fdSmrg        <entry namest="c2">4</entry>
1518555991fdSmrg        <entry namest="c3">opcode</entry>
1519555991fdSmrg      </row>
1520555991fdSmrg      <row>
1521555991fdSmrg        <entry namest="c1">2</entry>
1522555991fdSmrg        <entry namest="c2"></entry>
1523555991fdSmrg        <entry namest="c3">unused</entry>
1524555991fdSmrg      </row>
1525555991fdSmrg      <row>
1526555991fdSmrg        <entry namest="c1">4</entry>
1527555991fdSmrg        <entry namest="c2">1</entry>
1528555991fdSmrg        <entry namest="c3">length of remainning data in 8-byte units</entry>
1529555991fdSmrg      </row>
1530555991fdSmrg      <row>
1531555991fdSmrg        <entry namest="c1">1</entry>
1532555991fdSmrg        <entry namest="c2">SAVE_TYPE</entry>
1533555991fdSmrg        <entry namest="c3">type</entry>
1534555991fdSmrg      </row>
1535555991fdSmrg      <row>
1536555991fdSmrg        <entry namest="c1">1</entry>
1537555991fdSmrg        <entry namest="c2">BOOL</entry>
1538555991fdSmrg        <entry namest="c3">shutdown</entry>
1539555991fdSmrg      </row>
1540555991fdSmrg      <row>
1541555991fdSmrg        <entry namest="c1">1</entry>
1542555991fdSmrg        <entry namest="c2">INTERACT_STYLE</entry>
1543555991fdSmrg        <entry namest="c3">interact-style</entry>
1544555991fdSmrg      </row>
1545555991fdSmrg      <row>
1546555991fdSmrg        <entry namest="c1">1</entry>
1547555991fdSmrg        <entry namest="c2">BOOL</entry>
1548555991fdSmrg        <entry namest="c3">fast</entry>
1549555991fdSmrg      </row>
1550555991fdSmrg      <row>
1551555991fdSmrg        <entry namest="c1">3</entry>
1552555991fdSmrg        <entry namest="c2"></entry>
1553555991fdSmrg        <entry namest="c3">unused</entry>
1554555991fdSmrg      </row>
1555555991fdSmrg
1556555991fdSmrg      <row>
1557555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>InteractRequest</function></emphasis></entry>
1558555991fdSmrg      </row>
1559555991fdSmrg      <row>
1560555991fdSmrg        <entry namest="c1">1</entry>
1561555991fdSmrg        <entry namest="c2">?</entry>
1562555991fdSmrg        <entry namest="c3">XSMP</entry>
1563555991fdSmrg      </row>
1564555991fdSmrg      <row>
1565555991fdSmrg        <entry namest="c1">1</entry>
1566555991fdSmrg        <entry namest="c2">5</entry>
1567555991fdSmrg        <entry namest="c3">opcode</entry>
1568555991fdSmrg      </row>
1569555991fdSmrg      <row>
1570555991fdSmrg        <entry namest="c1">1</entry>
1571555991fdSmrg        <entry namest="c2">DIALOG_TYPE</entry>
1572555991fdSmrg        <entry namest="c3">dialog type</entry>
1573555991fdSmrg      </row>
1574555991fdSmrg      <row>
1575555991fdSmrg        <entry namest="c1">1</entry>
1576555991fdSmrg        <entry namest="c2"></entry>
1577555991fdSmrg        <entry namest="c3">unused</entry>
1578555991fdSmrg      </row>
1579555991fdSmrg      <row>
1580555991fdSmrg        <entry namest="c1">4</entry>
1581555991fdSmrg        <entry namest="c2">0</entry>
1582555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1583555991fdSmrg      </row>
1584555991fdSmrg
1585555991fdSmrg      <row>
1586555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>Interact</function></emphasis></entry>
1587555991fdSmrg      </row>
1588555991fdSmrg      <row>
1589555991fdSmrg        <entry namest="c1">1</entry>
1590555991fdSmrg        <entry namest="c2">?</entry>
1591555991fdSmrg        <entry namest="c3">XSMP</entry>
1592555991fdSmrg      </row>
1593555991fdSmrg      <row>
1594555991fdSmrg        <entry namest="c1">1</entry>
1595555991fdSmrg        <entry namest="c2">6</entry>
1596555991fdSmrg        <entry namest="c3">opcode</entry>
1597555991fdSmrg      </row>
1598555991fdSmrg      <row>
1599555991fdSmrg        <entry namest="c1">2</entry>
1600555991fdSmrg        <entry namest="c2"></entry>
1601555991fdSmrg        <entry namest="c3">unused</entry>
1602555991fdSmrg      </row>
1603555991fdSmrg      <row>
1604555991fdSmrg        <entry namest="c1">4</entry>
1605555991fdSmrg        <entry namest="c2">0</entry>
1606555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1607555991fdSmrg      </row>
1608555991fdSmrg
1609555991fdSmrg      <row>
1610555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>InteractDone</function></emphasis></entry>
1611555991fdSmrg      </row>
1612555991fdSmrg      <row>
1613555991fdSmrg        <entry namest="c1">1</entry>
1614555991fdSmrg        <entry namest="c2">?</entry>
1615555991fdSmrg        <entry namest="c3">XSMP</entry>
1616555991fdSmrg      </row>
1617555991fdSmrg      <row>
1618555991fdSmrg        <entry namest="c1">1</entry>
1619555991fdSmrg        <entry namest="c2">7</entry>
1620555991fdSmrg        <entry namest="c3">opcode</entry>
1621555991fdSmrg      </row>
1622555991fdSmrg      <row>
1623555991fdSmrg        <entry namest="c1">1</entry>
1624555991fdSmrg        <entry namest="c2">BOOL</entry>
1625555991fdSmrg        <entry namest="c3">cancel-shutdown</entry>
1626555991fdSmrg      </row>
1627555991fdSmrg      <row>
1628555991fdSmrg        <entry namest="c1">1</entry>
1629555991fdSmrg        <entry namest="c2"></entry>
1630555991fdSmrg        <entry namest="c3">unused</entry>
1631555991fdSmrg      </row>
1632555991fdSmrg
1633555991fdSmrg      <row>
1634555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>InteractDone</function></emphasis></entry>
1635555991fdSmrg      </row>
1636555991fdSmrg      <row>
1637555991fdSmrg        <entry namest="c1">1</entry>
1638555991fdSmrg        <entry namest="c2">?</entry>
1639555991fdSmrg        <entry namest="c3">XSMP</entry>
1640555991fdSmrg      </row>
1641555991fdSmrg      <row>
1642555991fdSmrg        <entry namest="c1">1</entry>
1643555991fdSmrg        <entry namest="c2">7</entry>
1644555991fdSmrg        <entry namest="c3">opcode</entry>
1645555991fdSmrg      </row>
1646555991fdSmrg      <row>
1647555991fdSmrg        <entry namest="c1">1</entry>
1648555991fdSmrg        <entry namest="c2">BOOL</entry>
1649555991fdSmrg        <entry namest="c3">cancel-shutdown</entry>
1650555991fdSmrg      </row>
1651555991fdSmrg      <row>
1652555991fdSmrg        <entry namest="c1">1</entry>
1653555991fdSmrg        <entry namest="c2"></entry>
1654555991fdSmrg        <entry namest="c3">unused</entry>
1655555991fdSmrg      </row>
1656555991fdSmrg      <row>
1657555991fdSmrg        <entry namest="c1">4</entry>
1658555991fdSmrg        <entry namest="c2">0</entry>
1659555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1660555991fdSmrg      </row>
1661555991fdSmrg
1662555991fdSmrg      <row>
1663555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SaveYourselfDone</function></emphasis></entry>
1664555991fdSmrg      </row>
1665555991fdSmrg      <row>
1666555991fdSmrg        <entry namest="c1">1</entry>
1667555991fdSmrg        <entry namest="c2">?</entry>
1668555991fdSmrg        <entry namest="c3">XSMP</entry>
1669555991fdSmrg      </row>
1670555991fdSmrg      <row>
1671555991fdSmrg        <entry namest="c1">1</entry>
1672555991fdSmrg        <entry namest="c2">8</entry>
1673555991fdSmrg        <entry namest="c3">opcode</entry>
1674555991fdSmrg      </row>
1675555991fdSmrg      <row>
1676555991fdSmrg        <entry namest="c1">1</entry>
1677555991fdSmrg        <entry namest="c2">BOOL</entry>
1678555991fdSmrg        <entry namest="c3">success</entry>
1679555991fdSmrg      </row>
1680555991fdSmrg      <row>
1681555991fdSmrg        <entry namest="c1">1</entry>
1682555991fdSmrg        <entry namest="c2"></entry>
1683555991fdSmrg        <entry namest="c3">unused</entry>
1684555991fdSmrg      </row>
1685555991fdSmrg      <row>
1686555991fdSmrg        <entry namest="c1">4</entry>
1687555991fdSmrg        <entry namest="c2">0</entry>
1688555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1689555991fdSmrg      </row>
1690555991fdSmrg
1691555991fdSmrg      <row>
1692555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>Die</function></emphasis></entry>
1693555991fdSmrg      </row>
1694555991fdSmrg      <row>
1695555991fdSmrg        <entry namest="c1">1</entry>
1696555991fdSmrg        <entry namest="c2">?</entry>
1697555991fdSmrg        <entry namest="c3">XSMP</entry>
1698555991fdSmrg      </row>
1699555991fdSmrg      <row>
1700555991fdSmrg        <entry namest="c1">1</entry>
1701555991fdSmrg        <entry namest="c2">9</entry>
1702555991fdSmrg        <entry namest="c3">opcode</entry>
1703555991fdSmrg      </row>
1704555991fdSmrg      <row>
1705555991fdSmrg        <entry namest="c1">1</entry>
1706555991fdSmrg        <entry namest="c2"></entry>
1707555991fdSmrg        <entry namest="c3">unused</entry>
1708555991fdSmrg      </row>
1709555991fdSmrg      <row>
1710555991fdSmrg        <entry namest="c1">4</entry>
1711555991fdSmrg        <entry namest="c2">0</entry>
1712555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1713555991fdSmrg      </row>
1714555991fdSmrg
1715555991fdSmrg      <row>
1716555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>ShutdownCancelled</function></emphasis></entry>
1717555991fdSmrg      </row>
1718555991fdSmrg      <row>
1719555991fdSmrg        <entry namest="c1">1</entry>
1720555991fdSmrg        <entry namest="c2">?</entry>
1721555991fdSmrg        <entry namest="c3">XSMP</entry>
1722555991fdSmrg      </row>
1723555991fdSmrg      <row>
1724555991fdSmrg        <entry namest="c1">1</entry>
1725555991fdSmrg        <entry namest="c2">10</entry>
1726555991fdSmrg        <entry namest="c3">opcode</entry>
1727555991fdSmrg      </row>
1728555991fdSmrg      <row>
1729555991fdSmrg        <entry namest="c1">2</entry>
1730555991fdSmrg        <entry namest="c2"></entry>
1731555991fdSmrg        <entry namest="c3">unused</entry>
1732555991fdSmrg      </row>
1733555991fdSmrg      <row>
1734555991fdSmrg        <entry namest="c1">4</entry>
1735555991fdSmrg        <entry namest="c2">0</entry>
1736555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1737555991fdSmrg      </row>
1738555991fdSmrg
1739555991fdSmrg      <row>
1740555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>ConnectionClosed</function></emphasis></entry>
1741555991fdSmrg      </row>
1742555991fdSmrg      <row>
1743555991fdSmrg        <entry namest="c1">1</entry>
1744555991fdSmrg        <entry namest="c2">?</entry>
1745555991fdSmrg        <entry namest="c3">XSMP</entry>
1746555991fdSmrg      </row>
1747555991fdSmrg      <row>
1748555991fdSmrg        <entry namest="c1">1</entry>
1749555991fdSmrg        <entry namest="c2">11</entry>
1750555991fdSmrg        <entry namest="c3">opcode</entry>
1751555991fdSmrg      </row>
1752555991fdSmrg      <row>
1753555991fdSmrg        <entry namest="c1">2</entry>
1754555991fdSmrg        <entry namest="c2"></entry>
1755555991fdSmrg        <entry namest="c3">unused</entry>
1756555991fdSmrg      </row>
1757555991fdSmrg      <row>
1758555991fdSmrg        <entry namest="c1">4</entry>
1759555991fdSmrg        <entry namest="c2">a/8</entry>
1760555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1761555991fdSmrg      </row>
1762555991fdSmrg      <row>
1763555991fdSmrg        <entry namest="c1">a</entry>
1764555991fdSmrg        <entry namest="c2">LISTofARRAY8</entry>
1765555991fdSmrg        <entry namest="c3">reason</entry>
1766555991fdSmrg      </row>
1767555991fdSmrg
1768555991fdSmrg      <row>
1769555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SetProperties</function></emphasis></entry>
1770555991fdSmrg      </row>
1771555991fdSmrg      <row>
1772555991fdSmrg        <entry namest="c1">1</entry>
1773555991fdSmrg        <entry namest="c2">?</entry>
1774555991fdSmrg        <entry namest="c3">XSMP</entry>
1775555991fdSmrg      </row>
1776555991fdSmrg      <row>
1777555991fdSmrg        <entry namest="c1">1</entry>
1778555991fdSmrg        <entry namest="c2">12</entry>
1779555991fdSmrg        <entry namest="c3">opcode</entry>
1780555991fdSmrg      </row>
1781555991fdSmrg      <row>
1782555991fdSmrg        <entry namest="c1">2</entry>
1783555991fdSmrg        <entry namest="c2"></entry>
1784555991fdSmrg        <entry namest="c3">unused</entry>
1785555991fdSmrg      </row>
1786555991fdSmrg      <row>
1787555991fdSmrg        <entry namest="c1">4</entry>
1788555991fdSmrg        <entry namest="c2">a/8</entry>
1789555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1790555991fdSmrg      </row>
1791555991fdSmrg      <row>
1792555991fdSmrg        <entry namest="c1">a</entry>
1793555991fdSmrg        <entry namest="c2">LISTofPROPERTY</entry>
1794555991fdSmrg        <entry namest="c3">properties</entry>
1795555991fdSmrg      </row>
1796555991fdSmrg
1797555991fdSmrg      <row>
1798555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>DeleteProperties</function></emphasis></entry>
1799555991fdSmrg      </row>
1800555991fdSmrg      <row>
1801555991fdSmrg        <entry namest="c1">1</entry>
1802555991fdSmrg        <entry namest="c2">?</entry>
1803555991fdSmrg        <entry namest="c3">XSMP</entry>
1804555991fdSmrg      </row>
1805555991fdSmrg      <row>
1806555991fdSmrg        <entry namest="c1">1</entry>
1807555991fdSmrg        <entry namest="c2">13</entry>
1808555991fdSmrg        <entry namest="c3">opcode</entry>
1809555991fdSmrg      </row>
1810555991fdSmrg      <row>
1811555991fdSmrg        <entry namest="c1">2</entry>
1812555991fdSmrg        <entry namest="c2"></entry>
1813555991fdSmrg        <entry namest="c3">unused</entry>
1814555991fdSmrg      </row>
1815555991fdSmrg      <row>
1816555991fdSmrg        <entry namest="c1">4</entry>
1817555991fdSmrg        <entry namest="c2">a/8</entry>
1818555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1819555991fdSmrg      </row>
1820555991fdSmrg      <row>
1821555991fdSmrg        <entry namest="c1">a</entry>
1822555991fdSmrg        <entry namest="c2">LISTofPROPERTY</entry>
1823555991fdSmrg        <entry namest="c3">properties</entry>
1824555991fdSmrg      </row>
1825555991fdSmrg
1826555991fdSmrg      <row>
1827555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>GetProperties</function></emphasis></entry>
1828555991fdSmrg      </row>
1829555991fdSmrg      <row>
1830555991fdSmrg        <entry namest="c1">1</entry>
1831555991fdSmrg        <entry namest="c2">?</entry>
1832555991fdSmrg        <entry namest="c3">XSMP</entry>
1833555991fdSmrg      </row>
1834555991fdSmrg      <row>
1835555991fdSmrg        <entry namest="c1">1</entry>
1836555991fdSmrg        <entry namest="c2">14</entry>
1837555991fdSmrg        <entry namest="c3">opcode</entry>
1838555991fdSmrg      </row>
1839555991fdSmrg      <row>
1840555991fdSmrg        <entry namest="c1">2</entry>
1841555991fdSmrg        <entry namest="c2"></entry>
1842555991fdSmrg        <entry namest="c3">unused</entry>
1843555991fdSmrg      </row>
1844555991fdSmrg      <row>
1845555991fdSmrg        <entry namest="c1">4</entry>
1846555991fdSmrg        <entry namest="c2">0</entry>
1847555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1848555991fdSmrg      </row>
1849555991fdSmrg
1850555991fdSmrg      <row>
1851555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>GetPropertiesReply</function></emphasis></entry>
1852555991fdSmrg      </row>
1853555991fdSmrg      <row>
1854555991fdSmrg        <entry namest="c1">1</entry>
1855555991fdSmrg        <entry namest="c2">?</entry>
1856555991fdSmrg        <entry namest="c3">XSMP</entry>
1857555991fdSmrg      </row>
1858555991fdSmrg      <row>
1859555991fdSmrg        <entry namest="c1">1</entry>
1860555991fdSmrg        <entry namest="c2">15</entry>
1861555991fdSmrg        <entry namest="c3">opcode</entry>
1862555991fdSmrg      </row>
1863555991fdSmrg      <row>
1864555991fdSmrg        <entry namest="c1">2</entry>
1865555991fdSmrg        <entry namest="c2"></entry>
1866555991fdSmrg        <entry namest="c3">unused</entry>
1867555991fdSmrg      </row>
1868555991fdSmrg      <row>
1869555991fdSmrg        <entry namest="c1">4</entry>
1870555991fdSmrg        <entry namest="c2">a/8</entry>
1871555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1872555991fdSmrg      </row>
1873555991fdSmrg      <row>
1874555991fdSmrg        <entry namest="c1">a</entry>
1875555991fdSmrg        <entry namest="c2">LISTofPROPERTY</entry>
1876555991fdSmrg        <entry namest="c3">properties</entry>
1877555991fdSmrg      </row>
1878555991fdSmrg
1879555991fdSmrg      <row>
1880555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SaveYourselfPhase2Request</function></emphasis></entry>
1881555991fdSmrg      </row>
1882555991fdSmrg      <row>
1883555991fdSmrg        <entry namest="c1">1</entry>
1884555991fdSmrg        <entry namest="c2">?</entry>
1885555991fdSmrg        <entry namest="c3">XSMP</entry>
1886555991fdSmrg      </row>
1887555991fdSmrg      <row>
1888555991fdSmrg        <entry namest="c1">1</entry>
1889555991fdSmrg        <entry namest="c2">16</entry>
1890555991fdSmrg        <entry namest="c3">opcode</entry>
1891555991fdSmrg      </row>
1892555991fdSmrg      <row>
1893555991fdSmrg        <entry namest="c1">2</entry>
1894555991fdSmrg        <entry namest="c2"></entry>
1895555991fdSmrg        <entry namest="c3">unused</entry>
1896555991fdSmrg      </row>
1897555991fdSmrg      <row>
1898555991fdSmrg        <entry namest="c1">4</entry>
1899555991fdSmrg        <entry namest="c2">0</entry>
1900555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1901555991fdSmrg      </row>
1902555991fdSmrg
1903555991fdSmrg      <row>
1904555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SaveYourselfPhase2</function></emphasis></entry>
1905555991fdSmrg      </row>
1906555991fdSmrg      <row>
1907555991fdSmrg        <entry namest="c1">1</entry>
1908555991fdSmrg        <entry namest="c2">?</entry>
1909555991fdSmrg        <entry namest="c3">XSMP</entry>
1910555991fdSmrg      </row>
1911555991fdSmrg      <row>
1912555991fdSmrg        <entry namest="c1">1</entry>
1913555991fdSmrg        <entry namest="c2">17</entry>
1914555991fdSmrg        <entry namest="c3">opcode</entry>
1915555991fdSmrg      </row>
1916555991fdSmrg      <row>
1917555991fdSmrg        <entry namest="c1">2</entry>
1918555991fdSmrg        <entry namest="c2"></entry>
1919555991fdSmrg        <entry namest="c3">unused</entry>
1920555991fdSmrg      </row>
1921555991fdSmrg      <row>
1922555991fdSmrg        <entry namest="c1">4</entry>
1923555991fdSmrg        <entry namest="c2">0</entry>
1924555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1925555991fdSmrg      </row>
1926555991fdSmrg
1927555991fdSmrg      <row>
1928555991fdSmrg        <entry spanname="messagename"><emphasis role="bold"><function>SaveComplete</function></emphasis></entry>
1929555991fdSmrg      </row>
1930555991fdSmrg      <row>
1931555991fdSmrg        <entry namest="c1">1</entry>
1932555991fdSmrg        <entry namest="c2">?</entry>
1933555991fdSmrg        <entry namest="c3">XSMP</entry>
1934555991fdSmrg      </row>
1935555991fdSmrg      <row>
1936555991fdSmrg        <entry namest="c1">1</entry>
1937555991fdSmrg        <entry namest="c2">18</entry>
1938555991fdSmrg        <entry namest="c3">opcode</entry>
1939555991fdSmrg      </row>
1940555991fdSmrg      <row>
1941555991fdSmrg        <entry namest="c1">2</entry>
1942555991fdSmrg        <entry namest="c2"></entry>
1943555991fdSmrg        <entry namest="c3">unused</entry>
1944555991fdSmrg      </row>
1945555991fdSmrg      <row>
1946555991fdSmrg        <entry namest="c1">4</entry>
1947555991fdSmrg        <entry namest="c2">0</entry>
1948555991fdSmrg        <entry namest="c3">length of remaining data in 8-byte units</entry>
1949555991fdSmrg      </row>
1950555991fdSmrg     </tbody>
1951555991fdSmrg  </tgroup>
1952555991fdSmrg</informaltable>
1953555991fdSmrg
1954555991fdSmrg  </sect1>
1955555991fdSmrg</chapter>
1956555991fdSmrg
1957555991fdSmrg<chapter id='predefined_properties'>
1958555991fdSmrg  <title>Predefined Properties</title>
1959555991fdSmrg  <para>
1960555991fdSmrgAll property values are stored in a LISTofARRAY8.  If the type of the
1961555991fdSmrgproperty is CARD8, the value is stored as a LISTofARRAY8 with one
1962555991fdSmrgARRAY8 that is one byte long.  That single byte contains the CARD8.
1963555991fdSmrgIf the type of the property is ARRAY8, the value is stored in the
1964555991fdSmrgfirst element of a single element LISTofARRAY8.
1965555991fdSmrg  </para>
1966555991fdSmrg
1967555991fdSmrg  <para>
1968555991fdSmrgThe required properties must be set each time a client connects with
1969555991fdSmrgthe SM.  The properties must be set after the client
1970555991fdSmrgsends <function>RegisterClient</function> and before the client
1971555991fdSmrgsends <function>SaveYourselfDone</function> Otherwise, the behavior of
1972555991fdSmrgthe session manager is not defined.
1973555991fdSmrg  </para>
1974555991fdSmrg
1975555991fdSmrg  <para>
1976555991fdSmrgClients may set, get, and delete nonstandard properties.  The lifetime
1977555991fdSmrgof stored properties does not extend into subsequent sessions.
1978555991fdSmrg  </para>
1979555991fdSmrg
1980555991fdSmrg<informaltable pgwide='0' frame='none'>
1981555991fdSmrg  <tgroup cols='4'>
1982555991fdSmrg    <colspec colname='c1' align='left'  />
1983555991fdSmrg    <colspec colname='c2' align='left'  />
1984555991fdSmrg    <colspec colname='c3' align='left'  />
1985555991fdSmrg    <colspec colname='c4' align='center'/>
1986555991fdSmrg    <thead>
1987555991fdSmrg      <row>
1988555991fdSmrg        <entry>Name</entry>
1989555991fdSmrg        <entry>Type</entry>
1990555991fdSmrg        <entry>Posix Type</entry>
1991555991fdSmrg        <entry>Required?</entry>
1992555991fdSmrg      </row>
1993555991fdSmrg    </thead>
1994555991fdSmrg    <tbody>
1995555991fdSmrg      <row>
1996555991fdSmrg        <entry>CloneCommand</entry>
1997555991fdSmrg        <entry>OS-specific</entry>
1998555991fdSmrg        <entry>LISTofARRAY8</entry>
1999555991fdSmrg        <entry>Yes</entry>
2000555991fdSmrg      </row>
2001555991fdSmrg      <row>
2002555991fdSmrg        <entry>CurrentDirectory</entry>
2003555991fdSmrg        <entry>OS-specific</entry>
2004555991fdSmrg        <entry>ARRAY8</entry>
2005555991fdSmrg        <entry>No</entry>
2006555991fdSmrg      </row>
2007555991fdSmrg      <row>
2008555991fdSmrg        <entry>DiscardCommand</entry>
2009555991fdSmrg        <entry>OS-specific</entry>
2010555991fdSmrg        <entry>LISTofARRAY8</entry>
2011555991fdSmrg        <entry>No*</entry>
2012555991fdSmrg      </row>
2013555991fdSmrg      <row>
2014555991fdSmrg        <entry>Environment</entry>
2015555991fdSmrg        <entry>OS-specific</entry>
2016555991fdSmrg        <entry>LISTofARRAY8</entry>
2017555991fdSmrg        <entry>No</entry>
2018555991fdSmrg      </row>
2019555991fdSmrg      <row>
2020555991fdSmrg        <entry>ProcessID</entry>
2021555991fdSmrg        <entry>OS-specific</entry>
2022555991fdSmrg        <entry>ARRAY8</entry>
2023555991fdSmrg        <entry>No</entry>
2024555991fdSmrg      </row>
2025555991fdSmrg      <row>
2026555991fdSmrg        <entry>Program</entry>
2027555991fdSmrg        <entry>OS-specific</entry>
2028555991fdSmrg        <entry>ARRAY8</entry>
2029555991fdSmrg        <entry>Yes</entry>
2030555991fdSmrg      </row>
2031555991fdSmrg      <row>
2032555991fdSmrg        <entry>RestartCommand</entry>
2033555991fdSmrg        <entry>OS-specific</entry>
2034555991fdSmrg        <entry>LISTofARRAY8</entry>
2035555991fdSmrg        <entry>Yes</entry>
2036555991fdSmrg      </row>
2037555991fdSmrg      <row>
2038555991fdSmrg        <entry>ResignCommand</entry>
2039555991fdSmrg        <entry>OS-specific</entry>
2040555991fdSmrg        <entry>LISTofARRAY8</entry>
2041555991fdSmrg        <entry>No</entry>
2042555991fdSmrg      </row>
2043555991fdSmrg      <row>
2044555991fdSmrg        <entry>RestartStyleHint</entry>
2045555991fdSmrg        <entry>CARD8</entry>
2046555991fdSmrg        <entry>CARD8</entry>
2047555991fdSmrg        <entry>No</entry>
2048555991fdSmrg      </row>
2049555991fdSmrg      <row>
2050555991fdSmrg        <entry>ShutdownCommand</entry>
2051555991fdSmrg        <entry>OS-specific</entry>
2052555991fdSmrg        <entry>LISTofARRAY8</entry>
2053555991fdSmrg        <entry>No</entry>
2054555991fdSmrg      </row>
2055555991fdSmrg      <row>
2056555991fdSmrg        <entry>UserID</entry>
2057555991fdSmrg        <entry>ARRAY8</entry>
2058555991fdSmrg        <entry>ARRAY8</entry>
2059555991fdSmrg        <entry>Yes</entry>
2060555991fdSmrg      </row>
2061555991fdSmrg    </tbody>
2062555991fdSmrg  </tgroup>
2063555991fdSmrg</informaltable>
2064555991fdSmrg
2065555991fdSmrg  <para>
2066555991fdSmrg* Required if any state is stored in an external repository (e.g., state file).
2067555991fdSmrg  </para>
2068555991fdSmrg
2069555991fdSmrg  <variablelist remap='IP'>
2070555991fdSmrg    <varlistentry>
2071555991fdSmrg      <term>CloneCommand</term>
2072555991fdSmrg      <listitem> <para>
2073555991fdSmrgThis is like the <function>RestartCommand</function> except it
2074555991fdSmrgrestarts a copy of the application.  The only difference is that the
2075555991fdSmrgapplication doesn't supply its client id at register time.  On <acronym>POSIX</acronym>
2076555991fdSmrgsystems the type should be a LISTofARRAY8.
2077555991fdSmrg      </para></listitem>
2078555991fdSmrg    </varlistentry>
2079555991fdSmrg    <varlistentry>
2080555991fdSmrg      <term>CurrentDirectory</term>
2081555991fdSmrg      <listitem><para>
2082555991fdSmrgOn <acronym>POSIX</acronym>-based systems specifies the value of the current directory that
2083555991fdSmrgneeds to be set up prior to starting the program and should be of type ARRAY8.
2084555991fdSmrg      </para></listitem>
2085555991fdSmrg    </varlistentry>
2086555991fdSmrg    <varlistentry>
2087555991fdSmrg      <term>DiscardCommand</term>
2088555991fdSmrg      <listitem><para>
2089555991fdSmrgThe discard command contains a command that when delivered to the host
2090555991fdSmrgthat the client is running on (determined from the connection), will
2091555991fdSmrgcause it to discard any information about the current state.  If this
2092555991fdSmrgcommand is not specified, the SM will assume that all of the client's
2093555991fdSmrgstate is encoded in the <function>Restart&shy;Command</function> On
2094555991fdSmrg<acronym>POSIX</acronym> systems the type should be LISTofARRAY8.
2095555991fdSmrg      </para></listitem>
2096555991fdSmrg    </varlistentry>
2097555991fdSmrg    <varlistentry>
2098555991fdSmrg      <term>Environment</term>
2099555991fdSmrg      <listitem><para>
2100555991fdSmrgOn <acronym>POSIX</acronym> based systems, this will be of type LISTofARRAY8 where the
2101555991fdSmrgARRAY8s alternate between environment variable name and environment
2102555991fdSmrgvariable value.
2103555991fdSmrg      </para></listitem>
2104555991fdSmrg    </varlistentry>
2105555991fdSmrg    <varlistentry>
2106555991fdSmrg      <term>ProcessID</term>
2107555991fdSmrg      <listitem><para>
2108555991fdSmrgThis specifies an OS-specific identifier for the process.  On <acronym>POSIX</acronym>
2109555991fdSmrgsystems this should of type ARRAY8 and contain the return value of
2110555991fdSmrggetpid() turned into a Latin-1 (decimal) string.
2111555991fdSmrg      </para></listitem>
2112555991fdSmrg    </varlistentry>
2113555991fdSmrg    <varlistentry>
2114555991fdSmrg      <term>Program</term>
2115555991fdSmrg      <listitem><para>
2116555991fdSmrgThe name of the program that is running.  On <acronym>POSIX</acronym> systems this should
2117555991fdSmrgbe the first parameter passed to execve and should be of type ARRAY8.
2118555991fdSmrg      </para></listitem>
2119555991fdSmrg    </varlistentry>
2120555991fdSmrg    <varlistentry>
2121555991fdSmrg      <term>RestartCommand</term>
2122555991fdSmrg      <listitem><para>
2123555991fdSmrgThe restart command contains a command that when delivered to the host
2124555991fdSmrgthat the client is running on (determined from the connection), will
2125555991fdSmrgcause the client to restart in its current state.  On <acronym>POSIX</acronym>-based
2126555991fdSmrgsystems this is of type LISTofARRAY8 and each of the elements in the
2127555991fdSmrgarray represents an element in the argv array.  This restart command
2128555991fdSmrgshould ensure that the client restarts with the specified
2129555991fdSmrgclient-ID.
2130555991fdSmrg      </para></listitem>
2131555991fdSmrg    </varlistentry>
2132555991fdSmrg    <varlistentry>
2133555991fdSmrg      <term>ResignCommand</term>
2134555991fdSmrg      <listitem>
2135555991fdSmrg	<para>
2136555991fdSmrgA client that sets the <function>RestartStyleHint</function>
2137555991fdSmrgto <function>RestartAnyway</function> uses this property to specify a
2138555991fdSmrgcommand that undoes the effect of the client and removes any saved
2139555991fdSmrgstate.
2140555991fdSmrg	</para>
2141555991fdSmrg	<note><title>Example</title><para>
2142555991fdSmrgA user runs xmodmap.  xmodmap registers with the SM,
2143555991fdSmrgsets <function>Restart&shy;Style&shy;Hint</function>
2144555991fdSmrgto <function>Restart&shy;Anyway</function> and then terminates.  In
2145555991fdSmrgorder to allow the SM (at the user's request) to undo this, xmodmap
2146555991fdSmrgwould register a <function>Resign&shy;Command</function> that undoes
2147555991fdSmrgthe effects of the xmodmap.
2148555991fdSmrg	</para></note>
2149555991fdSmrg      </listitem>
2150555991fdSmrg    </varlistentry>
2151555991fdSmrg    <varlistentry>
2152555991fdSmrg      <term>RestartStyleHint</term>
2153555991fdSmrg      <listitem>
2154555991fdSmrg	<para>
2155555991fdSmrgIf the RestartStyleHint property is present, it will contain the style
2156555991fdSmrgof restarting the client prefers.  If this flag isn't
2157555991fdSmrgspecified, <function>RestartIfRunning</function> is assumed.  The
2158555991fdSmrgpossible values are as follows:
2159555991fdSmrg	</para>
2160555991fdSmrg
2161555991fdSmrg<informaltable pgwide='0' frame='none'>
2162555991fdSmrg  <tgroup cols='2'>
2163555991fdSmrg    <colspec colname='c1' align='left'/>
2164555991fdSmrg    <colspec colname='c2' align='right'/>
2165555991fdSmrg    <thead>
2166555991fdSmrg      <row>
2167555991fdSmrg        <entry namest="c1">Name</entry>
2168555991fdSmrg        <entry namest="c2">Value</entry>
2169555991fdSmrg      </row>
2170555991fdSmrg    </thead>
2171555991fdSmrg    <tbody>
2172555991fdSmrg      <row>
2173555991fdSmrg        <entry namest="c1">RestartIfRunning</entry>
2174555991fdSmrg        <entry namest="c2">0</entry>
2175555991fdSmrg      </row>
2176555991fdSmrg      <row>
2177555991fdSmrg        <entry namest="c1">RestartAnyway</entry>
2178555991fdSmrg        <entry namest="c2">1</entry>
2179555991fdSmrg      </row>
2180555991fdSmrg      <row>
2181555991fdSmrg        <entry namest="c1">RestartImmediately</entry>
2182555991fdSmrg        <entry namest="c2">2</entry>
2183555991fdSmrg      </row>
2184555991fdSmrg      <row>
2185555991fdSmrg        <entry namest="c1">RestartNever</entry>
2186555991fdSmrg        <entry namest="c2">3</entry>
2187555991fdSmrg      </row>
2188555991fdSmrg    </tbody>
2189555991fdSmrg  </tgroup>
2190555991fdSmrg</informaltable>
2191555991fdSmrg
2192555991fdSmrg	<para>
2193555991fdSmrgThe <function>RestartIfRunning</function> style is used in the usual
2194555991fdSmrgcase.  The client should be restarted in the next session if it is
2195555991fdSmrgconnected to the session manager at the end of the current session.
2196555991fdSmrg	</para>
2197555991fdSmrg
2198555991fdSmrg	<para>
2199555991fdSmrgThe <function>RestartAnyway</function> style is used to tell the SM
2200555991fdSmrgthat the application should be restarted in the next session even if
2201555991fdSmrgit exits before the current session is terminated.  It should be noted
2202555991fdSmrgthat this is only a hint and the SM will follow the policies specified
2203555991fdSmrgby its users in determining what applications to restart.
2204555991fdSmrg	</para>
2205555991fdSmrg
2206555991fdSmrg	<note><title>Rationale</title><para>
2207555991fdSmrgThis can be specified by a client which supports (as MS-Windows
2208555991fdSmrgclients do) a means for the user to indicate while exiting that
2209555991fdSmrgrestarting is desired.  It can also be used for clients that spawn
2210555991fdSmrgother clients and then go away, but which want to be restarted.
2211555991fdSmrg	</para></note>
2212555991fdSmrg
2213555991fdSmrg	<para>
2214555991fdSmrgA client that uses <function>RestartAnyway</function> should also set
2215555991fdSmrgthe <function>ResignCommand</function> and <function>ShutdownCommand</function>
2216555991fdSmrgproperties to commands that undo the state of the client after it exits.
2217555991fdSmrg	</para>
2218555991fdSmrg
2219555991fdSmrg	<para>
2220555991fdSmrgThe <function>RestartImmediately</function> style is
2221555991fdSmrglike <function>RestartAnyway</function> but in addition, the client is
2222555991fdSmrgmeant to run continuously.  If the client exits, the SM should try to
2223555991fdSmrgrestart it in the current session.
2224555991fdSmrg	</para>
2225555991fdSmrg
2226555991fdSmrg	<note><title>Advice to Implementors</title><para>
2227555991fdSmrgIt would be wise to sanity-check the frequency which
2228555991fdSmrgwhich <function>RestartImmediately</function> clients are restarted,
2229555991fdSmrgto avoid a sick client being restarted continuously.
2230555991fdSmrg	</para></note>
2231555991fdSmrg
2232555991fdSmrg	<para>
2233555991fdSmrgThe <function>RestartNever</function> style specifies that the client
2234555991fdSmrgdoes not wish to be restarted in the next session.
2235555991fdSmrg	</para>
2236555991fdSmrg
2237555991fdSmrg	<note><title>Advice to Implementors</title> <para>
2238555991fdSmrgThis should be used rarely, if at all.  It will cause the client to be
2239555991fdSmrgsilently left out of sessions when they are restarted and will
2240555991fdSmrgprobably be confusing to users.
2241555991fdSmrg	</para></note> <!-- remap='NE' -->
2242555991fdSmrg	<!-- .RE -->
2243555991fdSmrg      </listitem>
2244555991fdSmrg    </varlistentry>
2245555991fdSmrg    <varlistentry>
2246555991fdSmrg      <term>ShutdownCommand</term>
2247555991fdSmrg      <listitem>
2248555991fdSmrg	<para>
2249555991fdSmrgThis command is executed at shutdown time to clean up after a client
2250555991fdSmrgthat is no longer running but retained its state by
2251555991fdSmrgsetting <function>RestartStyleHint</function>
2252555991fdSmrgto <function>RestartAnyway</function> The command must not remove any
2253555991fdSmrgsaved state as the client is still part of the session.
2254555991fdSmrg	</para>
2255555991fdSmrg	<note><title>Example</title><para>
2256555991fdSmrgA client is run at start up time that turns on a camera.  This client
2257555991fdSmrgthen exits.  At session shutdown, the user wants the camera turned
2258555991fdSmrgoff.  This client would set the <function>Restart&shy;Style&shy;Hint</function>
2259555991fdSmrgto <function>Restart&shy;Anyway</function> and would register a
2260555991fdSmrg<function>Shutdown&shy;Command</function> that would turn off the camera.
2261555991fdSmrg	</para></note>
2262555991fdSmrg      </listitem>
2263555991fdSmrg    </varlistentry>
2264555991fdSmrg    <varlistentry>
2265555991fdSmrg      <term>UserID</term>
2266555991fdSmrg    <listitem><para>
2267555991fdSmrgSpecifies the user's ID.  On <acronym>POSIX</acronym>-based systems
2268555991fdSmrgthis will contain the the user's name (the <structfield>pw_name</structfield>
2269555991fdSmrgfield of <structname>struct passwd</structname>).
2270555991fdSmrg    </para></listitem>
2271555991fdSmrg    </varlistentry>
2272555991fdSmrg  </variablelist>
2273555991fdSmrg</chapter>
2274555991fdSmrg</book>
2275