ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.10
Committed: Fri Jun 6 05:38:24 2003 UTC (20 years, 11 months ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.9: +5 -5 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 <html>
2     <head>
3     <title>KGS Protocol Description</title>
4     <!--
5     Copyright (C) 2003 Marc Lehmannn &lt;pcg@goof.com&gt;
6    
7     You can redistribute and/or modify this document under the terms of
8     the GNU General Public License as published by the Free Software
9     Foundation; either version 2 of the License, or (at your option) any
10     later version.
11    
12     This document is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15     General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     -->
21     </head>
22     <body>
23    
24 pcg 1.10 <h1>$Revision: 1.11 $</h1>
25 pcg 1.9
26 pcg 1.1 <h1>KGS Protocol Description</h1>
27    
28     <p>This XML document describes the KGS protocol. It is also used
29     to automatically generate the perl parser for all the messages and
30     structures in the protocol. Adapting it to other languages should be
31     trivial.</p>
32    
33 pcg 1.9 <p>
34     <b>Please note that the author of KGS has told me that he will
35     change the protocol in response to my efforts. This does not
36     necessarily mean that he will change the protocol just to make it
37     difficult to reverse-engineer the protocol, but if this happens,
38     I might not have the resources the track them, if they are too
39     extensive. Anyway, he made it clear that no help whatsoever is to be
40     expected.</b>
41     </p>
42    
43 pcg 1.4 <p>If you feel you need to update the visual appearance of this
44 pcg 1.10 document, feel free to look <tt>doc/doc2html.xsl</tt> and improve
45 pcg 1.4 it.</p>
46    
47 pcg 1.7 <p>The current version of this document can always be found at
48     <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/kgsueme/kgsueme/doc/protocol.xml?rev=HEAD&amp;content-type=text/xml">here</a>, while
49     the HTML version of it can be found
50     <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/kgsueme/kgsueme/doc/protocol.html?rev=HEAD&amp;content-type=text/html">here</a>.
51     </p>
52    
53 pcg 1.1 <h2>Structure and conventions of this document and the protocol</h2>
54    
55     <p>"Send" means messages send from the client to the server, while
56     "received" means messages send by the server to the client.</p>
57    
58 pcg 1.4 <p>Everything on the wire is in little-endian format (what a shame).</p>
59 pcg 1.1
60 pcg 1.4 <p>Primitive types are mostly integers (signed
61     "<code>I</code>&lt;bits&gt;", unsigned "<code>U</code>&lt;bits&gt;"),
62     ascii strings ("<code>username</code>"), or zero-terminated
63     UCS2-Strings ("<code>STRING</code>"). Yes, I know java is supposed to
64     do UTF-16, but no implementation seems to care...</p>
65 pcg 1.1
66     <p>For the rest, go figure or bug me, Marc Lehmann &lt;pcg@goof.com&gt;</p>
67    
68     <h2>Stream and message structure.</h2>
69    
70 pcg 1.4 <p>After connecting to the server, a handshake byte is sent. It's
71     the major version number of the protocol the client expects to
72     receive. Version 3 and 4 are mostly the same, except that Version 4
73     clients expect server messages to be compressed, version 3 clients
74     not.</p>
75    
76     <p>The server sends back his protocol number, which is always 3 in
77     the current protocol. Most of the protocol variation is determined by
78     the server using the client version that is used in the initial login
79     message, not the initial handshake byte.</p>
80 pcg 1.1
81     <p>After the initial handshake, the client sends uncompressed
82     messages, while the server sends back a zlib-compressed
83     stream (<a href="http://rfc1950.x42.com/">rfc1950</a> and <a href="http://rfc1950.x42.com/">rfc1951</a>).</p>
84    
85     <p>All messages have the same header:</p>
86    
87 pcg 1.3 <h4>STRUCTURE message_header</h4>
88 pcg 1.1 <table border="1">
89     <tr>
90     <th>NAME</th>
91     <th>TYPE</th>
92     <th>DEFAULT</th>
93 pcg 1.3 <th>DEC-GUARD</th>
94 pcg 1.1 </tr>
95     <tr>
96     <td colspan="4">
97     </td>
98     </tr>
99     <tr>
100     <td>_unknown</td>
101 pcg 1.3 <td>U16</td>
102 pcg 1.1 <td></td>
103 pcg 1.3 <td>
104 pcg 1.4 <b></b> </td>
105 pcg 1.1 </tr>
106     <tr>
107     <td colspan="4">
108     </td>
109     </tr>
110     <tr>
111     <td>length</td>
112 pcg 1.3 <td>U16</td>
113 pcg 1.1 <td></td>
114 pcg 1.3 <td>
115 pcg 1.4 <b></b> </td>
116 pcg 1.1 </tr>
117     <tr>
118     <td colspan="4">
119     The length is the length of the full message including the header.
120     </td>
121     </tr>
122     <tr>
123     <td>type</td>
124 pcg 1.3 <td>U16</td>
125 pcg 1.1 <td></td>
126 pcg 1.3 <td>
127 pcg 1.4 <b></b> </td>
128 pcg 1.1 </tr>
129     <tr>
130     <td colspan="4">
131     If the type is &gt;= 0x4000 this is a message for a specific channel. The channel
132 pcg 1.3 number is always the next U16.
133 pcg 1.1 </td>
134     </tr>
135     </table>
136    
137 pcg 1.3 <h2>Primitive types used in the protocol.</h2>
138    
139 pcg 1.9 <p>Apart from the basic types, I need to define some extra types to
140     deal with fixed-point values (based on integer types) or fixed-length
141     strings (either 7-bit-ascii or more limited (<code>A</code>), or UCS-2
142     based (<code>S</code>)).</p>
143    
144 pcg 1.4 <h4>TYPE username</h4>
145     BASE TYPE: A<br />
146     LENGTH: 12<br />
147     MULTIPLIER: <br />
148 pcg 1.8
149     <p>The basic user or login name, used throughout the protocol
150     as a handle to the user.</p>
151    
152 pcg 1.4 <h4>TYPE roomname</h4>
153     BASE TYPE: S<br />
154     LENGTH: 25<br />
155     MULTIPLIER: <br />
156 pcg 1.3 <!-- argh, how horribly broken -->
157 pcg 1.8
158     <p>Many strings in the protocol are fixed-width for no good reason
159     (maybe this is one reason for using compression in enwer versions, as
160     the packets itself are wasting lots of space.</p>
161    
162 pcg 1.4 <h4>TYPE locale</h4>
163     BASE TYPE: A<br />
164     LENGTH: 5<br />
165     MULTIPLIER: <br />
166 pcg 1.8
167     <p>A kind of locale specifier. It seems the general format seems to be
168     lowercase language, underscore, uppercase location, e.g. en_US. More
169     fancy specifications don't fit.</p>
170    
171 pcg 1.4 <h4>TYPE flag</h4>
172     BASE TYPE: U8<br />
173     LENGTH: <br />
174     MULTIPLIER: 1<br />
175 pcg 1.8
176     <p>Just a simple boolean value. 0 means false, and 1 generally true,
177     but I suggest ccepting != 0 as true.</p>
178    
179 pcg 1.6 <h4>TYPE komi16</h4>
180     BASE TYPE: I16<br />
181     LENGTH: <br />
182     MULTIPLIER: 2<br />
183     <h4>TYPE komi32</h4>
184 pcg 1.4 BASE TYPE: I32<br />
185     LENGTH: <br />
186     MULTIPLIER: 2<br />
187 pcg 1.8
188     <p>Komi values are multiplied by 2 to make them integer in the
189     protocol. Of course, sometimes they are encoded in 16 bits, sometimes
190     in 32. Get used to this.</p>
191    
192 pcg 1.4 <h4>TYPE result</h4>
193     BASE TYPE: I32<br />
194     LENGTH: <br />
195     MULTIPLIER: 2<br />
196 pcg 1.8
197     <p>The game result is also multiplied by four to give it higher
198     resolution. There are also special values for wins by time etc.</p>
199    
200 pcg 1.4 <h4>TYPE score</h4>
201     BASE TYPE: I32<br />
202     LENGTH: <br />
203     MULTIPLIER: 4<br />
204 pcg 1.8
205     <p>A score value (used for displaying the score at the end of a game)
206     are multiplied by four for a change. I have not yet seen 0.25 scores,
207     please somebody tell me where they happen, or if they happen.</p>
208    
209 pcg 1.4 <h4>TYPE time</h4>
210     BASE TYPE: U32<br />
211     LENGTH: <br />
212 pcg 1.6 MULTIPLIER: 1000<br />
213 pcg 1.8
214     <p>Time values are multiplied by 1000, giving them millisecond
215     accuracy.</p>
216 pcg 1.3
217     <h2>Constants, enumeration and set types used in the protocol.</h2>
218 pcg 1.1
219     <p>Baaah... not yet.</p>
220    
221 pcg 1.3 <h2>Structs used in send &amp; receive messages</h2>
222 pcg 1.1
223 pcg 1.3 <h4>STRUCTURE user</h4>
224     CLASS: KGS::User<br />
225 pcg 1.1 <table border="1">
226     <tr>
227     <th>NAME</th>
228     <th>TYPE</th>
229     <th>DEFAULT</th>
230 pcg 1.3 <th>DEC-GUARD</th>
231 pcg 1.1 </tr>
232     <tr>
233     <td colspan="4">
234 pcg 1.9
235     Everywhere a user + flags is required, even used in some places
236     where only a username is required. I see no general rule on when a
237     complete user and when a partial user is required.
238    
239 pcg 1.1 </td>
240     </tr>
241     <tr>
242     <td>name</td>
243 pcg 1.3 <td>username</td>
244 pcg 1.1 <td></td>
245 pcg 1.3 <td>
246 pcg 1.4 <b></b> </td>
247 pcg 1.1 </tr>
248     <tr>
249     <td colspan="4">
250     </td>
251     </tr>
252     <tr>
253     <td>flags</td>
254 pcg 1.3 <td>U32</td>
255 pcg 1.1 <td>1</td>
256 pcg 1.3 <td>
257 pcg 1.4 <b></b> </td>
258 pcg 1.1 </tr>
259     <tr>
260     <td colspan="4">
261     </td>
262     </tr>
263     </table>
264    
265 pcg 1.6 <h4>STRUCTURE rules</h4>
266     CLASS: KGS::Rules<br />
267     <table border="1">
268     <tr>
269     <th>NAME</th>
270     <th>TYPE</th>
271     <th>DEFAULT</th>
272     <th>DEC-GUARD</th>
273     </tr>
274     <tr>
275     <td colspan="4">
276 pcg 1.9
277     This structure is used for challanges as well as in the special
278     TREE "subprotocol". It tightly encodes the game parameters.
279    
280 pcg 1.6 </td>
281     </tr>
282     <tr>
283     <td>ruleset</td>
284     <td>U8</td>
285     <td></td>
286     <td>
287     <b></b> </td>
288     </tr>
289     <tr>
290     <td colspan="4">
291     </td>
292     </tr>
293     <tr>
294     <td>size</td>
295     <td>U8</td>
296     <td></td>
297     <td>
298     <b></b> </td>
299     </tr>
300     <tr>
301     <td colspan="4">
302     </td>
303     </tr>
304     <tr>
305     <td>handicap</td>
306     <td>U8</td>
307     <td></td>
308     <td>
309     <b></b> </td>
310     </tr>
311     <tr>
312     <td colspan="4">
313     </td>
314     </tr>
315     <tr>
316     <td>komi</td>
317     <td>komi16</td>
318     <td></td>
319     <td>
320     <b></b> </td>
321     </tr>
322     <tr>
323     <td colspan="4">
324     </td>
325     </tr>
326     <tr>
327     <td>timesys</td>
328     <td>U8</td>
329     <td></td>
330     <td>
331     <b></b> </td>
332     </tr>
333     <tr>
334     <td colspan="4">
335     </td>
336     </tr>
337     <tr>
338     <td>time</td>
339     <td>U32</td>
340     <td></td>
341     <td>
342     <b></b> </td>
343     </tr>
344     <tr>
345     <td colspan="4">
346     </td>
347     </tr>
348     <tr>
349     <td>interval</td>
350     <td>U32</td>
351     <td></td>
352     <td>
353     <b></b> </td>
354     </tr>
355     <tr>
356     <td colspan="4">
357     byo-yomi time / canadian time
358     </td>
359     </tr>
360     <tr>
361     <td>count</td>
362     <td>U16</td>
363     <td></td>
364     <td>
365     <b></b> </td>
366     </tr>
367     <tr>
368     <td colspan="4">
369     periods / moves
370     </td>
371     </tr>
372     </table>
373    
374 pcg 1.3 <h2>Structs used in send messages</h2>
375 pcg 1.1
376     <h4>MESSAGE login</h4>
377     NUMERIC TYPE (hex): 0000 SEND<table border="1">
378     <tr>
379     <th>NAME</th>
380     <th>TYPE</th>
381     <th>DEFAULT</th>
382 pcg 1.3 <th>DEC-GUARD</th>
383 pcg 1.1 </tr>
384     <tr>
385     <td colspan="4">
386 pcg 1.9
387     Send on the initial login. The password needs to be set when the
388     guest flag is true.
389    
390 pcg 1.1 </td>
391     </tr>
392     <tr>
393     <td>ver_major</td>
394 pcg 1.3 <td>U32</td>
395 pcg 1.1 <td>2</td>
396 pcg 1.3 <td>
397 pcg 1.4 <b></b> </td>
398 pcg 1.1 </tr>
399     <tr>
400     <td colspan="4">
401     </td>
402     </tr>
403     <tr>
404     <td>ver_minor</td>
405 pcg 1.3 <td>U32</td>
406 pcg 1.1 <td>4</td>
407 pcg 1.3 <td>
408 pcg 1.4 <b></b> </td>
409 pcg 1.1 </tr>
410     <tr>
411     <td colspan="4">
412     </td>
413     </tr>
414     <tr>
415     <td>ver_micro</td>
416 pcg 1.3 <td>U32</td>
417 pcg 1.1 <td>67</td>
418 pcg 1.3 <td>
419 pcg 1.4 <b></b> </td>
420 pcg 1.1 </tr>
421     <tr>
422     <td colspan="4">
423     </td>
424     </tr>
425     <tr>
426 pcg 1.3 <td>name</td>
427     <td>username</td>
428 pcg 1.1 <td></td>
429 pcg 1.3 <td>
430 pcg 1.4 <b></b> </td>
431 pcg 1.1 </tr>
432     <tr>
433     <td colspan="4">
434     </td>
435     </tr>
436     <tr>
437     <td>password </td>
438 pcg 1.3 <td>U64</td>
439 pcg 1.1 <td>0</td>
440 pcg 1.3 <td>
441 pcg 1.4 <b></b> </td>
442 pcg 1.1 </tr>
443     <tr>
444     <td colspan="4">
445 pcg 1.3 Password is a number calculated as follows (VERY insecure, basically plaintext!):
446 pcg 1.4 password = 0; for char in characters do password ← password * 1055 + ascii_code (char);
447 pcg 1.1 </td>
448     </tr>
449     <tr>
450 pcg 1.2 <td>guest</td>
451 pcg 1.3 <td>flag</td>
452 pcg 1.1 <td>1</td>
453 pcg 1.3 <td>
454 pcg 1.4 <b></b> </td>
455 pcg 1.1 </tr>
456     <tr>
457     <td colspan="4">
458     </td>
459     </tr>
460     <tr>
461     <td>_unknown3</td>
462 pcg 1.3 <td>U16</td>
463 pcg 1.1 <td>0</td>
464 pcg 1.3 <td>
465 pcg 1.4 <b></b> </td>
466 pcg 1.1 </tr>
467     <tr>
468     <td colspan="4">
469     </td>
470     </tr>
471     <tr>
472 pcg 1.2 <td>locale</td>
473 pcg 1.3 <td>locale</td>
474     <td>"en_US"</td>
475     <td>
476 pcg 1.4 <b></b> </td>
477 pcg 1.1 </tr>
478     <tr>
479     <td colspan="4">
480     </td>
481     </tr>
482     <tr>
483     <td>clientver</td>
484     <td>DATA</td>
485 pcg 1.3 <td>"1.4.1_01:Swing app:Sun Microsystems Inc."</td>
486     <td>
487 pcg 1.4 <b></b> </td>
488 pcg 1.1 </tr>
489     <tr>
490     <td colspan="4">
491 pcg 1.4 The "default" is the java vm version, not exactly he client version. However,
492     you should always send a tetx like "Jonathan's C client bersion 0.6" or somesuch,
493     so the server can, if necessary, block broken clients or client versions.
494 pcg 1.1 </td>
495     </tr>
496     </table>
497    
498     <h4>MESSAGE server_stats</h4>
499 pcg 1.2 NUMERIC TYPE (hex): 0014 SEND<table border="1">
500 pcg 1.1 <tr>
501     <th>NAME</th>
502     <th>TYPE</th>
503     <th>DEFAULT</th>
504 pcg 1.3 <th>DEC-GUARD</th>
505 pcg 1.1 </tr>
506     <tr>
507     <td colspan="4">
508     Request server statistics.
509     </td>
510     </tr>
511     </table>
512    
513     <h4>MESSAGE pic_req</h4>
514 pcg 1.2 NUMERIC TYPE (hex): 0021 SEND<table border="1">
515 pcg 1.1 <tr>
516     <th>NAME</th>
517     <th>TYPE</th>
518     <th>DEFAULT</th>
519 pcg 1.3 <th>DEC-GUARD</th>
520 pcg 1.1 </tr>
521     <tr>
522     <td colspan="4">
523 pcg 1.9 Request a user picture from the server. Results in a userpic-reply
524     or a timeout :/.
525 pcg 1.1 </td>
526     </tr>
527     <tr>
528     <td>name</td>
529 pcg 1.3 <td>username</td>
530 pcg 1.1 <td></td>
531 pcg 1.3 <td>
532 pcg 1.4 <b></b> </td>
533 pcg 1.1 </tr>
534     <tr>
535     <td colspan="4">
536     </td>
537     </tr>
538     </table>
539    
540     <h4>MESSAGE pic_upload</h4>
541 pcg 1.2 NUMERIC TYPE (hex): 0021 SEND<table border="1">
542 pcg 1.1 <tr>
543     <th>NAME</th>
544     <th>TYPE</th>
545     <th>DEFAULT</th>
546 pcg 1.3 <th>DEC-GUARD</th>
547 pcg 1.1 </tr>
548     <tr>
549     <td colspan="4">
550     Same code as pic_req, but with an additional data section that
551 pcg 1.4 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels.
552 pcg 1.1 </td>
553     </tr>
554     <tr>
555     <td>name</td>
556 pcg 1.3 <td>username</td>
557 pcg 1.1 <td></td>
558 pcg 1.3 <td>
559 pcg 1.4 <b></b> </td>
560 pcg 1.1 </tr>
561     <tr>
562     <td colspan="4">
563     </td>
564     </tr>
565     <tr>
566     <td>data</td>
567     <td>DATA</td>
568     <td></td>
569 pcg 1.3 <td>
570 pcg 1.4 <b></b> </td>
571 pcg 1.1 </tr>
572     <tr>
573     <td colspan="4">
574     </td>
575     </tr>
576     </table>
577    
578     <h4>MESSAGE gnotice</h4>
579 pcg 1.2 NUMERIC TYPE (hex): 0100 SEND<table border="1">
580 pcg 1.1 <tr>
581     <th>NAME</th>
582     <th>TYPE</th>
583     <th>DEFAULT</th>
584 pcg 1.3 <th>DEC-GUARD</th>
585 pcg 1.1 </tr>
586     <tr>
587     <td colspan="4">
588     Send a global message. Maybe. Never tried, for obvious reasons :/
589     </td>
590     </tr>
591     <tr>
592     <td>notice</td>
593     <td>STRING</td>
594     <td></td>
595 pcg 1.3 <td>
596 pcg 1.4 <b></b> </td>
597 pcg 1.1 </tr>
598     <tr>
599     <td colspan="4">
600     </td>
601     </tr>
602     </table>
603    
604     <h4>MESSAGE list_rooms</h4>
605 pcg 1.2 NUMERIC TYPE (hex): 0318 SEND<table border="1">
606 pcg 1.1 <tr>
607     <th>NAME</th>
608     <th>TYPE</th>
609     <th>DEFAULT</th>
610 pcg 1.3 <th>DEC-GUARD</th>
611 pcg 1.1 </tr>
612     <tr>
613     <td colspan="4">
614 pcg 1.9 List the rooms in a specific group/category. Results in a upd_rooms message.
615 pcg 1.1 </td>
616     </tr>
617     <tr>
618     <td>group</td>
619 pcg 1.3 <td>U8</td>
620 pcg 1.1 <td></td>
621 pcg 1.3 <td>
622 pcg 1.4 <b></b> </td>
623 pcg 1.1 </tr>
624     <tr>
625     <td colspan="4">
626     </td>
627     </tr>
628     </table>
629    
630     <h4>MESSAGE new_room</h4>
631 pcg 1.2 NUMERIC TYPE (hex): 031a SEND<table border="1">
632 pcg 1.1 <tr>
633     <th>NAME</th>
634     <th>TYPE</th>
635     <th>DEFAULT</th>
636 pcg 1.3 <th>DEC-GUARD</th>
637 pcg 1.1 </tr>
638     <tr>
639     <td colspan="4">
640     Create a new room. Not verified.
641     </td>
642     </tr>
643     <tr>
644     <td>name</td>
645 pcg 1.3 <td>username</td>
646 pcg 1.1 <td></td>
647 pcg 1.3 <td>
648 pcg 1.4 <b></b> </td>
649 pcg 1.1 </tr>
650     <tr>
651     <td colspan="4">
652     </td>
653     </tr>
654     <tr>
655     <td>i1</td>
656 pcg 1.3 <td>U32</td>
657 pcg 1.1 <td>0</td>
658 pcg 1.3 <td>
659 pcg 1.4 <b></b> </td>
660 pcg 1.1 </tr>
661     <tr>
662     <td colspan="4">
663     </td>
664     </tr>
665     <tr>
666     <td>b1</td>
667 pcg 1.3 <td>U8</td>
668 pcg 1.1 <td>0</td>
669 pcg 1.3 <td>
670 pcg 1.4 <b></b> </td>
671 pcg 1.1 </tr>
672     <tr>
673     <td colspan="4">
674     </td>
675     </tr>
676     <tr>
677     <td>b2</td>
678 pcg 1.3 <td>U8</td>
679 pcg 1.1 <td>255</td>
680 pcg 1.3 <td>
681 pcg 1.4 <b></b> </td>
682 pcg 1.1 </tr>
683     <tr>
684     <td colspan="4">
685     </td>
686     </tr>
687     <tr>
688     <td>b3</td>
689 pcg 1.3 <td>U8</td>
690 pcg 1.1 <td>255</td>
691 pcg 1.3 <td>
692 pcg 1.4 <b></b> </td>
693 pcg 1.1 </tr>
694     <tr>
695     <td colspan="4">
696     </td>
697     </tr>
698     <tr>
699     <td>group</td>
700 pcg 1.3 <td>U8</td>
701 pcg 1.1 <td>1</td>
702 pcg 1.3 <td>
703 pcg 1.4 <b></b> </td>
704 pcg 1.1 </tr>
705     <tr>
706     <td colspan="4">
707     </td>
708     </tr>
709     <tr>
710     <td>name</td>
711     <td>STRING</td>
712     <td></td>
713 pcg 1.3 <td>
714 pcg 1.4 <b></b> </td>
715 pcg 1.1 </tr>
716     <tr>
717     <td colspan="4">
718     </td>
719     </tr>
720     <tr>
721     <td>description</td>
722     <td>STRING</td>
723     <td></td>
724 pcg 1.3 <td>
725 pcg 1.4 <b></b> </td>
726 pcg 1.1 </tr>
727     <tr>
728     <td colspan="4">
729     </td>
730     </tr>
731     <tr>
732     <td>flags</td>
733 pcg 1.3 <td>U8</td>
734 pcg 1.1 <td></td>
735 pcg 1.3 <td>
736 pcg 1.4 <b></b> </td>
737 pcg 1.1 </tr>
738     <tr>
739     <td colspan="4">
740     0x10 .. private room etc.. see code
741     </td>
742     </tr>
743     </table>
744    
745     <h4>MESSAGE join_room</h4>
746     NUMERIC TYPE (hex): 4300 SEND<table border="1">
747     <tr>
748     <th>NAME</th>
749     <th>TYPE</th>
750     <th>DEFAULT</th>
751 pcg 1.3 <th>DEC-GUARD</th>
752 pcg 1.1 </tr>
753     <tr>
754     <td colspan="4">
755 pcg 1.9 Joins the given room. join_room messages for yourself
756     and all users in that room, as well as the initial gamelist, are
757     send if the room exists. If not, timeout...
758 pcg 1.1 </td>
759     </tr>
760     <tr>
761     <td>channel</td>
762 pcg 1.3 <td>U16</td>
763 pcg 1.1 <td></td>
764 pcg 1.3 <td>
765 pcg 1.4 <b></b> </td>
766 pcg 1.1 </tr>
767     <tr>
768     <td colspan="4">
769     </td>
770     </tr>
771     <tr>
772     <td>user</td>
773     <td>user</td>
774     <td></td>
775 pcg 1.3 <td>
776 pcg 1.4 <b></b> </td>
777 pcg 1.1 </tr>
778     <tr>
779     <td colspan="4">
780     </td>
781     </tr>
782     </table>
783    
784     <h4>MESSAGE msg_room</h4>
785     NUMERIC TYPE (hex): 4301 SEND<table border="1">
786     <tr>
787     <th>NAME</th>
788     <th>TYPE</th>
789     <th>DEFAULT</th>
790 pcg 1.3 <th>DEC-GUARD</th>
791 pcg 1.1 </tr>
792     <tr>
793     <td colspan="4">
794 pcg 1.9 Send a message to the room.
795 pcg 1.1 </td>
796     </tr>
797     <tr>
798     <td>channel</td>
799 pcg 1.3 <td>U16</td>
800 pcg 1.1 <td></td>
801 pcg 1.3 <td>
802 pcg 1.4 <b></b> </td>
803 pcg 1.1 </tr>
804     <tr>
805     <td colspan="4">
806     </td>
807     </tr>
808     <tr>
809     <td>name</td>
810 pcg 1.3 <td>username</td>
811 pcg 1.1 <td></td>
812 pcg 1.3 <td>
813 pcg 1.4 <b></b> </td>
814 pcg 1.1 </tr>
815     <tr>
816     <td colspan="4">
817 pcg 1.9 Must be the login-name of the user.
818 pcg 1.1 </td>
819     </tr>
820     <tr>
821     <td>message</td>
822     <td>STRING</td>
823     <td></td>
824 pcg 1.3 <td>
825 pcg 1.4 <b></b> </td>
826 pcg 1.1 </tr>
827     <tr>
828     <td colspan="4">
829     </td>
830     </tr>
831     </table>
832    
833     <h4>MESSAGE part_room</h4>
834     NUMERIC TYPE (hex): 4302 SEND<table border="1">
835     <tr>
836     <th>NAME</th>
837     <th>TYPE</th>
838     <th>DEFAULT</th>
839 pcg 1.3 <th>DEC-GUARD</th>
840 pcg 1.1 </tr>
841     <tr>
842     <td colspan="4">
843 pcg 1.9 Remove yourself (or maybe others as admin) from a room.
844 pcg 1.1 </td>
845     </tr>
846     <tr>
847     <td>channel</td>
848 pcg 1.3 <td>U16</td>
849 pcg 1.1 <td></td>
850 pcg 1.3 <td>
851 pcg 1.4 <b></b> </td>
852 pcg 1.1 </tr>
853     <tr>
854     <td colspan="4">
855     </td>
856     </tr>
857     <tr>
858     <td>name</td>
859 pcg 1.3 <td>username</td>
860 pcg 1.1 <td></td>
861 pcg 1.3 <td>
862 pcg 1.4 <b></b> </td>
863 pcg 1.1 </tr>
864     <tr>
865     <td colspan="4">
866     </td>
867     </tr>
868     </table>
869    
870     <h4>MESSAGE new_game</h4>
871     NUMERIC TYPE (hex): 4305 SEND<table border="1">
872     <tr>
873     <th>NAME</th>
874     <th>TYPE</th>
875     <th>DEFAULT</th>
876 pcg 1.3 <th>DEC-GUARD</th>
877 pcg 1.1 </tr>
878     <tr>
879     <td colspan="4">
880 pcg 1.9 Unclear.
881 pcg 1.1 </td>
882     </tr>
883     <tr>
884     <td>channel</td>
885 pcg 1.3 <td>U16</td>
886 pcg 1.1 <td></td>
887 pcg 1.3 <td>
888 pcg 1.4 <b></b> </td>
889 pcg 1.1 </tr>
890     <tr>
891     <td colspan="4">
892     </td>
893     </tr>
894     <tr>
895     <td>id</td>
896 pcg 1.3 <td>U16</td>
897 pcg 1.1 <td></td>
898 pcg 1.3 <td>
899 pcg 1.4 <b></b> </td>
900 pcg 1.1 </tr>
901     <tr>
902     <td colspan="4">
903     </td>
904     </tr>
905     <tr>
906     <td>gametype</td>
907 pcg 1.3 <td>U32</td>
908 pcg 1.1 <td></td>
909 pcg 1.3 <td>
910 pcg 1.4 <b></b> </td>
911 pcg 1.1 </tr>
912     <tr>
913     <td colspan="4">
914     </td>
915     </tr>
916     <tr>
917     <td>rules</td>
918     <td>rules</td>
919     <td></td>
920 pcg 1.3 <td>
921 pcg 1.4 <b></b> </td>
922 pcg 1.1 </tr>
923     <tr>
924     <td colspan="4">
925     </td>
926     </tr>
927     <tr>
928     <td>notes</td>
929     <td>STRING</td>
930     <td></td>
931 pcg 1.3 <td>
932 pcg 1.4 <b></b> </td>
933 pcg 1.1 </tr>
934     <tr>
935     <td colspan="4">
936     </td>
937     </tr>
938     </table>
939    
940     <h4>MESSAGE req_games</h4>
941     NUMERIC TYPE (hex): 430b SEND<table border="1">
942     <tr>
943     <th>NAME</th>
944     <th>TYPE</th>
945     <th>DEFAULT</th>
946 pcg 1.3 <th>DEC-GUARD</th>
947 pcg 1.1 </tr>
948     <tr>
949     <td colspan="4">
950 pcg 1.9 Request to update room game list (send this once per minute to get
951     updated). Results in upd_games messages.
952 pcg 1.1 </td>
953     </tr>
954     <tr>
955     <td>channel</td>
956 pcg 1.3 <td>U16</td>
957 pcg 1.1 <td></td>
958 pcg 1.3 <td>
959 pcg 1.4 <b></b> </td>
960 pcg 1.1 </tr>
961     <tr>
962     <td colspan="4">
963     </td>
964     </tr>
965     </table>
966    
967     <h4>MESSAGE req_desc</h4>
968     NUMERIC TYPE (hex): 4319 SEND<table border="1">
969     <tr>
970     <th>NAME</th>
971     <th>TYPE</th>
972     <th>DEFAULT</th>
973 pcg 1.3 <th>DEC-GUARD</th>
974 pcg 1.1 </tr>
975     <tr>
976     <td colspan="4">
977     Request room description.
978     </td>
979     </tr>
980     <tr>
981     <td>channel</td>
982 pcg 1.3 <td>U16</td>
983 pcg 1.1 <td></td>
984 pcg 1.3 <td>
985 pcg 1.4 <b></b> </td>
986 pcg 1.1 </tr>
987     <tr>
988     <td colspan="4">
989     </td>
990     </tr>
991     </table>
992    
993     <h4>MESSAGE send_chal</h4>
994     NUMERIC TYPE (hex): 4400 SEND<table border="1">
995     <tr>
996     <th>NAME</th>
997     <th>TYPE</th>
998     <th>DEFAULT</th>
999 pcg 1.3 <th>DEC-GUARD</th>
1000 pcg 1.1 </tr>
1001     <tr>
1002     <td colspan="4">
1003 pcg 1.9 Unclear.
1004 pcg 1.1 </td>
1005     </tr>
1006     <tr>
1007     <td>channel</td>
1008 pcg 1.3 <td>U16</td>
1009 pcg 1.1 <td></td>
1010 pcg 1.3 <td>
1011 pcg 1.4 <b></b> </td>
1012 pcg 1.1 </tr>
1013     <tr>
1014     <td colspan="4">
1015     </td>
1016     </tr>
1017     <tr>
1018     <td>black</td>
1019 pcg 1.3 <td>username</td>
1020 pcg 1.1 <td></td>
1021 pcg 1.3 <td>
1022 pcg 1.4 <b></b> </td>
1023 pcg 1.1 </tr>
1024     <tr>
1025     <td colspan="4">
1026     </td>
1027     </tr>
1028     <tr>
1029     <td>white</td>
1030 pcg 1.3 <td>username</td>
1031 pcg 1.1 <td></td>
1032 pcg 1.3 <td>
1033 pcg 1.4 <b></b> </td>
1034 pcg 1.1 </tr>
1035     <tr>
1036     <td colspan="4">
1037     More following... TREE or challenge.
1038     </td>
1039     </tr>
1040     </table>
1041    
1042     <h4>MESSAGE join_game</h4>
1043     NUMERIC TYPE (hex): 4403 SEND<table border="1">
1044     <tr>
1045     <th>NAME</th>
1046     <th>TYPE</th>
1047     <th>DEFAULT</th>
1048 pcg 1.3 <th>DEC-GUARD</th>
1049 pcg 1.1 </tr>
1050     <tr>
1051     <td colspan="4">
1052 pcg 1.9 Join a game. See join_room.
1053 pcg 1.1 </td>
1054     </tr>
1055     <tr>
1056 pcg 1.5 <td>channel</td>
1057     <td>U16</td>
1058 pcg 1.1 <td></td>
1059 pcg 1.3 <td>
1060 pcg 1.4 <b></b> </td>
1061 pcg 1.1 </tr>
1062     <tr>
1063     <td colspan="4">
1064     </td>
1065     </tr>
1066     <tr>
1067 pcg 1.5 <td>user</td>
1068     <td>user</td>
1069 pcg 1.1 <td></td>
1070 pcg 1.3 <td>
1071 pcg 1.4 <b></b> </td>
1072 pcg 1.1 </tr>
1073     <tr>
1074     <td colspan="4">
1075     </td>
1076     </tr>
1077     </table>
1078    
1079     <h4>MESSAGE part_game</h4>
1080     NUMERIC TYPE (hex): 4404 SEND<table border="1">
1081     <tr>
1082     <th>NAME</th>
1083     <th>TYPE</th>
1084     <th>DEFAULT</th>
1085 pcg 1.3 <th>DEC-GUARD</th>
1086 pcg 1.1 </tr>
1087     <tr>
1088     <td colspan="4">
1089 pcg 1.9 Leave (or kick as admin?) a certain user from a game.
1090 pcg 1.1 </td>
1091     </tr>
1092     <tr>
1093     <td>channel</td>
1094 pcg 1.3 <td>U16</td>
1095 pcg 1.1 <td></td>
1096 pcg 1.3 <td>
1097 pcg 1.4 <b></b> </td>
1098 pcg 1.1 </tr>
1099     <tr>
1100     <td colspan="4">
1101     </td>
1102     </tr>
1103     <tr>
1104     <td>name</td>
1105 pcg 1.3 <td>username</td>
1106 pcg 1.1 <td></td>
1107 pcg 1.3 <td>
1108 pcg 1.4 <b></b> </td>
1109 pcg 1.1 </tr>
1110     <tr>
1111     <td colspan="4">
1112     </td>
1113     </tr>
1114     </table>
1115    
1116     <h4>MESSAGE set_tree</h4>
1117     NUMERIC TYPE (hex): 4405 SEND<table border="1">
1118     <tr>
1119     <th>NAME</th>
1120     <th>TYPE</th>
1121     <th>DEFAULT</th>
1122 pcg 1.3 <th>DEC-GUARD</th>
1123 pcg 1.1 </tr>
1124     <tr>
1125     <td colspan="4">
1126 pcg 1.9 Upload a partial game tree to the server. This is used
1127     to send moves and even in-game comments to the server. For the comments,
1128     the server prepends the username and rank.
1129 pcg 1.1 </td>
1130     </tr>
1131     <tr>
1132     <td>channel</td>
1133 pcg 1.3 <td>U16</td>
1134 pcg 1.1 <td></td>
1135 pcg 1.3 <td>
1136 pcg 1.4 <b></b> </td>
1137 pcg 1.1 </tr>
1138     <tr>
1139     <td colspan="4">
1140     </td>
1141     </tr>
1142     <tr>
1143     <td>tree</td>
1144     <td>TREE</td>
1145     <td></td>
1146 pcg 1.3 <td>
1147 pcg 1.4 <b></b> </td>
1148 pcg 1.1 </tr>
1149     <tr>
1150     <td colspan="4">
1151     </td>
1152     </tr>
1153     </table>
1154    
1155     <h4>MESSAGE get_tree</h4>
1156     NUMERIC TYPE (hex): 4408 SEND<table border="1">
1157     <tr>
1158     <th>NAME</th>
1159     <th>TYPE</th>
1160     <th>DEFAULT</th>
1161 pcg 1.3 <th>DEC-GUARD</th>
1162 pcg 1.1 </tr>
1163     <tr>
1164     <td colspan="4">
1165 pcg 1.9 Request the game tree starting at a given node. This is used
1166     when the server only sends a partial tree (with end code "more").
1167 pcg 1.1 </td>
1168     </tr>
1169     <tr>
1170     <td>channel</td>
1171 pcg 1.3 <td>U16</td>
1172 pcg 1.1 <td></td>
1173 pcg 1.3 <td>
1174 pcg 1.4 <b></b> </td>
1175 pcg 1.1 </tr>
1176     <tr>
1177     <td colspan="4">
1178     </td>
1179     </tr>
1180     <tr>
1181     <td>node</td>
1182 pcg 1.3 <td>U32</td>
1183 pcg 1.1 <td></td>
1184 pcg 1.3 <td>
1185 pcg 1.4 <b></b> </td>
1186 pcg 1.1 </tr>
1187     <tr>
1188     <td colspan="4">
1189     </td>
1190     </tr>
1191     </table>
1192    
1193     <h4>MESSAGE claim_win</h4>
1194     NUMERIC TYPE (hex): 440c SEND<table border="1">
1195     <tr>
1196     <th>NAME</th>
1197     <th>TYPE</th>
1198     <th>DEFAULT</th>
1199 pcg 1.3 <th>DEC-GUARD</th>
1200 pcg 1.1 </tr>
1201     <tr>
1202     <td colspan="4">
1203 pcg 1.9 Unclear.
1204 pcg 1.1 </td>
1205     </tr>
1206     <tr>
1207     <td>channel</td>
1208 pcg 1.3 <td>U16</td>
1209 pcg 1.1 <td></td>
1210 pcg 1.3 <td>
1211 pcg 1.4 <b></b> </td>
1212 pcg 1.1 </tr>
1213     <tr>
1214     <td colspan="4">
1215     </td>
1216     </tr>
1217     <tr>
1218     <td>_byte</td>
1219 pcg 1.3 <td>U8 </td>
1220 pcg 1.1 <td></td>
1221 pcg 1.3 <td>
1222 pcg 1.4 <b></b> </td>
1223 pcg 1.1 </tr>
1224     <tr>
1225     <td colspan="4">
1226     Player colour maybe? Unclear.
1227     </td>
1228     </tr>
1229     </table>
1230    
1231     <h4>MESSAGE add_time</h4>
1232     NUMERIC TYPE (hex): 440d SEND<table border="1">
1233     <tr>
1234     <th>NAME</th>
1235     <th>TYPE</th>
1236     <th>DEFAULT</th>
1237 pcg 1.3 <th>DEC-GUARD</th>
1238 pcg 1.1 </tr>
1239     <tr>
1240     <td colspan="4">
1241 pcg 1.9 Not checked.
1242    
1243 pcg 1.1 </td>
1244     </tr>
1245     <tr>
1246     <td>channel</td>
1247 pcg 1.3 <td>U16</td>
1248 pcg 1.1 <td></td>
1249 pcg 1.3 <td>
1250 pcg 1.4 <b></b> </td>
1251 pcg 1.1 </tr>
1252     <tr>
1253     <td colspan="4">
1254     </td>
1255     </tr>
1256     <tr>
1257     <td>time</td>
1258 pcg 1.3 <td>U32</td>
1259 pcg 1.1 <td></td>
1260 pcg 1.3 <td>
1261 pcg 1.4 <b></b> </td>
1262 pcg 1.1 </tr>
1263     <tr>
1264     <td colspan="4">
1265     </td>
1266     </tr>
1267     <tr>
1268     <td>player</td>
1269 pcg 1.3 <td>U8</td>
1270 pcg 1.1 <td></td>
1271 pcg 1.3 <td>
1272 pcg 1.4 <b></b> </td>
1273 pcg 1.1 </tr>
1274     <tr>
1275     <td colspan="4">
1276     </td>
1277     </tr>
1278     </table>
1279    
1280     <h4>MESSAGE grant_undo</h4>
1281     NUMERIC TYPE (hex): 440f SEND<table border="1">
1282     <tr>
1283     <th>NAME</th>
1284     <th>TYPE</th>
1285     <th>DEFAULT</th>
1286 pcg 1.3 <th>DEC-GUARD</th>
1287 pcg 1.1 </tr>
1288     <tr>
1289     <td colspan="4">
1290 pcg 1.9 Can be send after a req_undo message was received to grant the undo.
1291 pcg 1.1 </td>
1292     </tr>
1293     <tr>
1294     <td>channel</td>
1295 pcg 1.3 <td>U16</td>
1296 pcg 1.1 <td></td>
1297 pcg 1.3 <td>
1298 pcg 1.4 <b></b> </td>
1299 pcg 1.1 </tr>
1300     <tr>
1301     <td colspan="4">
1302     </td>
1303     </tr>
1304     </table>
1305    
1306     <h4>MESSAGE resign_game</h4>
1307     NUMERIC TYPE (hex): 4410 SEND<table border="1">
1308     <tr>
1309     <th>NAME</th>
1310     <th>TYPE</th>
1311     <th>DEFAULT</th>
1312 pcg 1.3 <th>DEC-GUARD</th>
1313 pcg 1.1 </tr>
1314     <tr>
1315     <td colspan="4">
1316 pcg 1.9 Resign the game.
1317 pcg 1.1 </td>
1318     </tr>
1319     <tr>
1320     <td>channel</td>
1321 pcg 1.3 <td>U16</td>
1322 pcg 1.1 <td></td>
1323 pcg 1.3 <td>
1324 pcg 1.4 <b></b> </td>
1325 pcg 1.1 </tr>
1326     <tr>
1327     <td colspan="4">
1328     </td>
1329     </tr>
1330     <tr>
1331     <td>player</td>
1332 pcg 1.3 <td>U8</td>
1333 pcg 1.1 <td></td>
1334 pcg 1.3 <td>
1335 pcg 1.4 <b></b> </td>
1336 pcg 1.1 </tr>
1337     <tr>
1338     <td colspan="4">
1339     </td>
1340     </tr>
1341     </table>
1342    
1343     <h4>MESSAGE set_teacher</h4>
1344     NUMERIC TYPE (hex): 441a SEND<table border="1">
1345     <tr>
1346     <th>NAME</th>
1347     <th>TYPE</th>
1348     <th>DEFAULT</th>
1349 pcg 1.3 <th>DEC-GUARD</th>
1350 pcg 1.1 </tr>
1351     <tr>
1352     <td colspan="4">
1353 pcg 1.9 Change the teacher to somebody else (or possibly yourself == take it).
1354 pcg 1.1 </td>
1355     </tr>
1356     <tr>
1357     <td>channel</td>
1358 pcg 1.3 <td>U16</td>
1359 pcg 1.1 <td></td>
1360 pcg 1.3 <td>
1361 pcg 1.4 <b></b> </td>
1362 pcg 1.1 </tr>
1363     <tr>
1364     <td colspan="4">
1365     </td>
1366     </tr>
1367     <tr>
1368     <td>name</td>
1369 pcg 1.3 <td>username</td>
1370 pcg 1.1 <td></td>
1371 pcg 1.3 <td>
1372 pcg 1.4 <b></b> </td>
1373 pcg 1.1 </tr>
1374     <tr>
1375     <td colspan="4">
1376     </td>
1377     </tr>
1378     </table>
1379    
1380     <h4>MESSAGE add_user</h4>
1381     NUMERIC TYPE (hex): 4422 SEND<table border="1">
1382     <tr>
1383     <th>NAME</th>
1384     <th>TYPE</th>
1385     <th>DEFAULT</th>
1386 pcg 1.3 <th>DEC-GUARD</th>
1387 pcg 1.1 </tr>
1388     <tr>
1389     <td colspan="4">
1390 pcg 1.9 Unclear. Maybe allow users to talk? No idea, really.
1391    
1392 pcg 1.1 </td>
1393     </tr>
1394     <tr>
1395     <td>channel</td>
1396 pcg 1.3 <td>U16</td>
1397 pcg 1.1 <td></td>
1398 pcg 1.3 <td>
1399 pcg 1.4 <b></b> </td>
1400 pcg 1.1 </tr>
1401     <tr>
1402     <td colspan="4">
1403     </td>
1404     </tr>
1405     <tr>
1406     <td>othername</td>
1407 pcg 1.3 <td>username</td>
1408 pcg 1.1 <td></td>
1409 pcg 1.3 <td>
1410 pcg 1.4 <b></b> </td>
1411 pcg 1.1 </tr>
1412     <tr>
1413     <td colspan="4">
1414     </td>
1415     </tr>
1416     <tr>
1417     <td>name</td>
1418 pcg 1.3 <td>username</td>
1419 pcg 1.1 <td></td>
1420 pcg 1.3 <td>
1421 pcg 1.4 <b></b> </td>
1422 pcg 1.1 </tr>
1423     <tr>
1424     <td colspan="4">; # gives user access to the game (to what? ;)
1425     </td>
1426     </tr>
1427     </table>
1428    
1429     <h4>MESSAGE set_privacy</h4>
1430     NUMERIC TYPE (hex): 4423 SEND<table border="1">
1431     <tr>
1432     <th>NAME</th>
1433     <th>TYPE</th>
1434     <th>DEFAULT</th>
1435 pcg 1.3 <th>DEC-GUARD</th>
1436 pcg 1.1 </tr>
1437     <tr>
1438     <td colspan="4">
1439 pcg 1.9 Probably sets the "quiet" flag. Not checked.
1440 pcg 1.1 </td>
1441     </tr>
1442     <tr>
1443     <td>channel</td>
1444 pcg 1.3 <td>U16</td>
1445 pcg 1.1 <td></td>
1446 pcg 1.3 <td>
1447 pcg 1.4 <b></b> </td>
1448 pcg 1.1 </tr>
1449     <tr>
1450     <td colspan="4">
1451     </td>
1452     </tr>
1453     <tr>
1454     <td>private</td>
1455 pcg 1.3 <td>U8</td>
1456 pcg 1.1 <td></td>
1457 pcg 1.3 <td>
1458 pcg 1.4 <b></b> </td>
1459 pcg 1.1 </tr>
1460     <tr>
1461     <td colspan="4">
1462     </td>
1463     </tr>
1464     </table>
1465    
1466     <h4>MESSAGE reject_chal</h4>
1467     NUMERIC TYPE (hex): 4429 SEND<table border="1">
1468     <tr>
1469     <th>NAME</th>
1470     <th>TYPE</th>
1471     <th>DEFAULT</th>
1472 pcg 1.3 <th>DEC-GUARD</th>
1473 pcg 1.1 </tr>
1474     <tr>
1475     <td colspan="4">
1476 pcg 1.9 Reject a challenge from a given user. Not checked.
1477    
1478 pcg 1.1 </td>
1479     </tr>
1480     <tr>
1481     <td>channel</td>
1482 pcg 1.3 <td>U16</td>
1483 pcg 1.1 <td></td>
1484 pcg 1.3 <td>
1485 pcg 1.4 <b></b> </td>
1486 pcg 1.1 </tr>
1487     <tr>
1488     <td colspan="4">
1489     </td>
1490     </tr>
1491     <tr>
1492     <td>name</td>
1493 pcg 1.3 <td>username</td>
1494 pcg 1.1 <td></td>
1495 pcg 1.3 <td>
1496 pcg 1.4 <b></b> </td>
1497 pcg 1.1 </tr>
1498     <tr>
1499     <td colspan="4">
1500     </td>
1501     </tr>
1502     </table>
1503    
1504     <h4>MESSAGE req_result</h4>
1505     NUMERIC TYPE (hex): 4433 SEND<table border="1">
1506     <tr>
1507     <th>NAME</th>
1508     <th>TYPE</th>
1509     <th>DEFAULT</th>
1510 pcg 1.3 <th>DEC-GUARD</th>
1511 pcg 1.1 </tr>
1512     <tr>
1513     <td colspan="4">
1514 pcg 1.9 I forgot.
1515    
1516 pcg 1.1 </td>
1517     </tr>
1518     <tr>
1519     <td>channel</td>
1520 pcg 1.3 <td>U16</td>
1521 pcg 1.1 <td></td>
1522 pcg 1.3 <td>
1523 pcg 1.4 <b></b> </td>
1524 pcg 1.1 </tr>
1525     <tr>
1526     <td colspan="4">
1527     </td>
1528     </tr>
1529     </table>
1530    
1531 pcg 1.3 <h2>Structs mainly used in receive messages</h2>
1532 pcg 1.1
1533 pcg 1.3 <h4>STRUCTURE challenge_defaults</h4>
1534 pcg 1.1 <table border="1">
1535     <tr>
1536     <th>NAME</th>
1537     <th>TYPE</th>
1538     <th>DEFAULT</th>
1539 pcg 1.3 <th>DEC-GUARD</th>
1540 pcg 1.1 </tr>
1541     <tr>
1542     <td colspan="4">
1543 pcg 1.9 Send soon after log-in to set the defaults for game challenges.
1544 pcg 1.1 </td>
1545     </tr>
1546     <tr>
1547     <td>gametype</td>
1548 pcg 1.3 <td>U32</td>
1549 pcg 1.1 <td></td>
1550 pcg 1.3 <td>
1551 pcg 1.4 <b></b> </td>
1552 pcg 1.1 </tr>
1553     <tr>
1554     <td colspan="4">
1555     </td>
1556     </tr>
1557     <tr>
1558     <td>size</td>
1559 pcg 1.3 <td>U32</td>
1560 pcg 1.1 <td></td>
1561 pcg 1.3 <td>
1562 pcg 1.4 <b></b> </td>
1563 pcg 1.1 </tr>
1564     <tr>
1565     <td colspan="4">
1566     </td>
1567     </tr>
1568     <tr>
1569     <td>timesys</td>
1570 pcg 1.3 <td>U32</td>
1571 pcg 1.1 <td></td>
1572 pcg 1.3 <td>
1573 pcg 1.4 <b></b> </td>
1574 pcg 1.1 </tr>
1575     <tr>
1576     <td colspan="4">
1577     </td>
1578     </tr>
1579     <tr>
1580     <td>time</td>
1581 pcg 1.3 <td>U32</td>
1582 pcg 1.1 <td></td>
1583 pcg 1.3 <td>
1584 pcg 1.4 <b></b> </td>
1585 pcg 1.1 </tr>
1586     <tr>
1587     <td colspan="4">
1588     </td>
1589     </tr>
1590     <tr>
1591     <td>byo_time</td>
1592 pcg 1.3 <td>U32</td>
1593 pcg 1.1 <td></td>
1594 pcg 1.3 <td>
1595 pcg 1.4 <b></b> </td>
1596 pcg 1.1 </tr>
1597     <tr>
1598     <td colspan="4">
1599     </td>
1600     </tr>
1601     <tr>
1602     <td>byo_periods</td>
1603 pcg 1.3 <td>U32</td>
1604 pcg 1.1 <td></td>
1605 pcg 1.3 <td>
1606 pcg 1.4 <b></b> </td>
1607 pcg 1.1 </tr>
1608     <tr>
1609     <td colspan="4">
1610     </td>
1611     </tr>
1612     <tr>
1613     <td>can_time</td>
1614 pcg 1.3 <td>U32</td>
1615 pcg 1.1 <td></td>
1616 pcg 1.3 <td>
1617 pcg 1.4 <b></b> </td>
1618 pcg 1.1 </tr>
1619     <tr>
1620     <td colspan="4">
1621     </td>
1622     </tr>
1623     <tr>
1624     <td>can_stones</td>
1625 pcg 1.3 <td>U32</td>
1626 pcg 1.1 <td></td>
1627 pcg 1.3 <td>
1628 pcg 1.4 <b></b> </td>
1629 pcg 1.1 </tr>
1630     <tr>
1631 pcg 1.3 <td colspan="4">
1632 pcg 1.1 </td>
1633     </tr>
1634     </table>
1635    
1636 pcg 1.3 <h4>STRUCTURE challenge</h4>
1637     CLASS: KGS::Challenge<br />
1638 pcg 1.1 <table border="1">
1639     <tr>
1640     <th>NAME</th>
1641     <th>TYPE</th>
1642     <th>DEFAULT</th>
1643 pcg 1.3 <th>DEC-GUARD</th>
1644 pcg 1.1 </tr>
1645     <tr>
1646     <td colspan="4">
1647 pcg 1.9 A challenge.
1648    
1649 pcg 1.1 </td>
1650     </tr>
1651     <tr>
1652     <td>user1</td>
1653     <td>user</td>
1654     <td></td>
1655 pcg 1.3 <td>
1656 pcg 1.4 <b></b> </td>
1657 pcg 1.1 </tr>
1658     <tr>
1659     <td colspan="4">
1660     </td>
1661     </tr>
1662     <tr>
1663     <td>user2</td>
1664     <td>user</td>
1665     <td></td>
1666 pcg 1.3 <td>
1667 pcg 1.4 <b></b> </td>
1668 pcg 1.1 </tr>
1669     <tr>
1670     <td colspan="4">
1671     </td>
1672     </tr>
1673     <tr>
1674     <td>gametype</td>
1675 pcg 1.3 <td>U32</td>
1676 pcg 1.1 <td></td>
1677 pcg 1.3 <td>
1678 pcg 1.4 <b></b> </td>
1679 pcg 1.1 </tr>
1680     <tr>
1681     <td colspan="4">
1682     </td>
1683     </tr>
1684     <tr>
1685     <td>rules</td>
1686     <td>rules</td>
1687     <td></td>
1688 pcg 1.3 <td>
1689 pcg 1.4 <b></b> </td>
1690 pcg 1.1 </tr>
1691     <tr>
1692     <td colspan="4">
1693     Maybe the rules" are in TREE format. I forgot.
1694     </td>
1695     </tr>
1696     </table>
1697    
1698 pcg 1.3 <h4>STRUCTURE game</h4>
1699     CLASS: KGS::Game<br />
1700 pcg 1.1 <table border="1">
1701     <tr>
1702     <th>NAME</th>
1703     <th>TYPE</th>
1704     <th>DEFAULT</th>
1705 pcg 1.3 <th>DEC-GUARD</th>
1706 pcg 1.1 </tr>
1707     <tr>
1708     <td colspan="4">
1709 pcg 1.9 Basic information about a game. Used in rooms for the gamelist and
1710     in games to detect when a game is saved, changed type (e.g. R =&gt; D)
1711     etc.
1712    
1713 pcg 1.1 </td>
1714     </tr>
1715     <tr>
1716     <td>channel</td>
1717 pcg 1.3 <td>U16</td>
1718 pcg 1.1 <td></td>
1719 pcg 1.3 <td>
1720 pcg 1.4 <b></b> </td>
1721 pcg 1.1 </tr>
1722     <tr>
1723     <td colspan="4">
1724     </td>
1725     </tr>
1726     <tr>
1727 pcg 1.3 <td>type</td>
1728     <td>U32</td>
1729 pcg 1.1 <td></td>
1730 pcg 1.3 <td>
1731 pcg 1.4 <b></b> </td>
1732 pcg 1.1 </tr>
1733     <tr>
1734     <td colspan="4">
1735     </td>
1736     </tr>
1737     <tr>
1738     <td>user1</td>
1739     <td>user</td>
1740     <td></td>
1741 pcg 1.3 <td>
1742 pcg 1.4 <b></b> </td>
1743 pcg 1.1 </tr>
1744     <tr>
1745     <td colspan="4">
1746     White
1747     </td>
1748     </tr>
1749     <tr>
1750     <td>user2</td>
1751     <td>user</td>
1752     <td></td>
1753 pcg 1.3 <td>
1754 pcg 1.4 <b></b> </td>
1755 pcg 1.1 </tr>
1756     <tr>
1757     <td colspan="4">
1758     Black
1759     </td>
1760     </tr>
1761     <tr>
1762     <td>user3</td>
1763     <td>user</td>
1764     <td></td>
1765 pcg 1.3 <td>
1766 pcg 1.4 <b></b> </td>
1767 pcg 1.1 </tr>
1768     <tr>
1769     <td colspan="4">
1770     Owner
1771     </td>
1772     </tr>
1773     <tr>
1774     <td>size</td>
1775 pcg 1.3 <td>U32</td>
1776 pcg 1.1 <td></td>
1777 pcg 1.3 <td>
1778 pcg 1.4 <b></b> </td>
1779 pcg 1.1 </tr>
1780     <tr>
1781     <td colspan="4">
1782     </td>
1783     </tr>
1784     <tr>
1785     <td>handicap</td>
1786     <td>I32</td>
1787     <td></td>
1788 pcg 1.3 <td>
1789 pcg 1.4 <b></b> </td>
1790 pcg 1.1 </tr>
1791     <tr>
1792     <td colspan="4">
1793     &lt; 0 not fully setup
1794     </td>
1795     </tr>
1796     <tr>
1797     <td>komi</td>
1798 pcg 1.6 <td>komi32</td>
1799 pcg 1.1 <td></td>
1800 pcg 1.3 <td>
1801 pcg 1.4 <b></b> </td>
1802 pcg 1.1 </tr>
1803     <tr>
1804     <td colspan="4">
1805     </td>
1806     </tr>
1807     <tr>
1808     <td>moves</td>
1809 pcg 1.3 <td>U16</td>
1810 pcg 1.1 <td></td>
1811 pcg 1.3 <td>
1812 pcg 1.4 <b></b> </td>
1813 pcg 1.1 </tr>
1814     <tr>
1815     <td colspan="4">
1816     </td>
1817     </tr>
1818     <tr>
1819     <td>flags</td>
1820 pcg 1.3 <td>U16</td>
1821 pcg 1.1 <td></td>
1822 pcg 1.3 <td>
1823 pcg 1.4 <b></b> </td>
1824 pcg 1.1 </tr>
1825     <tr>
1826     <td colspan="4">
1827     </td>
1828     </tr>
1829     <tr>
1830     <td>observers</td>
1831 pcg 1.3 <td>U32</td>
1832 pcg 1.1 <td></td>
1833 pcg 1.3 <td>
1834 pcg 1.4 <b></b> </td>
1835 pcg 1.1 </tr>
1836     <tr>
1837     <td colspan="4">
1838     </td>
1839     </tr>
1840     <tr>
1841     <td>saved</td>
1842 pcg 1.3 <td>flag</td>
1843 pcg 1.1 <td></td>
1844 pcg 1.3 <td>
1845 pcg 1.4 <b></b> </td>
1846 pcg 1.1 </tr>
1847     <tr>
1848     <td colspan="4">
1849     </td>
1850     </tr>
1851     <tr>
1852     <td>notes</td>
1853     <td>STRING</td>
1854     <td></td>
1855 pcg 1.3 <td>
1856 pcg 1.4 <b>handicap</b> &lt; 0</td>
1857 pcg 1.1 </tr>
1858     <tr>
1859     <td colspan="4">
1860     </td>
1861     </tr>
1862     </table>
1863    
1864 pcg 1.3 <h4>STRUCTURE room_obs</h4>
1865 pcg 1.1 <table border="1">
1866     <tr>
1867     <th>NAME</th>
1868     <th>TYPE</th>
1869     <th>DEFAULT</th>
1870 pcg 1.3 <th>DEC-GUARD</th>
1871 pcg 1.1 </tr>
1872     <tr>
1873     <td colspan="4">
1874 pcg 1.9 Obsolete.
1875    
1876 pcg 1.1 </td>
1877     </tr>
1878     <tr>
1879     <td>name</td>
1880 pcg 1.3 <td>roomname</td>
1881 pcg 1.1 <td></td>
1882 pcg 1.3 <td>
1883 pcg 1.4 <b></b> </td>
1884 pcg 1.1 </tr>
1885     <tr>
1886     <td colspan="4">
1887     </td>
1888     </tr>
1889     <tr>
1890     <td>channel</td>
1891 pcg 1.3 <td>U16</td>
1892 pcg 1.1 <td></td>
1893 pcg 1.3 <td>
1894 pcg 1.4 <b></b> </td>
1895 pcg 1.1 </tr>
1896     <tr>
1897     <td colspan="4">
1898     </td>
1899     </tr>
1900     <tr>
1901     <td>flags</td>
1902 pcg 1.3 <td>U32</td>
1903 pcg 1.1 <td></td>
1904 pcg 1.3 <td>
1905 pcg 1.4 <b></b> </td>
1906 pcg 1.1 </tr>
1907     <tr>
1908     <td colspan="4">
1909     </td>
1910     </tr>
1911     <tr>
1912     <td>users</td>
1913 pcg 1.3 <td>U32</td>
1914 pcg 1.1 <td></td>
1915 pcg 1.3 <td>
1916 pcg 1.4 <b></b> </td>
1917 pcg 1.1 </tr>
1918     <tr>
1919 pcg 1.4 <td colspan="4">
1920 pcg 1.1 </td>
1921     </tr>
1922     </table>
1923    
1924 pcg 1.3 <h4>STRUCTURE room</h4>
1925     CLASS: KGS::Room<br />
1926 pcg 1.1 <table border="1">
1927     <tr>
1928     <th>NAME</th>
1929     <th>TYPE</th>
1930     <th>DEFAULT</th>
1931 pcg 1.3 <th>DEC-GUARD</th>
1932 pcg 1.1 </tr>
1933     <tr>
1934     <td colspan="4">
1935     </td>
1936     </tr>
1937     <tr>
1938     <td>channel</td>
1939 pcg 1.3 <td>U16</td>
1940 pcg 1.1 <td></td>
1941 pcg 1.3 <td>
1942 pcg 1.4 <b></b> </td>
1943 pcg 1.1 </tr>
1944     <tr>
1945     <td colspan="4">
1946     </td>
1947     </tr>
1948     <tr>
1949     <td>flags</td>
1950 pcg 1.3 <td>U8</td>
1951 pcg 1.1 <td></td>
1952 pcg 1.3 <td>
1953 pcg 1.4 <b></b> </td>
1954 pcg 1.1 </tr>
1955     <tr>
1956     <td colspan="4">
1957     </td>
1958     </tr>
1959     <tr>
1960     <td>group</td>
1961 pcg 1.3 <td>U8</td>
1962 pcg 1.1 <td></td>
1963 pcg 1.3 <td>
1964 pcg 1.4 <b></b> </td>
1965 pcg 1.1 </tr>
1966     <tr>
1967     <td colspan="4">
1968     </td>
1969     </tr>
1970     <tr>
1971     <td>users</td>
1972 pcg 1.3 <td>U16</td>
1973 pcg 1.1 <td></td>
1974 pcg 1.3 <td>
1975 pcg 1.4 <b></b> </td>
1976 pcg 1.1 </tr>
1977     <tr>
1978     <td colspan="4">
1979     </td>
1980     </tr>
1981     <tr>
1982     <td>games</td>
1983 pcg 1.3 <td>U16</td>
1984 pcg 1.1 <td></td>
1985 pcg 1.3 <td>
1986 pcg 1.4 <b></b> </td>
1987 pcg 1.1 </tr>
1988     <tr>
1989     <td colspan="4">
1990     </td>
1991     </tr>
1992     <tr>
1993     <td>name</td>
1994     <td>STRING</td>
1995     <td></td>
1996 pcg 1.3 <td>
1997 pcg 1.4 <b></b> </td>
1998 pcg 1.1 </tr>
1999     <tr>
2000 pcg 1.4 <td colspan="4">
2001 pcg 1.1 </td>
2002     </tr>
2003     </table>
2004    
2005 pcg 1.10 <h4>STRUCTURE scorevalues</h4>
2006 pcg 1.3 CLASS: KGS::Score<br />
2007 pcg 1.1 <table border="1">
2008     <tr>
2009     <th>NAME</th>
2010     <th>TYPE</th>
2011     <th>DEFAULT</th>
2012 pcg 1.3 <th>DEC-GUARD</th>
2013 pcg 1.1 </tr>
2014     <tr>
2015     <td colspan="4">
2016     </td>
2017     </tr>
2018     <tr>
2019     <td>score</td>
2020 pcg 1.3 <td>score</td>
2021 pcg 1.1 <td></td>
2022 pcg 1.3 <td>
2023 pcg 1.4 <b></b> </td>
2024 pcg 1.1 </tr>
2025     <tr>
2026     <td colspan="4">
2027     </td>
2028     </tr>
2029     <tr>
2030     <td>territory</td>
2031 pcg 1.3 <td>U32</td>
2032 pcg 1.1 <td></td>
2033 pcg 1.3 <td>
2034 pcg 1.4 <b></b> </td>
2035 pcg 1.1 </tr>
2036     <tr>
2037     <td colspan="4">
2038     </td>
2039     </tr>
2040     <tr>
2041     <td>captures</td>
2042 pcg 1.3 <td>U32</td>
2043 pcg 1.1 <td></td>
2044 pcg 1.3 <td>
2045 pcg 1.4 <b></b> </td>
2046 pcg 1.1 </tr>
2047     <tr>
2048     <td colspan="4">
2049     </td>
2050     </tr>
2051     <tr>
2052     <td>i3</td>
2053 pcg 1.3 <td>U32</td>
2054 pcg 1.1 <td></td>
2055 pcg 1.3 <td>
2056 pcg 1.4 <b></b> </td>
2057 pcg 1.1 </tr>
2058     <tr>
2059     <td colspan="4">
2060     </td>
2061     </tr>
2062     <tr>
2063     <td>f2</td>
2064 pcg 1.3 <td>U32</td>
2065 pcg 1.1 <td></td>
2066 pcg 1.3 <td>
2067 pcg 1.4 <b></b> </td>
2068 pcg 1.1 </tr>
2069     <tr>
2070     <td colspan="4">
2071     </td>
2072     </tr>
2073     <tr>
2074     <td>komi</td>
2075 pcg 1.6 <td>komi32</td>
2076 pcg 1.1 <td></td>
2077 pcg 1.3 <td>
2078 pcg 1.4 <b></b> </td>
2079 pcg 1.1 </tr>
2080     <tr>
2081     <td colspan="4">
2082     </td>
2083     </tr>
2084     <tr>
2085     <td>i4</td>
2086 pcg 1.3 <td>U32</td>
2087 pcg 1.1 <td></td>
2088 pcg 1.3 <td>
2089 pcg 1.4 <b></b> </td>
2090 pcg 1.1 </tr>
2091     <tr>
2092 pcg 1.4 <td colspan="4">
2093 pcg 1.3 Apparently the i3, f2, i4 are zero.
2094 pcg 1.1 </td>
2095     </tr>
2096     </table>
2097    
2098     <h2>Receive messages</h2>
2099    
2100     <h4>MESSAGE login</h4>
2101     NUMERIC TYPE (hex): 0001 RECV<table border="1">
2102     <tr>
2103     <th>NAME</th>
2104     <th>TYPE</th>
2105     <th>DEFAULT</th>
2106 pcg 1.3 <th>DEC-GUARD</th>
2107 pcg 1.1 </tr>
2108     <tr>
2109     <td colspan="4">
2110     </td>
2111     </tr>
2112     <tr>
2113     <td>result</td>
2114     <td>CONSTANT</td>
2115 pcg 1.3 <td>"login ok"</td>
2116     <td>
2117 pcg 1.4 <b></b> </td>
2118 pcg 1.1 </tr>
2119     <tr>
2120     <td colspan="4">
2121     </td>
2122     </tr>
2123     <tr>
2124     <td>success</td>
2125     <td>CONSTANT</td>
2126     <td>1</td>
2127 pcg 1.3 <td>
2128 pcg 1.4 <b></b> </td>
2129 pcg 1.1 </tr>
2130     <tr>
2131     <td colspan="4">
2132     </td>
2133     </tr>
2134     </table>
2135    
2136     <h4>MESSAGE login</h4>
2137     NUMERIC TYPE (hex): 0002 RECV<table border="1">
2138     <tr>
2139     <th>NAME</th>
2140     <th>TYPE</th>
2141     <th>DEFAULT</th>
2142 pcg 1.3 <th>DEC-GUARD</th>
2143 pcg 1.1 </tr>
2144     <tr>
2145     <td colspan="4">
2146     </td>
2147     </tr>
2148     <tr>
2149     <td>result</td>
2150     <td>CONSTANT</td>
2151 pcg 1.3 <td>"guest login ok"</td>
2152     <td>
2153 pcg 1.4 <b></b> </td>
2154 pcg 1.1 </tr>
2155     <tr>
2156     <td colspan="4">
2157     </td>
2158     </tr>
2159     <tr>
2160     <td>success</td>
2161     <td>CONSTANT</td>
2162     <td>1</td>
2163 pcg 1.3 <td>
2164 pcg 1.4 <b></b> </td>
2165 pcg 1.1 </tr>
2166     <tr>
2167     <td colspan="4">
2168     </td>
2169     </tr>
2170     </table>
2171    
2172     <h4>MESSAGE login</h4>
2173     NUMERIC TYPE (hex): 0003 RECV<table border="1">
2174     <tr>
2175     <th>NAME</th>
2176     <th>TYPE</th>
2177     <th>DEFAULT</th>
2178 pcg 1.3 <th>DEC-GUARD</th>
2179 pcg 1.1 </tr>
2180     <tr>
2181     <td colspan="4">
2182     </td>
2183     </tr>
2184     <tr>
2185     <td>result</td>
2186     <td>CONSTANT</td>
2187 pcg 1.3 <td>"login error 3"</td>
2188     <td>
2189 pcg 1.4 <b></b> </td>
2190 pcg 1.1 </tr>
2191     <tr>
2192     <td colspan="4">
2193     ** maybe more following? **
2194     </td>
2195     </tr>
2196     </table>
2197    
2198     <h4>MESSAGE login</h4>
2199     NUMERIC TYPE (hex): 0004 RECV<table border="1">
2200     <tr>
2201     <th>NAME</th>
2202     <th>TYPE</th>
2203     <th>DEFAULT</th>
2204 pcg 1.3 <th>DEC-GUARD</th>
2205 pcg 1.1 </tr>
2206     <tr>
2207     <td colspan="4">
2208     </td>
2209     </tr>
2210     <tr>
2211     <td>result</td>
2212     <td>CONSTANT</td>
2213 pcg 1.3 <td>"wrong password"</td>
2214     <td>
2215 pcg 1.4 <b></b> </td>
2216 pcg 1.1 </tr>
2217     <tr>
2218     <td colspan="4">
2219     ** maybe more following? **
2220     </td>
2221     </tr>
2222     </table>
2223    
2224     <h4>MESSAGE login</h4>
2225     NUMERIC TYPE (hex): 0005 RECV<table border="1">
2226     <tr>
2227     <th>NAME</th>
2228     <th>TYPE</th>
2229     <th>DEFAULT</th>
2230 pcg 1.3 <th>DEC-GUARD</th>
2231 pcg 1.1 </tr>
2232     <tr>
2233     <td colspan="4">
2234     </td>
2235     </tr>
2236     <tr>
2237     <td>result</td>
2238     <td>CONSTANT</td>
2239 pcg 1.3 <td>"user unknown"</td>
2240     <td>
2241 pcg 1.4 <b></b> </td>
2242 pcg 1.1 </tr>
2243     <tr>
2244     <td colspan="4">
2245     ** maybe more following? **
2246     </td>
2247     </tr>
2248     </table>
2249    
2250     <h4>MESSAGE login</h4>
2251     NUMERIC TYPE (hex): 0006 RECV<table border="1">
2252     <tr>
2253     <th>NAME</th>
2254     <th>TYPE</th>
2255     <th>DEFAULT</th>
2256 pcg 1.3 <th>DEC-GUARD</th>
2257 pcg 1.1 </tr>
2258     <tr>
2259     <td colspan="4">
2260     </td>
2261     </tr>
2262     <tr>
2263     <td>result</td>
2264     <td>CONSTANT</td>
2265 pcg 1.3 <td>"user exists"</td>
2266     <td>
2267 pcg 1.4 <b></b> </td>
2268 pcg 1.1 </tr>
2269     <tr>
2270     <td colspan="4">
2271     ** maybe more following? **
2272     </td>
2273     </tr>
2274     </table>
2275    
2276     <h4>MESSAGE login</h4>
2277     NUMERIC TYPE (hex): 0018 RECV<table border="1">
2278     <tr>
2279     <th>NAME</th>
2280     <th>TYPE</th>
2281     <th>DEFAULT</th>
2282 pcg 1.3 <th>DEC-GUARD</th>
2283 pcg 1.1 </tr>
2284     <tr>
2285     <td colspan="4">
2286     </td>
2287     </tr>
2288     <tr>
2289     <td>result</td>
2290     <td>CONSTANT</td>
2291 pcg 1.3 <td>"login error 18"</td>
2292     <td>
2293 pcg 1.4 <b></b> </td>
2294 pcg 1.1 </tr>
2295     <tr>
2296     <td colspan="4">
2297     ** maybe more following? **
2298     </td>
2299     </tr>
2300     </table>
2301    
2302     <h4>MESSAGE login</h4>
2303     NUMERIC TYPE (hex): 0022 RECV<table border="1">
2304     <tr>
2305     <th>NAME</th>
2306     <th>TYPE</th>
2307     <th>DEFAULT</th>
2308 pcg 1.3 <th>DEC-GUARD</th>
2309 pcg 1.1 </tr>
2310     <tr>
2311     <td colspan="4">
2312     </td>
2313     </tr>
2314     <tr>
2315     <td colspan="4">
2316     </td>
2317     </tr>
2318     <tr>
2319     <td>result</td>
2320     <td>CONSTANT</td>
2321 pcg 1.3 <td>"user or ip blocked"</td>
2322     <td>
2323 pcg 1.4 <b></b> </td>
2324 pcg 1.1 </tr>
2325     <tr>
2326     <td colspan="4">
2327     </td>
2328     </tr>
2329     <tr>
2330     <td>reason</td>
2331     <td>STRING</td>
2332     <td></td>
2333 pcg 1.3 <td>
2334 pcg 1.4 <b></b> </td>
2335 pcg 1.1 </tr>
2336     <tr>
2337     <td colspan="4">
2338     </td>
2339     </tr>
2340     </table>
2341    
2342     <h4>MESSAGE msg_chat</h4>
2343     NUMERIC TYPE (hex): 0013 RECV<table border="1">
2344     <tr>
2345     <th>NAME</th>
2346     <th>TYPE</th>
2347     <th>DEFAULT</th>
2348 pcg 1.3 <th>DEC-GUARD</th>
2349 pcg 1.1 </tr>
2350     <tr>
2351     <td colspan="4">
2352     </td>
2353     </tr>
2354     <tr>
2355     <td>user1</td>
2356 pcg 1.3 <td>username</td>
2357 pcg 1.1 <td></td>
2358 pcg 1.3 <td>
2359 pcg 1.4 <b></b> </td>
2360 pcg 1.1 </tr>
2361     <tr>
2362     <td colspan="4">
2363     </td>
2364     </tr>
2365     <tr>
2366     <td>user2</td>
2367 pcg 1.3 <td>username</td>
2368 pcg 1.1 <td></td>
2369 pcg 1.3 <td>
2370 pcg 1.4 <b></b> </td>
2371 pcg 1.1 </tr>
2372     <tr>
2373     <td colspan="4">
2374     </td>
2375     </tr>
2376     <tr>
2377     <td>message</td>
2378     <td>STRING</td>
2379     <td></td>
2380 pcg 1.3 <td>
2381 pcg 1.4 <b></b> </td>
2382 pcg 1.1 </tr>
2383     <tr>
2384     <td colspan="4">
2385     </td>
2386     </tr>
2387     </table>
2388    
2389     <h4>MESSAGE stats</h4>
2390     NUMERIC TYPE (hex): 0015 RECV<table border="1">
2391     <tr>
2392     <th>NAME</th>
2393     <th>TYPE</th>
2394     <th>DEFAULT</th>
2395 pcg 1.3 <th>DEC-GUARD</th>
2396 pcg 1.1 </tr>
2397     <tr>
2398     <td colspan="4">
2399     </td>
2400     </tr>
2401     <tr>
2402     <td>ver_major</td>
2403 pcg 1.3 <td>U16</td>
2404 pcg 1.1 <td></td>
2405 pcg 1.3 <td>
2406 pcg 1.4 <b></b> </td>
2407 pcg 1.1 </tr>
2408     <tr>
2409     <td colspan="4">
2410     </td>
2411     </tr>
2412     <tr>
2413     <td>ver_minor</td>
2414 pcg 1.3 <td>U16</td>
2415 pcg 1.1 <td></td>
2416 pcg 1.3 <td>
2417 pcg 1.4 <b></b> </td>
2418 pcg 1.1 </tr>
2419     <tr>
2420     <td colspan="4">
2421     </td>
2422     </tr>
2423     <tr>
2424     <td>ver_micro</td>
2425 pcg 1.3 <td>U16</td>
2426 pcg 1.1 <td></td>
2427 pcg 1.3 <td>
2428 pcg 1.4 <b></b> </td>
2429 pcg 1.1 </tr>
2430     <tr>
2431     <td colspan="4">
2432     </td>
2433     </tr>
2434     <tr>
2435     <td>boot_time</td>
2436 pcg 1.3 <td>U64</td>
2437 pcg 1.1 <td></td>
2438 pcg 1.3 <td>
2439 pcg 1.4 <b></b> </td>
2440 pcg 1.1 </tr>
2441     <tr>
2442     <td colspan="4">
2443     </td>
2444     </tr>
2445     <tr>
2446     <td>users_cur</td>
2447 pcg 1.3 <td>U32</td>
2448 pcg 1.1 <td></td>
2449 pcg 1.3 <td>
2450 pcg 1.4 <b></b> </td>
2451 pcg 1.1 </tr>
2452     <tr>
2453     <td colspan="4">
2454     </td>
2455     </tr>
2456     <tr>
2457     <td>users_max</td>
2458 pcg 1.3 <td>U32</td>
2459 pcg 1.1 <td></td>
2460 pcg 1.3 <td>
2461 pcg 1.4 <b></b> </td>
2462 pcg 1.1 </tr>
2463     <tr>
2464     <td colspan="4">
2465     </td>
2466     </tr>
2467     <tr>
2468     <td>users_lim</td>
2469 pcg 1.3 <td>U32</td>
2470 pcg 1.1 <td></td>
2471 pcg 1.3 <td>
2472 pcg 1.4 <b></b> </td>
2473 pcg 1.1 </tr>
2474     <tr>
2475     <td colspan="4">
2476     </td>
2477     </tr>
2478     <tr>
2479     <td>accts_cur</td>
2480 pcg 1.3 <td>U32</td>
2481 pcg 1.1 <td></td>
2482 pcg 1.3 <td>
2483 pcg 1.4 <b></b> </td>
2484 pcg 1.1 </tr>
2485     <tr>
2486     <td colspan="4">
2487     </td>
2488     </tr>
2489     <tr>
2490     <td>accts_max</td>
2491 pcg 1.3 <td>U32</td>
2492 pcg 1.1 <td></td>
2493 pcg 1.3 <td>
2494 pcg 1.4 <b></b> </td>
2495 pcg 1.1 </tr>
2496     <tr>
2497     <td colspan="4">
2498     </td>
2499     </tr>
2500     <tr>
2501     <td>unknown1</td>
2502 pcg 1.3 <td>U32</td>
2503 pcg 1.1 <td></td>
2504 pcg 1.3 <td>
2505 pcg 1.4 <b></b> </td>
2506 pcg 1.1 </tr>
2507     <tr>
2508     <td colspan="4">
2509     </td>
2510     </tr>
2511     <tr>
2512     <td>work_max</td>
2513 pcg 1.3 <td>U32</td>
2514 pcg 1.1 <td></td>
2515 pcg 1.3 <td>
2516 pcg 1.4 <b></b> </td>
2517 pcg 1.1 </tr>
2518     <tr>
2519     <td colspan="4">
2520     </td>
2521     </tr>
2522     <tr>
2523     <td>rooms_cur</td>
2524 pcg 1.3 <td>U32</td>
2525 pcg 1.1 <td></td>
2526 pcg 1.3 <td>
2527 pcg 1.4 <b></b> </td>
2528 pcg 1.1 </tr>
2529     <tr>
2530     <td colspan="4">
2531     </td>
2532     </tr>
2533     <tr>
2534     <td>rooms_max</td>
2535 pcg 1.3 <td>U32</td>
2536 pcg 1.1 <td></td>
2537 pcg 1.3 <td>
2538 pcg 1.4 <b></b> </td>
2539 pcg 1.1 </tr>
2540     <tr>
2541     <td colspan="4">
2542     </td>
2543     </tr>
2544     <tr>
2545     <td>rooms_lim</td>
2546 pcg 1.3 <td>U32</td>
2547 pcg 1.1 <td></td>
2548 pcg 1.3 <td>
2549 pcg 1.4 <b></b> </td>
2550 pcg 1.1 </tr>
2551     <tr>
2552     <td colspan="4">
2553     </td>
2554     </tr>
2555     <tr>
2556     <td>games_cur</td>
2557 pcg 1.3 <td>U32</td>
2558 pcg 1.1 <td></td>
2559 pcg 1.3 <td>
2560 pcg 1.4 <b></b> </td>
2561 pcg 1.1 </tr>
2562     <tr>
2563     <td colspan="4">
2564     </td>
2565     </tr>
2566     <tr>
2567     <td>games_max</td>
2568 pcg 1.3 <td>U32</td>
2569 pcg 1.1 <td></td>
2570 pcg 1.3 <td>
2571 pcg 1.4 <b></b> </td>
2572 pcg 1.1 </tr>
2573     <tr>
2574     <td colspan="4">
2575     </td>
2576     </tr>
2577     <tr>
2578     <td>games_lim</td>
2579 pcg 1.3 <td>U32</td>
2580 pcg 1.1 <td></td>
2581 pcg 1.3 <td>
2582 pcg 1.4 <b></b> </td>
2583 pcg 1.1 </tr>
2584     <tr>
2585     <td colspan="4">
2586     </td>
2587     </tr>
2588     <tr>
2589     <td>results_cur</td>
2590 pcg 1.3 <td>U32</td>
2591 pcg 1.1 <td></td>
2592 pcg 1.3 <td>
2593 pcg 1.4 <b></b> </td>
2594 pcg 1.1 </tr>
2595     <tr>
2596     <td colspan="4">
2597     </td>
2598     </tr>
2599     <tr>
2600     <td>results_max</td>
2601 pcg 1.3 <td>U32</td>
2602 pcg 1.1 <td></td>
2603 pcg 1.3 <td>
2604 pcg 1.4 <b></b> </td>
2605 pcg 1.1 </tr>
2606     <tr>
2607     <td colspan="4">
2608     </td>
2609     </tr>
2610     <tr>
2611     <td>unknown2</td>
2612 pcg 1.3 <td>U32</td>
2613 pcg 1.1 <td></td>
2614 pcg 1.3 <td>
2615 pcg 1.4 <b></b> </td>
2616 pcg 1.1 </tr>
2617     <tr>
2618     <td colspan="4">
2619     </td>
2620     </tr>
2621     <tr>
2622     <td>params_cur</td>
2623 pcg 1.3 <td>U32</td>
2624 pcg 1.1 <td></td>
2625 pcg 1.3 <td>
2626 pcg 1.4 <b></b> </td>
2627 pcg 1.1 </tr>
2628     <tr>
2629     <td colspan="4">
2630     </td>
2631     </tr>
2632     <tr>
2633     <td>params_max</td>
2634 pcg 1.3 <td>U32</td>
2635 pcg 1.1 <td></td>
2636 pcg 1.3 <td>
2637 pcg 1.4 <b></b> </td>
2638 pcg 1.1 </tr>
2639     <tr>
2640     <td colspan="4">
2641     </td>
2642     </tr>
2643     <tr>
2644     <td>bytes_in</td>
2645 pcg 1.3 <td>U64</td>
2646 pcg 1.1 <td></td>
2647 pcg 1.3 <td>
2648 pcg 1.4 <b></b> </td>
2649 pcg 1.1 </tr>
2650     <tr>
2651     <td colspan="4">
2652     </td>
2653     </tr>
2654     <tr>
2655     <td>packets_in</td>
2656 pcg 1.3 <td>U64</td>
2657 pcg 1.1 <td></td>
2658 pcg 1.3 <td>
2659 pcg 1.4 <b></b> </td>
2660 pcg 1.1 </tr>
2661     <tr>
2662     <td colspan="4">
2663     </td>
2664     </tr>
2665     <tr>
2666     <td>bytes_out</td>
2667 pcg 1.3 <td>U64</td>
2668 pcg 1.1 <td></td>
2669 pcg 1.3 <td>
2670 pcg 1.4 <b></b> </td>
2671 pcg 1.1 </tr>
2672     <tr>
2673     <td colspan="4">
2674     </td>
2675     </tr>
2676     <tr>
2677     <td>packets_out</td>
2678 pcg 1.3 <td>U64</td>
2679 pcg 1.1 <td></td>
2680 pcg 1.3 <td>
2681 pcg 1.4 <b></b> </td>
2682 pcg 1.1 </tr>
2683     <tr>
2684 pcg 1.4 <td colspan="4">
2685 pcg 1.1 </td>
2686     </tr>
2687     </table>
2688    
2689     <h4>MESSAGE idle_warn</h4>
2690     NUMERIC TYPE (hex): 0016 RECV<table border="1">
2691     <tr>
2692     <th>NAME</th>
2693     <th>TYPE</th>
2694     <th>DEFAULT</th>
2695 pcg 1.3 <th>DEC-GUARD</th>
2696 pcg 1.1 </tr>
2697     <tr>
2698     <td colspan="4">
2699     idle warning, autologout soon (10 minutes...)
2700     </td>
2701     </tr>
2702     </table>
2703    
2704     <h4>MESSAGE timewarning_default</h4>
2705     NUMERIC TYPE (hex): 001b RECV<table border="1">
2706     <tr>
2707     <th>NAME</th>
2708     <th>TYPE</th>
2709     <th>DEFAULT</th>
2710 pcg 1.3 <th>DEC-GUARD</th>
2711 pcg 1.1 </tr>
2712     <tr>
2713     <td colspan="4">
2714     WILD guess
2715     </td>
2716     </tr>
2717     <tr>
2718     <td>channel</td>
2719 pcg 1.3 <td>U16</td>
2720 pcg 1.1 <td></td>
2721 pcg 1.3 <td>
2722 pcg 1.4 <b></b> </td>
2723 pcg 1.1 </tr>
2724     <tr>
2725     <td colspan="4">
2726     </td>
2727     </tr>
2728     <tr>
2729     <td>time</td>
2730 pcg 1.3 <td>U16</td>
2731 pcg 1.1 <td></td>
2732 pcg 1.3 <td>
2733 pcg 1.4 <b></b> </td>
2734 pcg 1.1 </tr>
2735     <tr>
2736     <td colspan="4">
2737     </td>
2738     </tr>
2739     </table>
2740    
2741     <h4>MESSAGE idle_err</h4>
2742     NUMERIC TYPE (hex): 001c RECV<table border="1">
2743     <tr>
2744     <th>NAME</th>
2745     <th>TYPE</th>
2746     <th>DEFAULT</th>
2747 pcg 1.3 <th>DEC-GUARD</th>
2748 pcg 1.1 </tr>
2749     <tr>
2750     <td colspan="4">
2751     autologout
2752     </td>
2753     </tr>
2754     </table>
2755    
2756     <h4>MESSAGE ping</h4>
2757     NUMERIC TYPE (hex): 001d RECV<table border="1">
2758     <tr>
2759     <th>NAME</th>
2760     <th>TYPE</th>
2761     <th>DEFAULT</th>
2762 pcg 1.3 <th>DEC-GUARD</th>
2763 pcg 1.1 </tr>
2764     <tr>
2765     <td colspan="4">
2766     </td>
2767     </tr>
2768     </table>
2769    
2770     <h4>MESSAGE userpic</h4>
2771     NUMERIC TYPE (hex): 0021 RECV<table border="1">
2772     <tr>
2773     <th>NAME</th>
2774     <th>TYPE</th>
2775     <th>DEFAULT</th>
2776 pcg 1.3 <th>DEC-GUARD</th>
2777 pcg 1.1 </tr>
2778     <tr>
2779     <td colspan="4">
2780     </td>
2781     </tr>
2782     <tr>
2783     <td>name</td>
2784 pcg 1.3 <td>username</td>
2785 pcg 1.1 <td></td>
2786 pcg 1.3 <td>
2787 pcg 1.4 <b></b> </td>
2788 pcg 1.1 </tr>
2789     <tr>
2790     <td colspan="4">
2791     Reply to pic_req, contains an image in jpeg format.
2792     </td>
2793     </tr>
2794     <tr>
2795     <td>data</td>
2796     <td>DATA</td>
2797     <td></td>
2798 pcg 1.3 <td>
2799 pcg 1.4 <b></b> </td>
2800 pcg 1.1 </tr>
2801     <tr>
2802     <td colspan="4">
2803     </td>
2804     </tr>
2805     </table>
2806    
2807     <h4>MESSAGE gnotice</h4>
2808     NUMERIC TYPE (hex): 0100 RECV<table border="1">
2809     <tr>
2810     <th>NAME</th>
2811     <th>TYPE</th>
2812     <th>DEFAULT</th>
2813 pcg 1.3 <th>DEC-GUARD</th>
2814 pcg 1.1 </tr>
2815     <tr>
2816     <td colspan="4">
2817     global notice, sent to everybody
2818     </td>
2819     </tr>
2820     <tr>
2821     <td>notice</td>
2822     <td>STRING</td>
2823     <td></td>
2824 pcg 1.3 <td>
2825 pcg 1.4 <b></b> </td>
2826 pcg 1.1 </tr>
2827     <tr>
2828     <td colspan="4">
2829     </td>
2830     </tr>
2831     </table>
2832    
2833    
2834     <h4>MESSAGE priv_room</h4>
2835     NUMERIC TYPE (hex): 0310 RECV<table border="1">
2836     <tr>
2837     <th>NAME</th>
2838     <th>TYPE</th>
2839     <th>DEFAULT</th>
2840 pcg 1.3 <th>DEC-GUARD</th>
2841 pcg 1.1 </tr>
2842     <tr>
2843     <td colspan="4">
2844     "permission denied" when joining a room
2845     </td>
2846     </tr>
2847     <tr>
2848     <td>name</td>
2849     <td>STRING</td>
2850     <td></td>
2851 pcg 1.3 <td>
2852 pcg 1.4 <b></b> </td>
2853 pcg 1.1 </tr>
2854     <tr>
2855     <td colspan="4">
2856     </td>
2857     </tr>
2858     </table>
2859    
2860     <h4>MESSAGE upd_rooms</h4>
2861     NUMERIC TYPE (hex): 0318 RECV<table border="1">
2862     <tr>
2863     <th>NAME</th>
2864     <th>TYPE</th>
2865     <th>DEFAULT</th>
2866 pcg 1.3 <th>DEC-GUARD</th>
2867 pcg 1.1 </tr>
2868     <tr>
2869     <td colspan="4">
2870     </td>
2871     </tr>
2872     <tr>
2873     <td>rooms</td>
2874     <td>room</td>
2875     <td></td>
2876 pcg 1.3 <td>
2877 pcg 1.4 <b></b> </td>
2878 pcg 1.1 </tr>
2879     <tr>
2880     <td colspan="4">
2881     </td>
2882     </tr>
2883     </table>
2884    
2885     <h4>MESSAGE upd_game2</h4>
2886     NUMERIC TYPE (hex): 041c RECV<table border="1">
2887     <tr>
2888     <th>NAME</th>
2889     <th>TYPE</th>
2890     <th>DEFAULT</th>
2891 pcg 1.3 <th>DEC-GUARD</th>
2892 pcg 1.1 </tr>
2893     <tr>
2894     <td colspan="4">
2895     </td>
2896     </tr>
2897     <tr>
2898     <td>channel_junk</td>
2899 pcg 1.3 <td>U16</td>
2900 pcg 1.1 <td></td>
2901 pcg 1.3 <td>
2902 pcg 1.4 <b></b> </td>
2903 pcg 1.1 </tr>
2904     <tr>
2905     <td colspan="4">
2906     </td>
2907     </tr>
2908     <tr>
2909     <td>game</td>
2910     <td>game</td>
2911     <td></td>
2912 pcg 1.3 <td>
2913 pcg 1.4 <b></b> </td>
2914 pcg 1.1 </tr>
2915     <tr>
2916     <td colspan="4">
2917     </td>
2918     </tr>
2919     </table>
2920    
2921     <h4>MESSAGE upd_user</h4>
2922     NUMERIC TYPE (hex): 0202 RECV<table border="1">
2923     <tr>
2924     <th>NAME</th>
2925     <th>TYPE</th>
2926     <th>DEFAULT</th>
2927 pcg 1.3 <th>DEC-GUARD</th>
2928 pcg 1.1 </tr>
2929     <tr>
2930     <td colspan="4">
2931     # loc 0" type="chat(?) loc 1 =&gt; gameinfo?, loc 2 =&gt; game result (more data)
2932     </td>
2933     </tr>
2934     <tr>
2935     <td>location</td>
2936 pcg 1.3 <td>U32</td>
2937 pcg 1.1 <td></td>
2938 pcg 1.3 <td>
2939 pcg 1.4 <b></b> </td>
2940 pcg 1.1 </tr>
2941     <tr>
2942     <td colspan="4">
2943     </td>
2944     </tr>
2945     <tr>
2946     <td>user</td>
2947     <td>user</td>
2948     <td></td>
2949 pcg 1.3 <td>
2950 pcg 1.4 <b></b> </td>
2951 pcg 1.1 </tr>
2952     <tr>
2953     <td colspan="4">
2954     </td>
2955     </tr>
2956     <tr>
2957     <td>lotsofinfo</td>
2958     <td>DATA</td>
2959     <td></td>
2960 pcg 1.3 <td>
2961 pcg 1.4 <b>location</b> == 2</td>
2962 pcg 1.1 </tr>
2963     <tr>
2964     <td colspan="4">
2965     </td>
2966     </tr>
2967     </table>
2968    
2969     <h3>Room messages</h3>
2970    
2971     <p>Not all room messages are for rooms only, and rooms need to parse
2972     not only these messages. Orthogonality, what for?</p>
2973    
2974     <h4>MESSAGE join_room</h4>
2975     NUMERIC TYPE (hex): 4300 RECV<table border="1">
2976     <tr>
2977     <th>NAME</th>
2978     <th>TYPE</th>
2979     <th>DEFAULT</th>
2980 pcg 1.3 <th>DEC-GUARD</th>
2981 pcg 1.1 </tr>
2982     <tr>
2983     <td colspan="4">
2984     </td>
2985     </tr>
2986     <tr>
2987     <td>channel</td>
2988 pcg 1.3 <td>U16</td>
2989 pcg 1.1 <td></td>
2990 pcg 1.3 <td>
2991 pcg 1.4 <b></b> </td>
2992 pcg 1.1 </tr>
2993     <tr>
2994     <td colspan="4">
2995     </td>
2996     </tr>
2997     <tr>
2998     <td>users</td>
2999     <td>user</td>
3000     <td></td>
3001 pcg 1.3 <td>
3002 pcg 1.4 <b></b> </td>
3003 pcg 1.1 </tr>
3004     <tr>
3005     <td colspan="4">
3006     </td>
3007     </tr>
3008     </table>
3009    
3010     <h4>MESSAGE msg_room</h4>
3011     NUMERIC TYPE (hex): 4301 RECV<table border="1">
3012     <tr>
3013     <th>NAME</th>
3014     <th>TYPE</th>
3015     <th>DEFAULT</th>
3016 pcg 1.3 <th>DEC-GUARD</th>
3017 pcg 1.1 </tr>
3018     <tr>
3019     <td colspan="4">
3020     </td>
3021     </tr>
3022     <tr>
3023     <td>channel</td>
3024 pcg 1.3 <td>U16</td>
3025 pcg 1.1 <td></td>
3026 pcg 1.3 <td>
3027 pcg 1.4 <b></b> </td>
3028 pcg 1.1 </tr>
3029     <tr>
3030     <td colspan="4">
3031     </td>
3032     </tr>
3033     <tr>
3034     <td>name</td>
3035 pcg 1.3 <td>username</td>
3036 pcg 1.1 <td></td>
3037 pcg 1.3 <td>
3038 pcg 1.4 <b></b> </td>
3039 pcg 1.1 </tr>
3040     <tr>
3041     <td colspan="4">
3042     </td>
3043     </tr>
3044     <tr>
3045     <td>message</td>
3046     <td>STRING</td>
3047     <td></td>
3048 pcg 1.3 <td>
3049 pcg 1.4 <b></b> </td>
3050 pcg 1.1 </tr>
3051     <tr>
3052     <td colspan="4">
3053     </td>
3054     </tr>
3055     </table>
3056    
3057     <h4>MESSAGE part_room</h4>
3058     NUMERIC TYPE (hex): 4302 RECV<table border="1">
3059     <tr>
3060     <th>NAME</th>
3061     <th>TYPE</th>
3062     <th>DEFAULT</th>
3063 pcg 1.3 <th>DEC-GUARD</th>
3064 pcg 1.1 </tr>
3065     <tr>
3066     <td colspan="4">
3067     </td>
3068     </tr>
3069     <tr>
3070     <td>channel</td>
3071 pcg 1.3 <td>U16</td>
3072 pcg 1.1 <td></td>
3073 pcg 1.3 <td>
3074 pcg 1.4 <b></b> </td>
3075 pcg 1.1 </tr>
3076     <tr>
3077     <td colspan="4">
3078     </td>
3079     </tr>
3080     <tr>
3081     <td>user</td>
3082     <td>user</td>
3083     <td></td>
3084 pcg 1.3 <td>
3085 pcg 1.4 <b></b> </td>
3086 pcg 1.1 </tr>
3087     <tr>
3088     <td colspan="4">
3089     </td>
3090     </tr>
3091     </table>
3092    
3093     <h4>MESSAGE del_room</h4>
3094     NUMERIC TYPE (hex): 4303 RECV<table border="1">
3095     <tr>
3096     <th>NAME</th>
3097     <th>TYPE</th>
3098     <th>DEFAULT</th>
3099 pcg 1.3 <th>DEC-GUARD</th>
3100 pcg 1.1 </tr>
3101     <tr>
3102     <td colspan="4">
3103     </td>
3104     </tr>
3105     <tr>
3106     <td>channel</td>
3107 pcg 1.3 <td>U16</td>
3108 pcg 1.1 <td></td>
3109 pcg 1.3 <td>
3110 pcg 1.4 <b></b> </td>
3111 pcg 1.1 </tr>
3112     <tr>
3113     <td colspan="4">
3114    
3115     </td>
3116     </tr>
3117     </table>
3118    
3119     <h4>MESSAGE upd_games</h4>
3120     NUMERIC TYPE (hex): 4304 RECV<table border="1">
3121     <tr>
3122     <th>NAME</th>
3123     <th>TYPE</th>
3124     <th>DEFAULT</th>
3125 pcg 1.3 <th>DEC-GUARD</th>
3126 pcg 1.1 </tr>
3127     <tr>
3128     <td colspan="4">
3129     </td>
3130     </tr>
3131     <tr>
3132     <td>channel</td>
3133 pcg 1.3 <td>U16</td>
3134 pcg 1.1 <td></td>
3135 pcg 1.3 <td>
3136 pcg 1.4 <b></b> </td>
3137 pcg 1.1 </tr>
3138     <tr>
3139     <td colspan="4">
3140     </td>
3141     </tr>
3142     <tr>
3143     <td>games</td>
3144     <td>game</td>
3145     <td></td>
3146 pcg 1.3 <td>
3147 pcg 1.4 <b></b> </td>
3148 pcg 1.1 </tr>
3149     <tr>
3150     <td colspan="4">
3151     </td>
3152     </tr>
3153     </table>
3154    
3155     <h4>MESSAGE desc_room</h4>
3156     NUMERIC TYPE (hex): 4319 RECV<table border="1">
3157     <tr>
3158     <th>NAME</th>
3159     <th>TYPE</th>
3160     <th>DEFAULT</th>
3161 pcg 1.3 <th>DEC-GUARD</th>
3162 pcg 1.1 </tr>
3163     <tr>
3164     <td colspan="4">
3165     </td>
3166     </tr>
3167     <tr>
3168     <td>channel</td>
3169 pcg 1.3 <td>U16</td>
3170 pcg 1.1 <td></td>
3171 pcg 1.3 <td>
3172 pcg 1.4 <b></b> </td>
3173 pcg 1.1 </tr>
3174     <tr>
3175     <td colspan="4">
3176     </td>
3177     </tr>
3178     <tr>
3179     <td>owner</td>
3180 pcg 1.3 <td>username</td>
3181 pcg 1.1 <td></td>
3182 pcg 1.3 <td>
3183 pcg 1.4 <b></b> </td>
3184 pcg 1.1 </tr>
3185     <tr>
3186     <td colspan="4">
3187     </td>
3188     </tr>
3189     <tr>
3190     <td>description</td>
3191     <td>STRING</td>
3192     <td></td>
3193 pcg 1.3 <td>
3194 pcg 1.4 <b></b> </td>
3195 pcg 1.1 </tr>
3196     <tr>
3197     <td colspan="4">
3198     </td>
3199     </tr>
3200     </table>
3201    
3202    
3203     <h4>MESSAGE chal_defaults</h4>
3204     NUMERIC TYPE (hex): 0411 RECV<table border="1">
3205     <tr>
3206     <th>NAME</th>
3207     <th>TYPE</th>
3208     <th>DEFAULT</th>
3209 pcg 1.3 <th>DEC-GUARD</th>
3210 pcg 1.1 </tr>
3211     <tr>
3212     <td colspan="4">
3213     </td>
3214     </tr>
3215     <tr>
3216     <td>channel</td>
3217 pcg 1.3 <td>U16</td>
3218 pcg 1.1 <td></td>
3219 pcg 1.3 <td>
3220 pcg 1.4 <b></b> </td>
3221 pcg 1.1 </tr>
3222     <tr>
3223     <td colspan="4">
3224     </td>
3225     </tr>
3226     <tr>
3227     <td>defaults</td>
3228     <td>challenge_defaults</td>
3229     <td></td>
3230 pcg 1.3 <td>
3231 pcg 1.4 <b></b> </td>
3232 pcg 1.1 </tr>
3233     <tr>
3234     <td colspan="4">
3235     </td>
3236     </tr>
3237     </table>
3238    
3239     <h3>Game messages</h3>
3240    
3241     <h4>MESSAGE upd_chal</h4>
3242     NUMERIC TYPE (hex): 4400 RECV<table border="1">
3243     <tr>
3244     <th>NAME</th>
3245     <th>TYPE</th>
3246     <th>DEFAULT</th>
3247 pcg 1.3 <th>DEC-GUARD</th>
3248 pcg 1.1 </tr>
3249     <tr>
3250     <td colspan="4">
3251     Unclear.
3252     </td>
3253     </tr>
3254     <tr>
3255     <td>channel</td>
3256 pcg 1.3 <td>U16</td>
3257 pcg 1.1 <td></td>
3258 pcg 1.3 <td>
3259 pcg 1.4 <b></b> </td>
3260 pcg 1.1 </tr>
3261     <tr>
3262     <td colspan="4">
3263     </td>
3264     </tr>
3265     <tr>
3266     <td>challenge</td>
3267     <td>challenge</td>
3268     <td></td>
3269 pcg 1.3 <td>
3270 pcg 1.4 <b></b> </td>
3271 pcg 1.1 </tr>
3272     <tr>
3273     <td colspan="4">
3274     </td>
3275     </tr>
3276     </table>
3277    
3278     <h4>MESSAGE upd_game</h4>
3279     NUMERIC TYPE (hex): 4401 RECV<table border="1">
3280     <tr>
3281     <th>NAME</th>
3282     <th>TYPE</th>
3283     <th>DEFAULT</th>
3284 pcg 1.3 <th>DEC-GUARD</th>
3285 pcg 1.1 </tr>
3286     <tr>
3287     <td colspan="4">
3288     </td>
3289     </tr>
3290     <tr>
3291     <td>channel</td>
3292 pcg 1.3 <td>U16</td>
3293 pcg 1.1 <td></td>
3294 pcg 1.3 <td>
3295 pcg 1.4 <b></b> </td>
3296 pcg 1.1 </tr>
3297     <tr>
3298     <td colspan="4">
3299     </td>
3300     </tr>
3301     <tr>
3302     <td>game</td>
3303     <td>game</td>
3304     <td></td>
3305 pcg 1.3 <td>
3306 pcg 1.4 <b></b> </td>
3307 pcg 1.1 </tr>
3308     <tr>
3309     <td colspan="4">
3310     </td>
3311     </tr>
3312     </table>
3313    
3314     <h4>MESSAGE del_game</h4>
3315     NUMERIC TYPE (hex): 4402 RECV<table border="1">
3316     <tr>
3317     <th>NAME</th>
3318     <th>TYPE</th>
3319     <th>DEFAULT</th>
3320 pcg 1.3 <th>DEC-GUARD</th>
3321 pcg 1.1 </tr>
3322     <tr>
3323     <td colspan="4">
3324     </td>
3325     </tr>
3326     <tr>
3327     <td>channel</td>
3328 pcg 1.3 <td>U16</td>
3329 pcg 1.1 <td></td>
3330 pcg 1.3 <td>
3331 pcg 1.4 <b></b> </td>
3332 pcg 1.1 </tr>
3333     <tr>
3334     <td colspan="4">
3335     </td>
3336     </tr>
3337     </table>
3338    
3339     <h4>MESSAGE upd_observers</h4>
3340     NUMERIC TYPE (hex): 4403 RECV<table border="1">
3341     <tr>
3342     <th>NAME</th>
3343     <th>TYPE</th>
3344     <th>DEFAULT</th>
3345 pcg 1.3 <th>DEC-GUARD</th>
3346 pcg 1.1 </tr>
3347     <tr>
3348     <td colspan="4">
3349     </td>
3350     </tr>
3351     <tr>
3352     <td>channel</td>
3353 pcg 1.3 <td>U16</td>
3354 pcg 1.1 <td></td>
3355 pcg 1.3 <td>
3356 pcg 1.4 <b></b> </td>
3357 pcg 1.1 </tr>
3358     <tr>
3359     <td colspan="4">
3360     </td>
3361     </tr>
3362     <tr>
3363     <td>users</td>
3364     <td>user</td>
3365     <td></td>
3366 pcg 1.3 <td>
3367 pcg 1.4 <b></b> </td>
3368 pcg 1.1 </tr>
3369     <tr>
3370     <td colspan="4">
3371     </td>
3372     </tr>
3373     </table>
3374    
3375     <h4>MESSAGE del_observer</h4>
3376     NUMERIC TYPE (hex): 4404 RECV<table border="1">
3377     <tr>
3378     <th>NAME</th>
3379     <th>TYPE</th>
3380     <th>DEFAULT</th>
3381 pcg 1.3 <th>DEC-GUARD</th>
3382 pcg 1.1 </tr>
3383     <tr>
3384     <td colspan="4">
3385     </td>
3386     </tr>
3387     <tr>
3388     <td>channel</td>
3389 pcg 1.3 <td>U16</td>
3390 pcg 1.1 <td></td>
3391 pcg 1.3 <td>
3392 pcg 1.4 <b></b> </td>
3393 pcg 1.1 </tr>
3394     <tr>
3395     <td colspan="4">
3396     </td>
3397     </tr>
3398     <tr>
3399     <td>name</td>
3400 pcg 1.3 <td>username</td>
3401 pcg 1.1 <td></td>
3402 pcg 1.3 <td>
3403 pcg 1.4 <b></b> </td>
3404 pcg 1.1 </tr>
3405     <tr>
3406     <td colspan="4">
3407     </td>
3408     </tr>
3409     </table>
3410    
3411     <h4>MESSAGE set_tree</h4>
3412     NUMERIC TYPE (hex): 4405 RECV<table border="1">
3413     <tr>
3414     <th>NAME</th>
3415     <th>TYPE</th>
3416     <th>DEFAULT</th>
3417 pcg 1.3 <th>DEC-GUARD</th>
3418 pcg 1.1 </tr>
3419     <tr>
3420     <td colspan="4">
3421     </td>
3422     </tr>
3423     <tr>
3424     <td>channel</td>
3425 pcg 1.3 <td>U16</td>
3426 pcg 1.1 <td></td>
3427 pcg 1.3 <td>
3428 pcg 1.4 <b></b> </td>
3429 pcg 1.1 </tr>
3430     <tr>
3431     <td colspan="4">
3432     </td>
3433     </tr>
3434     <tr>
3435     <td>tree</td>
3436     <td>TREE</td>
3437     <td></td>
3438 pcg 1.3 <td>
3439 pcg 1.4 <b></b> </td>
3440 pcg 1.1 </tr>
3441     <tr>
3442     <td colspan="4">
3443     </td>
3444     </tr>
3445     </table>
3446    
3447     <h4>MESSAGE upd_tree</h4>
3448     NUMERIC TYPE (hex): 4406 RECV<table border="1">
3449     <tr>
3450     <th>NAME</th>
3451     <th>TYPE</th>
3452     <th>DEFAULT</th>
3453 pcg 1.3 <th>DEC-GUARD</th>
3454 pcg 1.1 </tr>
3455     <tr>
3456     <td colspan="4">
3457     </td>
3458     </tr>
3459     <tr>
3460     <td>channel</td>
3461 pcg 1.3 <td>U16</td>
3462 pcg 1.1 <td></td>
3463 pcg 1.3 <td>
3464 pcg 1.4 <b></b> </td>
3465 pcg 1.1 </tr>
3466     <tr>
3467     <td colspan="4">
3468     </td>
3469     </tr>
3470     <tr>
3471     <td>tree</td>
3472     <td>TREE</td>
3473     <td></td>
3474 pcg 1.3 <td>
3475 pcg 1.4 <b></b> </td>
3476 pcg 1.1 </tr>
3477     <tr>
3478     <td colspan="4">
3479     </td>
3480     </tr>
3481     </table>
3482    
3483     <h4>MESSAGE set_node</h4>
3484     NUMERIC TYPE (hex): 4407 RECV<table border="1">
3485     <tr>
3486     <th>NAME</th>
3487     <th>TYPE</th>
3488     <th>DEFAULT</th>
3489 pcg 1.3 <th>DEC-GUARD</th>
3490 pcg 1.1 </tr>
3491     <tr>
3492     <td colspan="4">
3493     </td>
3494     </tr>
3495     <tr>
3496     <td>channel</td>
3497 pcg 1.3 <td>U16</td>
3498 pcg 1.1 <td></td>
3499 pcg 1.3 <td>
3500 pcg 1.4 <b></b> </td>
3501 pcg 1.1 </tr>
3502     <tr>
3503     <td colspan="4">
3504     </td>
3505     </tr>
3506     <tr>
3507     <td>node</td>
3508 pcg 1.3 <td>U32</td>
3509 pcg 1.1 <td></td>
3510 pcg 1.3 <td>
3511 pcg 1.4 <b></b> </td>
3512 pcg 1.1 </tr>
3513     <tr>
3514     <td colspan="4">
3515     </td>
3516     </tr>
3517     </table>
3518    
3519     <h4>MESSAGE superko</h4>
3520     NUMERIC TYPE (hex): 4409 RECV<table border="1">
3521     <tr>
3522     <th>NAME</th>
3523     <th>TYPE</th>
3524     <th>DEFAULT</th>
3525 pcg 1.3 <th>DEC-GUARD</th>
3526 pcg 1.1 </tr>
3527     <tr>
3528     <td colspan="4">
3529     Superko-warning.
3530     </td>
3531     </tr>
3532     <tr>
3533     <td>channel</td>
3534 pcg 1.3 <td>U16</td>
3535 pcg 1.1 <td></td>
3536 pcg 1.3 <td>
3537 pcg 1.4 <b></b> </td>
3538 pcg 1.1 </tr>
3539     <tr>
3540     <td colspan="4">
3541     </td>
3542     </tr>
3543     </table>
3544    
3545     <h4>MESSAGE final_result</h4>
3546     NUMERIC TYPE (hex): 440b RECV<table border="1">
3547     <tr>
3548     <th>NAME</th>
3549     <th>TYPE</th>
3550     <th>DEFAULT</th>
3551 pcg 1.3 <th>DEC-GUARD</th>
3552 pcg 1.1 </tr>
3553     <tr>
3554     <td colspan="4">
3555     </td>
3556     </tr>
3557     <tr>
3558     <td>channel</td>
3559 pcg 1.3 <td>U16</td>
3560 pcg 1.1 <td></td>
3561 pcg 1.3 <td>
3562 pcg 1.4 <b></b> </td>
3563 pcg 1.1 </tr>
3564     <tr>
3565     <td colspan="4">
3566     </td>
3567     </tr>
3568     <tr>
3569     <td>blackscore</td>
3570 pcg 1.10 <td>scorevalues</td>
3571 pcg 1.1 <td></td>
3572 pcg 1.3 <td>
3573 pcg 1.4 <b></b> </td>
3574 pcg 1.1 </tr>
3575     <tr>
3576     <td colspan="4">
3577     </td>
3578     </tr>
3579     <tr>
3580     <td>whitescore</td>
3581 pcg 1.10 <td>scorevalues</td>
3582 pcg 1.1 <td></td>
3583 pcg 1.3 <td>
3584 pcg 1.4 <b></b> </td>
3585 pcg 1.1 </tr>
3586     <tr>
3587     <td colspan="4">
3588     </td>
3589     </tr>
3590     </table>
3591    
3592     <h4>MESSAGE req_undo</h4>
3593     NUMERIC TYPE (hex): 440e RECV<table border="1">
3594     <tr>
3595     <th>NAME</th>
3596     <th>TYPE</th>
3597     <th>DEFAULT</th>
3598 pcg 1.3 <th>DEC-GUARD</th>
3599 pcg 1.1 </tr>
3600     <tr>
3601     <td colspan="4">
3602     </td>
3603     </tr>
3604     <tr>
3605     <td>channel</td>
3606 pcg 1.3 <td>U16</td>
3607 pcg 1.1 <td></td>
3608 pcg 1.3 <td>
3609 pcg 1.4 <b></b> </td>
3610 pcg 1.1 </tr>
3611     <tr>
3612     <td colspan="4">
3613    
3614     </td>
3615     </tr>
3616     </table>
3617    
3618     <h4>MESSAGE resign_game</h4>
3619     NUMERIC TYPE (hex): 4410 RECV<table border="1">
3620     <tr>
3621     <th>NAME</th>
3622     <th>TYPE</th>
3623     <th>DEFAULT</th>
3624 pcg 1.3 <th>DEC-GUARD</th>
3625 pcg 1.1 </tr>
3626     <tr>
3627     <td colspan="4">
3628     </td>
3629     </tr>
3630     <tr>
3631     <td>channel</td>
3632 pcg 1.3 <td>U16</td>
3633 pcg 1.1 <td></td>
3634 pcg 1.3 <td>
3635 pcg 1.4 <b></b> </td>
3636 pcg 1.1 </tr>
3637     <tr>
3638     <td colspan="4">
3639     </td>
3640     </tr>
3641     <tr>
3642     <td>player</td>
3643 pcg 1.3 <td>U8</td>
3644 pcg 1.1 <td></td>
3645 pcg 1.3 <td>
3646 pcg 1.4 <b></b> </td>
3647 pcg 1.1 </tr>
3648     <tr>
3649     <td colspan="4">
3650     </td>
3651     </tr>
3652     </table>
3653    
3654     <h4>MESSAGE set_teacher</h4>
3655     NUMERIC TYPE (hex): 441a RECV<table border="1">
3656     <tr>
3657     <th>NAME</th>
3658     <th>TYPE</th>
3659     <th>DEFAULT</th>
3660 pcg 1.3 <th>DEC-GUARD</th>
3661 pcg 1.1 </tr>
3662     <tr>
3663     <td colspan="4">
3664     </td>
3665     </tr>
3666     <tr>
3667     <td>channel</td>
3668 pcg 1.3 <td>U16</td>
3669 pcg 1.1 <td></td>
3670 pcg 1.3 <td>
3671 pcg 1.4 <b></b> </td>
3672 pcg 1.1 </tr>
3673     <tr>
3674     <td colspan="4">
3675     </td>
3676     </tr>
3677     <tr>
3678     <td>name</td>
3679 pcg 1.3 <td>username</td>
3680 pcg 1.1 <td></td>
3681 pcg 1.3 <td>
3682 pcg 1.4 <b></b> </td>
3683 pcg 1.1 </tr>
3684     <tr>
3685     <td colspan="4">
3686     </td>
3687     </tr>
3688     </table>
3689    
3690     <h4>MESSAGE owner_left</h4>
3691     NUMERIC TYPE (hex): 441d RECV<table border="1">
3692     <tr>
3693     <th>NAME</th>
3694     <th>TYPE</th>
3695     <th>DEFAULT</th>
3696 pcg 1.3 <th>DEC-GUARD</th>
3697 pcg 1.1 </tr>
3698     <tr>
3699     <td colspan="4">
3700     Unclear.
3701     </td>
3702     </tr>
3703     <tr>
3704     <td>channel</td>
3705 pcg 1.3 <td>U16</td>
3706 pcg 1.1 <td></td>
3707 pcg 1.3 <td>
3708 pcg 1.4 <b></b> </td>
3709 pcg 1.1 </tr>
3710     <tr>
3711     <td colspan="4">
3712     </td>
3713     </tr>
3714     </table>
3715    
3716     <h4>MESSAGE teacher_left</h4>
3717     NUMERIC TYPE (hex): 441e RECV<table border="1">
3718     <tr>
3719     <th>NAME</th>
3720     <th>TYPE</th>
3721     <th>DEFAULT</th>
3722 pcg 1.3 <th>DEC-GUARD</th>
3723 pcg 1.1 </tr>
3724     <tr>
3725     <td colspan="4">
3726     Unclear.
3727     </td>
3728     </tr>
3729     <tr>
3730     <td>channel</td>
3731 pcg 1.3 <td>U16</td>
3732 pcg 1.1 <td></td>
3733 pcg 1.3 <td>
3734 pcg 1.4 <b></b> </td>
3735 pcg 1.1 </tr>
3736     <tr>
3737     <td colspan="4">
3738     </td>
3739     </tr>
3740     </table>
3741    
3742     <h4>MESSAGE unknown4422</h4>
3743     NUMERIC TYPE (hex): 4422 RECV<table border="1">
3744     <tr>
3745     <th>NAME</th>
3746     <th>TYPE</th>
3747     <th>DEFAULT</th>
3748 pcg 1.3 <th>DEC-GUARD</th>
3749 pcg 1.1 </tr>
3750     <tr>
3751     <td colspan="4">
3752     change teacher? something to do with editing?
3753     </td>
3754     </tr>
3755     <tr>
3756     <td>channel</td>
3757 pcg 1.3 <td>U16</td>
3758 pcg 1.1 <td></td>
3759 pcg 1.3 <td>
3760 pcg 1.4 <b></b> </td>
3761 pcg 1.1 </tr>
3762     <tr>
3763     <td colspan="4">
3764     </td>
3765     </tr>
3766     <tr>
3767     <td>name1</td>
3768 pcg 1.3 <td>username</td>
3769 pcg 1.1 <td></td>
3770 pcg 1.3 <td>
3771 pcg 1.4 <b></b> </td>
3772 pcg 1.1 </tr>
3773     <tr>
3774     <td colspan="4">
3775     </td>
3776     </tr>
3777     <tr>
3778     <td>name2</td>
3779 pcg 1.3 <td>username</td>
3780 pcg 1.1 <td></td>
3781 pcg 1.3 <td>
3782 pcg 1.4 <b></b> </td>
3783 pcg 1.1 </tr>
3784     <tr>
3785     <td colspan="4">
3786     </td>
3787     </tr>
3788     </table>
3789    
3790     <h4>MESSAGE req_result</h4>
3791     NUMERIC TYPE (hex): 4433 RECV<table border="1">
3792     <tr>
3793     <th>NAME</th>
3794     <th>TYPE</th>
3795     <th>DEFAULT</th>
3796 pcg 1.3 <th>DEC-GUARD</th>
3797 pcg 1.1 </tr>
3798     <tr>
3799     <td colspan="4">
3800     Unclear.
3801     </td>
3802     </tr>
3803     <tr>
3804     <td>channel</td>
3805 pcg 1.3 <td>U16</td>
3806 pcg 1.1 <td></td>
3807 pcg 1.3 <td>
3808 pcg 1.4 <b></b> </td>
3809 pcg 1.1 </tr>
3810     <tr>
3811     <td colspan="4">
3812     # # recv_result(?)
3813     </td>
3814     </tr>
3815     </table>
3816    
3817     <h4>MESSAGE unknown4434</h4>
3818     NUMERIC TYPE (hex): 4434 RECV<table border="1">
3819     <tr>
3820     <th>NAME</th>
3821     <th>TYPE</th>
3822     <th>DEFAULT</th>
3823 pcg 1.3 <th>DEC-GUARD</th>
3824 pcg 1.1 </tr>
3825     <tr>
3826     <td colspan="4">
3827     </td>
3828     </tr>
3829     <tr>
3830     <td>channel</td>
3831 pcg 1.3 <td>U16</td>
3832 pcg 1.1 <td></td>
3833 pcg 1.3 <td>
3834 pcg 1.4 <b></b> </td>
3835 pcg 1.1 </tr>
3836     <tr>
3837     <td colspan="4">
3838     </td>
3839     </tr>
3840     <tr>
3841     <td>b1</td>
3842 pcg 1.3 <td>U8</td>
3843 pcg 1.1 <td></td>
3844 pcg 1.3 <td>
3845 pcg 1.4 <b></b> </td>
3846 pcg 1.1 </tr>
3847     <tr>
3848     <td colspan="4">
3849     ?? !demonstration game??
3850     </td>
3851     </tr>
3852     </table>
3853    
3854     </body>
3855     </html>