ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.15
Committed: Fri Jun 13 22:11:50 2003 UTC (20 years, 11 months ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.14: +333 -14 lines
Log Message:
*** empty log message ***

File Contents

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