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 “Software”), 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 “AS IS”, 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 ­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­Client</function> 330555991fdSmrgand <function>Register­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 → 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 ← 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­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­Yourself</function> 466555991fdSmrgmessage. 467555991fdSmrg </para> 468555991fdSmrg 469555991fdSmrg <synopsis> 470555991fdSmrg<function>SaveYourself</function> [Client ← 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­Request</function> message. The SM will 515555991fdSmrgsend an <function>Interact</function> message to each client that sent 516555991fdSmrgan <function>Interact­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­Done</function> message. 520555991fdSmrgThe <function>Interact­Request</function> message can be sent any 521555991fdSmrgtime after a <function>Save­Yourself</function> and before 522555991fdSmrga <function>Save­Yourself­Done</function> 523555991fdSmrg </para> 524555991fdSmrg 525555991fdSmrg <para> 526555991fdSmrgUnusual circumstances may dictate multiple interactions. The client 527555991fdSmrgmay initiate as many <function>Interact­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­Yourself</function> and has 534555991fdSmrgnot yet responded <function>Save­Yourself­Done</function> to a 535555991fdSmrgprevious <function>Save­Yourself</function> it must send 536555991fdSmrga <function>Save­Yourself­Done</function> and may then begin 537555991fdSmrgresponding as appropriate to the newly received 538555991fdSmrg<function>Save­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­Yourself­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­Command</function> property with 565555991fdSmrgenough information to find the temporary file, and 566555991fdSmrgits <function>Discard­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­Command</function> property with enough 583555991fdSmrginformation to find the temporary file, and 584555991fdSmrgits <function>Discard­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­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 → 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 → 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­Yourself­Request</function> 703555991fdSmrg </para> 704555991fdSmrg 705555991fdSmrg <synopsis> 706555991fdSmrg<function>InteractRequest</function> [Client → 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 ← 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 → 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 → 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 → 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 ← 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 → 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 ← 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 → 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 → 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­Properties</function> 903555991fdSmrgmessage are unaffected. Some properties have predefined semantics. 904555991fdSmrgSee <link linkend='predefined_properties'>section 11, 905555991fdSmrg“Predefined Properties.”</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 → 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 → 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 ← 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 → <emphasis remap='C'>register</emphasis></literallayout> 980555991fdSmrg 981555991fdSmrg<literallayout> 982555991fdSmrg<emphasis remap='I'>register:</emphasis> 983555991fdSmrg send <emphasis remap='B'>RegisterClient</emphasis> → <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> → <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> → <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> → <emphasis remap='C'>die</emphasis> 996555991fdSmrg receive <emphasis remap='B'>SaveYourself</emphasis> → <emphasis remap='C'>freeze-interaction</emphasis> 997555991fdSmrg send <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>idle</emphasis> 998555991fdSmrg receive <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>idle</emphasis> 999555991fdSmrg send <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>idle</emphasis> 1000555991fdSmrg send <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>idle</emphasis> 1001555991fdSmrg send <emphasis remap='B'>ConnectionClosed</emphasis> → <emphasis remap='C'>connection-closed</emphasis> 1002555991fdSmrg send <emphasis remap='B'>SaveYourselfRequest</emphasis> → <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> → <emphasis remap='C'>connection-closed</emphasis></literallayout> 1008555991fdSmrg 1009555991fdSmrg<literallayout remap='DS'> 1010555991fdSmrg<emphasis remap='I'>freeze-interaction:</emphasis> 1011555991fdSmrg freeze interaction with user → <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> → <emphasis remap='C'>shutdown-cancelled</emphasis> 1016555991fdSmrg send <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1017555991fdSmrg send <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1018555991fdSmrg send <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1019555991fdSmrg receive <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1020555991fdSmrg send <emphasis remap='B'>InteractRequest</emphasis> → <emphasis remap='C'>interact-request</emphasis> 1021555991fdSmrg send <emphasis remap='B'>SaveYourselfPhase2Request</emphasis> → waiting-for-phase2 1022555991fdSmrg 1023555991fdSmrg<emphasis remap='I'>save-yourself:</emphasis> 1024555991fdSmrg if shutdown mode: 1025555991fdSmrg send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>save-yourself-done</emphasis> 1026555991fdSmrg otherwise: 1027555991fdSmrg send <emphasis remap='B'>SaveYourselfDone</emphasis> → <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> → <emphasis remap='C'>shutdown-cancelled</emphasis> 1032555991fdSmrg receive <emphasis remap='B'>SaveYourselfPhase2</emphasis> → <emphasis remap='C'>phase2</emphasis></literallayout> 1033555991fdSmrg 1034555991fdSmrg<literallayout remap='DS'> 1035555991fdSmrg<emphasis remap='I'>phase2:</emphasis> 1036555991fdSmrg receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>shutdown-cancelled</emphasis> 1037555991fdSmrg send <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1038555991fdSmrg send <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1039555991fdSmrg send <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1040555991fdSmrg receive <emphasis remap='B'>GetPropertiesReply</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1041555991fdSmrg send <emphasis remap='B'>InteractRequest</emphasis> → <emphasis remap='C'>interact-request</emphasis> (errors only) 1042555991fdSmrg if shutdown mode: 1043555991fdSmrg send <emphasis remap='B'>SaveYourselfDone</emphasis> → <emphasis remap='C'>save-yourself-done</emphasis> 1044555991fdSmrg otherwise: 1045555991fdSmrg send <emphasis remap='B'>SaveYourselfDone</emphasis> → <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> → <emphasis remap='C'>interact</emphasis> 1050555991fdSmrg receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <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> → <emphasis remap='C'>save-yourself</emphasis> 1055555991fdSmrg receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <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> → <emphasis remap='C'>idle</emphasis> 1060555991fdSmrg receive <emphasis remap='B'>Die</emphasis> → <emphasis remap='C'>die</emphasis> 1061555991fdSmrg receive <emphasis remap='B'>ShutdownCancelled</emphasis> → <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> → <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> → <emphasis remap='C'>register</emphasis></literallayout> 1078555991fdSmrg 1079555991fdSmrg<literallayout remap='DS'> 1080555991fdSmrg<emphasis remap='I'>register:</emphasis> 1081555991fdSmrg receive <emphasis remap='B'>RegisterClient</emphasis> → <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> → <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> → <emphasis remap='C'>idle</emphasis> 1092555991fdSmrg receive <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>idle</emphasis> 1093555991fdSmrg receive <emphasis remap='B'>ConnectionClosed</emphasis> → <emphasis remap='C'>start</emphasis> 1094555991fdSmrg receive <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>get-properties</emphasis> 1095555991fdSmrg receive <emphasis remap='B'>SaveYourselfRequest</emphasis> → <emphasis remap='C'>save-yourself</emphasis> 1096555991fdSmrg send <emphasis remap='B'>SaveYourself</emphasis> → <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> → <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> → <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> → <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> → <emphasis remap='C'>saving-yourself</emphasis> 1117555991fdSmrg send <emphasis remap='B'>Interact</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1118555991fdSmrg send <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>idle</emphasis> 1119555991fdSmrg receive <emphasis remap='B'>InteractDone</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1120555991fdSmrg receive <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1121555991fdSmrg receive <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1122555991fdSmrg receive <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>saving-get-properties</emphasis> 1123555991fdSmrg receive <emphasis remap='B'>SaveYourselfPhase2Request</emphasis> → <emphasis remap='C'>start-phase2</emphasis> 1124555991fdSmrg receive <emphasis remap='B'>SaveYourselfDone</emphasis> → <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> → <emphasis remap='C'>phase2</emphasis> 1131555991fdSmrg else 1132555991fdSmrg → <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> → <emphasis remap='C'>saving-yourself</emphasis> 1138555991fdSmrg send <emphasis remap='B'>Interact</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1139555991fdSmrg send <emphasis remap='B'>ShutdownCancelled</emphasis> → <emphasis remap='C'>idle</emphasis> 1140555991fdSmrg receive <emphasis remap='B'>InteractDone</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1141555991fdSmrg receive <emphasis remap='B'>SetProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1142555991fdSmrg receive <emphasis remap='B'>DeleteProperties</emphasis> → <emphasis remap='C'>saving-yourself</emphasis> 1143555991fdSmrg receive <emphasis remap='B'>GetProperties</emphasis> → <emphasis remap='C'>saving-get-properties</emphasis> 1144555991fdSmrg receive <emphasis remap='B'>SaveYourselfDone</emphasis> → <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> → <emphasis remap='C'>die</emphasis> 1152555991fdSmrg otherwise 1153555991fdSmrg send <emphasis remap='B'>SaveComplete</emphasis> → <emphasis remap='C'>idle</emphasis> 1154555991fdSmrg 1155555991fdSmrg If some clients are not saved: 1156555991fdSmrg → <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­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­Style­Hint</function> 2144555991fdSmrgto <function>Restart­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­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­Style­Hint</function> 2259555991fdSmrgto <function>Restart­Anyway</function> and would register a 2260555991fdSmrg<function>Shutdown­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