xdmcp.xml revision 44dda7b2
1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" 3 "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> 4 5<book id="xdmcp"> 6 7<bookinfo> 8 <title>X Display Manager Control Protocol</title> 9 <subtitle>X.Org Standard</subtitle> 10 <releaseinfo>Version 1.1</releaseinfo> 11 <authorgroup> 12 <author> 13 <firstname>Keith</firstname><surname>Packard</surname> 14 <affiliation><orgname> 15X Consortium, 16Laboratory for Computer Science, 17Massachusetts Institute of Technology 18 </orgname></affiliation> 19 </author> 20 </authorgroup> 21 22 <copyright><year>1989</year><holder>The Open Group</holder></copyright> 23 <copyright><year>2004</year><holder>The Open Group</holder></copyright> 24 <productnumber>X Version 11, Release 6.8</productnumber> 25 26<legalnotice> 27 28 29 30<para> 31Permission is hereby granted, free of charge, to any person obtaining a copy 32of this software and associated documentation files (the "Software"), to deal 33in the Software without restriction, including without limitation the rights 34to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 35copies of the Software, and to permit persons to whom the Software is 36furnished to do so, subject to the following conditions: 37</para> 38<para> 39The above copyright notice and this permission notice shall be included in 40all copies or substantial portions of the Software. 41</para> 42<para> 43THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 44IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 45FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 46OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 47AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 48CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 49</para> 50<para> 51Except as contained in this notice, the name of The Open Group shall not be 52used in advertising or otherwise to promote the sale, use or other dealings 53in this Software without prior written authorization from The Open Group. 54</para> 55 56<para> 57<emphasis remap='I'>X Window System</emphasis> is a trademark of The Open Group. 58</para> 59</legalnotice> 60</bookinfo> 61 62<chapter id="TITLE"> 63<title>TITLE</title> 64<sect1 id="Purpose_and_Goals"> 65<title>Purpose and Goals</title> 66<!-- .XS --> 67<!-- (SN Purpose and Goals --> 68<!-- .XE --> 69<para> 70<!-- .LP --> 71The purpose of the X Display Manager Control Protocol (XDMCP) 72is to provide a uniform mechanism for an autonomous 73display to request login service from a remote host. 74By autonomous, we mean 75the display consists of hardware and processes that are independent of any 76particular host where login service is desired. (For example, the server 77cannot simply be started by a 78<function>fork/exec</function> 79sequence on the host.) 80An X terminal (screen, keyboard, mouse, processor, network interface) 81is a prime example of an autonomous display. 82</para> 83 84<para> 85From the point of view of the end user, it is very important to make 86autonomous displays as easy to use as traditional hardwired character 87terminals. Specifically, you can typically just power on a hardwired 88terminal and be greeted with a login prompt. The same should be possible 89with autonomous displays. However, in a network environment with multiple 90hosts, the end user may want to choose which host(s) to connect to. In an 91environment with many displays and many hosts, a site administrator may want 92to associate particular collections of hosts with particular displays. We 93would like to support the following options: 94</para> 95 96<itemizedlist> 97 <listitem> 98 <para> 99The display has a single, fixed host to which it should connect. It should be 100possible to power on the display and receive a login prompt, without user 101intervention. 102 </para> 103 </listitem> 104 <listitem> 105 <para> 106Any one of several hosts on a network or subnetwork may be acceptable 107for accepting login from the display. 108(For example, the user's file systems can be mounted onto 109any such host, providing comparable environments.) It should be possible 110for the display to broadcast to find such hosts and to have the display 111either automatically choose a host or present the possible hosts to the 112user for selection. 113 </para> 114 </listitem> 115 <listitem> 116 <para> 117The display has a fixed set of hosts that it can connect to. It should be 118possible for the display to have that set stored in RAM, but it should also be 119possible for a site administrator to be able to maintain host sets for a 120large number of displays using a centralized facility, without having to 121interact (physically or electronically) with each individual display. 122Particular hosts should be allowed to refuse login service, based on 123whatever local criteria are desired. 124 </para> 125 </listitem> 126</itemizedlist> 127 128<para> 129The control protocol should be designed in such a way that it can be used over 130a reasonable variety of communication transport layers. In fact, it is quite 131desirable if every major network protocol family that supports the standard X 132protocol is also capable of supporting XDMCP, because the end result of XDMCP 133negotiation will be standard X protocol connections to the display. 134However, because the number of displays per host may be large, 135a connection-based protocol appears less desirable 136than a connection-less protocol. For this reason the protocol is designed 137to use datagram services with the display responsible for sequencing and 138retransmission. 139</para> 140<para> 141<!-- .LP --> 142To keep the burden on displays at a minimum (because display cost is not 143a factor that can be ignored), it is desirable that displays not be required 144to maintain permanent state (across power cycles) for the purposes 145of the control protocol, 146and it is desirable to keep required state at a minimum while the 147display is powered on. 148</para> 149<para> 150<!-- .LP --> 151Security is an important consideration and must be an integral part of the 152design. The important security goals in the context of XDMCP are: 153</para> 154<itemizedlist> 155 <listitem> 156 <para> 157It should be possible for the display to verify that it is communicating 158with a legitimate host login service. Because the user will present 159credentials (for example, password) to this service, 160it is important to avoid spoof attacks. 161 </para> 162 </listitem> 163 <listitem> 164 <para> 165It should be possible for the display and the login service to negotiate the 166authorization mechanism to be used for the standard X protocol. 167 </para> 168 </listitem> 169 <listitem> 170 <para> 171It should be possible to provide the same level of security in verifying the 172login service as is provided by the negotiated authorization mechanism. 173 </para> 174 </listitem> 175 <listitem> 176 <para> 177Because there are no firm standards yet in the area of security, 178XDMCP must be flexible enough to accomodate a variety of security mechanisms. 179 </para> 180 </listitem> 181</itemizedlist> 182</sect1> 183 184<sect1 id="Overview_of_the_Protocol"> 185<title>Overview of the Protocol</title> 186<!-- .XS --> 187<!-- (SN Overview of the Protocol --> 188<!-- .XE --> 189<para> 190<!-- .LP --> 191XDMCP is designed to provide authenticated access to display management 192services for remote displays. A new network server, called a \fIDisplay 193Manager\fP, will use XDMCP to communicate with displays to negotiate the 194startup of X sessions. The protocol allows the display to authenticate the 195manager. It also allows most of the configuration information to be 196centralized with the manager and to ease the burden of system administration 197in a large network of displays. 198The essential goal is to provide plug-and-play 199services similar to those provided in the familiar mainframe/terminal world. 200</para> 201<para> 202<!-- .LP --> 203Displays may be turned off by the user at any time. Any existing session 204running on a display that has been turned off must be identifiable. This 205is made possible by requiring a three-way handshake to start a session. If 206the handshake succeeds, any existing session is terminated immediately and a 207new session started. There is the problem (at least with TCP) that 208connections may not be closed when the display is turned off. In most 209environments, the manager should reduce this problem by periodically XSync'ing 210on its own connection, perhaps every five to ten minutes, and terminating the 211session if its own connection ever closes. 212</para> 213<para> 214<!-- .LP --> 215Displays should not be required to retain permanent state for purposes of 216the control protocol. One solution to packets received out of sequence 217would be to use monotonically increasing message identifiers in each message 218to allow both sides to ignore messages that arrive out-of-sequence. For 219this to work, displays would at a minimum have to increment a stable crash 220count each time they are powered on and use that number as part of a 221larger sequence number. But if displays cannot retain permanent state this 222cannot work. Instead, the manager assumes the responsibility for permanent 223state by generating unique numbers that identify a particular session and 224the protocol simply ignores packets that correspond to an invalid session. 225</para> 226<para> 227<!-- .LP --> 228The Manager must not be responsible for packet reception. To prevent the 229Manager from becoming stuck because of a hostile display, no portion of the 230protocol requires the Manager to retransmit a packet. Part of this means 231that any valid packet that the Manager does receive must be 232acknowledged in some way to prevent the display from continuously resending 233packets. The display can keep the protocol running as it will always know 234when the Manager has received (at least one copy of) a packet. On the 235Manager side, this means that any packet may be received more than once (if 236the response was lost) and duplicates must be ignored. 237</para> 238</sect1> 239 240<sect1 id="Data_Types"> 241<title>Data Types</title> 242<!-- .XS --> 243<!-- (SN Data Types --> 244<!-- .XE --> 245<para> 246<!-- .LP --> 247XDMCP packets contain several types of data. Integer values are always 248stored most significant byte first in the packet ("Big Endian" order). 249As XDMCP will not be used to transport large quantities of data, this 250restriction will not substantially hamper the efficiency of any 251implementation. Also, no padding of any sort will occur within the packets. 252</para> 253 254<informaltable frame="none"> 255 <tgroup cols='3' align='left'> 256 <colspec colname='c1' colsep="0"/> 257 <colspec colname='c2' colsep="0"/> 258 <colspec colname='c3' colsep="0"/> 259 <thead> 260 <row> 261 <entry>Type Name</entry> 262 <entry>Length (Bytes)</entry> 263 <entry>Description</entry> 264 </row> 265 </thead> 266 <tbody> 267 <row rowsep="0"> 268 <entry>CARD8</entry> 269 <entry>1</entry> 270 <entry>A single byte unsigned integer</entry> 271 </row> 272 <row rowsep="0"> 273 <entry>CARD16</entry> 274 <entry>2</entry> 275 <entry>Two byte unsigned integer</entry> 276 </row> 277 <row rowsep="0"> 278 <entry>CARD32</entry> 279 <entry>4</entry> 280 <entry>Four byte unsigned integer</entry> 281 </row> 282 <row rowsep="0"> 283 <entry>ARRAY8</entry> 284 <entry>n+2</entry> 285 <entry> 286This is actually a CARD16 followed by 287a collection of CARD8. The value of the CARD16 288field (n) specifies the number of CARD8 values to follow 289 </entry> 290 </row> 291 <row rowsep="0"> 292 <entry>ARRAY16</entry> 293 <entry>2*m+1</entry> 294 <entry> 295This is a CARD8 (m) which specifies the 296number of CARD16 values to follow 297 </entry> 298 </row> 299 <row rowsep="0"> 300 <entry>ARRAY32</entry> 301 <entry>4*l+1</entry> 302 <entry> 303This is a CARD8 (l) which specifies the 304number of CARD32 values to follow 305 </entry> 306 </row> 307 <row rowsep="0"> 308 <entry>ARRAYofARRAY8</entry> 309 <entry>?</entry> 310 <entry> 311This is a CARD8 which specifies the 312number of ARRAY8 values to follow. 313 </entry> 314 </row> 315 </tbody> 316 </tgroup> 317</informaltable> 318</sect1> 319 320<sect1 id="Packet_Format"> 321<title>Packet Format</title> 322<!-- .XS --> 323<!-- (SN Packet Format --> 324<!-- .XE --> 325<para> 326All XDMCP packets have the following information: 327</para> 328 329<informaltable frame="none"> 330 <tgroup cols='3' align='left'> 331 <colspec colname='c1' colsep="0"/> 332 <colspec colname='c2' colsep="0"/> 333 <colspec colname='c3' colsep="0"/> 334 <thead> 335 <row> 336 <entry>Length (Bytes)</entry> 337 <entry>Field Type</entry> 338 <entry>Description</entry> 339 </row> 340 </thead> 341 <tbody> 342 <row rowsep="0"> 343 <entry>2</entry> 344 <entry>CARD16</entry> 345 <entry>version number</entry> 346 </row> 347 <row rowsep="0"> 348 <entry>2</entry> 349 <entry>CARD16</entry> 350 <entry>opcode packet header</entry> 351 </row> 352 <row rowsep="0"> 353 <entry>2</entry> 354 <entry>CARD16</entry> 355 <entry>n = length of remaining data in bytes</entry> 356 </row> 357 <row rowsep="0"> 358 <entry>n</entry> 359 <entry>???</entry> 360 <entry>packet-specific data</entry> 361 </row> 362 </tbody> 363 </tgroup> 364</informaltable> 365 366<para> 367<!-- .LP --> 368The fields are as follows: 369</para> 370 371<variablelist> 372 <varlistentry> 373 <term>Version number</term> 374 <listitem> 375 <para> 376This specifies the version of XDMCP that generated this packet in 377case changes in this protocol are required. Displays and 378managers may choose to support older versions for compatibility. 379This field will initially be one (1). 380 </para> 381 </listitem> 382 </varlistentry> 383 <varlistentry> 384 <term>Opcode</term> 385 <listitem> 386 <para> 387This specifies what step of the protocol this packet represents and should 388contain one of the following values (encoding provided in section below): 389<emphasis role="bold">BroadcastQuery</emphasis>, 390<emphasis role="bold">Query</emphasis>, 391<emphasis role="bold">IndirectQuery</emphasis>, 392<emphasis role="bold">ForwardQuery</emphasis>, 393<emphasis role="bold">Willing</emphasis>, 394<emphasis role="bold">Unwilling</emphasis>, 395<emphasis role="bold">Request</emphasis>, 396<emphasis role="bold">Accept</emphasis>, 397<emphasis role="bold">Decline</emphasis>, 398<emphasis role="bold">Manage</emphasis>, 399<emphasis role="bold">Refuse</emphasis>, 400<emphasis role="bold">Failed</emphasis>, 401<emphasis role="bold">KeepAlive</emphasis> 402or 403<emphasis role="bold">Alive</emphasis>. 404 </para> 405 </listitem> 406 </varlistentry> 407 <varlistentry> 408 <term>Length of data in bytes</term> 409 <listitem> 410 <para> 411This specifies the length of the information following the first 6 bytes. 412Each packet-type has a different format and will need to be separately 413length-checked against this value. Because every data item has either an 414explicit or implicit length, this can be easily accomplished. 415Packets that have too little or too much data should be ignored. 416 </para> 417 </listitem> 418 </varlistentry> 419</variablelist> 420<para> 421Packets should be checked to make sure that they satisfy the following 422conditions: 423</para> 424 425<orderedlist> 426 <listitem> 427 <para> 428They must contain valid opcodes. 429 </para> 430 </listitem> 431 <listitem> 432 <para> 433The length of the remaining data should correspond to the sum of the 434lengths of the individual remaining data items. 435 </para> 436 </listitem> 437 <listitem> 438 <para> 439The opcode should be expected (a finite state diagram is given 440in a later section). 441 </para> 442 </listitem> 443 <listitem> 444 <para> 445If the packet is of type 446<emphasis role="bold">Manage</emphasis> or 447<emphasis role="bold">Refuse</emphasis>, 448the Session ID should match the value sent in the preceding 449<emphasis role="bold">Accept</emphasis> packet. 450 </para> 451 </listitem> 452</orderedlist> 453</sect1> 454 455<sect1 id="Protocol"> 456<title>Protocol</title> 457<!-- .XS --> 458<!-- (SN Protocol --> 459<!-- .XE --> 460<para> 461Each of the opcodes is described below. Because a given packet type is only 462ever sent one way, each packet description below indicates the direction. 463Most of the packets have additional information included beyond the 464description above. The additional information is appended to the packet 465header in the order described without padding, and the length field is 466computed accordingly. 467</para> 468 469<informaltable frame="none"> 470 <tgroup cols='10' align='left'> 471 <colspec colname='col1' colsep="0" colwidth="1*"/> 472 <colspec colname='col2' colsep="0" colwidth="1*"/> 473 <colspec colname='col3' colsep="0" colwidth="1*"/> 474 <colspec colname='col4' colsep="0" colwidth="1*"/> 475 <colspec colname='col5' colsep="0" colwidth="1*"/> 476 <colspec colname='col6' colsep="0" colwidth="1*"/> 477 <colspec colname='col7' colsep="0" colwidth="1*"/> 478 <colspec colname='col8' colsep="0" colwidth="1*"/> 479 <colspec colname='col9' colsep="0" colwidth="1*"/> 480 <colspec colname='col10' colsep="0" colwidth="1*"/> 481 <spanspec namest="col1" nameend="col10" spanname="col1_on" align="left"/> 482 <spanspec namest="col2" nameend="col10" spanname="col2_on" align="left"/> 483 <spanspec namest="col3" nameend="col10" spanname="col3_on" align="left"/> 484 <spanspec namest="col4" nameend="col10" spanname="col4_on" align="left"/> 485 <spanspec namest="col5" nameend="col10" spanname="col5_on" align="left"/> 486 <tbody> 487 <row rowsep="0"> 488 <entry spanname="col1_on"><emphasis role="bold">Query</emphasis></entry> 489 </row> 490 <row rowsep="0"> 491 <entry spanname="col1_on"><emphasis role="bold">BroadcastQuery</emphasis></entry> 492 </row> 493 <row rowsep="0"> 494 <entry spanname="col1_on"><emphasis role="bold">IndirectQuery</emphasis></entry> 495 </row> 496 <row rowsep="0"> 497 <entry></entry> 498 <entry spanname="col2_on">Display -> Manager</entry> 499 </row> 500 <row rowsep="0"> 501 <entry></entry> 502 <entry spanname="col2_on">Additional Fields:</entry> 503 </row> 504 <row rowsep="0"> 505 <entry></entry> 506 <entry></entry> 507 <entry spanname="col3_on"> 508<emphasis>Authentication Names</emphasis>: ARRAYofARRAY8 509 </entry> 510 </row> 511 <row rowsep="0"> 512 <entry></entry> 513 <entry></entry> 514 <entry></entry> 515 <entry spanname="col4_on"> 516Specifies a list of authentication names that the display supports. The 517manager will choose one of these and return it in the 518<emphasis role="bold">Willing</emphasis> packet. 519 </entry> 520 </row> 521<!-- AAAAAAAAAAAAA --> 522 <row rowsep="0"> 523 <entry></entry> 524 <entry></entry> 525 <entry>Semantics</entry> 526 </row> 527 <row rowsep="0"> 528 <entry></entry> 529 <entry></entry> 530 <entry></entry> 531 <entry spanname="col4_on"> 532<para> 533A <function>Query</function> 534packet is sent from the display to a specific host to ask if 535that host is willing to provide management services to this display. The 536host should respond with 537<function>Willing</function> 538if it is willing to service the display or 539<function>Unwilling</function> 540if it is not. 541</para> 542 543<para> 544A 545<function>BroadcastQuery</function> 546packet is similar to the 547<function>Query</function> 548packet except that it is intended to be received by all hosts on the network 549(or subnetwork). However, unlike 550<function>Query</function> 551requests, hosts that are not willing to service the display 552should simply ignore 553<function>BroadcastQuery</function> 554requests. 555</para> 556 557<para> 558An 559<function>IndirectQuery</function> 560packet is sent to a well known manager that forwards 561the request to a larger collection of secondary managers using 562<function>ForwardQuery</function> 563packets. 564In this way, the collection of managers that respond can be grouped 565on other than network boundaries; the use of a central manager reduces 566system administrative overhead. 567The primary manager may also send a 568<function>Willing</function> 569packet in response to this packet. 570</para> 571 572<para> 573Each packet type has slightly different semantics: 574</para> 575 </entry> 576 </row> 577 <row rowsep="0"> 578 <entry></entry> 579 <entry></entry> 580 <entry></entry> 581 <entry></entry> 582 <entry spanname="col5_on"> 583<para> 584The 585<function>Query</function> 586packet is destined only for a single host. 587If the display is instructed to 588<function>Query</function> 589multiple managers, it will send multiple 590<function>Query</function> 591packets. The 592<function>Query</function> 593packet also demands a response from the manager, either 594<function>Willing</function> 595or 596<function>Unwilling</function>. 597 </para> 598 <para> 599The 600<function>BroadcastQuery</function> 601packet is sent to many hosts. 602Each manager that receives this packet will not respond with an 603<function>Unwilling</function> 604packet. 605 </para> 606 <para> 607The 608<function>IndirectQuery</function> 609packet is sent to only one manager with the request 610that the request be forwarded to a larger list of managers using 611<function>ForwardQuery</function> 612packets. This list is expected to be maintained at one 613central site to reduce administrative overhead. 614The function of this packet type is similar to 615<function>BroadcastQuery except that</function> 616<function>BroadcastQuery</function> 617is not forwarded. 618 </para> 619 </entry> 620 </row> 621 <row rowsep="0"> 622 <entry></entry> 623 <entry></entry> 624 <entry></entry> 625 <entry spanname="col4_on">Valid Responses:</entry> 626 </row> 627 <row rowsep="0"> 628 <entry></entry> 629 <entry></entry> 630 <entry spanname="col3_on"> 631<function>Willing</function>, 632<function>Unwilling</function> 633 </entry> 634 </row> 635 <row rowsep="0"> 636 <entry></entry> 637 <entry></entry> 638 <entry></entry> 639 <entry spanname="col4_on">Problems/Solutions:</entry> 640 </row> 641 <row rowsep="0"> 642 <entry></entry> 643 <entry></entry> 644 <entry spanname="col3_on">Problem:</entry> 645 </row> 646 <row rowsep="0"> 647 <entry></entry> 648 <entry></entry> 649 <entry></entry> 650 <entry spanname="col4_on"> 651<para>Not all managers receive the query packet.</para> 652<para>Indication:</para> 653 </entry> 654 </row> 655 <row rowsep="0"> 656 <entry></entry> 657 <entry></entry> 658 <entry></entry> 659 <entry></entry> 660 <entry spanname="col5_on"> 661None if 662<function>BroadcastQuery</function> 663or 664<function>IndirectQuery</function> 665was sent, else failure to receive 666<function>Willing</function>. 667 </entry> 668 </row> 669 <row rowsep="0"> 670 <entry></entry> 671 <entry></entry> 672 <entry></entry> 673 <entry spanname="col4_on">Solution:</entry> 674 </row> 675 <row rowsep="0"> 676 <entry></entry> 677 <entry></entry> 678 <entry></entry> 679 <entry></entry> 680 <entry spanname="col5_on"> 681Repeatedly send the packet while waiting for user to choose a manager. 682 </entry> 683 </row> 684 <row rowsep="0"> 685 <entry></entry> 686 <entry></entry> 687 <entry spanname="col3_on"> 688Timeout/Retransmission policy: 689 </entry> 690 </row> 691 <row rowsep="0"> 692 <entry></entry> 693 <entry></entry> 694 <entry></entry> 695 <entry spanname="col4_on"> 696An exponential backoff algorithm should be used here to reduce network load 697for long-standing idle displays. Start at 2 seconds, back off by factors of 6982 to 32 seconds, and discontinue retransmit after 126 seconds. The display 699should reset the timeout when user-input is detected. In this way, the 700display will wakeup when touched by the user. 701 </entry> 702 </row> 703 <row rowsep="0"> 704 <entry spanname="col1_on"> 705<function>ForwardQuery</function> 706 </entry> 707 </row> 708 <row rowsep="0"> 709 <entry></entry> 710 <entry spanname="col2_on"> 711<para>Primary Manager -> Secondary Manager</para> 712<para>Additional Fields:</para> 713 </entry> 714 </row> 715 <row rowsep="0"> 716 <entry></entry> 717 <entry></entry> 718 <entry spanname="col3_on"> 719<emphasis remap='I'>Client Address</emphasis>: ARRAY8 720 </entry> 721 </row> 722 <row rowsep="0"> 723 <entry></entry> 724 <entry></entry> 725 <entry></entry> 726 <entry spanname="col4_on"> 727Specifies the network address of the client display. 728 </entry> 729 </row> 730 <row rowsep="0"> 731 <entry></entry> 732 <entry></entry> 733 <entry spanname="col3_on"> 734<emphasis remap='I'>Client Port</emphasis>: ARRAY8 735 </entry> 736 </row> 737 <row rowsep="0"> 738 <entry></entry> 739 <entry></entry> 740 <entry></entry> 741 <entry spanname="col4_on"> 742Specifies an identification of the client task on the client display. 743 </entry> 744 </row> 745 <row rowsep="0"> 746 <entry></entry> 747 <entry></entry> 748 <entry spanname="col3_on"> 749<emphasis remap='I'>Authentication Names</emphasis>: ARRAYofARRAY8 750 </entry> 751 </row> 752 <row rowsep="0"> 753 <entry></entry> 754 <entry></entry> 755 <entry></entry> 756 <entry spanname="col4_on"> 757Is a duplicate of Authentication Names array that was received 758in the 759<function>IndirectQuery</function> 760packet. 761 </entry> 762 </row> 763 <row rowsep="0"> 764 <entry></entry> 765 <entry spanname="col2_on"> 766Semantics: 767 </entry> 768 </row> 769 <row rowsep="0"> 770 <entry></entry> 771 <entry></entry> 772 <entry spanname="col3_on"> 773 <para> 774When primary manager receives a 775<function>IndirectQuery</function> 776packet, it is responsible for sending 777<function>ForwardQuery</function> 778packets to an appropriate list of 779managers that can provide service to the display using the same network 780type as the one the original 781<function>IndirectQuery</function> 782packet was received from. 783The Client Address and Client Port fields must contain an 784address that the secondary manager can use to reach the display also using 785this same network. Each secondary manager sends a 786<function>Willing</function> 787packet to the display if it is willing to provide service. 788 </para> 789 790 <para> 791<function>ForwardQuery</function> 792packets are similar to 793<function>BroadcastQuery</function> 794packets in that managers that are not willing to service 795particular displays should not send a 796<function>Unwilling</function> 797packet. 798 </para> 799 </entry> 800 </row> 801 <row rowsep="0"> 802 <entry></entry> 803 <entry spanname="col2_on"> 804Valid Responses: 805 </entry> 806 </row> 807 808 <row rowsep="0"> 809 <entry></entry> 810 <entry></entry> 811 <entry spanname="col3_on"> 812<function>Willing</function> 813 </entry> 814 </row> 815 <row rowsep="0"> 816 <entry></entry> 817 <entry spanname="col2_on"> 818Problems/Solutions: 819 </entry> 820 </row> 821 <row rowsep="0"> 822 <entry></entry> 823 <entry></entry> 824 <entry spanname="col3_on"> 825Identical to 826<function>BroadcastQuery</function> 827 </entry> 828 </row> 829 <row rowsep="0"> 830 <entry></entry> 831 <entry spanname="col2_on"> 832Timeout/Retransmission policy: 833 </entry> 834 </row> 835 <row rowsep="0"> 836 <entry></entry> 837 <entry></entry> 838 <entry spanname="col3_on"> 839Like all packets sent from a manager, this packet should never be 840retransmitted. 841 </entry> 842 </row> 843 844 <row rowsep="0"> 845 <entry spanname="col1_on"> 846<function>Willing</function> 847 </entry> 848 </row> 849 850 <row rowsep="0"> 851 <entry></entry> 852 <entry spanname="col2_on"> 853 <para> 854Manager -> Display 855 </para> 856 <para> 857Additional Fields: 858 </para> 859 </entry> 860 </row> 861 862 <row rowsep="0"> 863 <entry></entry> 864 <entry></entry> 865 <entry spanname="col3_on"> 866<emphasis remap='I'>Authentication Name</emphasis>: ARRAY8 867 </entry> 868 </row> 869 870 <row rowsep="0"> 871 <entry></entry> 872 <entry></entry> 873 <entry></entry> 874 <entry spanname="col4_on"> 875<para> 876Specifies the authentication method, selected from the list offered in the 877<function>Query ,</function> 878<function>BroadcastQuery ,</function> 879or 880<function>IndirectQuery</function> 881packet that the manger expects the display to use in the subsequent 882<function>Request</function> 883packet. 884This choice should remain as constant as feasible so that displays that 885send multiple 886<function>Query</function> 887packets can use the Authentication Name from any 888<function>Willing</function> 889packet that arrives. 890</para> 891<para> 892The display is free to ignore managers that request an insufficient level 893of authentication. 894</para> 895 </entry> 896 </row> 897 898 <row rowsep="0"> 899 <entry></entry> 900 <entry></entry> 901 <entry spanname="col3_on"> 902<emphasis remap='I'>Hostname</emphasis>: ARRAY8 903 </entry> 904 </row> 905 906 <row rowsep="0"> 907 <entry></entry> 908 <entry></entry> 909 <entry></entry> 910 <entry spanname="col4_on"> 911Is a human readable string describing the host from which the packet was sent. 912The protocol specifies no interpretation of the data in this field. 913 </entry> 914 </row> 915 916 <row rowsep="0"> 917 <entry></entry> 918 <entry></entry> 919 <entry spanname="col3_on"> 920<emphasis remap='I'>Status</emphasis>: ARRAY8 921 </entry> 922 </row> 923 924 <row rowsep="0"> 925 <entry></entry> 926 <entry></entry> 927 <entry></entry> 928 <entry spanname="col4_on"> 929Is a human readable string describing the status of the host. This could 930include load average/number of users connected or other information. The 931protocol specifies no interpretation of the data in this field. 932 </entry> 933 </row> 934 935 936 <row rowsep="0"> 937 <entry></entry> 938 <entry spanname="col2_on"> 939Semantics: 940 </entry> 941 </row> 942 943 <row rowsep="0"> 944 <entry></entry> 945 <entry></entry> 946 <entry spanname="col3_on"> 947A 948<function>Willing</function> 949packet is sent by managers that may service connections from 950this display. It is sent in response to either a 951<function>Query ,</function> 952<function>BroadcastQuery ,</function> 953or 954<function>ForwardQuery</function> 955but does not imply a commitment to provide service 956(for example, it may later decide that it has accepted enough 957connections already). 958 </entry> 959 </row> 960 961 <row rowsep="0"> 962 <entry></entry> 963 <entry spanname="col2_on"> 964Problems/Solutions: 965 </entry> 966 </row> 967 968 <row rowsep="0"> 969 <entry></entry> 970 <entry></entry> 971 <entry spanname="col3_on"> 972Problem: 973 </entry> 974 </row> 975 976 <row rowsep="0"> 977 <entry></entry> 978 <entry></entry> 979 <entry></entry> 980 <entry spanname="col4_on"> 981<para> 982<function>Willing</function> 983not received by the display. 984</para> 985<para> 986Indication: 987</para> 988 </entry> 989 </row> 990 991 <row rowsep="0"> 992 <entry></entry> 993 <entry></entry> 994 <entry></entry> 995 <entry></entry> 996 <entry spanname="col5_on"> 997None if 998<function>BroadcastQuery</function> 999or 1000<function>IndirectQuery</function> 1001was sent, else failure to receive 1002<function>Willing .</function> 1003 </entry> 1004 </row> 1005 1006 <row rowsep="0"> 1007 <entry></entry> 1008 <entry></entry> 1009 <entry></entry> 1010 <entry spanname="col4_on"> 1011Solution: 1012 </entry> 1013 </row> 1014 1015 <row rowsep="0"> 1016 <entry></entry> 1017 <entry></entry> 1018 <entry></entry> 1019 <entry></entry> 1020 <entry spanname="col5_on"> 1021The display should continue to send the query until a response is received. 1022 </entry> 1023 </row> 1024 1025 1026 1027 <row rowsep="0"> 1028 <entry></entry> 1029 <entry spanname="col2_on"> 1030Timeout/Retransmission policy: 1031 </entry> 1032 </row> 1033 1034 <row rowsep="0"> 1035 <entry></entry> 1036 <entry></entry> 1037 <entry spanname="col3_on"> 1038Like all packets sent from the manager to the display, this packet should 1039never be retransmitted. 1040 </entry> 1041 </row> 1042 1043 <row rowsep="0"> 1044 <entry spanname="col1_on"> 1045<function>Unwilling</function> 1046 </entry> 1047 </row> 1048 1049 <row rowsep="0"> 1050 <entry></entry> 1051 <entry spanname="col2_on"> 1052 <para> 1053Manager -> Display 1054 </para> 1055 <para> 1056Additional Fields: 1057 </para> 1058 </entry> 1059 </row> 1060 1061 <row rowsep="0"> 1062 <entry></entry> 1063 <entry></entry> 1064 <entry spanname="col3_on"> 1065The Hostname and Status fields as in the 1066<function>Willing</function> 1067packet. 1068The Status field should indicate to the user a reason 1069for the refusal of service. 1070 </entry> 1071 </row> 1072 1073 <row rowsep="0"> 1074 <entry></entry> 1075 <entry spanname="col2_on"> 1076Semantics: 1077 </entry> 1078 </row> 1079 1080 <row rowsep="0"> 1081 <entry></entry> 1082 <entry></entry> 1083 <entry spanname="col3_on"> 1084An 1085<function>Unwilling</function> 1086packet is sent by managers in response to direct 1087<function>Query</function> 1088requests (as opposed to 1089<function>BroadcastQuery</function> 1090or 1091<function>IndirectQuery</function> 1092requests) if the manager will not accept requests for management. 1093This is typically sent by managers that wish to only service 1094particular displays or that handle a limited number of displays at once. 1095 </entry> 1096 </row> 1097 1098 <row rowsep="0"> 1099 <entry></entry> 1100 <entry spanname="col2_on"> 1101Problems/Solutions: 1102 </entry> 1103 </row> 1104 1105 <row rowsep="0"> 1106 <entry></entry> 1107 <entry></entry> 1108 <entry spanname="col3_on"> 1109Problem: 1110 </entry> 1111 </row> 1112 1113 <row rowsep="0"> 1114 <entry></entry> 1115 <entry></entry> 1116 <entry></entry> 1117 <entry spanname="col4_on"> 1118<para> 1119<function>Unwilling</function> 1120not received by the display. 1121</para> 1122<para> 1123Indication: 1124</para> 1125 </entry> 1126 </row> 1127 1128 <row rowsep="0"> 1129 <entry></entry> 1130 <entry></entry> 1131 <entry></entry> 1132 <entry></entry> 1133 <entry spanname="col5_on"> 1134Display fails to receive 1135<function>Unwilling .</function> 1136 </entry> 1137 </row> 1138 1139 <row rowsep="0"> 1140 <entry></entry> 1141 <entry></entry> 1142 <entry></entry> 1143 <entry spanname="col4_on"> 1144Solution: 1145 </entry> 1146 </row> 1147 1148 <row rowsep="0"> 1149 <entry></entry> 1150 <entry></entry> 1151 <entry></entry> 1152 <entry></entry> 1153 <entry spanname="col5_on"> 1154The display should continue to send 1155<function>Query</function> 1156messages until a response is received. 1157 </entry> 1158 </row> 1159 1160 <row rowsep="0"> 1161 <entry></entry> 1162 <entry spanname="col2_on"> 1163Timeout/Retransmission policy: 1164 </entry> 1165 </row> 1166 1167 <row rowsep="0"> 1168 <entry></entry> 1169 <entry></entry> 1170 <entry spanname="col3_on"> 1171Like all packets sent from the manager to the display, this packet should 1172never be retransmitted. 1173 </entry> 1174 </row> 1175 <row rowsep="0"> 1176 <entry spanname="col1_on"> 1177<function>Request</function> 1178 </entry> 1179 </row> 1180 1181 <row rowsep="0"> 1182 <entry></entry> 1183 <entry spanname="col2_on"> 1184 <para> 1185Display -> Manager 1186 </para> 1187 <para> 1188Additional Fields: 1189 </para> 1190 </entry> 1191 </row> 1192 1193 <row rowsep="0"> 1194 <entry></entry> 1195 <entry></entry> 1196 <entry spanname="col3_on"> 1197<emphasis remap='I'>Display Number</emphasis>: CARD16 1198 </entry> 1199 </row> 1200 1201 <row rowsep="0"> 1202 <entry></entry> 1203 <entry></entry> 1204 <entry></entry> 1205 <entry spanname="col4_on"> 1206Specifies the index of this particular server for the host 1207on which the display is resident. 1208This value will be zero for most autonomous displays. 1209 </entry> 1210 </row> 1211 1212 <row rowsep="0"> 1213 <entry></entry> 1214 <entry></entry> 1215 <entry spanname="col3_on"> 1216<emphasis remap='I'>Connection Types</emphasis>: ARRAY16 1217 </entry> 1218 </row> 1219 1220 <row rowsep="0"> 1221 <entry></entry> 1222 <entry></entry> 1223 <entry></entry> 1224 <entry spanname="col4_on"> 1225Specifies an array indicating the stream services accepted by the display. 1226If the high-order byte in a particular entry is zero, the low-order byte 1227corresponds to an X-protocol host family type. 1228 </entry> 1229 </row> 1230 1231 <row rowsep="0"> 1232 <entry></entry> 1233 <entry></entry> 1234 <entry spanname="col3_on"> 1235<emphasis remap='I'>Connection Addresses</emphasis>: ARRAYofARRAY8 1236 </entry> 1237 </row> 1238 1239 <row rowsep="0"> 1240 <entry></entry> 1241 <entry></entry> 1242 <entry></entry> 1243 <entry spanname="col4_on"> 1244For each connection type in the previous array, the corresponding entry in 1245this array indicates the network address of the display device. 1246 </entry> 1247 </row> 1248 1249 <row rowsep="0"> 1250 <entry></entry> 1251 <entry></entry> 1252 <entry spanname="col3_on"> 1253 <para> 1254<emphasis remap='I'>Authentication Name</emphasis>: ARRAY8 1255 </para> 1256 <para> 1257<emphasis remap='I'>Authentication Data</emphasis>: ARRAY8 1258 </para> 1259 </entry> 1260 </row> 1261 1262 <row rowsep="0"> 1263 <entry></entry> 1264 <entry></entry> 1265 <entry></entry> 1266 <entry spanname="col4_on"> 1267Specifies the authentication protocol that the display expects 1268the manager to validate itself with. The Authentication Data is 1269expected to contain data that the manager will interpret, modify 1270and use to authenticate itself. 1271 </entry> 1272 </row> 1273 1274 <row rowsep="0"> 1275 <entry></entry> 1276 <entry></entry> 1277 <entry spanname="col3_on"> 1278<emphasis remap='I'>Authorization Names</emphasis>: ARRAYofARRAY8 1279 </entry> 1280 </row> 1281 1282 <row rowsep="0"> 1283 <entry></entry> 1284 <entry></entry> 1285 <entry></entry> 1286 <entry spanname="col4_on"> 1287Specifies which types of authorization the display supports. The 1288manager may decide to reject displays with which it cannot perform 1289authorization. 1290 </entry> 1291 </row> 1292 1293 <row rowsep="0"> 1294 <entry></entry> 1295 <entry></entry> 1296 <entry spanname="col3_on"> 1297<emphasis remap='I'>Manufacturer Display ID</emphasis>: ARRAY8 1298 </entry> 1299 </row> 1300 1301 <row rowsep="0"> 1302 <entry></entry> 1303 <entry></entry> 1304 <entry></entry> 1305 <entry spanname="col4_on"> 1306Can be used by the manager to determine how to decrypt the 1307Authentication Data field in this packet. See the section below on 1308Manufacturer Display ID Format. 1309 </entry> 1310 </row> 1311 1312 <row rowsep="0"> 1313 <entry></entry> 1314 <entry spanname="col2_on"> 1315Semantics: 1316 </entry> 1317 </row> 1318 1319 <row rowsep="0"> 1320 <entry></entry> 1321 <entry></entry> 1322 <entry spanname="col3_on"> 1323A 1324<function>Request</function> 1325packet is sent by a display to a specific host to request a 1326session ID in preparation for a establishing a connection. If the manager 1327is willing to service a connection to this display, it should return an 1328<function>Accept</function> 1329packet with a valid session ID and should be ready for a subsequent 1330<function>Manage</function> 1331request. Otherwise, it should return a 1332<function>Decline</function> 1333packet. 1334 </entry> 1335 </row> 1336 1337 <row rowsep="0"> 1338 <entry></entry> 1339 <entry spanname="col2_on"> 1340Valid Responses: 1341 </entry> 1342 </row> 1343 1344 <row rowsep="0"> 1345 <entry></entry> 1346 <entry></entry> 1347 <entry spanname="col3_on"> 1348<function>Accept ,</function> 1349<function>Decline</function> 1350 </entry> 1351 </row> 1352 1353 <row rowsep="0"> 1354 <entry></entry> 1355 <entry spanname="col2_on"> 1356Problems/Solutions: 1357 </entry> 1358 </row> 1359 1360 <row rowsep="0"> 1361 <entry></entry> 1362 <entry></entry> 1363 <entry spanname="col3_on"> 1364Problem: 1365 </entry> 1366 </row> 1367 1368 <row rowsep="0"> 1369 <entry></entry> 1370 <entry></entry> 1371 <entry></entry> 1372 <entry spanname="col4_on"> 1373Request not received by manager. 1374 </entry> 1375 </row> 1376 1377 <row rowsep="0"> 1378 <entry></entry> 1379 <entry></entry> 1380 <entry></entry> 1381 <entry spanname="col4_on"> 1382Indication: 1383 </entry> 1384 </row> 1385 1386 <row rowsep="0"> 1387 <entry></entry> 1388 <entry></entry> 1389 <entry></entry> 1390 <entry></entry> 1391 <entry spanname="col5_on"> 1392Display timeout waiting for response. 1393 </entry> 1394 </row> 1395 1396 <row rowsep="0"> 1397 <entry></entry> 1398 <entry></entry> 1399 <entry></entry> 1400 <entry spanname="col4_on"> 1401Solution: 1402 </entry> 1403 </row> 1404 1405 <row rowsep="0"> 1406 <entry></entry> 1407 <entry></entry> 1408 <entry></entry> 1409 <entry></entry> 1410 <entry spanname="col5_on"> 1411Display resends 1412<function>Request</function> 1413message. 1414 </entry> 1415 </row> 1416 1417 1418 <row rowsep="0"> 1419 <entry></entry> 1420 <entry></entry> 1421 <entry></entry> 1422 <entry spanname="col4_on"> 1423Problem: 1424 </entry> 1425 </row> 1426 1427 <row rowsep="0"> 1428 <entry></entry> 1429 <entry></entry> 1430 <entry></entry> 1431 <entry></entry> 1432 <entry spanname="col5_on"> 1433Message received out of order by manager. 1434 </entry> 1435 </row> 1436 1437 <row rowsep="0"> 1438 <entry></entry> 1439 <entry></entry> 1440 <entry></entry> 1441 <entry spanname="col4_on"> 1442Indication: 1443 </entry> 1444 </row> 1445 1446 <row rowsep="0"> 1447 <entry></entry> 1448 <entry></entry> 1449 <entry></entry> 1450 <entry></entry> 1451 <entry spanname="col5_on"> 1452None. 1453 </entry> 1454 </row> 1455 1456 <row rowsep="0"> 1457 <entry></entry> 1458 <entry></entry> 1459 <entry></entry> 1460 <entry spanname="col4_on"> 1461Solution: 1462 </entry> 1463 </row> 1464 1465 <row rowsep="0"> 1466 <entry></entry> 1467 <entry></entry> 1468 <entry></entry> 1469 <entry></entry> 1470 <entry spanname="col5_on"> 1471Each time a 1472<function>Request</function> 1473is sent, the manager sends the Session ID 1474associated with the next session in the 1475<function>Accept .</function> 1476If that next session is not yet started, 1477the manager will simply resend with the same Session ID. 1478If the session is in progress, the manager will reply 1479with a new Session ID; in which case, the 1480<function>Accept</function> 1481will be discarded by the display. 1482 </entry> 1483 </row> 1484 1485 <row rowsep="0"> 1486 <entry></entry> 1487 <entry spanname="col2_on"> 1488Timeout/Retransmission policy: 1489 </entry> 1490 </row> 1491 1492 <row rowsep="0"> 1493 <entry></entry> 1494 <entry></entry> 1495 <entry spanname="col3_on"> 1496Timeout after 2 seconds, exponential backoff to 32 seconds. 1497After no more than 126 seconds, give up and report an error to the user. 1498 </entry> 1499 </row> 1500 1501 <row rowsep="0"> 1502 <entry spanname="col1_on"> 1503<function>Accept</function> 1504 </entry> 1505 </row> 1506 1507 <row rowsep="0"> 1508 <entry></entry> 1509 <entry spanname="col2_on"> 1510 <para> 1511Manager -> Display 1512 </para> 1513 <para> 1514Additional Fields: 1515 </para> 1516 </entry> 1517 </row> 1518 1519 <row rowsep="0"> 1520 <entry></entry> 1521 <entry></entry> 1522 <entry spanname="col3_on"> 1523<emphasis remap='I'>Session ID</emphasis>: CARD32 1524 </entry> 1525 </row> 1526 1527 <row rowsep="0"> 1528 <entry></entry> 1529 <entry></entry> 1530 <entry></entry> 1531 <entry spanname="col4_on"> 1532Identifies the session that can be started by the manager. 1533 </entry> 1534 </row> 1535 1536 <row rowsep="0"> 1537 <entry></entry> 1538 <entry></entry> 1539 <entry spanname="col3_on"> 1540 <para> 1541<emphasis remap='I'>Authentication Name</emphasis>: ARRAY8 1542 </para> 1543 <para> 1544<emphasis remap='I'>Authentication Data</emphasis>: ARRAY8 1545 </para> 1546 </entry> 1547 </row> 1548 1549 <row rowsep="0"> 1550 <entry></entry> 1551 <entry></entry> 1552 <entry></entry> 1553 <entry spanname="col4_on"> 1554Is the data sent back to the display to authenticate the manager. 1555If the Authentication Data is not the value expected by the display, it 1556should terminate the protocol at this point and display an error to the user. 1557 </entry> 1558 </row> 1559 1560 <row rowsep="0"> 1561 <entry></entry> 1562 <entry></entry> 1563 <entry spanname="col3_on"> 1564 <para> 1565<emphasis remap='I'>Authorization Name</emphasis>: ARRAY8 1566 </para> 1567 <para> 1568<emphasis remap='I'>Authorization Data</emphasis>: ARRAY8 1569 </para> 1570 </entry> 1571 </row> 1572 1573 <row rowsep="0"> 1574 <entry></entry> 1575 <entry></entry> 1576 <entry></entry> 1577 <entry spanname="col4_on"> 1578Is the data sent to the display to indicate the type of authorization the 1579manager will be using in the first call to 1580<function>XOpenDisplay</function> 1581after the 1582<function>Manage</function> 1583packet is received. 1584 </entry> 1585 </row> 1586 1587 1588 <row rowsep="0"> 1589 <entry></entry> 1590 <entry spanname="col2_on"> 1591Semantics: 1592 </entry> 1593 </row> 1594 1595 <row rowsep="0"> 1596 <entry></entry> 1597 <entry></entry> 1598 <entry spanname="col3_on"> 1599<para> 1600An 1601<function>Accept</function> 1602packet is sent by a manager in response to a 1603<function>Request</function> 1604packet if the manager is willing to establish a connection for the display. 1605The Session ID is used to identify this connection from any preceding 1606ones and will be used by the display in its subsequent 1607<function>Manage</function> 1608packet. 1609The Session ID is a 32-bit number that is incremented each time an 1610<function>Accept</function> 1611packet is sent as it must be unique over a reasonably long period of time. 1612</para> 1613<para> 1614If the authentication information is invalid, a 1615<function>Decline</function> 1616packet will be returned with an appropriate 1617<function>Status</function> 1618message. 1619</para> 1620 </entry> 1621 </row> 1622 1623 <row rowsep="0"> 1624 <entry></entry> 1625 <entry spanname="col2_on"> 1626Problems/Solutions: 1627 </entry> 1628 </row> 1629 1630 <row rowsep="0"> 1631 <entry></entry> 1632 <entry></entry> 1633 <entry spanname="col3_on"> 1634Problem: 1635 </entry> 1636 </row> 1637 1638 <row rowsep="0"> 1639 <entry></entry> 1640 <entry></entry> 1641 <entry></entry> 1642 <entry spanname="col4_on"> 1643<function>Accept</function> 1644or 1645<function>Decline</function> 1646not received by display. 1647 </entry> 1648 </row> 1649 1650 <row rowsep="0"> 1651 <entry></entry> 1652 <entry></entry> 1653 <entry></entry> 1654 <entry spanname="col4_on"> 1655Indication: 1656 </entry> 1657 </row> 1658 1659 <row rowsep="0"> 1660 <entry></entry> 1661 <entry></entry> 1662 <entry></entry> 1663 <entry></entry> 1664 <entry spanname="col5_on"> 1665Display timeout waiting for response to 1666<function>Request .</function> 1667 </entry> 1668 </row> 1669 1670 <row rowsep="0"> 1671 <entry></entry> 1672 <entry></entry> 1673 <entry></entry> 1674 <entry spanname="col4_on"> 1675Solution: 1676 </entry> 1677 </row> 1678 1679 <row rowsep="0"> 1680 <entry></entry> 1681 <entry></entry> 1682 <entry></entry> 1683 <entry></entry> 1684 <entry spanname="col5_on"> 1685Display resends 1686<function>Request</function> 1687message. 1688 </entry> 1689 </row> 1690 1691 <row rowsep="0"> 1692 <entry></entry> 1693 <entry></entry> 1694 <entry spanname="col3_on"> 1695Problem: 1696 </entry> 1697 </row> 1698 1699 <row rowsep="0"> 1700 <entry></entry> 1701 <entry></entry> 1702 <entry></entry> 1703 <entry spanname="col4_on"> 1704Message received out of order by display. 1705 </entry> 1706 </row> 1707 1708 <row rowsep="0"> 1709 <entry></entry> 1710 <entry></entry> 1711 <entry></entry> 1712 <entry spanname="col4_on"> 1713Indication: 1714 </entry> 1715 </row> 1716 1717 <row rowsep="0"> 1718 <entry></entry> 1719 <entry></entry> 1720 <entry></entry> 1721 <entry></entry> 1722 <entry spanname="col5_on"> 1723Display receives 1724<function>Accept</function> 1725after 1726<function>Manage</function> 1727has been sent. 1728 </entry> 1729 </row> 1730 1731 <row rowsep="0"> 1732 <entry></entry> 1733 <entry></entry> 1734 <entry></entry> 1735 <entry spanname="col4_on"> 1736Solution: 1737 </entry> 1738 </row> 1739 1740 <row rowsep="0"> 1741 <entry></entry> 1742 <entry></entry> 1743 <entry></entry> 1744 <entry></entry> 1745 <entry spanname="col5_on"> 1746Display discards 1747<function>Accept</function> 1748messages after it has sent a 1749<function>Manage</function> 1750message. 1751 </entry> 1752 </row> 1753 1754 <row rowsep="0"> 1755 <entry></entry> 1756 <entry spanname="col2_on"> 1757Timeout/Retransmission policy: 1758 </entry> 1759 </row> 1760 1761 <row rowsep="0"> 1762 <entry></entry> 1763 <entry></entry> 1764 <entry spanname="col3_on"> 1765Like all packets sent from the manager to the display, this packet should 1766never be retransmitted. 1767 </entry> 1768 </row> 1769 1770 <row rowsep="0"> 1771 <entry spanname="col1_on"> 1772<function>Decline</function> 1773 </entry> 1774 </row> 1775 1776 <row rowsep="0"> 1777 <entry></entry> 1778 <entry spanname="col2_on"> 1779 <para> 1780Manager -> Display 1781 </para> 1782 <para> 1783Additional Fields: 1784 </para> 1785 </entry> 1786 </row> 1787 1788 <row rowsep="0"> 1789 <entry></entry> 1790 <entry></entry> 1791 <entry spanname="col3_on"> 1792<emphasis remap='I'>Status</emphasis>: ARRAY8 1793 </entry> 1794 </row> 1795 1796 <row rowsep="0"> 1797 <entry></entry> 1798 <entry></entry> 1799 <entry></entry> 1800 <entry spanname="col4_on"> 1801Is a human readable string indicating the reason for refusal of 1802service. 1803 </entry> 1804 </row> 1805 1806 <row rowsep="0"> 1807 <entry></entry> 1808 <entry></entry> 1809 <entry spanname="col3_on"> 1810 <para> 1811<emphasis remap='I'>Authentication Name</emphasis>: 1812ARRAY8 1813 </para> 1814 <para> 1815<emphasis remap='I'>Authentication Data</emphasis>: 1816ARRAY8 1817 </para> 1818 </entry> 1819 </row> 1820 1821 <row rowsep="0"> 1822 <entry></entry> 1823 <entry></entry> 1824 <entry></entry> 1825 <entry spanname="col4_on"> 1826Is the data sent back to the display to authenticate the manager. If the 1827Authentication Data is not the value expected by the display, it 1828should terminate the protocol at this point and display an error to the user. 1829 </entry> 1830 </row> 1831 1832 <row rowsep="0"> 1833 <entry></entry> 1834 <entry spanname="col2_on"> 1835Semantics: 1836 </entry> 1837 </row> 1838 1839 <row rowsep="0"> 1840 <entry></entry> 1841 <entry></entry> 1842 <entry spanname="col3_on"> 1843A 1844<function>Decline</function> 1845packet is sent by a manager in response to a 1846<function>Request</function> 1847packet if the manager is unwilling to establish a connection for the 1848display. 1849This is allowed even if the manager had responded 1850<function>Willing</function> 1851to a previous query. 1852 </entry> 1853 </row> 1854 1855 <row rowsep="0"> 1856 <entry></entry> 1857 <entry spanname="col2_on"> 1858Problems/Solutions: 1859 </entry> 1860 </row> 1861 1862 <row rowsep="0"> 1863 <entry></entry> 1864 <entry></entry> 1865 <entry spanname="col3_on"> 1866Same as for 1867<function>Accept .</function> 1868 </entry> 1869 </row> 1870 1871 <row rowsep="0"> 1872 <entry></entry> 1873 <entry spanname="col2_on"> 1874Timeout/Retransmission policy: 1875 </entry> 1876 </row> 1877 1878 <row rowsep="0"> 1879 <entry></entry> 1880 <entry></entry> 1881 <entry spanname="col3_on"> 1882Like all packets sent from a manager to a display, this packet should never 1883be retransmitted. 1884 </entry> 1885 </row> 1886 1887 <row rowsep="0"> 1888 <entry spanname="col1_on"> 1889<function>Manage</function> 1890 </entry> 1891 </row> 1892 1893 <row rowsep="0"> 1894 <entry></entry> 1895 <entry spanname="col2_on"> 1896 <para> 1897Display -> Manager 1898 </para> 1899 <para> 1900Additional Fields: 1901 </para> 1902 </entry> 1903 </row> 1904 1905 <row rowsep="0"> 1906 <entry></entry> 1907 <entry></entry> 1908 <entry spanname="col3_on"> 1909<emphasis remap='I'>Session ID</emphasis>: CARD32 1910 </entry> 1911 </row> 1912 1913 <row rowsep="0"> 1914 <entry></entry> 1915 <entry></entry> 1916 <entry></entry> 1917 <entry spanname="col4_on"> 1918Should contain the nonzero session ID returned in the 1919<function>Accept</function> 1920packet. 1921 </entry> 1922 </row> 1923 1924 <row rowsep="0"> 1925 <entry></entry> 1926 <entry></entry> 1927 <entry spanname="col3_on"> 1928<emphasis remap='I'>Display Number</emphasis>: CARD16 1929 </entry> 1930 </row> 1931 1932 <row rowsep="0"> 1933 <entry></entry> 1934 <entry></entry> 1935 <entry></entry> 1936 <entry spanname="col4_on"> 1937Must match the value sent in the previous 1938<function>Request</function> 1939packet. 1940 </entry> 1941 </row> 1942 1943 <row rowsep="0"> 1944 <entry></entry> 1945 <entry></entry> 1946 <entry spanname="col3_on"> 1947<emphasis remap='I'>Display Class</emphasis>: ARRAY8 1948 </entry> 1949 </row> 1950 1951 <row rowsep="0"> 1952 <entry></entry> 1953 <entry></entry> 1954 <entry></entry> 1955 <entry spanname="col4_on"> 1956Specifies the class of the display. 1957See the Display Class Format section, 1958which discusses the format of this field. 1959 </entry> 1960 </row> 1961 1962 1963 <row rowsep="0"> 1964 <entry></entry> 1965 <entry spanname="col2_on"> 1966Semantics: 1967 </entry> 1968 </row> 1969 1970 <row rowsep="0"> 1971 <entry></entry> 1972 <entry></entry> 1973 <entry spanname="col3_on"> 1974A 1975<function>Manage</function> 1976packet is sent by a display to ask the manager to begin a 1977session on the display. If the Session ID is correct the manager 1978should open a connection; otherwise, it should respond with a 1979<function>Refuse</function> 1980or 1981<function>Failed</function> 1982packet, unless the Session ID matches a currently 1983running session or a session that has not yet successfully opened the 1984display but has not given up the attempt. In this latter case, the 1985<function>Manage</function> 1986packet should be ignored. 1987This will work as stream connections give positive success indication 1988to both halves of the stream, and positive failure indication 1989to the connection initiator (which will eventually generate a 1990<function>Failed</function> 1991packet). 1992 </entry> 1993 </row> 1994 1995 <row rowsep="0"> 1996 <entry></entry> 1997 <entry spanname="col2_on"> 1998Valid Responses: 1999 </entry> 2000 </row> 2001 2002 <row rowsep="0"> 2003 <entry></entry> 2004 <entry></entry> 2005 <entry spanname="col3_on"> 2006X connection with correct auth info, 2007<function>Refuse ,</function> 2008<function>Failed .</function> 2009 </entry> 2010 </row> 2011 2012 <row rowsep="0"> 2013 <entry></entry> 2014 <entry spanname="col2_on"> 2015Problems/Solutions: 2016 </entry> 2017 </row> 2018 2019 <row rowsep="0"> 2020 <entry></entry> 2021 <entry></entry> 2022 <entry spanname="col3_on"> 2023Problem: 2024 </entry> 2025 </row> 2026 2027 <row rowsep="0"> 2028 <entry></entry> 2029 <entry></entry> 2030 <entry></entry> 2031 <entry spanname="col4_on"> 2032<function>Manage</function> 2033not received by manager. 2034 </entry> 2035 </row> 2036 2037 <row rowsep="0"> 2038 <entry></entry> 2039 <entry></entry> 2040 <entry></entry> 2041 <entry spanname="col4_on"> 2042Indication: 2043 </entry> 2044 </row> 2045 2046 <row rowsep="0"> 2047 <entry></entry> 2048 <entry></entry> 2049 <entry></entry> 2050 <entry></entry> 2051 <entry spanname="col5_on"> 2052Display timeout waiting for response. 2053 </entry> 2054 </row> 2055 2056 <row rowsep="0"> 2057 <entry></entry> 2058 <entry></entry> 2059 <entry></entry> 2060 <entry spanname="col4_on"> 2061Solution: 2062 </entry> 2063 </row> 2064 2065 <row rowsep="0"> 2066 <entry></entry> 2067 <entry></entry> 2068 <entry></entry> 2069 <entry></entry> 2070 <entry spanname="col5_on"> 2071Display resends 2072<function>Manage</function> 2073message. 2074 </entry> 2075 </row> 2076 2077 2078 <row rowsep="0"> 2079 <entry></entry> 2080 <entry></entry> 2081 <entry spanname="col3_on"> 2082Problem: 2083 </entry> 2084 </row> 2085 2086 <row rowsep="0"> 2087 <entry></entry> 2088 <entry></entry> 2089 <entry></entry> 2090 <entry spanname="col4_on"> 2091<function>Manage</function> 2092received out of order by manager. 2093 </entry> 2094 </row> 2095 2096 <row rowsep="0"> 2097 <entry></entry> 2098 <entry></entry> 2099 <entry></entry> 2100 <entry spanname="col4_on"> 2101Indication: 2102 </entry> 2103 </row> 2104 2105 <row rowsep="0"> 2106 <entry></entry> 2107 <entry></entry> 2108 <entry></entry> 2109 <entry></entry> 2110 <entry spanname="col5_on"> 2111Session already in progress with matching Session ID. 2112 </entry> 2113 </row> 2114 2115 <row rowsep="0"> 2116 <entry></entry> 2117 <entry></entry> 2118 <entry></entry> 2119 <entry spanname="col4_on"> 2120Solution: 2121 </entry> 2122 </row> 2123 2124 <row rowsep="0"> 2125 <entry></entry> 2126 <entry></entry> 2127 <entry></entry> 2128 <entry></entry> 2129 <entry spanname="col5_on"> 2130<function>Manage</function> 2131packet ignored. 2132 </entry> 2133 </row> 2134 2135 <row rowsep="0"> 2136 <entry></entry> 2137 <entry></entry> 2138 <entry></entry> 2139 <entry spanname="col4_on"> 2140Indication: 2141 </entry> 2142 </row> 2143 2144 <row rowsep="0"> 2145 <entry></entry> 2146 <entry></entry> 2147 <entry></entry> 2148 <entry></entry> 2149 <entry spanname="col5_on"> 2150Session ID does not match next Session ID. 2151 </entry> 2152 </row> 2153 2154 <row rowsep="0"> 2155 <entry></entry> 2156 <entry></entry> 2157 <entry></entry> 2158 <entry spanname="col4_on"> 2159Solution: 2160 </entry> 2161 </row> 2162 2163 <row rowsep="0"> 2164 <entry></entry> 2165 <entry></entry> 2166 <entry></entry> 2167 <entry></entry> 2168 <entry spanname="col5_on"> 2169<function>Refuse</function> 2170message is sent. 2171 </entry> 2172 </row> 2173 2174 2175 <row rowsep="0"> 2176 <entry></entry> 2177 <entry></entry> 2178 <entry spanname="col3_on"> 2179Problem: 2180 </entry> 2181 </row> 2182 2183 <row rowsep="0"> 2184 <entry></entry> 2185 <entry></entry> 2186 <entry></entry> 2187 <entry spanname="col4_on"> 2188Display cannot be opened on selected stream. 2189 </entry> 2190 </row> 2191 2192 <row rowsep="0"> 2193 <entry></entry> 2194 <entry></entry> 2195 <entry></entry> 2196 <entry spanname="col4_on"> 2197Indication: 2198 </entry> 2199 </row> 2200 2201 <row rowsep="0"> 2202 <entry></entry> 2203 <entry></entry> 2204 <entry></entry> 2205 <entry></entry> 2206 <entry spanname="col5_on"> 2207Display connection setup fails. 2208 </entry> 2209 </row> 2210 2211 <row rowsep="0"> 2212 <entry></entry> 2213 <entry></entry> 2214 <entry></entry> 2215 <entry spanname="col4_on"> 2216Solution: 2217 </entry> 2218 </row> 2219 2220 <row rowsep="0"> 2221 <entry></entry> 2222 <entry></entry> 2223 <entry></entry> 2224 <entry></entry> 2225 <entry spanname="col5_on"> 2226<function>Failed</function> 2227message is sent including a human readable reason. 2228 </entry> 2229 </row> 2230 2231 <row rowsep="0"> 2232 <entry></entry> 2233 <entry></entry> 2234 <entry spanname="col3_on"> 2235Problem: 2236 </entry> 2237 </row> 2238 2239 <row rowsep="0"> 2240 <entry></entry> 2241 <entry></entry> 2242 <entry></entry> 2243 <entry spanname="col4_on"> 2244Display open does not succeed before a second manage packet is received 2245because of a timeout occuring in the display. 2246 </entry> 2247 </row> 2248 2249 <row rowsep="0"> 2250 <entry></entry> 2251 <entry></entry> 2252 <entry></entry> 2253 <entry spanname="col4_on"> 2254Indication: 2255 </entry> 2256 </row> 2257 2258 <row rowsep="0"> 2259 <entry></entry> 2260 <entry></entry> 2261 <entry></entry> 2262 <entry></entry> 2263 <entry spanname="col5_on"> 2264<function>Manage</function> 2265packet received with Session ID matching the session 2266attempting to connect to the display. 2267 </entry> 2268 </row> 2269 2270 <row rowsep="0"> 2271 <entry></entry> 2272 <entry></entry> 2273 <entry></entry> 2274 <entry spanname="col4_on"> 2275Solution: 2276 </entry> 2277 </row> 2278 2279 <row rowsep="0"> 2280 <entry></entry> 2281 <entry></entry> 2282 <entry></entry> 2283 <entry></entry> 2284 <entry spanname="col5_on"> 2285<function>Manage</function> 2286packet is ignored. As the stream connection will either 2287succeed, which will result in an active session, or the stream will 2288eventually give up hope of connecting and send a 2289<function>Failed</function> 2290packet; no response to this 2291<function>Manage</function> 2292packet is necessary. 2293 </entry> 2294 </row> 2295 2296 <row rowsep="0"> 2297 <entry></entry> 2298 <entry spanname="col2_on"> 2299Timeout/Retransmission policy: 2300 </entry> 2301 </row> 2302 2303 <row rowsep="0"> 2304 <entry></entry> 2305 <entry></entry> 2306 <entry spanname="col3_on"> 2307Timeout after 2 seconds, exponential backoff to 32 seconds. After no more 2308than 126 seconds, give up and report an error to the user. 2309 </entry> 2310 </row> 2311 2312 <row rowsep="0"> 2313 <entry spanname="col1_on"> 2314<function>Refuse</function> 2315 </entry> 2316 </row> 2317 2318 <row rowsep="0"> 2319 <entry></entry> 2320 <entry spanname="col2_on"> 2321 <para> 2322Manager -> Display 2323 </para> 2324 <para> 2325Additional Fields: 2326 </para> 2327 </entry> 2328 </row> 2329 2330 <row rowsep="0"> 2331 <entry></entry> 2332 <entry></entry> 2333 <entry spanname="col3_on"> 2334<emphasis remap='I'>Session ID</emphasis>: CARD32 2335 </entry> 2336 </row> 2337 2338 <row rowsep="0"> 2339 <entry></entry> 2340 <entry></entry> 2341 <entry></entry> 2342 <entry spanname="col4_on"> 2343Should be set to the Session ID received in the 2344<function>Manage</function> 2345packet. 2346 </entry> 2347 </row> 2348 2349 2350 <row rowsep="0"> 2351 <entry></entry> 2352 <entry spanname="col2_on"> 2353Semantics: 2354 </entry> 2355 </row> 2356 2357 <row rowsep="0"> 2358 <entry></entry> 2359 <entry></entry> 2360 <entry spanname="col3_on"> 2361A 2362<function>Refuse</function> 2363packet is sent by a manager when the Session ID received in the 2364<function>Manage</function> 2365packet does not match the current Session ID. 2366The display should assume that it received an old 2367<function>Accept</function> 2368packet and should resend its 2369<function>Request</function> 2370packet. 2371 </entry> 2372 </row> 2373 2374 <row rowsep="0"> 2375 <entry></entry> 2376 <entry spanname="col2_on"> 2377Problems/Solutions: 2378 </entry> 2379 </row> 2380 2381 <row rowsep="0"> 2382 <entry></entry> 2383 <entry></entry> 2384 <entry spanname="col3_on"> 2385Problem: 2386 </entry> 2387 </row> 2388 2389 <row rowsep="0"> 2390 <entry></entry> 2391 <entry></entry> 2392 <entry></entry> 2393 <entry spanname="col4_on"> 2394Error message is lost. 2395 </entry> 2396 </row> 2397 2398 <row rowsep="0"> 2399 <entry></entry> 2400 <entry></entry> 2401 <entry></entry> 2402 <entry spanname="col4_on"> 2403Indication: 2404 </entry> 2405 </row> 2406 2407 <row rowsep="0"> 2408 <entry></entry> 2409 <entry></entry> 2410 <entry></entry> 2411 <entry></entry> 2412 <entry spanname="col5_on"> 2413Display times out waiting for 2414new connection, 2415<function>Refuse</function> 2416or 2417<function>Failed .</function> 2418 </entry> 2419 </row> 2420 2421 <row rowsep="0"> 2422 <entry></entry> 2423 <entry></entry> 2424 <entry></entry> 2425 <entry spanname="col4_on"> 2426Solution: 2427 </entry> 2428 </row> 2429 2430 <row rowsep="0"> 2431 <entry></entry> 2432 <entry></entry> 2433 <entry></entry> 2434 <entry></entry> 2435 <entry spanname="col5_on"> 2436Display resends 2437<function>Manage</function> 2438message. 2439 </entry> 2440 </row> 2441 2442 2443 2444 <row rowsep="0"> 2445 <entry></entry> 2446 <entry spanname="col2_on"> 2447Timeout/Retransmission policy: 2448 </entry> 2449 </row> 2450 2451 <row rowsep="0"> 2452 <entry></entry> 2453 <entry></entry> 2454 <entry spanname="col3_on"> 2455Like all packets sent from a manager to a display, this packet should never be 2456retransmitted. 2457 </entry> 2458 </row> 2459 2460 <row rowsep="0"> 2461 <entry spanname="col1_on"> 2462<function>Failed</function> 2463 </entry> 2464 </row> 2465 2466 <row rowsep="0"> 2467 <entry></entry> 2468 <entry spanname="col2_on"> 2469 <para> 2470Manager -> Display 2471 </para> 2472 <para> 2473Additional Fields: 2474 </para> 2475 </entry> 2476 </row> 2477 2478 <row rowsep="0"> 2479 <entry></entry> 2480 <entry></entry> 2481 <entry spanname="col3_on"> 2482<emphasis remap='I'>Session ID</emphasis>: CARD32 2483 </entry> 2484 </row> 2485 2486 <row rowsep="0"> 2487 <entry></entry> 2488 <entry></entry> 2489 <entry></entry> 2490 <entry spanname="col4_on"> 2491Should be set to the Session ID received in the 2492<function>Manage</function> 2493packet. 2494 </entry> 2495 </row> 2496 2497 <row rowsep="0"> 2498 <entry></entry> 2499 <entry></entry> 2500 <entry spanname="col3_on"> 2501<emphasis remap='I'>Status</emphasis>: ARRAY8 2502 </entry> 2503 </row> 2504 2505 <row rowsep="0"> 2506 <entry></entry> 2507 <entry></entry> 2508 <entry></entry> 2509 <entry spanname="col4_on"> 2510Is a human readable string indicating the reason for failure. 2511 </entry> 2512 </row> 2513 2514 2515 <row rowsep="0"> 2516 <entry></entry> 2517 <entry spanname="col2_on"> 2518Semantics: 2519 </entry> 2520 </row> 2521 2522 <row rowsep="0"> 2523 <entry></entry> 2524 <entry></entry> 2525 <entry spanname="col3_on"> 2526A 2527<function>Failed</function> 2528packet is sent by a manager when it has problems establishing 2529the initial X connection in response to the 2530<function>Manage</function> 2531packet. 2532 </entry> 2533 </row> 2534 2535 <row rowsep="0"> 2536 <entry></entry> 2537 <entry spanname="col2_on"> 2538Problems/Solutions 2539 </entry> 2540 </row> 2541 2542 <row rowsep="0"> 2543 <entry></entry> 2544 <entry></entry> 2545 <entry spanname="col3_on"> 2546Same as for 2547<function>Refuse .</function> 2548 </entry> 2549 </row> 2550 2551 <row rowsep="0"> 2552 <entry spanname="col1_on"> 2553<function>KeepAlive</function> 2554 </entry> 2555 </row> 2556 2557 <row rowsep="0"> 2558 <entry></entry> 2559 <entry spanname="col2_on"> 2560 <para> 2561Display -> Manager 2562 </para> 2563 <para> 2564Additional Fields: 2565 </para> 2566 </entry> 2567 </row> 2568 2569 <row rowsep="0"> 2570 <entry></entry> 2571 <entry></entry> 2572 <entry spanname="col3_on"> 2573<emphasis remap='I'>Display Number</emphasis>: CARD16 2574 </entry> 2575 </row> 2576 2577 <row rowsep="0"> 2578 <entry></entry> 2579 <entry></entry> 2580 <entry></entry> 2581 <entry spanname="col4_on"> 2582Set to the display index for the display host. 2583 </entry> 2584 </row> 2585 2586 <row rowsep="0"> 2587 <entry></entry> 2588 <entry></entry> 2589 <entry spanname="col3_on"> 2590<emphasis remap='I'>Session ID</emphasis>: CARD32 2591 </entry> 2592 </row> 2593 2594 <row rowsep="0"> 2595 <entry></entry> 2596 <entry></entry> 2597 <entry></entry> 2598 <entry spanname="col4_on"> 2599Should be set to the Session ID received in the 2600<function>Manage</function> 2601packet during the negotiation for the current session. 2602 </entry> 2603 </row> 2604 2605 <row rowsep="0"> 2606 <entry></entry> 2607 <entry spanname="col2_on"> 2608Sematics: 2609 </entry> 2610 </row> 2611 2612 <row rowsep="0"> 2613 <entry></entry> 2614 <entry></entry> 2615 <entry spanname="col3_on"> 2616 <para> 2617A 2618<function>KeepAlive</function> 2619packet can be sent at any time during the session by a 2620display to discover if the manager is running. 2621The manager should respond with 2622<function>Alive</function> 2623whenever it receives this type of packet. 2624 </para> 2625 <para> 2626This allows the display to discover when the manager host 2627is no longer running. 2628A display is not required to send 2629<function>KeepAlive</function> 2630packets and, upon lack of receipt of 2631<function>Alive</function> 2632packets, is not required to perform any specific action. 2633 </para> 2634 <para> 2635The expected use of this packet is to terminate an active session when the 2636manager host or network link fails. The display should keep track of the 2637time since any packet has been received from the manager host and use 2638<function>KeepAlive</function> 2639packets when a substantial time has elapsed since the 2640most recent packet. 2641 </para> 2642 </entry> 2643 </row> 2644 2645 <row rowsep="0"> 2646 <entry></entry> 2647 <entry spanname="col2_on"> 2648Valid Responses: 2649 </entry> 2650 </row> 2651 2652 <row rowsep="0"> 2653 <entry></entry> 2654 <entry></entry> 2655 <entry spanname="col3_on"> 2656<function>Alive</function> 2657 </entry> 2658 </row> 2659 2660 <row rowsep="0"> 2661 <entry></entry> 2662 <entry spanname="col2_on"> 2663Problems/Solutions: 2664 </entry> 2665 </row> 2666 2667 <row rowsep="0"> 2668 <entry></entry> 2669 <entry></entry> 2670 <entry spanname="col3_on"> 2671Problem: 2672 </entry> 2673 </row> 2674 2675 <row rowsep="0"> 2676 <entry></entry> 2677 <entry></entry> 2678 <entry></entry> 2679 <entry spanname="col4_on"> 2680Manager does not receive the packet or display does not receive the response. 2681 </entry> 2682 </row> 2683 2684 2685 <row rowsep="0"> 2686 <entry></entry> 2687 <entry></entry> 2688 <entry></entry> 2689 <entry spanname="col4_on"> 2690Indication: 2691 </entry> 2692 </row> 2693 2694 <row rowsep="0"> 2695 <entry></entry> 2696 <entry></entry> 2697 <entry></entry> 2698 <entry></entry> 2699 <entry spanname="col5_on"> 2700No 2701<function>Alive</function> 2702packet is returned. 2703 </entry> 2704 </row> 2705 2706 <row rowsep="0"> 2707 <entry></entry> 2708 <entry></entry> 2709 <entry></entry> 2710 <entry spanname="col4_on"> 2711Solution: 2712 </entry> 2713 </row> 2714 2715 <row rowsep="0"> 2716 <entry></entry> 2717 <entry></entry> 2718 <entry></entry> 2719 <entry></entry> 2720 <entry spanname="col5_on"> 2721Retransmit the packet with an exponential backoff; start at 2 seconds and 2722assume the host is not up after no less than 30 seconds. 2723 </entry> 2724 </row> 2725 2726 <row rowsep="0"> 2727 <entry spanname="col1_on"> 2728<function>Alive</function> 2729 </entry> 2730 </row> 2731 2732 <row rowsep="0"> 2733 <entry></entry> 2734 <entry spanname="col2_on"> 2735 <para> 2736Manager -> Display 2737 </para> 2738 <para> 2739Additional Fields: 2740 </para> 2741 </entry> 2742 </row> 2743 2744 <row rowsep="0"> 2745 <entry></entry> 2746 <entry></entry> 2747 <entry spanname="col3_on"> 2748<emphasis remap='I'>Session Running</emphasis>: CARD8 2749 </entry> 2750 </row> 2751 2752 <row rowsep="0"> 2753 <entry></entry> 2754 <entry></entry> 2755 <entry></entry> 2756 <entry spanname="col4_on"> 2757Indicates that the session identified by Session ID is 2758currently active. The value is zero if no session is active 2759or one if a session 2760is active. 2761 </entry> 2762 </row> 2763 2764 <row rowsep="0"> 2765 <entry></entry> 2766 <entry></entry> 2767 <entry spanname="col3_on"> 2768<emphasis remap='I'>Session ID</emphasis>: CARD32 2769 </entry> 2770 </row> 2771 2772 <row rowsep="0"> 2773 <entry></entry> 2774 <entry></entry> 2775 <entry></entry> 2776 <entry spanname="col4_on"> 2777Specifies the ID of the currently running session; if any. 2778When no session is active this field should be zero. 2779 </entry> 2780 </row> 2781 2782 2783 <row rowsep="0"> 2784 <entry></entry> 2785 <entry spanname="col2_on"> 2786Semantics: 2787 </entry> 2788 </row> 2789 2790 <row rowsep="0"> 2791 <entry></entry> 2792 <entry></entry> 2793 <entry spanname="col3_on"> 2794An 2795<function>Alive</function> 2796packet is sent in response to a 2797<function>KeepAlive</function> 2798request. 2799If a session is currently active on the display, the manager includes the 2800Session ID in the packet. The display can use this information to 2801determine the status of the manager. 2802 </entry> 2803 </row> 2804 </tbody> 2805 </tgroup> 2806</informaltable> 2807 2808</sect1> 2809 2810<sect1 id="Session_Termination"> 2811<title>Session Termination</title> 2812<para> 2813When the session is over, the initial connection with the display (the one 2814that acknowledges the 2815<function>Manage</function> 2816packet) will be closed by the manager. 2817If only a single session was active on the display, 2818all other connections should be closed by the display 2819and the display should be reset. If multiple sessions 2820are active simultaneously and the display can identify which connections 2821belong to the terminated sesssion, those connections should be closed. 2822Otherwise, all connections should be closed and the display reset only when 2823all sessions have been terminated (that is, all initial connections closed). 2824</para> 2825 2826<para> 2827The session may also be terminated at any time by the display if the 2828managing host no longer responds to 2829<function>KeepAlive</function> 2830packets. 2831The exact time-outs for sending 2832<function>KeepAlive</function> 2833packets is not specified in this protocol as the trade off 2834should not be fixed between loading an otherwise idle system with spurious 2835<function>KeepAlive</function> 2836packets and not noticing that the manager host is down for a long time. 2837</para> 2838</sect1> 2839 2840<sect1 id="State_Diagrams"> 2841<title>State Diagrams</title> 2842<!-- .XS --> 2843<!-- (SN State Diagrams --> 2844<!-- .XE --> 2845<para> 2846<!-- .LP --> 2847The following state diagrams are designed to cover all actions of both 2848the display and the manager. Any packet that is received out-of-sequence 2849will be ignored. 2850</para> 2851<para> 2852<!-- .LP --> 2853Display: 2854</para> 2855 2856<variablelist> 2857 <varlistentry> 2858 <term><emphasis remap='I'>start</emphasis>:</term> 2859 <listitem> 2860 <para> 2861User-requested connect to one host -> <emphasis remap='I'>query</emphasis> 2862 </para> 2863 <para> 2864User-requested connect to some host -> <emphasis remap='I'>broadcast</emphasis> 2865 </para> 2866 <para> 2867User-requested connect to site host-list -> <emphasis remap='I'>indirect</emphasis> 2868 </para> 2869 </listitem> 2870 </varlistentry> 2871 <varlistentry> 2872 <term><emphasis remap='I'>query</emphasis>:</term> 2873 <listitem> 2874 <para> 2875Send <function>Query</function> packet 2876-> <emphasis remap='I'>collect-query</emphasis> 2877 </para> 2878 </listitem> 2879 </varlistentry> 2880 <varlistentry> 2881 <term><emphasis remap='I'>collect-query</emphasis>:</term> 2882 <listitem> 2883 <para> 2884Receive <function>Willing</function> -> 2885<emphasis remap='I'>start-connection</emphasis> 2886 </para> 2887 <para> 2888Receive <function>Unwilling</function> -> 2889<emphasis remap='I'>stop-connection</emphasis> 2890 </para> 2891 <para> 2892Timeout -> <emphasis remap='I'>query</emphasis> 2893 </para> 2894 </listitem> 2895 </varlistentry> 2896 2897 <varlistentry> 2898 <term><emphasis remap='I'>broadcast</emphasis>:</term> 2899 <listitem> 2900 <para> 2901Send <function>BroadcastQuery</function> packet 2902 </para> 2903 <para> 2904-> <emphasis remap='I'>collect-broadcast-query</emphasis> 2905 </para> 2906 </listitem> 2907 </varlistentry> 2908 <varlistentry> 2909 <term><emphasis remap='I'>collect-broadcast-query</emphasis>:</term> 2910 <listitem> 2911 <para> 2912Receive <function>Willing</function> -> 2913<emphasis remap='I'>update-broadcast-willing</emphasis> 2914 </para> 2915 <para> 2916User-requested connect to one host -> 2917<emphasis remap='I'>start-connection</emphasis> 2918 </para> 2919 <para> 2920Timeout -> <emphasis remap='I'>broadcast</emphasis> 2921 </para> 2922 </listitem> 2923 </varlistentry> 2924 <varlistentry> 2925 <term><emphasis remap='I'>update-broadcast-willing</emphasis>:</term> 2926 <listitem> 2927 <para> 2928Add new host to the host list presented to the user 2929 </para> 2930 <para> 2931-> <emphasis remap='I'>collect-broadcast-query</emphasis> 2932 </para> 2933 </listitem> 2934 </varlistentry> 2935 <varlistentry> 2936 <term><emphasis remap='I'>indirect</emphasis>:</term> 2937 <listitem> 2938 <para> 2939Send <function>IndirectQuery</function> packet 2940 </para> 2941 <para> 2942-> <emphasis remap='I'>collect-indirect-query</emphasis> 2943 </para> 2944 </listitem> 2945 </varlistentry> 2946 <varlistentry> 2947 <term><emphasis remap='I'>collect-indirect-query</emphasis>:</term> 2948 <listitem> 2949 <para> 2950Receive <function>Willing</function> -> 2951<emphasis remap='I'>update-indirect-willing</emphasis> 2952 </para> 2953 <para> 2954User-requested connect to one host -> 2955<emphasis remap='I'>start-connection</emphasis> 2956 </para> 2957 <para> 2958Timeout -> <emphasis remap='I'>indirect</emphasis> 2959 </para> 2960 </listitem> 2961 </varlistentry> 2962 <varlistentry> 2963 <term><emphasis remap='I'>update-indirect-willing</emphasis>:</term> 2964 <listitem> 2965 <para> 2966Add new host to the host list presented to the user 2967 </para> 2968 <para> 2969-> <emphasis remap='I'>collect-indirect-query</emphasis> 2970 </para> 2971 </listitem> 2972 </varlistentry> 2973 2974 <varlistentry> 2975 <term><emphasis remap='I'>start-connection</emphasis>:</term> 2976 <listitem> 2977 <para> 2978Send <function>Request</function> packet 2979 </para> 2980 <para> 2981-> <emphasis remap='I'>await-request-response</emphasis> 2982 </para> 2983 </listitem> 2984 </varlistentry> 2985 <varlistentry> 2986 <term><emphasis remap='I'>await-request-response</emphasis>:</term> 2987 <listitem> 2988 <para> 2989Receive <function>Accept</function> -> 2990<emphasis remap='I'>manage</emphasis> 2991 </para> 2992 <para> 2993Receive <function>Decline</function> -> 2994<emphasis remap='I'>stop-connection</emphasis> 2995 </para> 2996 <para> 2997Timeout -> <emphasis remap='I'>start-connection</emphasis> 2998 </para> 2999 </listitem> 3000 </varlistentry> 3001 <varlistentry> 3002 <term><emphasis remap='I'>manage</emphasis>:</term> 3003 <listitem> 3004 <para> 3005Save Session ID 3006 </para> 3007 <para> 3008Send <function>Manage</function> packet with Session ID 3009 </para> 3010 <para> 3011-> <emphasis remap='I'>await-manage-response</emphasis> 3012 </para> 3013 </listitem> 3014 </varlistentry> 3015 <varlistentry> 3016 <term><emphasis remap='I'>await-manage-response</emphasis>:</term> 3017 <listitem> 3018 <para> 3019Receive <function>XOpenDisplay :</function> -> 3020<emphasis remap='I'>run-session</emphasis> 3021 </para> 3022 <para> 3023Receive <function>Refuse</function> with matching Session ID 3024-> <emphasis remap='I'>start-connection</emphasis> 3025 </para> 3026 <para> 3027Receive <function>Failed</function> with matching Session ID 3028-> <emphasis remap='I'>stop-connection</emphasis> 3029 </para> 3030 <para> 3031Timeout -> <emphasis remap='I'>manage</emphasis> 3032 </para> 3033 </listitem> 3034 </varlistentry> 3035 <varlistentry> 3036 <term><emphasis remap='I'>stop-connection</emphasis>:</term> 3037 <listitem> 3038 <para> 3039Display cause of termination to user 3040 </para> 3041 <para> 3042-> <emphasis remap='I'>start</emphasis> 3043 </para> 3044 </listitem> 3045 </varlistentry> 3046 <varlistentry> 3047 <term><emphasis remap='I'>run-session</emphasis>:</term> 3048 <listitem> 3049 <para> 3050Decide to send <function>KeepAlive</function> packet -> 3051<emphasis remap='I'>keep-alive</emphasis> 3052 </para> 3053 <para> 3054wait close of first display connection 3055 </para> 3056 <para> 3057-> <emphasis remap='I'>reset-display</emphasis> 3058 </para> 3059 </listitem> 3060 </varlistentry> 3061 <varlistentry> 3062 <term><emphasis remap='I'>keep-alive</emphasis>:</term> 3063 <listitem> 3064 <para> 3065Send <function>KeepAlive</function> packet with current Session ID 3066 </para> 3067 <para> 3068-> <emphasis remap='I'>await-alive</emphasis> 3069 </para> 3070 </listitem> 3071 </varlistentry> 3072 <varlistentry> 3073 <term><emphasis remap='I'>await-alive</emphasis>:</term> 3074 <listitem> 3075 <para> 3076Receive <function>Alive</function> with matching Session ID -> 3077<emphasis remap='I'>run-session</emphasis> 3078 </para> 3079 <para> 3080Receive <function>Alive</function> with nonmatching Session ID 3081or FALSE Session Running -> <emphasis remap='I'>reset-display</emphasis> 3082 </para> 3083 <para> 3084Final timeout without receiving <function>Alive</function> 3085packet -> <emphasis remap='I'>reset-display</emphasis> 3086 </para> 3087 <para> 3088Timeout -> <emphasis remap='I'>keep-alive</emphasis> 3089 </para> 3090 </listitem> 3091 </varlistentry> 3092 <varlistentry> 3093 <term><emphasis remap='I'>reset-display</emphasis>:</term> 3094 <listitem> 3095 <para> 3096(if possible) -> close all display connections associated with this session 3097 </para> 3098 <para> 3099Last session -> close all display connections 3100 </para> 3101 <para> 3102-> <emphasis remap='I'>start</emphasis> 3103 </para> 3104 </listitem> 3105 </varlistentry> 3106</variablelist> 3107 3108 3109<para> 3110Manager: 3111</para> 3112 3113<variablelist> 3114 <varlistentry> 3115 <term><emphasis remap='I'>idle</emphasis>:</term> 3116 <listitem> 3117 <para> 3118Receive <function>Query</function> -> 3119<emphasis remap='I'>query-respond</emphasis> 3120 </para> 3121 <para> 3122Receive 3123<function>BroadcastQuery</function> 3124-> <emphasis remap='I'>broadcast-respond</emphasis> 3125 </para> 3126 <para> 3127Receive 3128<function>IndirectQuery</function> 3129-> <emphasis remap='I'>indirect-respond</emphasis> 3130 </para> 3131 <para> 3132Receive 3133<function>ForwardQuery</function> 3134-> <emphasis remap='I'>forward-respond</emphasis> 3135Receive 3136 </para> 3137 <para> 3138<function>Request</function> 3139-> <emphasis remap='I'>request-respond</emphasis> 3140 </para> 3141 <para> 3142Receive 3143<function>Manage</function> 3144-> <emphasis remap='I'>manage</emphasis> 3145 </para> 3146 <para> 3147An active session terminates 3148-> <emphasis remap='I'>finish-session</emphasis> 3149 </para> 3150 <para> 3151Receive <function>KeepAlive</function> 3152-> <emphasis remap='I'>send-alive</emphasis> 3153 </para> 3154 <para> 3155-> <emphasis remap='I'>idle</emphasis> 3156 </para> 3157 </listitem> 3158 </varlistentry> 3159 <varlistentry> 3160 <term><emphasis remap='I'>query-respond</emphasis>:</term> 3161 <listitem> 3162 <para> 3163If willing to manage -> <emphasis remap='I'>send-willing</emphasis> 3164 </para> 3165 <para> 3166-> <emphasis remap='I'>send-unwilling</emphasis> 3167 </para> 3168 </listitem> 3169 </varlistentry> 3170 <varlistentry> 3171 <term><emphasis remap='I'>broadcast-respond</emphasis>:</term> 3172 <listitem> 3173 <para> 3174If willing to manage -> <emphasis remap='I'>send-willing</emphasis> 3175 </para> 3176 <para> 3177-> <emphasis remap='I'>idle</emphasis> 3178 </para> 3179 </listitem> 3180 </varlistentry> 3181 <varlistentry> 3182 <term><emphasis remap='I'>indirect-respond</emphasis>:</term> 3183 <listitem> 3184 <para> 3185Send <function>ForwardQuery</function> 3186packets to all managers on redirect list 3187 </para> 3188 <para> 3189If willing to manage -> <emphasis remap='I'>send-willing</emphasis> 3190 </para> 3191 <para> 3192-> <emphasis remap='I'>idle</emphasis> 3193 </para> 3194 </listitem> 3195 </varlistentry> 3196 <varlistentry> 3197 <term><emphasis remap='I'>forward-respond</emphasis>:</term> 3198 <listitem> 3199 <para> 3200Decode destination address, if willing to manage -> 3201<emphasis remap='I'>send-willing</emphasis> 3202 </para> 3203 <para> 3204-> <emphasis remap='I'>idle</emphasis> 3205 </para> 3206 </listitem> 3207 </varlistentry> 3208 <varlistentry> 3209 <term><emphasis remap='I'>send-willing</emphasis>:</term> 3210 <listitem> 3211 <para> 3212Send <function>Willing</function> packet 3213 </para> 3214 <para> 3215-> <emphasis remap='I'>idle</emphasis> 3216 </para> 3217 </listitem> 3218 </varlistentry> 3219 <varlistentry> 3220 <term><emphasis remap='I'>send-unwilling</emphasis>:</term> 3221 <listitem> 3222 <para> 3223Send <function>Unwilling</function> packet 3224-> <emphasis remap='I'>idle</emphasis> 3225 </para> 3226 </listitem> 3227 </varlistentry> 3228 <varlistentry> 3229 <term><emphasis remap='I'>request-respond</emphasis>:</term> 3230 <listitem> 3231 <para> 3232If manager is willing to allow a session on display 3233-> <emphasis remap='I'>accept-session</emphasis> 3234 </para> 3235 <para> 3236-> <emphasis remap='I'>decline-session</emphasis> 3237 </para> 3238 </listitem> 3239 </varlistentry> 3240 <varlistentry> 3241 <term><emphasis remap='I'>accept-session</emphasis>:</term> 3242 <listitem> 3243 <para> 3244Generate Session ID and save Session ID, display address, and 3245display number somewhere 3246 </para> 3247 <para> 3248Send <function>Accept</function> packet 3249 </para> 3250 <para> 3251-> <emphasis remap='I'>idle</emphasis> 3252 </para> 3253 </listitem> 3254 </varlistentry> 3255 <varlistentry> 3256 <term><emphasis remap='I'>decline-session</emphasis>:</term> 3257 <listitem> 3258 <para> 3259Send <function>Decline</function> packet 3260 </para> 3261 <para> 3262-> <emphasis remap='I'>idle</emphasis> 3263 </para> 3264 </listitem> 3265 </varlistentry> 3266 <varlistentry> 3267 <term><emphasis remap='I'>manage</emphasis>:</term> 3268 <listitem> 3269 <para> 3270If Session ID matches saved Session ID -> 3271<emphasis remap='I'>run-session</emphasis> 3272 </para> 3273 <para> 3274If Session ID matches Session ID of session in process of 3275starting up, or currently active session -> 3276<emphasis remap='I'>idle</emphasis> 3277 </para> 3278 <para> 3279-> <emphasis remap='I'>refuse</emphasis> 3280 </para> 3281 </listitem> 3282 </varlistentry> 3283 <varlistentry> 3284 <term><emphasis remap='I'>refuse</emphasis>:</term> 3285 <listitem> 3286 <para> 3287Send <function>Refuse</function> packet 3288 </para> 3289 <para> 3290-> <emphasis remap='I'>idle</emphasis> 3291 </para> 3292 </listitem> 3293 </varlistentry> 3294 <varlistentry> 3295 <term><emphasis remap='I'>run-session</emphasis>:</term> 3296 <listitem> 3297 <para> 3298Terminate any session in progress 3299 </para> 3300 <para> 3301<function>XOpenDisplay</function> 3302 </para> 3303 <para> 3304Open display succeeds -> 3305<emphasis remap='I'>start-session</emphasis> 3306 </para> 3307 <para> 3308-> <emphasis remap='I'>failed</emphasis> 3309 </para> 3310 </listitem> 3311 </varlistentry> 3312 <varlistentry> 3313 <term><emphasis remap='I'>failed</emphasis>:</term> 3314 <listitem> 3315 <para> 3316Send <function>Failed</function> packet 3317 </para> 3318 <para> 3319-> <emphasis remap='I'>idle</emphasis> 3320 </para> 3321 </listitem> 3322 </varlistentry> 3323 <varlistentry> 3324 <term><emphasis remap='I'>start-session</emphasis>:</term> 3325 <listitem> 3326 <para> 3327Start a new session 3328 </para> 3329 <para> 3330-> <emphasis remap='I'>idle</emphasis> 3331 </para> 3332 </listitem> 3333 </varlistentry> 3334 <varlistentry> 3335 <term><emphasis remap='I'>finish-session</emphasis>:</term> 3336 <listitem> 3337 <para> 3338<function>XCloseDisplay</function> 3339 </para> 3340 <para> 3341-> <emphasis remap='I'>idle</emphasis> 3342 </para> 3343 </listitem> 3344 </varlistentry> 3345 <varlistentry> 3346 <term><emphasis remap='I'>send-alive</emphasis>:</term> 3347 <listitem> 3348 <para> 3349Send <function>Alive</function> packet containing current status 3350 </para> 3351 <para> 3352-> <emphasis remap='I'>idle</emphasis> 3353 </para> 3354 </listitem> 3355 </varlistentry> 3356</variablelist> 3357 3358</sect1> 3359 3360<sect1 id="Protocol_Encoding"> 3361<title>Protocol Encoding</title> 3362<para> 3363When XDMCP is implemented on top of the Internet User Datagram Protocol (UDP), 3364port number 177 is to be used. When using UDP over IPv4, Broadcast Query 3365packets are sent via UDP broadcast. When using UDP over IPv6, Broadcast Query 3366packets are sent via multicast, either to an address in the IANA registered 3367XDMCP multicast address range of 3368FF0<emphasis remap='I'>X</emphasis>:0:0:0:0:0:0:12B 3369(where the <emphasis remap='I'>X</emphasis> is replaced by a valid scope id) 3370or to a locally assigned 3371multicast address. The version number in all packets will be 1. 3372Packet opcodes are 16-bit integers. 3373</para> 3374 3375<informaltable frame="none"> 3376 <tgroup cols='2' align='left'> 3377 <colspec colname='c1' colsep="0"/> 3378 <colspec colname='c2' colsep="0"/> 3379 <thead> 3380 <row> 3381 <entry>Packet Name</entry> 3382 <entry>Encoding</entry> 3383 </row> 3384 </thead> 3385 <tbody> 3386 <row rowsep="0"> 3387 <entry>BroadcastQuery</entry> 3388 <entry>1</entry> 3389 </row> 3390 <row rowsep="0"> 3391 <entry>Query</entry> 3392 <entry>2</entry> 3393 </row> 3394 <row rowsep="0"> 3395 <entry>IndirectQuery</entry> 3396 <entry>3</entry> 3397 </row> 3398 <row rowsep="0"> 3399 <entry>ForwardQuery</entry> 3400 <entry>4</entry> 3401 </row> 3402 <row rowsep="0"> 3403 <entry>Willing</entry> 3404 <entry>5</entry> 3405 </row> 3406 <row rowsep="0"> 3407 <entry>Unwilling</entry> 3408 <entry>6</entry> 3409 </row> 3410 <row rowsep="0"> 3411 <entry>Request</entry> 3412 <entry>7</entry> 3413 </row> 3414 <row rowsep="0"> 3415 <entry>Accept</entry> 3416 <entry>8</entry> 3417 </row> 3418 <row rowsep="0"> 3419 <entry>Decline</entry> 3420 <entry>9</entry> 3421 </row> 3422 <row rowsep="0"> 3423 <entry>Manage</entry> 3424 <entry>10</entry> 3425 </row> 3426 <row rowsep="0"> 3427 <entry>Refuse</entry> 3428 <entry>11</entry> 3429 </row> 3430 <row rowsep="0"> 3431 <entry>Failed</entry> 3432 <entry>12</entry> 3433 </row> 3434 <row rowsep="0"> 3435 <entry>KeepAlive</entry> 3436 <entry>13 3437<footnote><para> 3438A previous version of this document incorrectly reversed the opcodes of 3439<emphasis role="bold">Alive</emphasis> and 3440<emphasis role="bold">KeepAlive</emphasis>. 3441</para></footnote> 3442 </entry> 3443 </row> 3444 <row rowsep="0"> 3445 <entry>Alive</entry> 3446 <entry>14 3447<footnote><para> 3448A previous version of this document incorrectly reversed the opcodes of 3449<emphasis role="bold">Alive</emphasis> and 3450<emphasis role="bold">KeepAlive</emphasis>. 3451</para></footnote> 3452 </entry> 3453 </row> 3454 </tbody> 3455 </tgroup> 3456</informaltable> 3457 3458<para> 3459Per packet information follows: 3460</para> 3461 3462<para> 3463<function>Query</function>, 3464<function>BroadcastQuery</function>, 3465<function>IndirectQuery</function> 3466</para> 3467 3468<literallayout class="monospaced"> 3469 2 CARD16 version number (always 1) 3470 2 CARD16 opcode (always Query, BroadcastQuery or IndirectQuery) 3471 2 CARD16 length 3472 1 CARD8 number of Authentication Names sent (m) 3473 2 CARD16 length of first Authentication Name (m<emphasis role="subscript">1</emphasis>) 3474 m<emphasis role="subscript">1</emphasis> CARD8 first Authentication Name 3475 ... Other Authentication Names 3476</literallayout> 3477 3478<para> 3479Note that these three packets are identical except for the opcode field. 3480</para> 3481 3482<literallayout class="monospaced"> 3483<function>ForwardQuery</function> 3484 2 CARD16 version number (always 1) 3485 2 CARD16 opcode (always ForwardQuery) 3486 2 CARD16 length 3487 2 CARD16 length of Client Address (m) 3488 m CARD8 Client Address 3489 2 CARD16 length of Client Port (n) 3490 n CARD8 Client Port 3491 1 CARD8 number of Authentication Names sent (o) 3492 2 CARD16 length of first Authentication Name (o<emphasis role="subscript">1</emphasis>) 3493 o<emphasis role="subscript">1</emphasis> CARD8 first Authentication Name 3494 ... Other Authentication Names 3495</literallayout> 3496 3497<literallayout class="monospaced"> 3498<function>Willing</function> 3499 2 CARD16 version number (always 1) 3500 2 CARD16 opcode (always Willing) 3501 2 CARD16 length (6 + m + n + o) 3502 2 CARD16 Length of Authentication Name (m) 3503 m CARD8 Authentication Name 3504 2 CARD16 Hostname length (n) 3505 n CARD8 Hostname 3506 2 CARD16 Status length (o) 3507 o CARD8 Status 3508</literallayout> 3509 3510<literallayout class="monospaced"> 3511<function>Unwilling</function> 3512 2 CARD16 version number (always 1) 3513 2 CARD16 opcode (always Unwilling) 3514 2 CARD16 length (4 + m + n) 3515 2 CARD16 Hostname length (m) 3516 m CARD8 Hostname 3517 2 CARD16 Status length (n) 3518 n CARD8 Status 3519</literallayout> 3520 3521<literallayout class="monospaced"> 3522<function>Request</function> 3523 2 CARD16 version number (always 1) 3524 2 CARD16 opcode (always Request) 3525 2 CARD16 length 3526 2 CARD16 Display Number 3527 1 CARD8 Count of Connection Types (m) 3528 2xm CARD16 Connection Types 3529 1 CARD8 Count of Connection Addresses (n) 3530 2 CARD16 Length of first Connection Address (n<emphasis role="subscript">1</emphasis>) 3531 n<emphasis role="subscript">1</emphasis> CARD8 First Connection Address 3532 ... Other connection addresses 3533 2 CARD16 Length of Authentication Name (o) 3534 o CARD8 Authentication Name 3535 2 CARD16 Length of Authentication Data (p) 3536 p CARD8 Authentication Data 3537 1 CARD8 Count of Authorization Names (q) 3538 2 CARD16 Length of first Authorization Name (q<emphasis role="subscript">1</emphasis>) 3539 q<emphasis role="subscript">1</emphasis> CARD8 First Authorization Name 3540 ... Other authorization names 3541 2 CARD16 Length of Manufacturer Display ID (r) 3542 r CARD8 Manufacturer Display ID 3543</literallayout> 3544 3545<literallayout class="monospaced"> 3546<function>Accept</function> 3547 2 CARD16 version number (always 1) 3548 2 CARD16 opcode (always Accept) 3549 2 CARD16 length (12 + n + m + o + p) 3550 4 CARD32 Session ID 3551 2 CARD16 Length of Authentication Name (n) 3552 n CARD8 Authentication Name 3553 2 CARD16 Length of Authentication Data (m) 3554 m CARD8 Authentication Data 3555 2 CARD16 Length of Authorization Name (o) 3556 o CARD8 Authorization Name 3557 2 CARD16 Length of Authorization Data (p) 3558 p CARD8 Authorization Data 3559</literallayout> 3560 3561<literallayout class="monospaced"> 3562<function>Decline</function> 3563 2 CARD16 version number (always 1) 3564 2 CARD16 opcode (always Decline) 3565 2 CARD16 length (6 + m + n + o) 3566 2 CARD16 Length of Status (m) 3567 m CARD8 Status 3568 2 CARD16 Length of Authentication Name (n) 3569 n CARD8 Authentication Name 3570 2 CARD16 Length of Authentication Data (o) 3571 o CARD8 Authentication Data 3572</literallayout> 3573 3574<literallayout class="monospaced"> 3575<function>Manage</function> 3576 2 CARD16 version number (always 1) 3577 2 CARD16 opcode (always Manage) 3578 2 CARD16 length (8 + m) 3579 4 CARD32 Session ID 3580 2 CARD16 Display Number 3581 2 CARD16 Length of Display Class (m) 3582 m CARD8 Display Class 3583</literallayout> 3584 3585<literallayout class="monospaced"> 3586<function>Refuse</function> 3587 2 CARD16 version number (always 1) 3588 2 CARD16 opcode (always Refuse) 3589 2 CARD16 length (4) 3590 4 CARD32 Session ID 3591</literallayout> 3592 3593<literallayout class="monospaced"> 3594<function>Failed</function> 3595 2 CARD16 version number (always 1) 3596 2 CARD16 opcode (always Failed) 3597 2 CARD16 length (6 + m) 3598 4 CARD32 Session ID 3599 2 CARD16 Length of Status (m) 3600 m CARD8 Status 3601</literallayout> 3602 3603<literallayout class="monospaced"> 3604<function>KeepAlive</function> 3605 2 CARD16 version number (always 1) 3606 2 CARD16 opcode (always KeepAlive) 3607 2 CARD16 length (6) 3608 2 CARD16 Display Number 3609 4 CARD32 Session ID 3610</literallayout> 3611 3612<literallayout class="monospaced"> 3613<function>Alive</function> 3614 2 CARD16 version number (always 1) 3615 2 CARD16 opcode (always Alive) 3616 2 CARD16 length (5) 3617 1 CARD8 Session Running (0: not running 1: running) 3618 4 CARD32 Session ID (0: not running) 3619</literallayout> 3620</sect1> 3621 3622<sect1 id="Display_Class_Format"> 3623<title>Display Class Format</title> 3624<!-- .XS --> 3625<!-- (SN Display Class Format --> 3626<!-- .XE --> 3627<para> 3628The Display Class field of the 3629<function>Manage</function> 3630packet is used by the display manager to collect common sorts of 3631displays into manageable groups. This field is a string encoded of 3632ISO-LATIN-1 characters in the following format: 3633</para> 3634 3635<literallayout class="monospaced"> 3636<emphasis remap='I'>ManufacturerID</emphasis>-<emphasis remap='I'>ModelNumber</emphasis> 3637</literallayout> 3638 3639<para> 3640Both elements of this string must exclude characters of the set 3641{ <function>-</function>, 3642<function>.</function>, 3643<function>:</function>, 3644<function>*</function>, 3645<function>?</function>, 3646<emphasis remap='I'><space></emphasis> }. 3647The ManufacturerID is a string that should be registered 3648with the X Consortium. 3649The ModelNumber is designed to identify characteristics of the display 3650within the manufacturer's product line. 3651This string should be documented in the users manual for the 3652particular device and should probably not be specifiable by the 3653display user to avoid unexpected configuration errors. 3654</para> 3655</sect1> 3656 3657<sect1 id="Manufacturer_Display_ID_Format"> 3658<title>Manufacturer Display ID Format</title> 3659<!-- .XS --> 3660<!-- (SN Manufacturer Display ID Format --> 3661<!-- .XE --> 3662<para> 3663To authenticate the manager, the display and manager will share a private 3664key. 3665The manager, then, must be able to discover which key to use for a 3666particular device. 3667The Manufacturer Display ID field of the 3668<function>Request</function> 3669packet is intended for this purpose. Typically, the manager host will 3670contain a map between this number and the key. This field is intended to be 3671unique per display, possibly the ethernet address of the display in the form: 3672</para> 3673 3674<literallayout class="monospaced"> 3675-Ethernet-8:0:2b:a:f:d2 3676</literallayout> 3677 3678<para> 3679It can also be a string of the form: 3680</para> 3681 3682<literallayout class="monospaced"> 3683<emphasis remap='I'>ManufacturerID</emphasis>-<emphasis remap='I'>ModelNumber</emphasis>-<emphasis remap='I'>SerialNumber</emphasis> 3684</literallayout> 3685 3686<para> 3687The ManufacturerID, ModelNumber and SerialNumber are encoded using 3688ISO-LATIN-1 characters, excluding { 3689<function>-</function>, 3690<function>.</function>, 3691<function>*</function>, 3692<function>?</function>, 3693<emphasis remap='I'><space></emphasis> } 3694</para> 3695 3696<para> 3697When the display is shipped to a customer, it should include both the 3698Manufacturer Display ID and the private key in the documentation set. 3699This information should not be modifiable by the display user. 3700</para> 3701 3702</sect1> 3703 3704<sect1 id="Authentication"> 3705<title>Authentication</title> 3706<!-- .XS --> 3707<!-- (SN Authentication --> 3708<!-- .XE --> 3709<para> 3710In an environment where authentication is not needed, XDMCP can disable 3711authentication by having the display send empty Authentication Name 3712and Authentication Data fields in the 3713<function>Request</function> 3714packet. 3715In this case, the manager will not attempt to authenticate itself. 3716Other authentication protocols may be developed, depending on local needs. 3717</para> 3718 3719<para> 3720In an unsecure environment, the display must be able to verify that the 3721source of the various packets is a trusted manager. These packets will 3722contain authentication information. As an example of such a system, the 3723following discussion describes the "XDM-AUTHENTICATION-1" authentication 3724system. This system uses a 56-bit shared private key, and 64 bits of 3725authentication data. An associated example X authorization protocol 3726"XDM-AUTHORIZATION-1" will also be discussed. The 56-bit key is represented 3727as a 64-bit number in network order (big endian). This means that the first 3728octet in the representation will be zero. When incrementing a 64-bit value, 3729the 8 octets of data will be interpreted in network order (big endian). 3730That is, the last octet will be incremented, subsequent carries propogate 3731towards the first octet. 3732</para> 3733 3734<para> 3735Assumptions: 3736</para> 3737 3738<orderedlist> 3739 <listitem> 3740 <para> 3741The display and manager share a private key. This key could be programmed 3742into the display by the manufacturer and shipped with the unit. It must not 3743be available from the display itself, but should allow the value to be 3744modified in some way. The system administrator would be responsible for 3745managing a database of terminal keys. 3746 </para> 3747 </listitem> 3748 <listitem> 3749 <para> 3750The display can generate random authentication numbers. 3751 </para> 3752 </listitem> 3753</orderedlist> 3754 3755<para> 3756Some definitions first: 3757</para> 3758 3759<!-- FIXME: --> 3760<!-- double chk math symbols, use mathml to display them? --> 3761<itemizedlist> 3762 <listitem> 3763 <para> 3764{D}= encryption of plain text D by key κ 3765 </para> 3766 </listitem> 3767 <listitem> 3768 <para> 3769{Δ}*κ = decryption of crypto text Δ with key κ 3770 </para> 3771 </listitem> 3772 <listitem> 3773 <para> 3774τ = private key shared by display and manager 3775 </para> 3776 </listitem> 3777 <listitem> 3778 <para> 3779ρ = 64 bit random number generated by display 3780 </para> 3781 </listitem> 3782 <listitem> 3783 <para> 3784α = authentication data in XDMCP packets 3785 </para> 3786 </listitem> 3787 <listitem> 3788 <para> 3789σ = per-session private key, generated by manager 3790 </para> 3791 </listitem> 3792 <listitem> 3793 <para> 3794β = authorization data 3795 </para> 3796 </listitem> 3797</itemizedlist> 3798 3799<para> 3800Encryption will use the Data Encryption Standard (DES, FIPS 46-3); blocks 3801shorter than 64 bits will be zero-filled 3802on the right to 64 bits. Blocks longer than 64 bits will use block chaining: 3803</para> 3804<para> 3805{D}κ = {D1 }κ {D2 xor {D1 }κ }κ 3806</para> 3807 3808<para> 3809The display generates the first authentication data in the 3810<function>Request</function> 3811packet: 3812</para> 3813 3814<para> 3815αRequest = {ρ}τ 3816 3817</para> 3818 3819<para> 3820For the <function>Accept</function> 3821packet, the manager decrypts the initial message and returns 3822αAccept: 3823 3824</para> 3825 3826<para> 3827ρ = {α Request } *τ 3828</para> 3829 3830<para> 3831α Accept = { ρ + 1}τ 3832</para> 3833 3834<para> 3835The <function>Accept</function> 3836packet also contains the authorization intended for use by 3837the X server. A description of authorization type "XDM-AUTHORIZATION-1" 3838follows. 3839</para> 3840 3841<para> 3842The <function>Accept</function> 3843packet contains the authorization name 3844"XDM-AUTHORIZATION-1". The authorization data is the string: 3845</para> 3846<para> 3847β Accept = {σ}τ 3848</para> 3849 3850<para> 3851To create authorization information for connection setup with the X server 3852using the XDM-AUTHORIZATION-1 authorization protocol, the client computes the 3853following: 3854</para> 3855<para> 3856N mark = "X client identifier" 3857</para> 3858<para> 3859T lineup = "Current time in seconds on client host (32 bits)" 3860</para> 3861<para> 3862β = {ρNT}σ 3863</para> 3864 3865<para> 3866For TCP connections @N@ is 48 bits long and contains the 32-bit IPv4 address of 3867the client host followed by the 16-bit port number of the client socket. 3868Formats for other connections must be registered. 3869The resulting value, β, is 192 bits of authorization data that is sent 3870in the connection setup to the server. The server receives the packet, 3871decrypts the contents. To accept the connection, the following must hold: 3872</para> 3873 3874<itemizedlist> 3875 <listitem> 3876 <para> 3877ρ must match the value generated for the most recent XDMCP negotiation. 3878 </para> 3879 </listitem> 3880 <listitem> 3881 <para> 3882T must be within 1200 seconds of the internally stored time. If no time 3883been received before, the current time is set to @T@. 3884 </para> 3885 </listitem> 3886 <listitem> 3887 <para> 3888No packet containing the same pair (N, T) can have been received 3889in the last 1200 seconds (20 minutes). 3890 </para> 3891 </listitem> 3892</itemizedlist> 3893</sect1> 3894</chapter> 3895</book> 3896