ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.43
Committed: Wed Jan 28 16:54:23 2004 UTC (20 years, 4 months ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.42: +42 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 <html>
2 <head>
3 <title>KGS Protocol Description</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <!--
6 Copyright (C) 2003 Marc Lehmannn &lt;pcg@goof.com&gt;
7
8 You can redistribute and/or modify this document under the terms of
9 the GNU General Public License as published by the Free Software
10 Foundation; either version 2 of the License, or (at your option) any
11 later version.
12
13 This document is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 -->
22 </head>
23 <body>
24
25 <h1>$Revision: 1.42 $</h1>
26
27 <h1>KGS Protocol Description</h1>
28
29 <p>This XML document describes the KGS protocol. It is also used
30 to automatically generate the perl parser for all the messages and
31 structures in the protocol. Adapting it to other languages should be
32 almost trivial.</p>
33
34 <p>
35 <b>Please note that wms has told me that he will change the
36 protocol in response to my efforts. No problems with changing the
37 protocol for good, but he does this just to make it more difficult
38 to reverse-engineer it, since his changes are neither required, nor
39 useful (they just make the protocol less robust, without adding added
40 value). He doesn't even care that this locks out some users who cannot
41 upgrade (cgoban2 isn't available for their platform anymore). It hurts
42 to see such a waste of time and efforts that could have been used to
43 fix bugs or improve the client...</b>
44 </p>
45
46 <p>If you feel you need to update the visual appearance of this
47 document, feel free to look <tt>doc/doc2html.xsl</tt> and improve
48 it.</p>
49
50 <p>The current version of this document can always be found at
51 <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
52 the HTML version of it can be found
53 <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>.
54 (update: sourceforge is weeks behind on their anonymous cvs servers so the above might be out-of-date. sorry.)</p>
55
56 <h2>Structure and conventions of this document and the protocol</h2>
57
58 <p>"ORIGIN: CLIENT" means messages send from the client to the server,
59 while "ORIGIN: SERVER" means messages send by the server to the
60 client.</p>
61
62 <p>Everything on the wire is in little-endian format (what a shame).</p>
63
64 <p>Primitive types are mostly integers (signed
65 "<code>I</code>&lt;bits&gt;", unsigned "<code>U</code>&lt;bits&gt;"),
66 ascii strings ("<code>username</code>"), or zero-terminated
67 UCS2-Strings ("<code>STRING</code>"). Yes, I know java is supposed to
68 do UTF-16, but no implementation seems to care...</p>
69
70 <p>For the rest, go figure or bug me, <a href="mailto:pcg@goof.com">Marc Lehmann &lt;pcg@goof.com&gt;</a>
71 </p>
72
73 <h2>Stream and message structure.</h2>
74
75 <p>After connecting to the server, a handshake byte is sent. It's
76 the major version number of the protocol the client expects to
77 receive. Version 3 and 4 are mostly the same, except that Version 4
78 clients expect server messages to be compressed, version 3 clients
79 not.</p>
80
81 <p>The server sends back his protocol number, which is always 3 in
82 the current protocol. Most of the protocol variation is determined by
83 the server using the client version that is used in the initial login
84 message, not the initial handshake byte.</p>
85
86 <p>After the initial handshake, the client sends uncompressed
87 messages, while the server sends back a zlib-compressed
88 stream (<a href="http://rfc1950.x42.com/">rfc1950</a> and <a href="http://rfc1950.x42.com/">rfc1951</a>).</p>
89
90 <p>All messages have the same header:</p>
91
92 <h4>STRUCTURE message_header</h4>
93 <p>
94 </p>
95 <table border="1" width="100%">
96 <tr>
97 <th width="10%">NAME</th>
98 <th width="8%">TYPE</th>
99 <th width="4%">VALUE</th>
100 <th>DESCRIPTION</th>
101 <th width="10%">GUARD</th>
102 </tr>
103 <tr>
104 <td>_unknown</td>
105 <td>U16</td>
106 <td> </td>
107 <td>
108
109  
110 </td>
111 <td>
112 <b></b>
113  
114 </td>
115 </tr>
116 <tr>
117 <td>length</td>
118 <td>U16</td>
119 <td> </td>
120 <td>
121
122
123  
124 </td>
125 <td>
126 <b></b>
127  
128 </td>
129 </tr>
130 <tr>
131 <td>type</td>
132 <td>U16</td>
133 <td> </td>
134 <td>
135
136  
137 </td>
138 <td>
139 <b></b>
140  
141 </td>
142 </tr>
143 </table>
144
145 <h2>Primitive types used in the protocol.</h2>
146
147 <p>Apart from the basic types, I need to define some extra types to
148 deal with fixed-point values (based on integer types) or fixed-length
149 strings (either 7-bit-ascii or more limited (<code>A</code>), or UCS-2
150 based (<code>S</code>)).</p>
151
152 <h4>TYPE username</h4>
153 BASE TYPE A, LENGTH 10, MULTIPLIER <br />
154
155 <p>The basic user or login name, used throughout the protocol
156 as a handle to the user.</p>
157
158 <h4>TYPE roomname</h4>
159 BASE TYPE S, LENGTH 25, MULTIPLIER <br />
160 <!-- argh, how horribly broken -->
161
162 <p>Many strings in the protocol are fixed-width for no good reason
163 (maybe this is one reason for using compression in newer versions, as
164 the packets itself are wasting lots of space.</p>
165
166 <h4>TYPE realname</h4>
167 BASE TYPE S, LENGTH 50, MULTIPLIER <br />
168 <h4>TYPE email</h4>
169 BASE TYPE S, LENGTH 70, MULTIPLIER <br />
170 <h4>TYPE userinfo</h4>
171 BASE TYPE S, LENGTH 1000, MULTIPLIER <br />
172 <h4>TYPE url</h4>
173 BASE TYPE A, LENGTH 100, MULTIPLIER <br />
174
175 <p>Used in user_record.</p>
176
177 <h4>TYPE locale</h4>
178 BASE TYPE A, LENGTH 5, MULTIPLIER <br />
179
180 <p>A kind of locale specifier. It seems the general format seems to be
181 lowercase language, underscore, uppercase location, e.g. en_US. More
182 fancy specifications don't fit.</p>
183
184 <h4>TYPE flag</h4>
185 BASE TYPE U8, LENGTH , MULTIPLIER 1<br />
186
187 <p>Just a simple boolean value. 0 means false, and 1 generally true,
188 but I suggest accepting != 0 as true.</p>
189
190 <h4>TYPE komi16</h4>
191 BASE TYPE I16, LENGTH , MULTIPLIER 2<br />
192 <h4>TYPE komi32</h4>
193 BASE TYPE I32, LENGTH , MULTIPLIER 2<br />
194 <h4>TYPE komi324</h4>
195 BASE TYPE I32, LENGTH , MULTIPLIER 4<br />
196
197 <p>Komi values are multiplied by 2 to make them integer in the
198 protocol. Well, *most* of the time at least...</p>
199
200 <h4>TYPE result</h4>
201 BASE TYPE I32, LENGTH , MULTIPLIER 2<br />
202
203 <p>The game result is also multiplied by two to give it higher
204 resolution. There are also special values for wins by time etc., either
205 in result or in the score* types, or both :)</p>
206
207 <h4>TYPE score16</h4>
208 BASE TYPE I16, LENGTH , MULTIPLIER 4<br />
209 <h4>TYPE score32</h4>
210 BASE TYPE I32, LENGTH , MULTIPLIER 4<br />
211 <h4>TYPE score1000</h4>
212 BASE TYPE I32, LENGTH , MULTIPLIER 1000<br />
213
214 <p>A score value (used for displaying the score at the end of a game)
215 are multiplied by four for a change (the 0.25 resolution is not
216 used). In game structures it is encoded by dividing by two, though, so
217 watch out! And in some others, it's encoded by multiplying by 1000...
218 yuck!</p>
219
220 <h4>TYPE time</h4>
221 BASE TYPE U32, LENGTH , MULTIPLIER 1000<br />
222
223 <p>Time values are multiplied by 1000, giving them millisecond
224 accuracy.</p>
225
226 <h4>TYPE timestamp</h4>
227 BASE TYPE U64, LENGTH , MULTIPLIER 1000<br />
228
229 <p>64 bit timeval, milliseconds since posix epoch, e.g. <code>my
230 ($year, $month, $day) = (gmtime $date * 0.001)[5,4,3];</code>
231 </p>
232
233 <h4>TYPE password</h4>
234 BASE TYPE U64, LENGTH , MULTIPLIER <br />
235
236 <p>Password is a number calculated as follows (VERY insecure, basically
237 plaintext!): <code>password = 0; for char in characters do password ←
238 password * 1055 + ascii_code (char)</code>
239 </p>
240
241 <h2>Enumeration and set types used in the protocol.</h2>
242
243 <h4>enum: GAMETYPE</h4>
244 <p>
245 </p>
246 <table border="1" width="100%">
247 <tr>
248 <th width="10%">NAME</th>
249 <th width="8%">TYPE</th>
250 <th width="4%">VALUE</th>
251 <th>DESCRIPTION</th>
252 <th width="10%">GUARD</th>
253 </tr>
254 <tr>
255 <td>DEMONSTRATION</td>
256 <td></td>
257 <td>0 </td>
258 <td>
259
260  
261 </td>
262 <td>
263 <b></b>
264  
265 </td>
266 </tr>
267 <tr>
268 <td>TEACHING</td>
269 <td></td>
270 <td>1 </td>
271 <td>
272
273  
274 </td>
275 <td>
276 <b></b>
277  
278 </td>
279 </tr>
280 <tr>
281 <td>FREE</td>
282 <td></td>
283 <td>2 </td>
284 <td>
285
286  
287 </td>
288 <td>
289 <b></b>
290  
291 </td>
292 </tr>
293 <tr>
294 <td>RATED</td>
295 <td></td>
296 <td>3 </td>
297 <td>
298
299  
300 </td>
301 <td>
302 <b></b>
303  
304 </td>
305 </tr>
306 <tr>
307 <td>TYPE4</td>
308 <td></td>
309 <td>4 </td>
310 <td>
311 Probably not used, but the protocol has space for it it seems.
312
313  
314 </td>
315 <td>
316 <b></b>
317  
318 </td>
319 </tr>
320 </table>
321
322 <h4>enum: GAMEOPT</h4>
323 <p>
324 </p>
325 <table border="1" width="100%">
326 <tr>
327 <th width="10%">NAME</th>
328 <th width="8%">TYPE</th>
329 <th width="4%">VALUE</th>
330 <th>DESCRIPTION</th>
331 <th width="10%">GUARD</th>
332 </tr>
333 <tr>
334 <td>NONE</td>
335 <td></td>
336 <td>0 </td>
337 <td>
338
339  
340 </td>
341 <td>
342 <b></b>
343  
344 </td>
345 </tr>
346 <tr>
347 <td>LECTURE</td>
348 <td></td>
349 <td>1 </td>
350 <td>
351
352  
353 </td>
354 <td>
355 <b></b>
356  
357 </td>
358 </tr>
359 <tr>
360 <td>PRIVATE</td>
361 <td></td>
362 <td>2 </td>
363 <td>
364
365  
366 </td>
367 <td>
368 <b></b>
369  
370 </td>
371 </tr>
372 <tr>
373 <td>SIMUL</td>
374 <td></td>
375 <td>3 </td>
376 <td>
377
378  
379 </td>
380 <td>
381 <b></b>
382  
383 </td>
384 </tr>
385 </table>
386
387 <h4>set: GAMEFLAG</h4>
388 <p>
389 </p>
390 <table border="1" width="100%">
391 <tr>
392 <th width="10%">NAME</th>
393 <th width="8%">TYPE</th>
394 <th width="4%">VALUE</th>
395 <th>DESCRIPTION</th>
396 <th width="10%">GUARD</th>
397 </tr>
398 <tr>
399 <td>SCORED</td>
400 <td></td>
401 <td>1 </td>
402 <td>
403
404  
405 </td>
406 <td>
407 <b></b>
408  
409 </td>
410 </tr>
411 <tr>
412 <td>ADJOURNED</td>
413 <td></td>
414 <td>2 </td>
415 <td>
416
417  
418 </td>
419 <td>
420 <b></b>
421  
422 </td>
423 </tr>
424 <tr>
425 <td>UPLOADED</td>
426 <td></td>
427 <td>4 </td>
428 <td>
429
430  
431 </td>
432 <td>
433 <b></b>
434  
435 </td>
436 </tr>
437 </table>
438
439 <h4>set: ROOMFLAG</h4>
440 <p>
441 </p>
442 <table border="1" width="100%">
443 <tr>
444 <th width="10%">NAME</th>
445 <th width="8%">TYPE</th>
446 <th width="4%">VALUE</th>
447 <th>DESCRIPTION</th>
448 <th width="10%">GUARD</th>
449 </tr>
450 <tr>
451 <td>ADMIN</td>
452 <td></td>
453 <td>0x01 </td>
454 <td>
455
456  
457 </td>
458 <td>
459 <b></b>
460  
461 </td>
462 </tr>
463 <tr>
464 <td>DEFAULT</td>
465 <td></td>
466 <td>0x04 </td>
467 <td>
468
469  
470 </td>
471 <td>
472 <b></b>
473  
474 </td>
475 </tr>
476 <tr>
477 <td>PRIVATE</td>
478 <td></td>
479 <td>0x10 </td>
480 <td>
481
482  
483 </td>
484 <td>
485 <b></b>
486  
487 </td>
488 </tr>
489 </table>
490
491 <h4>set: GAMESTATUS</h4>
492 <p>
493 </p>
494 <table border="1" width="100%">
495 <tr>
496 <th width="10%">NAME</th>
497 <th width="8%">TYPE</th>
498 <th width="4%">VALUE</th>
499 <th>DESCRIPTION</th>
500 <th width="10%">GUARD</th>
501 </tr>
502 <tr>
503 <td>INPLAY</td>
504 <td></td>
505 <td>0x80 </td>
506 <td>
507
508  
509 </td>
510 <td>
511 <b></b>
512  
513 </td>
514 </tr>
515 </table>
516
517 <h4>enum: SCORE</h4>
518 <p>
519 <p>Special score values, in addition to numerical scores. Some are also used with their
520 negative value.</p>
521 </p>
522 <table border="1" width="100%">
523 <tr>
524 <th width="10%">NAME</th>
525 <th width="8%">TYPE</th>
526 <th width="4%">VALUE</th>
527 <th>DESCRIPTION</th>
528 <th width="10%">GUARD</th>
529 </tr>
530 <tr>
531 <td>TIMEOUT</td>
532 <td></td>
533 <td>16384 / 4 </td>
534 <td>
535 Also used negatively to score for white instead of black.
536
537
538  
539 </td>
540 <td>
541 <b></b>
542  
543 </td>
544 </tr>
545 <tr>
546 <td>RESIGN</td>
547 <td></td>
548 <td>16385 / 4 </td>
549 <td>
550 Also used negatively to score for white instead of black.
551
552
553  
554 </td>
555 <td>
556 <b></b>
557  
558 </td>
559 </tr>
560 <tr>
561 <td>FORFEIT</td>
562 <td></td>
563 <td> 0 / 4 </td>
564 <td>
565 Also used negatively to score for white instead of black.
566
567
568  
569 </td>
570 <td>
571 <b></b>
572  
573 </td>
574 </tr>
575 <tr>
576 <td>JIGO</td>
577 <td></td>
578 <td>16386 / 4 </td>
579 <td>
580
581
582  
583 </td>
584 <td>
585 <b></b>
586  
587 </td>
588 </tr>
589 <tr>
590 <td>NO_RESULT</td>
591 <td></td>
592 <td>16386 / 4 </td>
593 <td>
594
595  
596 </td>
597 <td>
598 <b></b>
599  
600 </td>
601 </tr>
602 <tr>
603 <td>ADJOURNED</td>
604 <td></td>
605 <td>16387 / 4 </td>
606 <td>
607
608  
609 </td>
610 <td>
611 <b></b>
612  
613 </td>
614 </tr>
615 <tr>
616 <td>UNKNOWN</td>
617 <td></td>
618 <td>16389 / 4 </td>
619 <td>
620
621  
622 </td>
623 <td>
624 <b></b>
625  
626 </td>
627 </tr>
628 </table>
629
630 <h4>enum: RULESET</h4>
631 <p>
632 </p>
633 <table border="1" width="100%">
634 <tr>
635 <th width="10%">NAME</th>
636 <th width="8%">TYPE</th>
637 <th width="4%">VALUE</th>
638 <th>DESCRIPTION</th>
639 <th width="10%">GUARD</th>
640 </tr>
641 <tr>
642 <td>JAPANESE</td>
643 <td></td>
644 <td>0 </td>
645 <td>
646
647  
648 </td>
649 <td>
650 <b></b>
651  
652 </td>
653 </tr>
654 <tr>
655 <td>CHINESE </td>
656 <td></td>
657 <td>1 </td>
658 <td>
659
660  
661 </td>
662 <td>
663 <b></b>
664  
665 </td>
666 </tr>
667 <tr>
668 <td>AGA</td>
669 <td></td>
670 <td>2 </td>
671 <td>
672
673  
674 </td>
675 <td>
676 <b></b>
677  
678 </td>
679 </tr>
680 <tr>
681 <td>NEW_ZEALAND</td>
682 <td></td>
683 <td>3 </td>
684 <td>
685
686  
687 </td>
688 <td>
689 <b></b>
690  
691 </td>
692 </tr>
693 </table>
694
695 <h4>enum: TIMESYS</h4>
696 <p>
697 </p>
698 <table border="1" width="100%">
699 <tr>
700 <th width="10%">NAME</th>
701 <th width="8%">TYPE</th>
702 <th width="4%">VALUE</th>
703 <th>DESCRIPTION</th>
704 <th width="10%">GUARD</th>
705 </tr>
706 <tr>
707 <td>NONE</td>
708 <td></td>
709 <td>0 </td>
710 <td>
711
712  
713 </td>
714 <td>
715 <b></b>
716  
717 </td>
718 </tr>
719 <tr>
720 <td>ABSOLUTE</td>
721 <td></td>
722 <td>1 </td>
723 <td>
724
725  
726 </td>
727 <td>
728 <b></b>
729  
730 </td>
731 </tr>
732 <tr>
733 <td>BYO_YOMI</td>
734 <td></td>
735 <td>2 </td>
736 <td>
737
738  
739 </td>
740 <td>
741 <b></b>
742  
743 </td>
744 </tr>
745 <tr>
746 <td>CANADIAN</td>
747 <td></td>
748 <td>3 </td>
749 <td>
750
751  
752 </td>
753 <td>
754 <b></b>
755  
756 </td>
757 </tr>
758 </table>
759
760 <h4>enum: COLOUR</h4>
761 <p>
762 <p>Convinience constants used in several places.</p>
763 </p>
764 <table border="1" width="100%">
765 <tr>
766 <th width="10%">NAME</th>
767 <th width="8%">TYPE</th>
768 <th width="4%">VALUE</th>
769 <th>DESCRIPTION</th>
770 <th width="10%">GUARD</th>
771 </tr>
772 <tr>
773 <td>BLACK</td>
774 <td></td>
775 <td>0 </td>
776 <td>
777
778  
779 </td>
780 <td>
781 <b></b>
782  
783 </td>
784 </tr>
785 <tr>
786 <td>WHITE</td>
787 <td></td>
788 <td>1 </td>
789 <td>
790
791  
792 </td>
793 <td>
794 <b></b>
795  
796 </td>
797 </tr>
798 </table>
799
800 <h2>Structs used in send &amp; receive messages</h2>
801
802 <h4>STRUCTURE user</h4>
803 CLASS: KGS::User<br />
804 <p>
805
806 <p>Almost everywhere a user + flags is required, even used in some places
807 where only a username is required. I see no general rule on when a
808 complete user and when a partial user is required.</p>
809 </p>
810 <table border="1" width="100%">
811 <tr>
812 <th width="10%">NAME</th>
813 <th width="8%">TYPE</th>
814 <th width="4%">VALUE</th>
815 <th>DESCRIPTION</th>
816 <th width="10%">GUARD</th>
817 </tr>
818 <tr>
819 <td>name</td>
820 <td>username</td>
821 <td> </td>
822 <td>
823
824  
825 </td>
826 <td>
827 <b></b>
828  
829 </td>
830 </tr>
831 <tr>
832 <td>flags</td>
833 <td>U32</td>
834 <td>1 </td>
835 <td>
836
837  
838 </td>
839 <td>
840 <b></b>
841  
842 </td>
843 </tr>
844 </table>
845
846 <h4>STRUCTURE rules</h4>
847 CLASS: KGS::Rules<br />
848 <p>
849
850 <p>This structure is used for challanges as well as in the special
851 TREE "subprotocol". It tightly encodes the game parameters.</p>
852 </p>
853 <table border="1" width="100%">
854 <tr>
855 <th width="10%">NAME</th>
856 <th width="8%">TYPE</th>
857 <th width="4%">VALUE</th>
858 <th>DESCRIPTION</th>
859 <th width="10%">GUARD</th>
860 </tr>
861 <tr>
862 <td>ruleset</td>
863 <td>U8</td>
864 <td> </td>
865 <td>
866
867  
868 </td>
869 <td>
870 <b></b>
871  
872 </td>
873 </tr>
874 <tr>
875 <td>size</td>
876 <td>U8</td>
877 <td> </td>
878 <td>
879
880  
881 </td>
882 <td>
883 <b></b>
884  
885 </td>
886 </tr>
887 <tr>
888 <td>handicap</td>
889 <td>U8</td>
890 <td> </td>
891 <td>
892
893  
894 </td>
895 <td>
896 <b></b>
897  
898 </td>
899 </tr>
900 <tr>
901 <td>komi</td>
902 <td>komi16</td>
903 <td> </td>
904 <td>
905
906  
907 </td>
908 <td>
909 <b></b>
910  
911 </td>
912 </tr>
913 <tr>
914 <td>timesys</td>
915 <td>U8</td>
916 <td> </td>
917 <td>
918
919  
920 </td>
921 <td>
922 <b></b>
923  
924 </td>
925 </tr>
926 <tr>
927 <td>time</td>
928 <td>U32</td>
929 <td> </td>
930 <td>
931
932  
933 </td>
934 <td>
935 <b></b>
936  
937 </td>
938 </tr>
939 <tr>
940 <td>interval</td>
941 <td>U32</td>
942 <td> </td>
943 <td>
944 byo-yomi time / canadian time
945
946  
947 </td>
948 <td>
949 <b></b>
950  
951 </td>
952 </tr>
953 <tr>
954 <td>count</td>
955 <td>U16</td>
956 <td> </td>
957 <td>
958 periods / moves
959
960  
961 </td>
962 <td>
963 <b></b>
964  
965 </td>
966 </tr>
967 </table>
968
969 <h2>Structs used in messages from the client</h2>
970
971 <h2>Client-generated messages</h2>
972
973 <h4>
974 <a name="C0000"></a>ORIGIN: CLIENT;
975 MESSAGE: login</h4>
976 NUMERIC TYPE (hex): 0000<p>
977
978 <p>Sent to login, usually the first message sent. The password needs to be set when the
979 guest flag is true.
980 Possible replies: <a href="#S0001">login(0001)</a>
981 <a href="#S0002">login(0002)</a>
982 <a href="#S0003">login(0003)</a>
983 <a href="#S0004">login(0004)</a>
984 <a href="#S0005">login(0005)</a>
985 <a href="#S0006">login(0006)</a>
986 <a href="#S0018">login(0018)</a>
987 <a href="#S001c">login(001c)</a>
988 <a href="#S0022">login(0022)</a>. Followed by: <a href="#S001b">timewarning_default(001b)</a> <a href="#S0411">chal_defaults(0411)</a>
989 </p>
990 </p>
991 <table border="1" width="100%">
992 <tr>
993 <th width="10%">NAME</th>
994 <th width="8%">TYPE</th>
995 <th width="4%">VALUE</th>
996 <th>DESCRIPTION</th>
997 <th width="10%">GUARD</th>
998 </tr>
999 <tr>
1000 <td>ver_major</td>
1001 <td>U32</td>
1002 <td>2 </td>
1003 <td>
1004
1005  
1006 </td>
1007 <td>
1008 <b></b>
1009  
1010 </td>
1011 </tr>
1012 <tr>
1013 <td>ver_minor</td>
1014 <td>U32</td>
1015 <td>5 </td>
1016 <td>
1017
1018  
1019 </td>
1020 <td>
1021 <b></b>
1022  
1023 </td>
1024 </tr>
1025 <tr>
1026 <td>ver_micro</td>
1027 <td>U32</td>
1028 <td>2 </td>
1029 <td>
1030
1031  
1032 </td>
1033 <td>
1034 <b></b>
1035  
1036 </td>
1037 </tr>
1038 <tr>
1039 <td>name</td>
1040 <td>username</td>
1041 <td> </td>
1042 <td>
1043
1044  
1045 </td>
1046 <td>
1047 <b></b>
1048  
1049 </td>
1050 </tr>
1051 <tr>
1052 <td>password</td>
1053 <td>password</td>
1054 <td>0 </td>
1055 <td>
1056
1057  
1058 </td>
1059 <td>
1060 <b></b>
1061  
1062 </td>
1063 </tr>
1064 <tr>
1065 <td>guest</td>
1066 <td>flag</td>
1067 <td>1 </td>
1068 <td>
1069
1070  
1071 </td>
1072 <td>
1073 <b></b>
1074  
1075 </td>
1076 </tr>
1077 <tr>
1078 <td>_unknown3</td>
1079 <td>U16</td>
1080 <td>0 </td>
1081 <td>
1082
1083  
1084 </td>
1085 <td>
1086 <b></b>
1087  
1088 </td>
1089 </tr>
1090 <tr>
1091 <td>locale</td>
1092 <td>locale</td>
1093 <td>"en_US" </td>
1094 <td>
1095
1096  
1097 </td>
1098 <td>
1099 <b></b>
1100  
1101 </td>
1102 </tr>
1103 <tr>
1104 <td>clientver</td>
1105 <td>DATA</td>
1106 <td>"1.4.1_01:Swing app:Sun Microsystems Inc." </td>
1107 <td>
1108 The "default" is the java vm version, not exactly he client version. However,
1109 you should always send a text like "Jonathan's C client bersion 0.6" or somesuch,
1110 so the server can, if necessary, block broken clients or client versions.
1111
1112  
1113 </td>
1114 <td>
1115 <b></b>
1116  
1117 </td>
1118 </tr>
1119 </table>
1120
1121 <h4>
1122 <a name="C0007"></a>ORIGIN: CLIENT;
1123 MESSAGE: req_userinfo</h4>
1124 NUMERIC TYPE (hex): 0007<p>
1125 <p>Request info about a certain user. Possible reply: <a href="#S0008">userinfo(0008)</a>
1126 </p>
1127 </p>
1128 <table border="1" width="100%">
1129 <tr>
1130 <th width="10%">NAME</th>
1131 <th width="8%">TYPE</th>
1132 <th width="4%">VALUE</th>
1133 <th>DESCRIPTION</th>
1134 <th width="10%">GUARD</th>
1135 </tr>
1136 <tr>
1137 <td>name</td>
1138 <td>username</td>
1139 <td> </td>
1140 <td>
1141
1142  
1143 </td>
1144 <td>
1145 <b></b>
1146  
1147 </td>
1148 </tr>
1149 </table>
1150
1151 <h4>
1152 <a name="C0007"></a>ORIGIN: CLIENT;
1153 MESSAGE: req_userinfo</h4>
1154 NUMERIC TYPE (hex): 0007<p>
1155 <p>Request userinfo(?). unverified...</p>
1156 </p>
1157 <table border="1" width="100%">
1158 <tr>
1159 <th width="10%">NAME</th>
1160 <th width="8%">TYPE</th>
1161 <th width="4%">VALUE</th>
1162 <th>DESCRIPTION</th>
1163 <th width="10%">GUARD</th>
1164 </tr>
1165 <tr>
1166 <td>name</td>
1167 <td>username</td>
1168 <td> </td>
1169 <td>
1170
1171  
1172 </td>
1173 <td>
1174 <b></b>
1175  
1176 </td>
1177 </tr>
1178 </table>
1179
1180 <h4>
1181 <a name="C0007"></a>ORIGIN: CLIENT;
1182 MESSAGE: update_userinfo</h4>
1183 NUMERIC TYPE (hex): 0007<p>
1184 <p>Update user info. Message structure is very similar
1185 to <a href="#S0008">userinfo(0008)</a>.</p>
1186 </p>
1187 <table border="1" width="100%">
1188 <tr>
1189 <th width="10%">NAME</th>
1190 <th width="8%">TYPE</th>
1191 <th width="4%">VALUE</th>
1192 <th>DESCRIPTION</th>
1193 <th width="10%">GUARD</th>
1194 </tr>
1195 <tr>
1196 <td>setpass</td>
1197 <td>flag</td>
1198 <td> </td>
1199 <td>
1200 Should the password be updated?
1201
1202  
1203 </td>
1204 <td>
1205 <b></b>
1206  
1207 </td>
1208 </tr>
1209 <tr>
1210 <td>password</td>
1211 <td>password</td>
1212 <td>0 </td>
1213 <td>
1214
1215  
1216 </td>
1217 <td>
1218 <b></b>
1219  
1220 </td>
1221 </tr>
1222 <tr>
1223 <td>realname</td>
1224 <td>realname</td>
1225 <td> </td>
1226 <td>
1227
1228  
1229 </td>
1230 <td>
1231 <b></b>
1232  
1233 </td>
1234 </tr>
1235 <tr>
1236 <td>email</td>
1237 <td>email</td>
1238 <td> </td>
1239 <td>
1240
1241  
1242 </td>
1243 <td>
1244 <b></b>
1245  
1246 </td>
1247 </tr>
1248 <tr>
1249 <td>info</td>
1250 <td>userinfo</td>
1251 <td> </td>
1252 <td>
1253
1254  
1255 </td>
1256 <td>
1257 <b></b>
1258  
1259 </td>
1260 </tr>
1261 <tr>
1262 <td>homepage</td>
1263 <td>url</td>
1264 <td> </td>
1265 <td>
1266
1267  
1268 </td>
1269 <td>
1270 <b></b>
1271  
1272 </td>
1273 </tr>
1274 <tr>
1275 <td>_unused</td>
1276 <td>U64</td>
1277 <td>0 </td>
1278 <td>
1279
1280  
1281 </td>
1282 <td>
1283 <b></b>
1284  
1285 </td>
1286 </tr>
1287 <tr>
1288 <td>_unused</td>
1289 <td>U64</td>
1290 <td>0 </td>
1291 <td>
1292
1293  
1294 </td>
1295 <td>
1296 <b></b>
1297  
1298 </td>
1299 </tr>
1300 </table>
1301
1302 <h4>
1303 <a name="C0013"></a>ORIGIN: CLIENT;
1304 MESSAGE: msg_chat</h4>
1305 NUMERIC TYPE (hex): 0013<p>
1306 <p>This message is sent to initiate or continue a private chat with
1307 a user. You'll always receive a copy of what you have sent back
1308 from the server (as usual).</p>
1309 </p>
1310 <table border="1" width="100%">
1311 <tr>
1312 <th width="10%">NAME</th>
1313 <th width="8%">TYPE</th>
1314 <th width="4%">VALUE</th>
1315 <th>DESCRIPTION</th>
1316 <th width="10%">GUARD</th>
1317 </tr>
1318 <tr>
1319 <td>name</td>
1320 <td>username</td>
1321 <td> </td>
1322 <td>
1323 Name of sender ("yourself").
1324
1325  
1326 </td>
1327 <td>
1328 <b></b>
1329  
1330 </td>
1331 </tr>
1332 <tr>
1333 <td>name2</td>
1334 <td>username</td>
1335 <td> </td>
1336 <td>
1337 Name of recipient.
1338
1339  
1340 </td>
1341 <td>
1342 <b></b>
1343  
1344 </td>
1345 </tr>
1346 <tr>
1347 <td>message</td>
1348 <td>STRING</td>
1349 <td> </td>
1350 <td>
1351 The message.
1352
1353  
1354 </td>
1355 <td>
1356 <b></b>
1357  
1358 </td>
1359 </tr>
1360 </table>
1361
1362 <h4>
1363 <a name="C0014"></a>ORIGIN: CLIENT;
1364 MESSAGE: req_stats</h4>
1365 NUMERIC TYPE (hex): 0014<p>
1366 <p>Request server statistics. Replied with <a href="#S0015">stats(0015)</a>
1367 </p>
1368 </p>
1369 <table border="1" width="100%">
1370 <tr>
1371 <th width="10%">NAME</th>
1372 <th width="8%">TYPE</th>
1373 <th width="4%">VALUE</th>
1374 <th>DESCRIPTION</th>
1375 <th width="10%">GUARD</th>
1376 </tr>
1377 </table>
1378
1379 <h4>
1380 <a name="C0016"></a>ORIGIN: CLIENT;
1381 MESSAGE: idle_reset</h4>
1382 NUMERIC TYPE (hex): 0016<p>
1383 <p>Send in response to <a href="#S0016">idle_warn(0016)</a> to keep the server from disconnecting.</p>
1384 </p>
1385 <table border="1" width="100%">
1386 <tr>
1387 <th width="10%">NAME</th>
1388 <th width="8%">TYPE</th>
1389 <th width="4%">VALUE</th>
1390 <th>DESCRIPTION</th>
1391 <th width="10%">GUARD</th>
1392 </tr>
1393 </table>
1394
1395 <h4>
1396 <a name="C001d"></a>ORIGIN: CLIENT;
1397 MESSAGE: ping</h4>
1398 NUMERIC TYPE (hex): 001d<p>
1399 <p>Wild guess, I send it in <a href="#S0016">idle_warn(0016)</a>.</p>
1400 </p>
1401 <table border="1" width="100%">
1402 <tr>
1403 <th width="10%">NAME</th>
1404 <th width="8%">TYPE</th>
1405 <th width="4%">VALUE</th>
1406 <th>DESCRIPTION</th>
1407 <th width="10%">GUARD</th>
1408 </tr>
1409 </table>
1410
1411 <h4>
1412 <a name="C001e"></a>ORIGIN: CLIENT;
1413 MESSAGE: req_usergraph</h4>
1414 NUMERIC TYPE (hex): 001e<p>
1415 <p>Request user graph data, replied with <a href="#S001e">usergraph(001e)</a>.</p>
1416 </p>
1417 <table border="1" width="100%">
1418 <tr>
1419 <th width="10%">NAME</th>
1420 <th width="8%">TYPE</th>
1421 <th width="4%">VALUE</th>
1422 <th>DESCRIPTION</th>
1423 <th width="10%">GUARD</th>
1424 </tr>
1425 <tr>
1426 <td>name</td>
1427 <td>username</td>
1428 <td> </td>
1429 <td>
1430
1431  
1432 </td>
1433 <td>
1434 <b></b>
1435  
1436 </td>
1437 </tr>
1438 </table>
1439
1440 <h4>
1441 <a name="C001f"></a>ORIGIN: CLIENT;
1442 MESSAGE: fetch_memos</h4>
1443 NUMERIC TYPE (hex): 001f<p>
1444 <p>Unclear. Fetch all outstanding memos? Replied with <a href="#S001f">memo(001f)</a>
1445 </p>
1446 </p>
1447 <table border="1" width="100%">
1448 <tr>
1449 <th width="10%">NAME</th>
1450 <th width="8%">TYPE</th>
1451 <th width="4%">VALUE</th>
1452 <th>DESCRIPTION</th>
1453 <th width="10%">GUARD</th>
1454 </tr>
1455 </table>
1456
1457 <h4>
1458 <a name="C0021"></a>ORIGIN: CLIENT;
1459 MESSAGE: req_pic</h4>
1460 NUMERIC TYPE (hex): 0021<p>
1461 <p>Request a user picture from the server. Results in a <a href="#S0021">userpic(0021)</a>
1462 or a timeout.</p>
1463 </p>
1464 <table border="1" width="100%">
1465 <tr>
1466 <th width="10%">NAME</th>
1467 <th width="8%">TYPE</th>
1468 <th width="4%">VALUE</th>
1469 <th>DESCRIPTION</th>
1470 <th width="10%">GUARD</th>
1471 </tr>
1472 <tr>
1473 <td>name</td>
1474 <td>username</td>
1475 <td> </td>
1476 <td>
1477
1478  
1479 </td>
1480 <td>
1481 <b></b>
1482  
1483 </td>
1484 </tr>
1485 </table>
1486
1487 <h4>
1488 <a name="C0021"></a>ORIGIN: CLIENT;
1489 MESSAGE: upload_pic</h4>
1490 NUMERIC TYPE (hex): 0021<p>
1491 Same code as pic_req, but with an additional data section that
1492 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels.
1493 </p>
1494 <table border="1" width="100%">
1495 <tr>
1496 <th width="10%">NAME</th>
1497 <th width="8%">TYPE</th>
1498 <th width="4%">VALUE</th>
1499 <th>DESCRIPTION</th>
1500 <th width="10%">GUARD</th>
1501 </tr>
1502 <tr>
1503 <td>name</td>
1504 <td>username</td>
1505 <td> </td>
1506 <td>
1507
1508  
1509 </td>
1510 <td>
1511 <b></b>
1512  
1513 </td>
1514 </tr>
1515 <tr>
1516 <td>data</td>
1517 <td>DATA</td>
1518 <td> </td>
1519 <td>
1520
1521  
1522 </td>
1523 <td>
1524 <b></b>
1525  
1526 </td>
1527 </tr>
1528 </table>
1529
1530 <h4>
1531 <a name="C0023"></a>ORIGIN: CLIENT;
1532 MESSAGE: send_memo</h4>
1533 NUMERIC TYPE (hex): 0023<p>
1534 </p>
1535 <table border="1" width="100%">
1536 <tr>
1537 <th width="10%">NAME</th>
1538 <th width="8%">TYPE</th>
1539 <th width="4%">VALUE</th>
1540 <th>DESCRIPTION</th>
1541 <th width="10%">GUARD</th>
1542 </tr>
1543 <tr>
1544 <td>name</td>
1545 <td>username</td>
1546 <td> </td>
1547 <td>
1548
1549  
1550 </td>
1551 <td>
1552 <b></b>
1553  
1554 </td>
1555 </tr>
1556 <tr>
1557 <td>msg</td>
1558 <td>STRING</td>
1559 <td> </td>
1560 <td>
1561
1562  
1563 </td>
1564 <td>
1565 <b></b>
1566  
1567 </td>
1568 </tr>
1569 </table>
1570
1571 <h4>
1572 <a name="C0100"></a>ORIGIN: CLIENT;
1573 MESSAGE: gnotice</h4>
1574 NUMERIC TYPE (hex): 0100<p>
1575 <p>Send a global message. Maybe. Never tried, for obvious reasons :/. Results
1576 in a <a href="#S0100">gnotice(0100)</a> sent to all users.</p>
1577 </p>
1578 <table border="1" width="100%">
1579 <tr>
1580 <th width="10%">NAME</th>
1581 <th width="8%">TYPE</th>
1582 <th width="4%">VALUE</th>
1583 <th>DESCRIPTION</th>
1584 <th width="10%">GUARD</th>
1585 </tr>
1586 <tr>
1587 <td>notice</td>
1588 <td>STRING</td>
1589 <td> </td>
1590 <td>
1591
1592  
1593 </td>
1594 <td>
1595 <b></b>
1596  
1597 </td>
1598 </tr>
1599 </table>
1600
1601 <h4>
1602 <a name="C0200"></a>ORIGIN: CLIENT;
1603 MESSAGE: notify_add</h4>
1604 NUMERIC TYPE (hex): 0200<p>
1605
1606 <p>Probably setting a notifier on a username, to get informed about
1607 changes using messages. sending your own
1608 username gives you a disconnect, so don't do that at home, kids!</p>
1609 </p>
1610 <table border="1" width="100%">
1611 <tr>
1612 <th width="10%">NAME</th>
1613 <th width="8%">TYPE</th>
1614 <th width="4%">VALUE</th>
1615 <th>DESCRIPTION</th>
1616 <th width="10%">GUARD</th>
1617 </tr>
1618 <tr>
1619 <td>name</td>
1620 <td>username</td>
1621 <td> </td>
1622 <td>
1623
1624  
1625 </td>
1626 <td>
1627 <b></b>
1628  
1629 </td>
1630 </tr>
1631 </table>
1632
1633 <h4>
1634 <a name="C0201"></a>ORIGIN: CLIENT;
1635 MESSAGE: notify_del</h4>
1636 NUMERIC TYPE (hex): 0201<p>
1637
1638 <p>Probably remove the notifier again.</p>
1639 </p>
1640 <table border="1" width="100%">
1641 <tr>
1642 <th width="10%">NAME</th>
1643 <th width="8%">TYPE</th>
1644 <th width="4%">VALUE</th>
1645 <th>DESCRIPTION</th>
1646 <th width="10%">GUARD</th>
1647 </tr>
1648 <tr>
1649 <td>name</td>
1650 <td>username</td>
1651 <td> </td>
1652 <td>
1653
1654  
1655 </td>
1656 <td>
1657 <b></b>
1658  
1659 </td>
1660 </tr>
1661 </table>
1662
1663 <h4>
1664 <a name="C0318"></a>ORIGIN: CLIENT;
1665 MESSAGE: list_rooms</h4>
1666 NUMERIC TYPE (hex): 0318<p>
1667 <p>List the rooms in a specific group/category. Results in a <a href="#S0318">upd_rooms(0318)</a> message.</p>
1668 </p>
1669 <table border="1" width="100%">
1670 <tr>
1671 <th width="10%">NAME</th>
1672 <th width="8%">TYPE</th>
1673 <th width="4%">VALUE</th>
1674 <th>DESCRIPTION</th>
1675 <th width="10%">GUARD</th>
1676 </tr>
1677 <tr>
1678 <td>group</td>
1679 <td>U8</td>
1680 <td> </td>
1681 <td>
1682
1683  
1684 </td>
1685 <td>
1686 <b></b>
1687  
1688 </td>
1689 </tr>
1690 </table>
1691
1692 <h4>
1693 <a name="C031a"></a>ORIGIN: CLIENT;
1694 MESSAGE: new_room</h4>
1695 NUMERIC TYPE (hex): 031a<p>
1696 Create a new room. Not verified.
1697 </p>
1698 <table border="1" width="100%">
1699 <tr>
1700 <th width="10%">NAME</th>
1701 <th width="8%">TYPE</th>
1702 <th width="4%">VALUE</th>
1703 <th>DESCRIPTION</th>
1704 <th width="10%">GUARD</th>
1705 </tr>
1706 <tr>
1707 <td>name</td>
1708 <td>username</td>
1709 <td> </td>
1710 <td>
1711
1712  
1713 </td>
1714 <td>
1715 <b></b>
1716  
1717 </td>
1718 </tr>
1719 <tr>
1720 <td>i1</td>
1721 <td>U32</td>
1722 <td>0 </td>
1723 <td>
1724
1725  
1726 </td>
1727 <td>
1728 <b></b>
1729  
1730 </td>
1731 </tr>
1732 <tr>
1733 <td>b1</td>
1734 <td>U8</td>
1735 <td>0 </td>
1736 <td>
1737
1738  
1739 </td>
1740 <td>
1741 <b></b>
1742  
1743 </td>
1744 </tr>
1745 <tr>
1746 <td>b2</td>
1747 <td>U8</td>
1748 <td>255 </td>
1749 <td>
1750
1751  
1752 </td>
1753 <td>
1754 <b></b>
1755  
1756 </td>
1757 </tr>
1758 <tr>
1759 <td>b3</td>
1760 <td>U8</td>
1761 <td>255 </td>
1762 <td>
1763
1764  
1765 </td>
1766 <td>
1767 <b></b>
1768  
1769 </td>
1770 </tr>
1771 <tr>
1772 <td>group</td>
1773 <td>U8</td>
1774 <td>1 </td>
1775 <td>
1776
1777  
1778 </td>
1779 <td>
1780 <b></b>
1781  
1782 </td>
1783 </tr>
1784 <tr>
1785 <td>name</td>
1786 <td>STRING</td>
1787 <td> </td>
1788 <td>
1789
1790  
1791 </td>
1792 <td>
1793 <b></b>
1794  
1795 </td>
1796 </tr>
1797 <tr>
1798 <td>description</td>
1799 <td>STRING</td>
1800 <td> </td>
1801 <td>
1802
1803  
1804 </td>
1805 <td>
1806 <b></b>
1807  
1808 </td>
1809 </tr>
1810 <tr>
1811 <td>flags</td>
1812 <td>U8</td>
1813 <td> </td>
1814 <td>
1815 See ROOMFLAGs
1816
1817  
1818 </td>
1819 <td>
1820 <b></b>
1821  
1822 </td>
1823 </tr>
1824 </table>
1825
1826 <h4>
1827 <a name="C0413"></a>ORIGIN: CLIENT;
1828 MESSAGE: req_game_record</h4>
1829 NUMERIC TYPE (hex): 0413<p>
1830 <p>Requests part of the users game record to be sent. Results in a <a href="#S0414">game_record(0414)</a> or maybe a timeout.</p>
1831 </p>
1832 <table border="1" width="100%">
1833 <tr>
1834 <th width="10%">NAME</th>
1835 <th width="8%">TYPE</th>
1836 <th width="4%">VALUE</th>
1837 <th>DESCRIPTION</th>
1838 <th width="10%">GUARD</th>
1839 </tr>
1840 <tr>
1841 <td>name</td>
1842 <td>username</td>
1843 <td> </td>
1844 <td>
1845
1846  
1847 </td>
1848 <td>
1849 <b></b>
1850  
1851 </td>
1852 </tr>
1853 <tr>
1854 <td>timestamp</td>
1855 <td>timestamp</td>
1856 <td> </td>
1857 <td>
1858 If zero, start at the newest games, else only send games
1859 before the given timestap.
1860
1861  
1862 </td>
1863 <td>
1864 <b></b>
1865  
1866 </td>
1867 </tr>
1868 </table>
1869
1870 <h4>
1871 <a name="C4300"></a>ORIGIN: CLIENT;
1872 MESSAGE: join_room</h4>
1873 NUMERIC TYPE (hex): 4300<p>
1874 <p>Joins the given room. <a href="#S4300">join_room(4300)</a> messages for yourself
1875 and all users in that room, as well as the initial gamelist, are
1876 send if the room exists. If not, timeout...</p>
1877 </p>
1878 <table border="1" width="100%">
1879 <tr>
1880 <th width="10%">NAME</th>
1881 <th width="8%">TYPE</th>
1882 <th width="4%">VALUE</th>
1883 <th>DESCRIPTION</th>
1884 <th width="10%">GUARD</th>
1885 </tr>
1886 <tr>
1887 <td>channel</td>
1888 <td>U16</td>
1889 <td> </td>
1890 <td>
1891
1892  
1893 </td>
1894 <td>
1895 <b></b>
1896  
1897 </td>
1898 </tr>
1899 <tr>
1900 <td>user</td>
1901 <td>user</td>
1902 <td> </td>
1903 <td>
1904
1905  
1906 </td>
1907 <td>
1908 <b></b>
1909  
1910 </td>
1911 </tr>
1912 </table>
1913
1914 <h4>
1915 <a name="C4301"></a>ORIGIN: CLIENT;
1916 MESSAGE: msg_room</h4>
1917 NUMERIC TYPE (hex): 4301<p>
1918 Send a message to the room.
1919 </p>
1920 <table border="1" width="100%">
1921 <tr>
1922 <th width="10%">NAME</th>
1923 <th width="8%">TYPE</th>
1924 <th width="4%">VALUE</th>
1925 <th>DESCRIPTION</th>
1926 <th width="10%">GUARD</th>
1927 </tr>
1928 <tr>
1929 <td>channel</td>
1930 <td>U16</td>
1931 <td> </td>
1932 <td>
1933
1934  
1935 </td>
1936 <td>
1937 <b></b>
1938  
1939 </td>
1940 </tr>
1941 <tr>
1942 <td>name</td>
1943 <td>username</td>
1944 <td> </td>
1945 <td>
1946 Must be the login-name of the user.
1947
1948  
1949 </td>
1950 <td>
1951 <b></b>
1952  
1953 </td>
1954 </tr>
1955 <tr>
1956 <td>message</td>
1957 <td>STRING</td>
1958 <td> </td>
1959 <td>
1960
1961  
1962 </td>
1963 <td>
1964 <b></b>
1965  
1966 </td>
1967 </tr>
1968 </table>
1969
1970 <h4>
1971 <a name="C4302"></a>ORIGIN: CLIENT;
1972 MESSAGE: part_room</h4>
1973 NUMERIC TYPE (hex): 4302<p>
1974 Remove yourself (or maybe others as admin) from a room.
1975 </p>
1976 <table border="1" width="100%">
1977 <tr>
1978 <th width="10%">NAME</th>
1979 <th width="8%">TYPE</th>
1980 <th width="4%">VALUE</th>
1981 <th>DESCRIPTION</th>
1982 <th width="10%">GUARD</th>
1983 </tr>
1984 <tr>
1985 <td>channel</td>
1986 <td>U16</td>
1987 <td> </td>
1988 <td>
1989
1990  
1991 </td>
1992 <td>
1993 <b></b>
1994  
1995 </td>
1996 </tr>
1997 <tr>
1998 <td>name</td>
1999 <td>username</td>
2000 <td> </td>
2001 <td>
2002
2003  
2004 </td>
2005 <td>
2006 <b></b>
2007  
2008 </td>
2009 </tr>
2010 </table>
2011
2012 <h4>
2013 <a name="C4305"></a>ORIGIN: CLIENT;
2014 MESSAGE: new_game</h4>
2015 NUMERIC TYPE (hex): 4305<p>
2016 <p>Unclear. Start a new game.
2017 <p>Clone: 00000: 20202020 20202020 20202020 20203238 28
2018 00010: 9d000543 0d000000 00000000 00130201 ...C............
2019 00020: 0000ffff ffffffff ffffffff 00000000 ..ÿÿÿÿÿÿÿÿÿÿ....</p>
2020 </p>
2021 </p>
2022 <table border="1" width="100%">
2023 <tr>
2024 <th width="10%">NAME</th>
2025 <th width="8%">TYPE</th>
2026 <th width="4%">VALUE</th>
2027 <th>DESCRIPTION</th>
2028 <th width="10%">GUARD</th>
2029 </tr>
2030 <tr>
2031 <td>channel</td>
2032 <td>U16</td>
2033 <td> </td>
2034 <td>
2035
2036  
2037 </td>
2038 <td>
2039 <b></b>
2040  
2041 </td>
2042 </tr>
2043 <tr>
2044 <td>id</td>
2045 <td>U16</td>
2046 <td> </td>
2047 <td>
2048
2049  
2050 </td>
2051 <td>
2052 <b></b>
2053  
2054 </td>
2055 </tr>
2056 <tr>
2057 <td>gametype</td>
2058 <td>U32</td>
2059 <td> </td>
2060 <td>
2061
2062  
2063 </td>
2064 <td>
2065 <b></b>
2066  
2067 </td>
2068 </tr>
2069 <tr>
2070 <td>rules</td>
2071 <td>rules</td>
2072 <td> </td>
2073 <td>
2074
2075  
2076 </td>
2077 <td>
2078 <b></b>
2079  
2080 </td>
2081 </tr>
2082 <tr>
2083 <td>notes</td>
2084 <td>STRING</td>
2085 <td> </td>
2086 <td>
2087
2088  
2089 </td>
2090 <td>
2091 <b></b>
2092  
2093 </td>
2094 </tr>
2095 </table>
2096
2097 <h4>
2098 <a name="C430a"></a>ORIGIN: CLIENT;
2099 MESSAGE: load_game</h4>
2100 NUMERIC TYPE (hex): 430a<p>
2101 Load an existing game into a room(?)
2102 There is no indication that a new game is there except
2103 for a upd_observers message with your name in it. Which means
2104 you have to watch upd_observers messages that are not for any
2105 currently open game and open one. Ugh.
2106 </p>
2107 <table border="1" width="100%">
2108 <tr>
2109 <th width="10%">NAME</th>
2110 <th width="8%">TYPE</th>
2111 <th width="4%">VALUE</th>
2112 <th>DESCRIPTION</th>
2113 <th width="10%">GUARD</th>
2114 </tr>
2115 <tr>
2116 <td>channel</td>
2117 <td>U16</td>
2118 <td> </td>
2119 <td>
2120 The room to load the game into.
2121
2122  
2123 </td>
2124 <td>
2125 <b></b>
2126  
2127 </td>
2128 </tr>
2129 <tr>
2130 <td>timestamp</td>
2131 <td>timestamp</td>
2132 <td> </td>
2133 <td>
2134 From the game record.
2135
2136  
2137 </td>
2138 <td>
2139 <b></b>
2140  
2141 </td>
2142 </tr>
2143 <tr>
2144 <td>user</td>
2145 <td>username</td>
2146 <td> </td>
2147 <td>
2148
2149  
2150 </td>
2151 <td>
2152 <b></b>
2153  
2154 </td>
2155 </tr>
2156 <tr>
2157 <td>flags</td>
2158 <td>U8</td>
2159 <td> </td>
2160 <td>
2161 0 == public, 2 == private
2162
2163  
2164 </td>
2165 <td>
2166 <b></b>
2167  
2168 </td>
2169 </tr>
2170 </table>
2171
2172 <h4>
2173 <a name="C430b"></a>ORIGIN: CLIENT;
2174 MESSAGE: req_games</h4>
2175 NUMERIC TYPE (hex): 430b<p>
2176 Request to update room game list (send this once per minute to get
2177 updated). Results in upd_games messages.
2178 </p>
2179 <table border="1" width="100%">
2180 <tr>
2181 <th width="10%">NAME</th>
2182 <th width="8%">TYPE</th>
2183 <th width="4%">VALUE</th>
2184 <th>DESCRIPTION</th>
2185 <th width="10%">GUARD</th>
2186 </tr>
2187 <tr>
2188 <td>channel</td>
2189 <td>U16</td>
2190 <td> </td>
2191 <td>
2192
2193  
2194 </td>
2195 <td>
2196 <b></b>
2197  
2198 </td>
2199 </tr>
2200 </table>
2201
2202 <h4>
2203 <a name="C4319"></a>ORIGIN: CLIENT;
2204 MESSAGE: req_desc</h4>
2205 NUMERIC TYPE (hex): 4319<p>
2206 Request room description.
2207 </p>
2208 <table border="1" width="100%">
2209 <tr>
2210 <th width="10%">NAME</th>
2211 <th width="8%">TYPE</th>
2212 <th width="4%">VALUE</th>
2213 <th>DESCRIPTION</th>
2214 <th width="10%">GUARD</th>
2215 </tr>
2216 <tr>
2217 <td>channel</td>
2218 <td>U16</td>
2219 <td> </td>
2220 <td>
2221
2222  
2223 </td>
2224 <td>
2225 <b></b>
2226  
2227 </td>
2228 </tr>
2229 </table>
2230
2231 <h4>
2232 <a name="C4400"></a>ORIGIN: CLIENT;
2233 MESSAGE: send_challenge</h4>
2234 NUMERIC TYPE (hex): 4400<p>
2235 Unclear.
2236 </p>
2237 <table border="1" width="100%">
2238 <tr>
2239 <th width="10%">NAME</th>
2240 <th width="8%">TYPE</th>
2241 <th width="4%">VALUE</th>
2242 <th>DESCRIPTION</th>
2243 <th width="10%">GUARD</th>
2244 </tr>
2245 <tr>
2246 <td>channel</td>
2247 <td>U16</td>
2248 <td> </td>
2249 <td>
2250
2251  
2252 </td>
2253 <td>
2254 <b></b>
2255  
2256 </td>
2257 </tr>
2258 <tr>
2259 <td>black</td>
2260 <td>username</td>
2261 <td> </td>
2262 <td>
2263
2264  
2265 </td>
2266 <td>
2267 <b></b>
2268  
2269 </td>
2270 </tr>
2271 <tr>
2272 <td>white</td>
2273 <td>username</td>
2274 <td> </td>
2275 <td>
2276 More following... TREE or challenge.
2277
2278  
2279 </td>
2280 <td>
2281 <b></b>
2282  
2283 </td>
2284 </tr>
2285 </table>
2286
2287 <h4>
2288 <a name="C4403"></a>ORIGIN: CLIENT;
2289 MESSAGE: join_game</h4>
2290 NUMERIC TYPE (hex): 4403<p>
2291 Join a game. See join_room.
2292 </p>
2293 <table border="1" width="100%">
2294 <tr>
2295 <th width="10%">NAME</th>
2296 <th width="8%">TYPE</th>
2297 <th width="4%">VALUE</th>
2298 <th>DESCRIPTION</th>
2299 <th width="10%">GUARD</th>
2300 </tr>
2301 <tr>
2302 <td>channel</td>
2303 <td>U16</td>
2304 <td> </td>
2305 <td>
2306
2307  
2308 </td>
2309 <td>
2310 <b></b>
2311  
2312 </td>
2313 </tr>
2314 <tr>
2315 <td>user</td>
2316 <td>user</td>
2317 <td> </td>
2318 <td>
2319
2320  
2321 </td>
2322 <td>
2323 <b></b>
2324  
2325 </td>
2326 </tr>
2327 </table>
2328
2329 <h4>
2330 <a name="C4404"></a>ORIGIN: CLIENT;
2331 MESSAGE: part_game</h4>
2332 NUMERIC TYPE (hex): 4404<p>
2333 Leave (or kick as admin?) a certain user from a game.
2334 </p>
2335 <table border="1" width="100%">
2336 <tr>
2337 <th width="10%">NAME</th>
2338 <th width="8%">TYPE</th>
2339 <th width="4%">VALUE</th>
2340 <th>DESCRIPTION</th>
2341 <th width="10%">GUARD</th>
2342 </tr>
2343 <tr>
2344 <td>channel</td>
2345 <td>U16</td>
2346 <td> </td>
2347 <td>
2348
2349  
2350 </td>
2351 <td>
2352 <b></b>
2353  
2354 </td>
2355 </tr>
2356 <tr>
2357 <td>name</td>
2358 <td>username</td>
2359 <td> </td>
2360 <td>
2361
2362  
2363 </td>
2364 <td>
2365 <b></b>
2366  
2367 </td>
2368 </tr>
2369 </table>
2370
2371 <h4>
2372 <a name="C4405"></a>ORIGIN: CLIENT;
2373 MESSAGE: set_tree</h4>
2374 NUMERIC TYPE (hex): 4405<p>
2375 Possibly upload an initial game to an empty room. Not tested.
2376
2377 </p>
2378 <table border="1" width="100%">
2379 <tr>
2380 <th width="10%">NAME</th>
2381 <th width="8%">TYPE</th>
2382 <th width="4%">VALUE</th>
2383 <th>DESCRIPTION</th>
2384 <th width="10%">GUARD</th>
2385 </tr>
2386 <tr>
2387 <td>channel</td>
2388 <td>U16</td>
2389 <td> </td>
2390 <td>
2391
2392  
2393 </td>
2394 <td>
2395 <b></b>
2396  
2397 </td>
2398 </tr>
2399 <tr>
2400 <td>tree</td>
2401 <td>TREE</td>
2402 <td> </td>
2403 <td>
2404
2405  
2406 </td>
2407 <td>
2408 <b></b>
2409  
2410 </td>
2411 </tr>
2412 </table>
2413
2414 <h4>
2415 <a name="C4406"></a>ORIGIN: CLIENT;
2416 MESSAGE: upd_tree</h4>
2417 NUMERIC TYPE (hex): 4406<p>
2418 Upload a partial game tree to the server. This is used to send moves
2419 and even in-game comments to the server. For the comments, the
2420 server prepends the username and rank.
2421
2422 </p>
2423 <table border="1" width="100%">
2424 <tr>
2425 <th width="10%">NAME</th>
2426 <th width="8%">TYPE</th>
2427 <th width="4%">VALUE</th>
2428 <th>DESCRIPTION</th>
2429 <th width="10%">GUARD</th>
2430 </tr>
2431 <tr>
2432 <td>channel</td>
2433 <td>U16</td>
2434 <td> </td>
2435 <td>
2436
2437  
2438 </td>
2439 <td>
2440 <b></b>
2441  
2442 </td>
2443 </tr>
2444 <tr>
2445 <td>tree</td>
2446 <td>TREE</td>
2447 <td> </td>
2448 <td>
2449
2450  
2451 </td>
2452 <td>
2453 <b></b>
2454  
2455 </td>
2456 </tr>
2457 </table>
2458
2459 <h4>
2460 <a name="C4408"></a>ORIGIN: CLIENT;
2461 MESSAGE: get_tree</h4>
2462 NUMERIC TYPE (hex): 4408<p>
2463 Request the game tree starting at a given node. This is used
2464 when the server only sends a partial tree (with end code "more").
2465 </p>
2466 <table border="1" width="100%">
2467 <tr>
2468 <th width="10%">NAME</th>
2469 <th width="8%">TYPE</th>
2470 <th width="4%">VALUE</th>
2471 <th>DESCRIPTION</th>
2472 <th width="10%">GUARD</th>
2473 </tr>
2474 <tr>
2475 <td>channel</td>
2476 <td>U16</td>
2477 <td> </td>
2478 <td>
2479
2480  
2481 </td>
2482 <td>
2483 <b></b>
2484  
2485 </td>
2486 </tr>
2487 <tr>
2488 <td>node</td>
2489 <td>U32</td>
2490 <td> </td>
2491 <td>
2492
2493  
2494 </td>
2495 <td>
2496 <b></b>
2497  
2498 </td>
2499 </tr>
2500 </table>
2501
2502 <h4>
2503 <a name="C440c"></a>ORIGIN: CLIENT;
2504 MESSAGE: claim_win</h4>
2505 NUMERIC TYPE (hex): 440c<p>
2506 Unclear.
2507 </p>
2508 <table border="1" width="100%">
2509 <tr>
2510 <th width="10%">NAME</th>
2511 <th width="8%">TYPE</th>
2512 <th width="4%">VALUE</th>
2513 <th>DESCRIPTION</th>
2514 <th width="10%">GUARD</th>
2515 </tr>
2516 <tr>
2517 <td>channel</td>
2518 <td>U16</td>
2519 <td> </td>
2520 <td>
2521
2522  
2523 </td>
2524 <td>
2525 <b></b>
2526  
2527 </td>
2528 </tr>
2529 <tr>
2530 <td>_byte</td>
2531 <td>U8 </td>
2532 <td> </td>
2533 <td>
2534 Player colour maybe? Unclear.
2535
2536  
2537 </td>
2538 <td>
2539 <b></b>
2540  
2541 </td>
2542 </tr>
2543 </table>
2544
2545 <h4>
2546 <a name="C440d"></a>ORIGIN: CLIENT;
2547 MESSAGE: add_time</h4>
2548 NUMERIC TYPE (hex): 440d<p>
2549 Not checked.
2550
2551 </p>
2552 <table border="1" width="100%">
2553 <tr>
2554 <th width="10%">NAME</th>
2555 <th width="8%">TYPE</th>
2556 <th width="4%">VALUE</th>
2557 <th>DESCRIPTION</th>
2558 <th width="10%">GUARD</th>
2559 </tr>
2560 <tr>
2561 <td>channel</td>
2562 <td>U16</td>
2563 <td> </td>
2564 <td>
2565
2566  
2567 </td>
2568 <td>
2569 <b></b>
2570  
2571 </td>
2572 </tr>
2573 <tr>
2574 <td>time</td>
2575 <td>U32</td>
2576 <td> </td>
2577 <td>
2578
2579  
2580 </td>
2581 <td>
2582 <b></b>
2583  
2584 </td>
2585 </tr>
2586 <tr>
2587 <td>player</td>
2588 <td>U8</td>
2589 <td> </td>
2590 <td>
2591
2592  
2593 </td>
2594 <td>
2595 <b></b>
2596  
2597 </td>
2598 </tr>
2599 </table>
2600
2601 <h4>
2602 <a name="C440f"></a>ORIGIN: CLIENT;
2603 MESSAGE: grant_undo</h4>
2604 NUMERIC TYPE (hex): 440f<p>
2605 Can be send after a req_undo message was received to grant the undo.
2606 </p>
2607 <table border="1" width="100%">
2608 <tr>
2609 <th width="10%">NAME</th>
2610 <th width="8%">TYPE</th>
2611 <th width="4%">VALUE</th>
2612 <th>DESCRIPTION</th>
2613 <th width="10%">GUARD</th>
2614 </tr>
2615 <tr>
2616 <td>channel</td>
2617 <td>U16</td>
2618 <td> </td>
2619 <td>
2620
2621  
2622 </td>
2623 <td>
2624 <b></b>
2625  
2626 </td>
2627 </tr>
2628 </table>
2629
2630 <h4>
2631 <a name="C4410"></a>ORIGIN: CLIENT;
2632 MESSAGE: resign_game</h4>
2633 NUMERIC TYPE (hex): 4410<p>
2634 Resign the game.
2635 </p>
2636 <table border="1" width="100%">
2637 <tr>
2638 <th width="10%">NAME</th>
2639 <th width="8%">TYPE</th>
2640 <th width="4%">VALUE</th>
2641 <th>DESCRIPTION</th>
2642 <th width="10%">GUARD</th>
2643 </tr>
2644 <tr>
2645 <td>channel</td>
2646 <td>U16</td>
2647 <td> </td>
2648 <td>
2649
2650  
2651 </td>
2652 <td>
2653 <b></b>
2654  
2655 </td>
2656 </tr>
2657 <tr>
2658 <td>player</td>
2659 <td>U8</td>
2660 <td> </td>
2661 <td>
2662
2663  
2664 </td>
2665 <td>
2666 <b></b>
2667  
2668 </td>
2669 </tr>
2670 </table>
2671
2672 <h4>
2673 <a name="C441a"></a>ORIGIN: CLIENT;
2674 MESSAGE: set_teacher</h4>
2675 NUMERIC TYPE (hex): 441a<p>
2676 Change the teacher to somebody else (or possibly yourself == take it).
2677 </p>
2678 <table border="1" width="100%">
2679 <tr>
2680 <th width="10%">NAME</th>
2681 <th width="8%">TYPE</th>
2682 <th width="4%">VALUE</th>
2683 <th>DESCRIPTION</th>
2684 <th width="10%">GUARD</th>
2685 </tr>
2686 <tr>
2687 <td>channel</td>
2688 <td>U16</td>
2689 <td> </td>
2690 <td>
2691
2692  
2693 </td>
2694 <td>
2695 <b></b>
2696  
2697 </td>
2698 </tr>
2699 <tr>
2700 <td>name</td>
2701 <td>username</td>
2702 <td> </td>
2703 <td>
2704
2705  
2706 </td>
2707 <td>
2708 <b></b>
2709  
2710 </td>
2711 </tr>
2712 </table>
2713
2714 <h4>
2715 <a name="C4422"></a>ORIGIN: CLIENT;
2716 MESSAGE: allow_user</h4>
2717 NUMERIC TYPE (hex): 4422<p>
2718 Unclear. Maybe allow users to talk? No idea, really.
2719
2720 </p>
2721 <table border="1" width="100%">
2722 <tr>
2723 <th width="10%">NAME</th>
2724 <th width="8%">TYPE</th>
2725 <th width="4%">VALUE</th>
2726 <th>DESCRIPTION</th>
2727 <th width="10%">GUARD</th>
2728 </tr>
2729 <tr>
2730 <td>channel</td>
2731 <td>U16</td>
2732 <td> </td>
2733 <td>
2734
2735  
2736 </td>
2737 <td>
2738 <b></b>
2739  
2740 </td>
2741 </tr>
2742 <tr>
2743 <td>othername</td>
2744 <td>username</td>
2745 <td> </td>
2746 <td>
2747
2748  
2749 </td>
2750 <td>
2751 <b></b>
2752  
2753 </td>
2754 </tr>
2755 <tr>
2756 <td>name</td>
2757 <td>username</td>
2758 <td> </td>
2759 <td>; # gives user access to the game (to what? ;)
2760
2761  
2762 </td>
2763 <td>
2764 <b></b>
2765  
2766 </td>
2767 </tr>
2768 </table>
2769
2770 <h4>
2771 <a name="C4423"></a>ORIGIN: CLIENT;
2772 MESSAGE: set_privacy</h4>
2773 NUMERIC TYPE (hex): 4423<p>
2774 Probably sets the "quiet" flag. Not checked.
2775 </p>
2776 <table border="1" width="100%">
2777 <tr>
2778 <th width="10%">NAME</th>
2779 <th width="8%">TYPE</th>
2780 <th width="4%">VALUE</th>
2781 <th>DESCRIPTION</th>
2782 <th width="10%">GUARD</th>
2783 </tr>
2784 <tr>
2785 <td>channel</td>
2786 <td>U16</td>
2787 <td> </td>
2788 <td>
2789
2790  
2791 </td>
2792 <td>
2793 <b></b>
2794  
2795 </td>
2796 </tr>
2797 <tr>
2798 <td>private</td>
2799 <td>U8</td>
2800 <td> </td>
2801 <td>
2802
2803  
2804 </td>
2805 <td>
2806 <b></b>
2807  
2808 </td>
2809 </tr>
2810 </table>
2811
2812 <h4>
2813 <a name="C4429"></a>ORIGIN: CLIENT;
2814 MESSAGE: reject_challenge</h4>
2815 NUMERIC TYPE (hex): 4429<p>
2816 Reject a challenge from a given user. Not checked.
2817
2818 </p>
2819 <table border="1" width="100%">
2820 <tr>
2821 <th width="10%">NAME</th>
2822 <th width="8%">TYPE</th>
2823 <th width="4%">VALUE</th>
2824 <th>DESCRIPTION</th>
2825 <th width="10%">GUARD</th>
2826 </tr>
2827 <tr>
2828 <td>channel</td>
2829 <td>U16</td>
2830 <td> </td>
2831 <td>
2832
2833  
2834 </td>
2835 <td>
2836 <b></b>
2837  
2838 </td>
2839 </tr>
2840 <tr>
2841 <td>name</td>
2842 <td>username</td>
2843 <td> </td>
2844 <td>
2845
2846  
2847 </td>
2848 <td>
2849 <b></b>
2850  
2851 </td>
2852 </tr>
2853 </table>
2854
2855 <h4>
2856 <a name="C4433"></a>ORIGIN: CLIENT;
2857 MESSAGE: req_result</h4>
2858 NUMERIC TYPE (hex): 4433<p>
2859 I forgot.
2860
2861 </p>
2862 <table border="1" width="100%">
2863 <tr>
2864 <th width="10%">NAME</th>
2865 <th width="8%">TYPE</th>
2866 <th width="4%">VALUE</th>
2867 <th>DESCRIPTION</th>
2868 <th width="10%">GUARD</th>
2869 </tr>
2870 <tr>
2871 <td>channel</td>
2872 <td>U16</td>
2873 <td> </td>
2874 <td>
2875
2876  
2877 </td>
2878 <td>
2879 <b></b>
2880  
2881 </td>
2882 </tr>
2883 </table>
2884
2885 <h4>
2886 <a name="C4436"></a>ORIGIN: CLIENT;
2887 MESSAGE: msg_game</h4>
2888 NUMERIC TYPE (hex): 4436<p>
2889 </p>
2890 <table border="1" width="100%">
2891 <tr>
2892 <th width="10%">NAME</th>
2893 <th width="8%">TYPE</th>
2894 <th width="4%">VALUE</th>
2895 <th>DESCRIPTION</th>
2896 <th width="10%">GUARD</th>
2897 </tr>
2898 <tr>
2899 <td>channel</td>
2900 <td>U16</td>
2901 <td> </td>
2902 <td>
2903
2904  
2905 </td>
2906 <td>
2907 <b></b>
2908  
2909 </td>
2910 </tr>
2911 <tr>
2912 <td>message</td>
2913 <td>STRING</td>
2914 <td> </td>
2915 <td>
2916
2917  
2918 </td>
2919 <td>
2920 <b></b>
2921  
2922 </td>
2923 </tr>
2924 </table>
2925
2926 <h4>
2927 <a name="Cffff"></a>ORIGIN: CLIENT;
2928 MESSAGE: quit</h4>
2929 NUMERIC TYPE (hex): ffff<p>
2930 <p>Sent by the client just before it logs out.</p>
2931 </p>
2932 <table border="1" width="100%">
2933 <tr>
2934 <th width="10%">NAME</th>
2935 <th width="8%">TYPE</th>
2936 <th width="4%">VALUE</th>
2937 <th>DESCRIPTION</th>
2938 <th width="10%">GUARD</th>
2939 </tr>
2940 </table>
2941
2942 <h2>Structs mainly used in messages send by the server</h2>
2943
2944 <h4>STRUCTURE challenge_defaults</h4>
2945 <p>
2946 Send soon after log-in to set the defaults for game challenges.
2947 </p>
2948 <table border="1" width="100%">
2949 <tr>
2950 <th width="10%">NAME</th>
2951 <th width="8%">TYPE</th>
2952 <th width="4%">VALUE</th>
2953 <th>DESCRIPTION</th>
2954 <th width="10%">GUARD</th>
2955 </tr>
2956 <tr>
2957 <td>gametype</td>
2958 <td>U32</td>
2959 <td> </td>
2960 <td>
2961
2962  
2963 </td>
2964 <td>
2965 <b></b>
2966  
2967 </td>
2968 </tr>
2969 <tr>
2970 <td>size</td>
2971 <td>U32</td>
2972 <td> </td>
2973 <td>
2974
2975  
2976 </td>
2977 <td>
2978 <b></b>
2979  
2980 </td>
2981 </tr>
2982 <tr>
2983 <td>timesys</td>
2984 <td>U32</td>
2985 <td> </td>
2986 <td>
2987
2988  
2989 </td>
2990 <td>
2991 <b></b>
2992  
2993 </td>
2994 </tr>
2995 <tr>
2996 <td>time</td>
2997 <td>U32</td>
2998 <td> </td>
2999 <td>
3000
3001  
3002 </td>
3003 <td>
3004 <b></b>
3005  
3006 </td>
3007 </tr>
3008 <tr>
3009 <td>byo_time</td>
3010 <td>U32</td>
3011 <td> </td>
3012 <td>
3013
3014  
3015 </td>
3016 <td>
3017 <b></b>
3018  
3019 </td>
3020 </tr>
3021 <tr>
3022 <td>byo_periods</td>
3023 <td>U32</td>
3024 <td> </td>
3025 <td>
3026
3027  
3028 </td>
3029 <td>
3030 <b></b>
3031  
3032 </td>
3033 </tr>
3034 <tr>
3035 <td>can_time</td>
3036 <td>U32</td>
3037 <td> </td>
3038 <td>
3039
3040  
3041 </td>
3042 <td>
3043 <b></b>
3044  
3045 </td>
3046 </tr>
3047 <tr>
3048 <td>can_stones</td>
3049 <td>U32</td>
3050 <td> </td>
3051 <td>
3052
3053  
3054 </td>
3055 <td>
3056 <b></b>
3057  
3058 </td>
3059 </tr>
3060 </table>
3061
3062 <h4>STRUCTURE challenge</h4>
3063 CLASS: KGS::Challenge<br />
3064 <p>
3065 A challenge.
3066
3067 </p>
3068 <table border="1" width="100%">
3069 <tr>
3070 <th width="10%">NAME</th>
3071 <th width="8%">TYPE</th>
3072 <th width="4%">VALUE</th>
3073 <th>DESCRIPTION</th>
3074 <th width="10%">GUARD</th>
3075 </tr>
3076 <tr>
3077 <td>user1</td>
3078 <td>user</td>
3079 <td> </td>
3080 <td>
3081
3082  
3083 </td>
3084 <td>
3085 <b></b>
3086  
3087 </td>
3088 </tr>
3089 <tr>
3090 <td>user2</td>
3091 <td>user</td>
3092 <td> </td>
3093 <td>
3094
3095  
3096 </td>
3097 <td>
3098 <b></b>
3099  
3100 </td>
3101 </tr>
3102 <tr>
3103 <td>gametype</td>
3104 <td>U32</td>
3105 <td> </td>
3106 <td>
3107
3108  
3109 </td>
3110 <td>
3111 <b></b>
3112  
3113 </td>
3114 </tr>
3115 <tr>
3116 <td>rules</td>
3117 <td>rules</td>
3118 <td> </td>
3119 <td>
3120 Maybe the rules" are in TREE format. I forgot.
3121
3122  
3123 </td>
3124 <td>
3125 <b></b>
3126  
3127 </td>
3128 </tr>
3129 </table>
3130
3131 <h4>STRUCTURE game</h4>
3132 CLASS: KGS::Game<br />
3133 <p>
3134 Basic information about a game. Used in rooms for the gamelist and
3135 in games to detect when a game is saved, changed type (e.g. R =&gt; D)
3136 etc.
3137
3138 </p>
3139 <table border="1" width="100%">
3140 <tr>
3141 <th width="10%">NAME</th>
3142 <th width="8%">TYPE</th>
3143 <th width="4%">VALUE</th>
3144 <th>DESCRIPTION</th>
3145 <th width="10%">GUARD</th>
3146 </tr>
3147 <tr>
3148 <td>channel</td>
3149 <td>U16</td>
3150 <td> </td>
3151 <td>
3152
3153  
3154 </td>
3155 <td>
3156 <b></b>
3157  
3158 </td>
3159 </tr>
3160 <tr>
3161 <td>type</td>
3162 <td>U8</td>
3163 <td> </td>
3164 <td>
3165
3166  
3167 </td>
3168 <td>
3169 <b></b>
3170  
3171 </td>
3172 </tr>
3173 <tr>
3174 <td>user1</td>
3175 <td>user</td>
3176 <td> </td>
3177 <td>
3178 White
3179
3180  
3181 </td>
3182 <td>
3183 <b></b>
3184  
3185 </td>
3186 </tr>
3187 <tr>
3188 <td>user2</td>
3189 <td>user</td>
3190 <td> </td>
3191 <td>
3192 Black
3193
3194  
3195 </td>
3196 <td>
3197 <b></b>
3198  
3199 </td>
3200 </tr>
3201 <tr>
3202 <td>user3</td>
3203 <td>user</td>
3204 <td> </td>
3205 <td>
3206 Owner
3207
3208  
3209 </td>
3210 <td>
3211 <b></b>
3212  
3213 </td>
3214 </tr>
3215 <tr>
3216 <td>size</td>
3217 <td>U8</td>
3218 <td> </td>
3219 <td>
3220
3221  
3222 </td>
3223 <td>
3224 <b></b>
3225  
3226 </td>
3227 </tr>
3228 <tr>
3229 <td>handicap</td>
3230 <td>I8</td>
3231 <td> </td>
3232 <td>
3233 &lt; 0 not fully setup
3234
3235  
3236 </td>
3237 <td>
3238 <b></b>
3239  
3240 </td>
3241 </tr>
3242 <tr>
3243 <td>komi</td>
3244 <td>komi16</td>
3245 <td> </td>
3246 <td>
3247
3248  
3249 </td>
3250 <td>
3251 <b></b>
3252  
3253 </td>
3254 </tr>
3255 <tr>
3256 <td>moves</td>
3257 <td>I16</td>
3258 <td> </td>
3259 <td>
3260 This field reflects either the movenum or the score, sorry, not even guards help, as
3261 the flags to determine that are _after_ the field. Arg. Divide by two to get the actual
3262 score (NOT score16!) (arg²).
3263
3264  
3265 </td>
3266 <td>
3267 <b></b>
3268  
3269 </td>
3270 </tr>
3271 <tr>
3272 <td>flags</td>
3273 <td>U16</td>
3274 <td> </td>
3275 <td>
3276
3277  
3278 </td>
3279 <td>
3280 <b></b>
3281  
3282 </td>
3283 </tr>
3284 <tr>
3285 <td>observers</td>
3286 <td>U32</td>
3287 <td> </td>
3288 <td>
3289
3290  
3291 </td>
3292 <td>
3293 <b></b>
3294  
3295 </td>
3296 </tr>
3297 <tr>
3298 <td>saved</td>
3299 <td>flag</td>
3300 <td> </td>
3301 <td>
3302
3303  
3304 </td>
3305 <td>
3306 <b></b>
3307  
3308 </td>
3309 </tr>
3310 <tr>
3311 <td>notes</td>
3312 <td>STRING</td>
3313 <td> </td>
3314 <td>
3315
3316  
3317 </td>
3318 <td>
3319 <b>handicap</b> &lt; 0
3320  
3321 </td>
3322 </tr>
3323 </table>
3324
3325 <h4>STRUCTURE room_obs</h4>
3326 <p>
3327 Obsolete.
3328
3329 </p>
3330 <table border="1" width="100%">
3331 <tr>
3332 <th width="10%">NAME</th>
3333 <th width="8%">TYPE</th>
3334 <th width="4%">VALUE</th>
3335 <th>DESCRIPTION</th>
3336 <th width="10%">GUARD</th>
3337 </tr>
3338 <tr>
3339 <td>name</td>
3340 <td>roomname</td>
3341 <td> </td>
3342 <td>
3343
3344  
3345 </td>
3346 <td>
3347 <b></b>
3348  
3349 </td>
3350 </tr>
3351 <tr>
3352 <td>channel</td>
3353 <td>U16</td>
3354 <td> </td>
3355 <td>
3356
3357  
3358 </td>
3359 <td>
3360 <b></b>
3361  
3362 </td>
3363 </tr>
3364 <tr>
3365 <td>flags</td>
3366 <td>U32</td>
3367 <td> </td>
3368 <td>
3369
3370  
3371 </td>
3372 <td>
3373 <b></b>
3374  
3375 </td>
3376 </tr>
3377 <tr>
3378 <td>users</td>
3379 <td>U32</td>
3380 <td> </td>
3381 <td>
3382
3383  
3384 </td>
3385 <td>
3386 <b></b>
3387  
3388 </td>
3389 </tr>
3390 </table>
3391
3392 <h4>STRUCTURE room</h4>
3393 CLASS: KGS::Room<br />
3394 <p>
3395 </p>
3396 <table border="1" width="100%">
3397 <tr>
3398 <th width="10%">NAME</th>
3399 <th width="8%">TYPE</th>
3400 <th width="4%">VALUE</th>
3401 <th>DESCRIPTION</th>
3402 <th width="10%">GUARD</th>
3403 </tr>
3404 <tr>
3405 <td>channel</td>
3406 <td>U16</td>
3407 <td> </td>
3408 <td>
3409
3410  
3411 </td>
3412 <td>
3413 <b></b>
3414  
3415 </td>
3416 </tr>
3417 <tr>
3418 <td>flags</td>
3419 <td>U8</td>
3420 <td> </td>
3421 <td>
3422
3423  
3424 </td>
3425 <td>
3426 <b></b>
3427  
3428 </td>
3429 </tr>
3430 <tr>
3431 <td>group</td>
3432 <td>U8</td>
3433 <td> </td>
3434 <td>
3435
3436  
3437 </td>
3438 <td>
3439 <b></b>
3440  
3441 </td>
3442 </tr>
3443 <tr>
3444 <td>users</td>
3445 <td>U16</td>
3446 <td> </td>
3447 <td>
3448
3449  
3450 </td>
3451 <td>
3452 <b></b>
3453  
3454 </td>
3455 </tr>
3456 <tr>
3457 <td>games</td>
3458 <td>U16</td>
3459 <td> </td>
3460 <td>
3461
3462  
3463 </td>
3464 <td>
3465 <b></b>
3466  
3467 </td>
3468 </tr>
3469 <tr>
3470 <td>name</td>
3471 <td>STRING</td>
3472 <td> </td>
3473 <td>
3474
3475  
3476 </td>
3477 <td>
3478 <b></b>
3479  
3480 </td>
3481 </tr>
3482 </table>
3483
3484 <h4>STRUCTURE scorevalues</h4>
3485 CLASS: KGS::Score<br />
3486 <p>
3487 </p>
3488 <table border="1" width="100%">
3489 <tr>
3490 <th width="10%">NAME</th>
3491 <th width="8%">TYPE</th>
3492 <th width="4%">VALUE</th>
3493 <th>DESCRIPTION</th>
3494 <th width="10%">GUARD</th>
3495 </tr>
3496 <tr>
3497 <td>score</td>
3498 <td>score32</td>
3499 <td> </td>
3500 <td>
3501
3502  
3503 </td>
3504 <td>
3505 <b></b>
3506  
3507 </td>
3508 </tr>
3509 <tr>
3510 <td>territory</td>
3511 <td>U32</td>
3512 <td> </td>
3513 <td>
3514
3515  
3516 </td>
3517 <td>
3518 <b></b>
3519  
3520 </td>
3521 </tr>
3522 <tr>
3523 <td>captures</td>
3524 <td>U32</td>
3525 <td> </td>
3526 <td>
3527
3528  
3529 </td>
3530 <td>
3531 <b></b>
3532  
3533 </td>
3534 </tr>
3535 <tr>
3536 <td>i3</td>
3537 <td>U32</td>
3538 <td> </td>
3539 <td>
3540
3541  
3542 </td>
3543 <td>
3544 <b></b>
3545  
3546 </td>
3547 </tr>
3548 <tr>
3549 <td>f2</td>
3550 <td>U32</td>
3551 <td> </td>
3552 <td>
3553
3554  
3555 </td>
3556 <td>
3557 <b></b>
3558  
3559 </td>
3560 </tr>
3561 <tr>
3562 <td>komi</td>
3563 <td>komi324</td>
3564 <td> </td>
3565 <td>
3566
3567  
3568 </td>
3569 <td>
3570 <b></b>
3571  
3572 </td>
3573 </tr>
3574 <tr>
3575 <td>i4</td>
3576 <td>U32</td>
3577 <td> </td>
3578 <td>
3579 Apparently the i3, f2, i4 are zero.
3580
3581  
3582 </td>
3583 <td>
3584 <b></b>
3585  
3586 </td>
3587 </tr>
3588 </table>
3589
3590 <h4>STRUCTURE game_record</h4>
3591 CLASS: KGS::GameRecord<br />
3592 <p>
3593 <p>A single game record entry, as seen in <a href="#S0008">userinfo(0008)</a>.</p>
3594 </p>
3595 <table border="1" width="100%">
3596 <tr>
3597 <th width="10%">NAME</th>
3598 <th width="8%">TYPE</th>
3599 <th width="4%">VALUE</th>
3600 <th>DESCRIPTION</th>
3601 <th width="10%">GUARD</th>
3602 </tr>
3603 <tr>
3604 <td>timestamp</td>
3605 <td>timestamp</td>
3606 <td> </td>
3607 <td>
3608 Time this game was played.
3609
3610  
3611 </td>
3612 <td>
3613 <b></b>
3614  
3615 </td>
3616 </tr>
3617 <tr>
3618 <td>flags1</td>
3619 <td>U8</td>
3620 <td> </td>
3621 <td>
3622
3623  
3624 </td>
3625 <td>
3626 <b></b>
3627  
3628 </td>
3629 </tr>
3630 <tr>
3631 <td>user1</td>
3632 <td>user</td>
3633 <td> </td>
3634 <td>
3635 White, flags contain low 8 bits of revision (bits 16-23).
3636
3637  
3638 </td>
3639 <td>
3640 <b></b>
3641  
3642 </td>
3643 </tr>
3644 <tr>
3645 <td>user2</td>
3646 <td>user</td>
3647 <td> </td>
3648 <td>
3649 Black, flags contain high 8 bits of revision (bits 16-23).
3650
3651  
3652 </td>
3653 <td>
3654 <b></b>
3655  
3656 </td>
3657 </tr>
3658 <tr>
3659 <td>user3</td>
3660 <td>user</td>
3661 <td> </td>
3662 <td>
3663
3664
3665  
3666 </td>
3667 <td>
3668 <b></b>
3669  
3670 </td>
3671 </tr>
3672 <tr>
3673 <td>flags2</td>
3674 <td>U16</td>
3675 <td> </td>
3676 <td>
3677
3678  
3679 </td>
3680 <td>
3681 <b></b>
3682  
3683 </td>
3684 </tr>
3685 <tr>
3686 <td>score</td>
3687 <td>score16</td>
3688 <td> </td>
3689 <td>
3690
3691  
3692 </td>
3693 <td>
3694 <b></b>
3695  
3696 </td>
3697 </tr>
3698 <tr>
3699 <td>flags3</td>
3700 <td>U8</td>
3701 <td> </td>
3702 <td>
3703
3704
3705  
3706 </td>
3707 <td>
3708 <b></b>
3709  
3710 </td>
3711 </tr>
3712 </table>
3713
3714 <h2>Server-generated messages</h2>
3715
3716 <h4>
3717 <a name="S0001"></a>ORIGIN: SERVER;
3718 MESSAGE: login</h4>
3719 NUMERIC TYPE (hex): 0001
3720 (possibly in response to
3721 <a href="#C0000">login(0000)</a>
3722 )
3723 <p>
3724 </p>
3725 <table border="1" width="100%">
3726 <tr>
3727 <th width="10%">NAME</th>
3728 <th width="8%">TYPE</th>
3729 <th width="4%">VALUE</th>
3730 <th>DESCRIPTION</th>
3731 <th width="10%">GUARD</th>
3732 </tr>
3733 <tr>
3734 <td>message</td>
3735 <td>CONSTANT</td>
3736 <td>login successful </td>
3737 <td>
3738
3739  
3740 </td>
3741 <td>
3742 <b></b>
3743  
3744 </td>
3745 </tr>
3746 <tr>
3747 <td>success</td>
3748 <td>CONSTANT</td>
3749 <td>1 </td>
3750 <td>
3751
3752  
3753 </td>
3754 <td>
3755 <b></b>
3756  
3757 </td>
3758 </tr>
3759 </table>
3760
3761 <h4>
3762 <a name="S0002"></a>ORIGIN: SERVER;
3763 MESSAGE: login</h4>
3764 NUMERIC TYPE (hex): 0002
3765 (possibly in response to
3766 <a href="#C0000">login(0000)</a>
3767 )
3768 <p>
3769 </p>
3770 <table border="1" width="100%">
3771 <tr>
3772 <th width="10%">NAME</th>
3773 <th width="8%">TYPE</th>
3774 <th width="4%">VALUE</th>
3775 <th>DESCRIPTION</th>
3776 <th width="10%">GUARD</th>
3777 </tr>
3778 <tr>
3779 <td>message</td>
3780 <td>CONSTANT</td>
3781 <td>login successful: client version is outdated. </td>
3782 <td>
3783
3784  
3785 </td>
3786 <td>
3787 <b></b>
3788  
3789 </td>
3790 </tr>
3791 <tr>
3792 <td>success</td>
3793 <td>CONSTANT</td>
3794 <td>1 </td>
3795 <td>
3796
3797  
3798 </td>
3799 <td>
3800 <b></b>
3801  
3802 </td>
3803 </tr>
3804 </table>
3805
3806 <h4>
3807 <a name="S0003"></a>ORIGIN: SERVER;
3808 MESSAGE: login</h4>
3809 NUMERIC TYPE (hex): 0003
3810 (possibly in response to
3811 <a href="#C0000">login(0000)</a>
3812 )
3813 <p>
3814 </p>
3815 <table border="1" width="100%">
3816 <tr>
3817 <th width="10%">NAME</th>
3818 <th width="8%">TYPE</th>
3819 <th width="4%">VALUE</th>
3820 <th>DESCRIPTION</th>
3821 <th width="10%">GUARD</th>
3822 </tr>
3823 <tr>
3824 <td>message</td>
3825 <td>CONSTANT</td>
3826 <td>login failed: client version out of date </td>
3827 <td>
3828 ** maybe more following? **
3829
3830  
3831 </td>
3832 <td>
3833 <b></b>
3834  
3835 </td>
3836 </tr>
3837 </table>
3838
3839 <h4>
3840 <a name="S0004"></a>ORIGIN: SERVER;
3841 MESSAGE: login</h4>
3842 NUMERIC TYPE (hex): 0004
3843 (possibly in response to
3844 <a href="#C0000">login(0000)</a>
3845 )
3846 <p>
3847 </p>
3848 <table border="1" width="100%">
3849 <tr>
3850 <th width="10%">NAME</th>
3851 <th width="8%">TYPE</th>
3852 <th width="4%">VALUE</th>
3853 <th>DESCRIPTION</th>
3854 <th width="10%">GUARD</th>
3855 </tr>
3856 <tr>
3857 <td>message</td>
3858 <td>CONSTANT</td>
3859 <td>login failed: wrong password </td>
3860 <td>
3861 ** maybe more following? **
3862
3863  
3864 </td>
3865 <td>
3866 <b></b>
3867  
3868 </td>
3869 </tr>
3870 </table>
3871
3872 <h4>
3873 <a name="S0005"></a>ORIGIN: SERVER;
3874 MESSAGE: login</h4>
3875 NUMERIC TYPE (hex): 0005
3876 (possibly in response to
3877 <a href="#C0000">login(0000)</a>
3878 )
3879 <p>
3880 </p>
3881 <table border="1" width="100%">
3882 <tr>
3883 <th width="10%">NAME</th>
3884 <th width="8%">TYPE</th>
3885 <th width="4%">VALUE</th>
3886 <th>DESCRIPTION</th>
3887 <th width="10%">GUARD</th>
3888 </tr>
3889 <tr>
3890 <td>message</td>
3891 <td>CONSTANT</td>
3892 <td>login failed: specified user does not exist </td>
3893 <td>
3894
3895  
3896 </td>
3897 <td>
3898 <b></b>
3899  
3900 </td>
3901 </tr>
3902 </table>
3903
3904 <h4>
3905 <a name="S0006"></a>ORIGIN: SERVER;
3906 MESSAGE: login</h4>
3907 NUMERIC TYPE (hex): 0006
3908 (possibly in response to
3909 <a href="#C0000">login(0000)</a>
3910 )
3911 <p>
3912 </p>
3913 <table border="1" width="100%">
3914 <tr>
3915 <th width="10%">NAME</th>
3916 <th width="8%">TYPE</th>
3917 <th width="4%">VALUE</th>
3918 <th>DESCRIPTION</th>
3919 <th width="10%">GUARD</th>
3920 </tr>
3921 <tr>
3922 <td>message</td>
3923 <td>CONSTANT</td>
3924 <td>login failed: registered user of same name exists </td>
3925 <td>
3926
3927  
3928 </td>
3929 <td>
3930 <b></b>
3931  
3932 </td>
3933 </tr>
3934 </table>
3935
3936 <h4>
3937 <a name="S0008"></a>ORIGIN: SERVER;
3938 MESSAGE: userinfo</h4>
3939 NUMERIC TYPE (hex): 0008
3940 (possibly in response to
3941 <a href="#C0007">req_userinfo(0007)</a>
3942 )
3943 <p>
3944 User info.
3945 </p>
3946 <table border="1" width="100%">
3947 <tr>
3948 <th width="10%">NAME</th>
3949 <th width="8%">TYPE</th>
3950 <th width="4%">VALUE</th>
3951 <th>DESCRIPTION</th>
3952 <th width="10%">GUARD</th>
3953 </tr>
3954 <tr>
3955 <td>_unused0</td>
3956 <td>flag</td>
3957 <td> </td>
3958 <td>
3959
3960  
3961 </td>
3962 <td>
3963 <b></b>
3964  
3965 </td>
3966 </tr>
3967 <tr>
3968 <td>user</td>
3969 <td>user</td>
3970 <td> </td>
3971 <td>
3972
3973  
3974 </td>
3975 <td>
3976 <b></b>
3977  
3978 </td>
3979 </tr>
3980 <tr>
3981 <td>_unused1</td>
3982 <td>U64</td>
3983 <td> </td>
3984 <td>
3985
3986  
3987 </td>
3988 <td>
3989 <b></b>
3990  
3991 </td>
3992 </tr>
3993 <tr>
3994 <td>realname</td>
3995 <td>realname</td>
3996 <td> </td>
3997 <td>
3998
3999  
4000 </td>
4001 <td>
4002 <b></b>
4003  
4004 </td>
4005 </tr>
4006 <tr>
4007 <td>email</td>
4008 <td>email</td>
4009 <td> </td>
4010 <td>
4011
4012  
4013 </td>
4014 <td>
4015 <b></b>
4016  
4017 </td>
4018 </tr>
4019 <tr>
4020 <td>info</td>
4021 <td>userinfo</td>
4022 <td> </td>
4023 <td>
4024
4025  
4026 </td>
4027 <td>
4028 <b></b>
4029  
4030 </td>
4031 </tr>
4032 <tr>
4033 <td>homepage</td>
4034 <td>url</td>
4035 <td> </td>
4036 <td>
4037
4038  
4039 </td>
4040 <td>
4041 <b></b>
4042  
4043 </td>
4044 </tr>
4045 <tr>
4046 <td>regdate</td>
4047 <td>timestamp</td>
4048 <td> </td>
4049 <td>
4050 When the user registered (0 == never registered).
4051
4052  
4053 </td>
4054 <td>
4055 <b></b>
4056  
4057 </td>
4058 </tr>
4059 <tr>
4060 <td>lastlogin</td>
4061 <td>timestamp</td>
4062 <td> </td>
4063 <td>
4064 When the user logged in for the last time.
4065
4066  
4067 </td>
4068 <td>
4069 <b></b>
4070  
4071 </td>
4072 </tr>
4073 </table>
4074
4075 <h4>
4076 <a name="S0009"></a>ORIGIN: SERVER;
4077 MESSAGE: upd_userinfo_result</h4>
4078 NUMERIC TYPE (hex): 0009<p>
4079 </p>
4080 <table border="1" width="100%">
4081 <tr>
4082 <th width="10%">NAME</th>
4083 <th width="8%">TYPE</th>
4084 <th width="4%">VALUE</th>
4085 <th>DESCRIPTION</th>
4086 <th width="10%">GUARD</th>
4087 </tr>
4088 <tr>
4089 <td>name</td>
4090 <td>username</td>
4091 <td> </td>
4092 <td>
4093
4094  
4095 </td>
4096 <td>
4097 <b></b>
4098  
4099 </td>
4100 </tr>
4101 <tr>
4102 <td>message</td>
4103 <td>CONSTANT</td>
4104 <td>Thanks for registering. </td>
4105 <td>
4106
4107  
4108 </td>
4109 <td>
4110 <b></b>
4111  
4112 </td>
4113 </tr>
4114 </table>
4115
4116 <h4>
4117 <a name="S000a"></a>ORIGIN: SERVER;
4118 MESSAGE: upd_userinfo_result</h4>
4119 NUMERIC TYPE (hex): 000a<p>
4120 </p>
4121 <table border="1" width="100%">
4122 <tr>
4123 <th width="10%">NAME</th>
4124 <th width="8%">TYPE</th>
4125 <th width="4%">VALUE</th>
4126 <th>DESCRIPTION</th>
4127 <th width="10%">GUARD</th>
4128 </tr>
4129 <tr>
4130 <td>name</td>
4131 <td>username</td>
4132 <td> </td>
4133 <td>
4134
4135  
4136 </td>
4137 <td>
4138 <b></b>
4139  
4140 </td>
4141 </tr>
4142 <tr>
4143 <td>message</td>
4144 <td>CONSTANT</td>
4145 <td>The user "%s" has been successfully updated. </td>
4146 <td>
4147
4148  
4149 </td>
4150 <td>
4151 <b></b>
4152  
4153 </td>
4154 </tr>
4155 </table>
4156
4157 <h4>
4158 <a name="S000b"></a>ORIGIN: SERVER;
4159 MESSAGE: upd_userinfo_result</h4>
4160 NUMERIC TYPE (hex): 000b<p>
4161 </p>
4162 <table border="1" width="100%">
4163 <tr>
4164 <th width="10%">NAME</th>
4165 <th width="8%">TYPE</th>
4166 <th width="4%">VALUE</th>
4167 <th>DESCRIPTION</th>
4168 <th width="10%">GUARD</th>
4169 </tr>
4170 <tr>
4171 <td>name</td>
4172 <td>username</td>
4173 <td> </td>
4174 <td>
4175
4176  
4177 </td>
4178 <td>
4179 <b></b>
4180  
4181 </td>
4182 </tr>
4183 <tr>
4184 <td>message</td>
4185 <td>CONSTANT</td>
4186 <td>There is no user "%s". Update failed. </td>
4187 <td>
4188
4189  
4190 </td>
4191 <td>
4192 <b></b>
4193  
4194 </td>
4195 </tr>
4196 </table>
4197
4198 <h4>
4199 <a name="S0012"></a>ORIGIN: SERVER;
4200 MESSAGE: userinfo_failed</h4>
4201 NUMERIC TYPE (hex): 0012<p>
4202 <p>Sent when no userinfo for the requested user could be found(?)</p>
4203 </p>
4204 <table border="1" width="100%">
4205 <tr>
4206 <th width="10%">NAME</th>
4207 <th width="8%">TYPE</th>
4208 <th width="4%">VALUE</th>
4209 <th>DESCRIPTION</th>
4210 <th width="10%">GUARD</th>
4211 </tr>
4212 <tr>
4213 <td>name</td>
4214 <td>username</td>
4215 <td> </td>
4216 <td>
4217
4218  
4219 </td>
4220 <td>
4221 <b></b>
4222  
4223 </td>
4224 </tr>
4225 </table>
4226
4227 <h4>
4228 <a name="S0013"></a>ORIGIN: SERVER;
4229 MESSAGE: msg_chat</h4>
4230 NUMERIC TYPE (hex): 0013<p>
4231 </p>
4232 <table border="1" width="100%">
4233 <tr>
4234 <th width="10%">NAME</th>
4235 <th width="8%">TYPE</th>
4236 <th width="4%">VALUE</th>
4237 <th>DESCRIPTION</th>
4238 <th width="10%">GUARD</th>
4239 </tr>
4240 <tr>
4241 <td>name</td>
4242 <td>username</td>
4243 <td> </td>
4244 <td>
4245 Name of sender (either yourself (echo) or other)
4246
4247  
4248 </td>
4249 <td>
4250 <b></b>
4251  
4252 </td>
4253 </tr>
4254 <tr>
4255 <td>name2</td>
4256 <td>username</td>
4257 <td> </td>
4258 <td>
4259 Name of recipient.
4260
4261  
4262 </td>
4263 <td>
4264 <b></b>
4265  
4266 </td>
4267 </tr>
4268 <tr>
4269 <td>message</td>
4270 <td>STRING</td>
4271 <td> </td>
4272 <td>
4273
4274  
4275 </td>
4276 <td>
4277 <b></b>
4278  
4279 </td>
4280 </tr>
4281 </table>
4282
4283 <h4>
4284 <a name="S0015"></a>ORIGIN: SERVER;
4285 MESSAGE: stats</h4>
4286 NUMERIC TYPE (hex): 0015
4287 (possibly in response to
4288 <a href="#C0014">req_stats(0014)</a>
4289 )
4290 <p>
4291 </p>
4292 <table border="1" width="100%">
4293 <tr>
4294 <th width="10%">NAME</th>
4295 <th width="8%">TYPE</th>
4296 <th width="4%">VALUE</th>
4297 <th>DESCRIPTION</th>
4298 <th width="10%">GUARD</th>
4299 </tr>
4300 <tr>
4301 <td>ver_major</td>
4302 <td>U16</td>
4303 <td> </td>
4304 <td>
4305
4306  
4307 </td>
4308 <td>
4309 <b></b>
4310  
4311 </td>
4312 </tr>
4313 <tr>
4314 <td>ver_minor</td>
4315 <td>U16</td>
4316 <td> </td>
4317 <td>
4318
4319  
4320 </td>
4321 <td>
4322 <b></b>
4323  
4324 </td>
4325 </tr>
4326 <tr>
4327 <td>ver_micro</td>
4328 <td>U16</td>
4329 <td> </td>
4330 <td>
4331
4332  
4333 </td>
4334 <td>
4335 <b></b>
4336  
4337 </td>
4338 </tr>
4339 <tr>
4340 <td>boot_time</td>
4341 <td>timestamp</td>
4342 <td> </td>
4343 <td>
4344
4345  
4346 </td>
4347 <td>
4348 <b></b>
4349  
4350 </td>
4351 </tr>
4352 <tr>
4353 <td>users_cur</td>
4354 <td>U32</td>
4355 <td> </td>
4356 <td>
4357
4358  
4359 </td>
4360 <td>
4361 <b></b>
4362  
4363 </td>
4364 </tr>
4365 <tr>
4366 <td>users_max</td>
4367 <td>U32</td>
4368 <td> </td>
4369 <td>
4370
4371  
4372 </td>
4373 <td>
4374 <b></b>
4375  
4376 </td>
4377 </tr>
4378 <tr>
4379 <td>users_lim</td>
4380 <td>U32</td>
4381 <td> </td>
4382 <td>
4383
4384  
4385 </td>
4386 <td>
4387 <b></b>
4388  
4389 </td>
4390 </tr>
4391 <tr>
4392 <td>accts_cur</td>
4393 <td>U32</td>
4394 <td> </td>
4395 <td>
4396
4397  
4398 </td>
4399 <td>
4400 <b></b>
4401  
4402 </td>
4403 </tr>
4404 <tr>
4405 <td>accts_max</td>
4406 <td>U32</td>
4407 <td> </td>
4408 <td>
4409
4410  
4411 </td>
4412 <td>
4413 <b></b>
4414  
4415 </td>
4416 </tr>
4417 <tr>
4418 <td>unknown1</td>
4419 <td>U32</td>
4420 <td> </td>
4421 <td>
4422
4423  
4424 </td>
4425 <td>
4426 <b></b>
4427  
4428 </td>
4429 </tr>
4430 <tr>
4431 <td>work_max</td>
4432 <td>U32</td>
4433 <td> </td>
4434 <td>
4435
4436  
4437 </td>
4438 <td>
4439 <b></b>
4440  
4441 </td>
4442 </tr>
4443 <tr>
4444 <td>rooms_cur</td>
4445 <td>U32</td>
4446 <td> </td>
4447 <td>
4448
4449  
4450 </td>
4451 <td>
4452 <b></b>
4453  
4454 </td>
4455 </tr>
4456 <tr>
4457 <td>rooms_max</td>
4458 <td>U32</td>
4459 <td> </td>
4460 <td>
4461
4462  
4463 </td>
4464 <td>
4465 <b></b>
4466  
4467 </td>
4468 </tr>
4469 <tr>
4470 <td>rooms_lim</td>
4471 <td>U32</td>
4472 <td> </td>
4473 <td>
4474
4475  
4476 </td>
4477 <td>
4478 <b></b>
4479  
4480 </td>
4481 </tr>
4482 <tr>
4483 <td>games_cur</td>
4484 <td>U32</td>
4485 <td> </td>
4486 <td>
4487
4488  
4489 </td>
4490 <td>
4491 <b></b>
4492  
4493 </td>
4494 </tr>
4495 <tr>
4496 <td>games_max</td>
4497 <td>U32</td>
4498 <td> </td>
4499 <td>
4500
4501  
4502 </td>
4503 <td>
4504 <b></b>
4505  
4506 </td>
4507 </tr>
4508 <tr>
4509 <td>games_lim</td>
4510 <td>U32</td>
4511 <td> </td>
4512 <td>
4513
4514  
4515 </td>
4516 <td>
4517 <b></b>
4518  
4519 </td>
4520 </tr>
4521 <tr>
4522 <td>results_cur</td>
4523 <td>U32</td>
4524 <td> </td>
4525 <td>
4526
4527  
4528 </td>
4529 <td>
4530 <b></b>
4531  
4532 </td>
4533 </tr>
4534 <tr>
4535 <td>results_max</td>
4536 <td>U32</td>
4537 <td> </td>
4538 <td>
4539
4540  
4541 </td>
4542 <td>
4543 <b></b>
4544  
4545 </td>
4546 </tr>
4547 <tr>
4548 <td>unknown2</td>
4549 <td>U32</td>
4550 <td> </td>
4551 <td>
4552
4553  
4554 </td>
4555 <td>
4556 <b></b>
4557  
4558 </td>
4559 </tr>
4560 <tr>
4561 <td>params_cur</td>
4562 <td>U32</td>
4563 <td> </td>
4564 <td>
4565
4566  
4567 </td>
4568 <td>
4569 <b></b>
4570  
4571 </td>
4572 </tr>
4573 <tr>
4574 <td>params_max</td>
4575 <td>U32</td>
4576 <td> </td>
4577 <td>
4578
4579  
4580 </td>
4581 <td>
4582 <b></b>
4583  
4584 </td>
4585 </tr>
4586 <tr>
4587 <td>bytes_in</td>
4588 <td>U64</td>
4589 <td> </td>
4590 <td>
4591
4592  
4593 </td>
4594 <td>
4595 <b></b>
4596  
4597 </td>
4598 </tr>
4599 <tr>
4600 <td>packets_in</td>
4601 <td>U64</td>
4602 <td> </td>
4603 <td>
4604
4605  
4606 </td>
4607 <td>
4608 <b></b>
4609  
4610 </td>
4611 </tr>
4612 <tr>
4613 <td>bytes_out</td>
4614 <td>U64</td>
4615 <td> </td>
4616 <td>
4617
4618  
4619 </td>
4620 <td>
4621 <b></b>
4622  
4623 </td>
4624 </tr>
4625 <tr>
4626 <td>packets_out</td>
4627 <td>U64</td>
4628 <td> </td>
4629 <td>
4630
4631  
4632 </td>
4633 <td>
4634 <b></b>
4635  
4636 </td>
4637 </tr>
4638 </table>
4639
4640 <h4>
4641 <a name="S0016"></a>ORIGIN: SERVER;
4642 MESSAGE: idle_warn</h4>
4643 NUMERIC TYPE (hex): 0016
4644 (possibly in response to
4645 <a href="#C0016">idle_reset(0016)</a>
4646 )
4647 <p>
4648 idle warning, autologout soon (10 minutes...)
4649 </p>
4650 <table border="1" width="100%">
4651 <tr>
4652 <th width="10%">NAME</th>
4653 <th width="8%">TYPE</th>
4654 <th width="4%">VALUE</th>
4655 <th>DESCRIPTION</th>
4656 <th width="10%">GUARD</th>
4657 </tr>
4658 </table>
4659
4660 <h4>
4661 <a name="S0018"></a>ORIGIN: SERVER;
4662 MESSAGE: login</h4>
4663 NUMERIC TYPE (hex): 0018
4664 (possibly in response to
4665 <a href="#C0000">login(0000)</a>
4666 )
4667 <p>
4668 </p>
4669 <table border="1" width="100%">
4670 <tr>
4671 <th width="10%">NAME</th>
4672 <th width="8%">TYPE</th>
4673 <th width="4%">VALUE</th>
4674 <th>DESCRIPTION</th>
4675 <th width="10%">GUARD</th>
4676 </tr>
4677 <tr>
4678 <td>message</td>
4679 <td>CONSTANT</td>
4680 <td>logged out: another client logged in with your username </td>
4681 <td>
4682
4683  
4684 </td>
4685 <td>
4686 <b></b>
4687  
4688 </td>
4689 </tr>
4690 </table>
4691
4692 <h4>
4693 <a name="S001c"></a>ORIGIN: SERVER;
4694 MESSAGE: login</h4>
4695 NUMERIC TYPE (hex): 001c
4696 (possibly in response to
4697 <a href="#C0000">login(0000)</a>
4698 )
4699 <p>
4700 </p>
4701 <table border="1" width="100%">
4702 <tr>
4703 <th width="10%">NAME</th>
4704 <th width="8%">TYPE</th>
4705 <th width="4%">VALUE</th>
4706 <th>DESCRIPTION</th>
4707 <th width="10%">GUARD</th>
4708 </tr>
4709 <tr>
4710 <td>message</td>
4711 <td>CONSTANT</td>
4712 <td>logged out: idle for too long </td>
4713 <td>
4714
4715  
4716 </td>
4717 <td>
4718 <b></b>
4719  
4720 </td>
4721 </tr>
4722 </table>
4723
4724 <h4>
4725 <a name="S0020"></a>ORIGIN: SERVER;
4726 MESSAGE: error</h4>
4727 NUMERIC TYPE (hex): 0020<p>
4728 </p>
4729 <table border="1" width="100%">
4730 <tr>
4731 <th width="10%">NAME</th>
4732 <th width="8%">TYPE</th>
4733 <th width="4%">VALUE</th>
4734 <th>DESCRIPTION</th>
4735 <th width="10%">GUARD</th>
4736 </tr>
4737 <tr>
4738 <td>message</td>
4739 <td>CONSTANT</td>
4740 <td>Sorry, you have too many unfinished games. You cannot turn on your rank. Please finish some of your games, then try again. </td>
4741 <td>
4742
4743  
4744 </td>
4745 <td>
4746 <b></b>
4747  
4748 </td>
4749 </tr>
4750 </table>
4751
4752 <h4>
4753 <a name="S0022"></a>ORIGIN: SERVER;
4754 MESSAGE: login</h4>
4755 NUMERIC TYPE (hex): 0022
4756 (possibly in response to
4757 <a href="#C0000">login(0000)</a>
4758 )
4759 <p>
4760 I was blocked sooo many times for developing this client that it was
4761 easy to figure out. The KGS admins sure need no extra nazi training
4762 :(
4763 </p>
4764 <table border="1" width="100%">
4765 <tr>
4766 <th width="10%">NAME</th>
4767 <th width="8%">TYPE</th>
4768 <th width="4%">VALUE</th>
4769 <th>DESCRIPTION</th>
4770 <th width="10%">GUARD</th>
4771 </tr>
4772 <tr>
4773 <td>reason</td>
4774 <td>STRING</td>
4775 <td> </td>
4776 <td>
4777
4778  
4779 </td>
4780 <td>
4781 <b></b>
4782  
4783 </td>
4784 </tr>
4785 <tr>
4786 <td>result</td>
4787 <td>CONSTANT</td>
4788 <td>user or ip blocked </td>
4789 <td>
4790
4791  
4792 </td>
4793 <td>
4794 <b></b>
4795  
4796 </td>
4797 </tr>
4798 </table>
4799
4800 <h4>
4801 <a name="S001b"></a>ORIGIN: SERVER;
4802 MESSAGE: timewarning_default</h4>
4803 NUMERIC TYPE (hex): 001b
4804 (possibly in response to
4805 <a href="#C0000">login(0000)</a>
4806 )
4807 <p>
4808 WILD guess
4809 </p>
4810 <table border="1" width="100%">
4811 <tr>
4812 <th width="10%">NAME</th>
4813 <th width="8%">TYPE</th>
4814 <th width="4%">VALUE</th>
4815 <th>DESCRIPTION</th>
4816 <th width="10%">GUARD</th>
4817 </tr>
4818 <tr>
4819 <td>channel</td>
4820 <td>U16</td>
4821 <td> </td>
4822 <td>
4823
4824  
4825 </td>
4826 <td>
4827 <b></b>
4828  
4829 </td>
4830 </tr>
4831 <tr>
4832 <td>time</td>
4833 <td>U16</td>
4834 <td> </td>
4835 <td>
4836
4837  
4838 </td>
4839 <td>
4840 <b></b>
4841  
4842 </td>
4843 </tr>
4844 </table>
4845
4846 <h4>
4847 <a name="S001c"></a>ORIGIN: SERVER;
4848 MESSAGE: idle_err</h4>
4849 NUMERIC TYPE (hex): 001c<p>
4850 autologout
4851 </p>
4852 <table border="1" width="100%">
4853 <tr>
4854 <th width="10%">NAME</th>
4855 <th width="8%">TYPE</th>
4856 <th width="4%">VALUE</th>
4857 <th>DESCRIPTION</th>
4858 <th width="10%">GUARD</th>
4859 </tr>
4860 </table>
4861
4862 <h4>
4863 <a name="S001d"></a>ORIGIN: SERVER;
4864 MESSAGE: ping</h4>
4865 NUMERIC TYPE (hex): 001d<p>
4866 Sent by the server regularly, but not answering them
4867 isn't valid. Strange form of keepalive?
4868 </p>
4869 <table border="1" width="100%">
4870 <tr>
4871 <th width="10%">NAME</th>
4872 <th width="8%">TYPE</th>
4873 <th width="4%">VALUE</th>
4874 <th>DESCRIPTION</th>
4875 <th width="10%">GUARD</th>
4876 </tr>
4877 </table>
4878
4879 <h4>
4880 <a name="S001e"></a>ORIGIN: SERVER;
4881 MESSAGE: usergraph</h4>
4882 NUMERIC TYPE (hex): 001e
4883 (possibly in response to
4884 <a href="#C001e">req_usergraph(001e)</a>
4885 )
4886 <p>
4887 User graph data.
4888 </p>
4889 <table border="1" width="100%">
4890 <tr>
4891 <th width="10%">NAME</th>
4892 <th width="8%">TYPE</th>
4893 <th width="4%">VALUE</th>
4894 <th>DESCRIPTION</th>
4895 <th width="10%">GUARD</th>
4896 </tr>
4897 <tr>
4898 <td>name</td>
4899 <td>username</td>
4900 <td> </td>
4901 <td>
4902
4903  
4904 </td>
4905 <td>
4906 <b></b>
4907  
4908 </td>
4909 </tr>
4910 <tr>
4911 <td>data</td>
4912 <td>I16</td>
4913 <td> </td>
4914 <td>
4915 If empty, no graph is available. The unit seems to
4916 be centi-kyu, with 1 dan == 0, 2 dan == 100, 1 kyu == -100.
4917 There is probably one entry per day, the newest one last.
4918
4919  
4920 </td>
4921 <td>
4922 <b></b>
4923  
4924 </td>
4925 </tr>
4926 </table>
4927
4928 <h4>
4929 <a name="S001f"></a>ORIGIN: SERVER;
4930 MESSAGE: memo</h4>
4931 NUMERIC TYPE (hex): 001f
4932 (possibly in response to
4933 <a href="#C001f">fetch_memos(001f)</a>
4934 )
4935 <p>
4936 Unclear. "Leave Message"?
4937 6 strings following.
4938 </p>
4939 <table border="1" width="100%">
4940 <tr>
4941 <th width="10%">NAME</th>
4942 <th width="8%">TYPE</th>
4943 <th width="4%">VALUE</th>
4944 <th>DESCRIPTION</th>
4945 <th width="10%">GUARD</th>
4946 </tr>
4947 <tr>
4948 <td>s1</td>
4949 <td>STRING</td>
4950 <td> </td>
4951 <td>
4952
4953  
4954 </td>
4955 <td>
4956 <b></b>
4957  
4958 </td>
4959 </tr>
4960 <tr>
4961 <td>s2</td>
4962 <td>STRING</td>
4963 <td> </td>
4964 <td>
4965
4966  
4967 </td>
4968 <td>
4969 <b></b>
4970  
4971 </td>
4972 </tr>
4973 <tr>
4974 <td>s3</td>
4975 <td>STRING</td>
4976 <td> </td>
4977 <td>
4978
4979  
4980 </td>
4981 <td>
4982 <b></b>
4983  
4984 </td>
4985 </tr>
4986 <tr>
4987 <td>s4</td>
4988 <td>STRING</td>
4989 <td> </td>
4990 <td>
4991
4992  
4993 </td>
4994 <td>
4995 <b></b>
4996  
4997 </td>
4998 </tr>
4999 <tr>
5000 <td>s5</td>
5001 <td>STRING</td>
5002 <td> </td>
5003 <td>
5004
5005  
5006 </td>
5007 <td>
5008 <b></b>
5009  
5010 </td>
5011 </tr>
5012 <tr>
5013 <td>s6</td>
5014 <td>STRING</td>
5015 <td> </td>
5016 <td>
5017
5018  
5019 </td>
5020 <td>
5021 <b></b>
5022  
5023 </td>
5024 </tr>
5025 </table>
5026
5027 <h4>
5028 <a name="S0021"></a>ORIGIN: SERVER;
5029 MESSAGE: userpic</h4>
5030 NUMERIC TYPE (hex): 0021
5031 (possibly in response to
5032 <a href="#C0021">req_pic(0021)</a>
5033 )
5034 <p>
5035 </p>
5036 <table border="1" width="100%">
5037 <tr>
5038 <th width="10%">NAME</th>
5039 <th width="8%">TYPE</th>
5040 <th width="4%">VALUE</th>
5041 <th>DESCRIPTION</th>
5042 <th width="10%">GUARD</th>
5043 </tr>
5044 <tr>
5045 <td>name</td>
5046 <td>username</td>
5047 <td> </td>
5048 <td>
5049 Reply to pic_req, contains an image in jpeg format.
5050
5051  
5052 </td>
5053 <td>
5054 <b></b>
5055  
5056 </td>
5057 </tr>
5058 <tr>
5059 <td>data</td>
5060 <td>DATA</td>
5061 <td> </td>
5062 <td>
5063
5064  
5065 </td>
5066 <td>
5067 <b></b>
5068  
5069 </td>
5070 </tr>
5071 </table>
5072
5073 <h4>
5074 <a name="S0100"></a>ORIGIN: SERVER;
5075 MESSAGE: gnotice</h4>
5076 NUMERIC TYPE (hex): 0100
5077 (possibly in response to
5078 <a href="#C0100">gnotice(0100)</a>
5079 )
5080 <p>
5081 global notice, sent to everybody
5082 </p>
5083 <table border="1" width="100%">
5084 <tr>
5085 <th width="10%">NAME</th>
5086 <th width="8%">TYPE</th>
5087 <th width="4%">VALUE</th>
5088 <th>DESCRIPTION</th>
5089 <th width="10%">GUARD</th>
5090 </tr>
5091 <tr>
5092 <td>notice</td>
5093 <td>STRING</td>
5094 <td> </td>
5095 <td>
5096
5097  
5098 </td>
5099 <td>
5100 <b></b>
5101  
5102 </td>
5103 </tr>
5104 </table>
5105
5106 <h4>
5107 <a name="S0202"></a>ORIGIN: SERVER;
5108 MESSAGE: notify_event</h4>
5109 NUMERIC TYPE (hex): 0202<p>
5110 # maybe soe notify? Totally unclear.
5111 # loc 0" type="userinfo, flags etc. loc 1 =&gt; gameinfo?, loc 2 =&gt; game result (more data)
5112 </p>
5113 <table border="1" width="100%">
5114 <tr>
5115 <th width="10%">NAME</th>
5116 <th width="8%">TYPE</th>
5117 <th width="4%">VALUE</th>
5118 <th>DESCRIPTION</th>
5119 <th width="10%">GUARD</th>
5120 </tr>
5121 <tr>
5122 <td>event</td>
5123 <td>U32</td>
5124 <td> </td>
5125 <td>
5126
5127  
5128 </td>
5129 <td>
5130 <b></b>
5131  
5132 </td>
5133 </tr>
5134 <tr>
5135 <td>user</td>
5136 <td>user</td>
5137 <td> </td>
5138 <td>
5139
5140  
5141 </td>
5142 <td>
5143 <b></b>
5144  
5145 </td>
5146 </tr>
5147 <tr>
5148 <td>gamerecord</td>
5149 <td>game_record</td>
5150 <td> </td>
5151 <td>
5152
5153  
5154 </td>
5155 <td>
5156 <b>event</b> == 2
5157  
5158 </td>
5159 </tr>
5160 </table>
5161
5162 <h4>
5163 <a name="S0310"></a>ORIGIN: SERVER;
5164 MESSAGE: priv_room</h4>
5165 NUMERIC TYPE (hex): 0310<p>
5166 "permission denied" when joining a room
5167 </p>
5168 <table border="1" width="100%">
5169 <tr>
5170 <th width="10%">NAME</th>
5171 <th width="8%">TYPE</th>
5172 <th width="4%">VALUE</th>
5173 <th>DESCRIPTION</th>
5174 <th width="10%">GUARD</th>
5175 </tr>
5176 <tr>
5177 <td>name</td>
5178 <td>STRING</td>
5179 <td> </td>
5180 <td>
5181
5182  
5183 </td>
5184 <td>
5185 <b></b>
5186  
5187 </td>
5188 </tr>
5189 </table>
5190
5191 <h4>
5192 <a name="S0318"></a>ORIGIN: SERVER;
5193 MESSAGE: upd_rooms</h4>
5194 NUMERIC TYPE (hex): 0318
5195 (possibly in response to
5196 <a href="#C0318">list_rooms(0318)</a>
5197 )
5198 <p>
5199 </p>
5200 <table border="1" width="100%">
5201 <tr>
5202 <th width="10%">NAME</th>
5203 <th width="8%">TYPE</th>
5204 <th width="4%">VALUE</th>
5205 <th>DESCRIPTION</th>
5206 <th width="10%">GUARD</th>
5207 </tr>
5208 <tr>
5209 <td>rooms</td>
5210 <td>room</td>
5211 <td> </td>
5212 <td>
5213
5214  
5215 </td>
5216 <td>
5217 <b></b>
5218  
5219 </td>
5220 </tr>
5221 </table>
5222
5223 <h4>
5224 <a name="S0411"></a>ORIGIN: SERVER;
5225 MESSAGE: chal_defaults</h4>
5226 NUMERIC TYPE (hex): 0411
5227 (possibly in response to
5228 <a href="#C0000">login(0000)</a>
5229 )
5230 <p>
5231 </p>
5232 <table border="1" width="100%">
5233 <tr>
5234 <th width="10%">NAME</th>
5235 <th width="8%">TYPE</th>
5236 <th width="4%">VALUE</th>
5237 <th>DESCRIPTION</th>
5238 <th width="10%">GUARD</th>
5239 </tr>
5240 <tr>
5241 <td>channel</td>
5242 <td>U16</td>
5243 <td> </td>
5244 <td>
5245
5246  
5247 </td>
5248 <td>
5249 <b></b>
5250  
5251 </td>
5252 </tr>
5253 <tr>
5254 <td>defaults</td>
5255 <td>challenge_defaults</td>
5256 <td> </td>
5257 <td>
5258
5259  
5260 </td>
5261 <td>
5262 <b></b>
5263  
5264 </td>
5265 </tr>
5266 </table>
5267
5268 <h4>
5269 <a name="S0412"></a>ORIGIN: SERVER;
5270 MESSAGE: game_error</h4>
5271 NUMERIC TYPE (hex): 0412<p>
5272 Unable to create challenge. The channel is be optional.
5273 </p>
5274 <table border="1" width="100%">
5275 <tr>
5276 <th width="10%">NAME</th>
5277 <th width="8%">TYPE</th>
5278 <th width="4%">VALUE</th>
5279 <th>DESCRIPTION</th>
5280 <th width="10%">GUARD</th>
5281 </tr>
5282 <tr>
5283 <td>message</td>
5284 <td>CONSTANT</td>
5285 <td>Sorry, you are already playing in one game, so you can't start playing in another. </td>
5286 <td>
5287
5288  
5289 </td>
5290 <td>
5291 <b></b>
5292  
5293 </td>
5294 </tr>
5295 <tr>
5296 <td>channel</td>
5297 <td>U16</td>
5298 <td> </td>
5299 <td>
5300
5301  
5302 </td>
5303 <td>
5304 <b></b>
5305  
5306 </td>
5307 </tr>
5308 </table>
5309
5310 <h4>
5311 <a name="S0414"></a>ORIGIN: SERVER;
5312 MESSAGE: game_record</h4>
5313 NUMERIC TYPE (hex): 0414
5314 (possibly in response to
5315 <a href="#C0413">req_game_record(0413)</a>
5316 )
5317 <p>
5318 The users game record.
5319 </p>
5320 <table border="1" width="100%">
5321 <tr>
5322 <th width="10%">NAME</th>
5323 <th width="8%">TYPE</th>
5324 <th width="4%">VALUE</th>
5325 <th>DESCRIPTION</th>
5326 <th width="10%">GUARD</th>
5327 </tr>
5328 <tr>
5329 <td>name</td>
5330 <td>username</td>
5331 <td> </td>
5332 <td>
5333
5334  
5335 </td>
5336 <td>
5337 <b></b>
5338  
5339 </td>
5340 </tr>
5341 <tr>
5342 <td>more</td>
5343 <td>flag</td>
5344 <td> </td>
5345 <td>
5346 Wether more games are available (must be requested manually)
5347
5348  
5349 </td>
5350 <td>
5351 <b></b>
5352  
5353 </td>
5354 </tr>
5355 <tr>
5356 <td>games</td>
5357 <td>game_record</td>
5358 <td> </td>
5359 <td>
5360
5361  
5362 </td>
5363 <td>
5364 <b></b>
5365  
5366 </td>
5367 </tr>
5368 </table>
5369
5370 <h4>
5371 <a name="S0417"></a>ORIGIN: SERVER;
5372 MESSAGE: error</h4>
5373 NUMERIC TYPE (hex): 0417<p>
5374 </p>
5375 <table border="1" width="100%">
5376 <tr>
5377 <th width="10%">NAME</th>
5378 <th width="8%">TYPE</th>
5379 <th width="4%">VALUE</th>
5380 <th>DESCRIPTION</th>
5381 <th width="10%">GUARD</th>
5382 </tr>
5383 <tr>
5384 <td>message</td>
5385 <td>CONSTANT</td>
5386 <td>Sorry, your opponent is currently not logged in, so you can't resume this game. </td>
5387 <td>
5388
5389  
5390 </td>
5391 <td>
5392 <b></b>
5393  
5394 </td>
5395 </tr>
5396 </table>
5397
5398 <h4>
5399 <a name="S0418"></a>ORIGIN: SERVER;
5400 MESSAGE: error</h4>
5401 NUMERIC TYPE (hex): 0418<p>
5402 </p>
5403 <table border="1" width="100%">
5404 <tr>
5405 <th width="10%">NAME</th>
5406 <th width="8%">TYPE</th>
5407 <th width="4%">VALUE</th>
5408 <th>DESCRIPTION</th>
5409 <th width="10%">GUARD</th>
5410 </tr>
5411 <tr>
5412 <td>message</td>
5413 <td>CONSTANT</td>
5414 <td>Sorry, your opponent is already playing in a game, so you cannot continue this one. </td>
5415 <td>
5416
5417  
5418 </td>
5419 <td>
5420 <b></b>
5421  
5422 </td>
5423 </tr>
5424 </table>
5425
5426 <h4>
5427 <a name="S0419"></a>ORIGIN: SERVER;
5428 MESSAGE: error</h4>
5429 NUMERIC TYPE (hex): 0419<p>
5430 </p>
5431 <table border="1" width="100%">
5432 <tr>
5433 <th width="10%">NAME</th>
5434 <th width="8%">TYPE</th>
5435 <th width="4%">VALUE</th>
5436 <th>DESCRIPTION</th>
5437 <th width="10%">GUARD</th>
5438 </tr>
5439 <tr>
5440 <td>message</td>
5441 <td>CONSTANT</td>
5442 <td>Sorry, the server is out of boards! Please wait a few minutes and try to start a game again. </td>
5443 <td>
5444
5445  
5446 </td>
5447 <td>
5448 <b></b>
5449  
5450 </td>
5451 </tr>
5452 </table>
5453
5454 <h4>
5455 <a name="S041c"></a>ORIGIN: SERVER;
5456 MESSAGE: upd_game2</h4>
5457 NUMERIC TYPE (hex): 041c<p>
5458 Unclear.
5459 </p>
5460 <table border="1" width="100%">
5461 <tr>
5462 <th width="10%">NAME</th>
5463 <th width="8%">TYPE</th>
5464 <th width="4%">VALUE</th>
5465 <th>DESCRIPTION</th>
5466 <th width="10%">GUARD</th>
5467 </tr>
5468 <tr>
5469 <td>channel_junk</td>
5470 <td>U16</td>
5471 <td> </td>
5472 <td>
5473
5474  
5475 </td>
5476 <td>
5477 <b></b>
5478  
5479 </td>
5480 </tr>
5481 <tr>
5482 <td>game</td>
5483 <td>game</td>
5484 <td> </td>
5485 <td>
5486
5487  
5488 </td>
5489 <td>
5490 <b></b>
5491  
5492 </td>
5493 </tr>
5494 </table>
5495
5496 <h4>
5497 <a name="S041f"></a>ORIGIN: SERVER;
5498 MESSAGE: error</h4>
5499 NUMERIC TYPE (hex): 041f<p>
5500 </p>
5501 <table border="1" width="100%">
5502 <tr>
5503 <th width="10%">NAME</th>
5504 <th width="8%">TYPE</th>
5505 <th width="4%">VALUE</th>
5506 <th>DESCRIPTION</th>
5507 <th width="10%">GUARD</th>
5508 </tr>
5509 <tr>
5510 <td>message</td>
5511 <td>CONSTANT</td>
5512 <td>Sorry, the game you tried to load was not correctly saved...probably caused by the server crashing. It cannot be recovered. </td>
5513 <td>
5514
5515  
5516 </td>
5517 <td>
5518 <b></b>
5519  
5520 </td>
5521 </tr>
5522 </table>
5523
5524 <h4>
5525 <a name="S0420"></a>ORIGIN: SERVER;
5526 MESSAGE: error</h4>
5527 NUMERIC TYPE (hex): 0420<p>
5528 </p>
5529 <table border="1" width="100%">
5530 <tr>
5531 <th width="10%">NAME</th>
5532 <th width="8%">TYPE</th>
5533 <th width="4%">VALUE</th>
5534 <th>DESCRIPTION</th>
5535 <th width="10%">GUARD</th>
5536 </tr>
5537 <tr>
5538 <td>message</td>
5539 <td>CONSTANT</td>
5540 <td>Sorry, user "%s" has left the game you are starting before you could challenge them. You will have to play against somebody else. </td>
5541 <td>
5542
5543  
5544 </td>
5545 <td>
5546 <b></b>
5547  
5548 </td>
5549 </tr>
5550 </table>
5551
5552 <h4>
5553 <a name="S0421"></a>ORIGIN: SERVER;
5554 MESSAGE: error</h4>
5555 NUMERIC TYPE (hex): 0421<p>
5556 </p>
5557 <table border="1" width="100%">
5558 <tr>
5559 <th width="10%">NAME</th>
5560 <th width="8%">TYPE</th>
5561 <th width="4%">VALUE</th>
5562 <th>DESCRIPTION</th>
5563 <th width="10%">GUARD</th>
5564 </tr>
5565 <tr>
5566 <td>message</td>
5567 <td>CONSTANT</td>
5568 <td>Sorry, this game is a private lesson. You will not be allowed to observe it. </td>
5569 <td>
5570
5571  
5572 </td>
5573 <td>
5574 <b></b>
5575  
5576 </td>
5577 </tr>
5578 </table>
5579
5580 <h3>Room messages</h3>
5581
5582 <p>Not all room messages are for rooms only, and rooms need to parse
5583 not only these messages. Orthogonality, what for?</p>
5584
5585 <h4>
5586 <a name="S4300"></a>ORIGIN: SERVER;
5587 MESSAGE: join_room</h4>
5588 NUMERIC TYPE (hex): 4300
5589 (possibly in response to
5590 <a href="#C4300">join_room(4300)</a>
5591 )
5592 <p>
5593 </p>
5594 <table border="1" width="100%">
5595 <tr>
5596 <th width="10%">NAME</th>
5597 <th width="8%">TYPE</th>
5598 <th width="4%">VALUE</th>
5599 <th>DESCRIPTION</th>
5600 <th width="10%">GUARD</th>
5601 </tr>
5602 <tr>
5603 <td>channel</td>
5604 <td>U16</td>
5605 <td> </td>
5606 <td>
5607
5608  
5609 </td>
5610 <td>
5611 <b></b>
5612  
5613 </td>
5614 </tr>
5615 <tr>
5616 <td>users</td>
5617 <td>user</td>
5618 <td> </td>
5619 <td>
5620
5621  
5622 </td>
5623 <td>
5624 <b></b>
5625  
5626 </td>
5627 </tr>
5628 </table>
5629
5630 <h4>
5631 <a name="S4301"></a>ORIGIN: SERVER;
5632 MESSAGE: msg_room</h4>
5633 NUMERIC TYPE (hex): 4301<p>
5634 </p>
5635 <table border="1" width="100%">
5636 <tr>
5637 <th width="10%">NAME</th>
5638 <th width="8%">TYPE</th>
5639 <th width="4%">VALUE</th>
5640 <th>DESCRIPTION</th>
5641 <th width="10%">GUARD</th>
5642 </tr>
5643 <tr>
5644 <td>channel</td>
5645 <td>U16</td>
5646 <td> </td>
5647 <td>
5648
5649  
5650 </td>
5651 <td>
5652 <b></b>
5653  
5654 </td>
5655 </tr>
5656 <tr>
5657 <td>name</td>
5658 <td>username</td>
5659 <td> </td>
5660 <td>
5661
5662  
5663 </td>
5664 <td>
5665 <b></b>
5666  
5667 </td>
5668 </tr>
5669 <tr>
5670 <td>message</td>
5671 <td>STRING</td>
5672 <td> </td>
5673 <td>
5674
5675  
5676 </td>
5677 <td>
5678 <b></b>
5679  
5680 </td>
5681 </tr>
5682 </table>
5683
5684 <h4>
5685 <a name="S4302"></a>ORIGIN: SERVER;
5686 MESSAGE: part_room</h4>
5687 NUMERIC TYPE (hex): 4302<p>
5688 </p>
5689 <table border="1" width="100%">
5690 <tr>
5691 <th width="10%">NAME</th>
5692 <th width="8%">TYPE</th>
5693 <th width="4%">VALUE</th>
5694 <th>DESCRIPTION</th>
5695 <th width="10%">GUARD</th>
5696 </tr>
5697 <tr>
5698 <td>channel</td>
5699 <td>U16</td>
5700 <td> </td>
5701 <td>
5702
5703  
5704 </td>
5705 <td>
5706 <b></b>
5707  
5708 </td>
5709 </tr>
5710 <tr>
5711 <td>user</td>
5712 <td>user</td>
5713 <td> </td>
5714 <td>
5715
5716  
5717 </td>
5718 <td>
5719 <b></b>
5720  
5721 </td>
5722 </tr>
5723 </table>
5724
5725 <h4>
5726 <a name="S4303"></a>ORIGIN: SERVER;
5727 MESSAGE: del_room</h4>
5728 NUMERIC TYPE (hex): 4303<p>
5729 </p>
5730 <table border="1" width="100%">
5731 <tr>
5732 <th width="10%">NAME</th>
5733 <th width="8%">TYPE</th>
5734 <th width="4%">VALUE</th>
5735 <th>DESCRIPTION</th>
5736 <th width="10%">GUARD</th>
5737 </tr>
5738 <tr>
5739 <td>channel</td>
5740 <td>U16</td>
5741 <td> </td>
5742 <td>
5743
5744  
5745 </td>
5746 <td>
5747 <b></b>
5748  
5749 </td>
5750 </tr>
5751 </table>
5752
5753 <h4>
5754 <a name="S4304"></a>ORIGIN: SERVER;
5755 MESSAGE: upd_games</h4>
5756 NUMERIC TYPE (hex): 4304<p>
5757 </p>
5758 <table border="1" width="100%">
5759 <tr>
5760 <th width="10%">NAME</th>
5761 <th width="8%">TYPE</th>
5762 <th width="4%">VALUE</th>
5763 <th>DESCRIPTION</th>
5764 <th width="10%">GUARD</th>
5765 </tr>
5766 <tr>
5767 <td>channel</td>
5768 <td>U16</td>
5769 <td> </td>
5770 <td>
5771
5772  
5773 </td>
5774 <td>
5775 <b></b>
5776  
5777 </td>
5778 </tr>
5779 <tr>
5780 <td>games</td>
5781 <td>game</td>
5782 <td> </td>
5783 <td>
5784
5785  
5786 </td>
5787 <td>
5788 <b></b>
5789  
5790 </td>
5791 </tr>
5792 </table>
5793
5794 <h4>
5795 <a name="S4319"></a>ORIGIN: SERVER;
5796 MESSAGE: desc_room</h4>
5797 NUMERIC TYPE (hex): 4319<p>
5798 </p>
5799 <table border="1" width="100%">
5800 <tr>
5801 <th width="10%">NAME</th>
5802 <th width="8%">TYPE</th>
5803 <th width="4%">VALUE</th>
5804 <th>DESCRIPTION</th>
5805 <th width="10%">GUARD</th>
5806 </tr>
5807 <tr>
5808 <td>channel</td>
5809 <td>U16</td>
5810 <td> </td>
5811 <td>
5812
5813  
5814 </td>
5815 <td>
5816 <b></b>
5817  
5818 </td>
5819 </tr>
5820 <tr>
5821 <td>owner</td>
5822 <td>username</td>
5823 <td> </td>
5824 <td>
5825
5826  
5827 </td>
5828 <td>
5829 <b></b>
5830  
5831 </td>
5832 </tr>
5833 <tr>
5834 <td>description</td>
5835 <td>STRING</td>
5836 <td> </td>
5837 <td>
5838
5839  
5840 </td>
5841 <td>
5842 <b></b>
5843  
5844 </td>
5845 </tr>
5846 </table>
5847
5848 <h3>Game messages</h3>
5849
5850 <h4>
5851 <a name="S4400"></a>ORIGIN: SERVER;
5852 MESSAGE: upd_challenge</h4>
5853 NUMERIC TYPE (hex): 4400<p>
5854 Unclear.
5855 </p>
5856 <table border="1" width="100%">
5857 <tr>
5858 <th width="10%">NAME</th>
5859 <th width="8%">TYPE</th>
5860 <th width="4%">VALUE</th>
5861 <th>DESCRIPTION</th>
5862 <th width="10%">GUARD</th>
5863 </tr>
5864 <tr>
5865 <td>channel</td>
5866 <td>U16</td>
5867 <td> </td>
5868 <td>
5869
5870  
5871 </td>
5872 <td>
5873 <b></b>
5874  
5875 </td>
5876 </tr>
5877 <tr>
5878 <td>challenge</td>
5879 <td>challenge</td>
5880 <td> </td>
5881 <td>
5882
5883  
5884 </td>
5885 <td>
5886 <b></b>
5887  
5888 </td>
5889 </tr>
5890 </table>
5891
5892 <h4>
5893 <a name="S4401"></a>ORIGIN: SERVER;
5894 MESSAGE: upd_game</h4>
5895 NUMERIC TYPE (hex): 4401<p>
5896 </p>
5897 <table border="1" width="100%">
5898 <tr>
5899 <th width="10%">NAME</th>
5900 <th width="8%">TYPE</th>
5901 <th width="4%">VALUE</th>
5902 <th>DESCRIPTION</th>
5903 <th width="10%">GUARD</th>
5904 </tr>
5905 <tr>
5906 <td>channel</td>
5907 <td>U16</td>
5908 <td> </td>
5909 <td>
5910
5911  
5912 </td>
5913 <td>
5914 <b></b>
5915  
5916 </td>
5917 </tr>
5918 <tr>
5919 <td>game</td>
5920 <td>game</td>
5921 <td> </td>
5922 <td>
5923
5924  
5925 </td>
5926 <td>
5927 <b></b>
5928  
5929 </td>
5930 </tr>
5931 </table>
5932
5933 <h4>
5934 <a name="S4402"></a>ORIGIN: SERVER;
5935 MESSAGE: del_game</h4>
5936 NUMERIC TYPE (hex): 4402<p>
5937 </p>
5938 <table border="1" width="100%">
5939 <tr>
5940 <th width="10%">NAME</th>
5941 <th width="8%">TYPE</th>
5942 <th width="4%">VALUE</th>
5943 <th>DESCRIPTION</th>
5944 <th width="10%">GUARD</th>
5945 </tr>
5946 <tr>
5947 <td>channel</td>
5948 <td>U16</td>
5949 <td> </td>
5950 <td>
5951
5952  
5953 </td>
5954 <td>
5955 <b></b>
5956  
5957 </td>
5958 </tr>
5959 </table>
5960
5961 <h4>
5962 <a name="S4403"></a>ORIGIN: SERVER;
5963 MESSAGE: upd_observers</h4>
5964 NUMERIC TYPE (hex): 4403<p>
5965 </p>
5966 <table border="1" width="100%">
5967 <tr>
5968 <th width="10%">NAME</th>
5969 <th width="8%">TYPE</th>
5970 <th width="4%">VALUE</th>
5971 <th>DESCRIPTION</th>
5972 <th width="10%">GUARD</th>
5973 </tr>
5974 <tr>
5975 <td>channel</td>
5976 <td>U16</td>
5977 <td> </td>
5978 <td>
5979
5980  
5981 </td>
5982 <td>
5983 <b></b>
5984  
5985 </td>
5986 </tr>
5987 <tr>
5988 <td>users</td>
5989 <td>user</td>
5990 <td> </td>
5991 <td>
5992
5993  
5994 </td>
5995 <td>
5996 <b></b>
5997  
5998 </td>
5999 </tr>
6000 </table>
6001
6002 <h4>
6003 <a name="S4404"></a>ORIGIN: SERVER;
6004 MESSAGE: del_observer</h4>
6005 NUMERIC TYPE (hex): 4404<p>
6006 </p>
6007 <table border="1" width="100%">
6008 <tr>
6009 <th width="10%">NAME</th>
6010 <th width="8%">TYPE</th>
6011 <th width="4%">VALUE</th>
6012 <th>DESCRIPTION</th>
6013 <th width="10%">GUARD</th>
6014 </tr>
6015 <tr>
6016 <td>channel</td>
6017 <td>U16</td>
6018 <td> </td>
6019 <td>
6020
6021  
6022 </td>
6023 <td>
6024 <b></b>
6025  
6026 </td>
6027 </tr>
6028 <tr>
6029 <td>name</td>
6030 <td>username</td>
6031 <td> </td>
6032 <td>
6033
6034  
6035 </td>
6036 <td>
6037 <b></b>
6038  
6039 </td>
6040 </tr>
6041 </table>
6042
6043 <h4>
6044 <a name="S4405"></a>ORIGIN: SERVER;
6045 MESSAGE: set_tree</h4>
6046 NUMERIC TYPE (hex): 4405<p>
6047 </p>
6048 <table border="1" width="100%">
6049 <tr>
6050 <th width="10%">NAME</th>
6051 <th width="8%">TYPE</th>
6052 <th width="4%">VALUE</th>
6053 <th>DESCRIPTION</th>
6054 <th width="10%">GUARD</th>
6055 </tr>
6056 <tr>
6057 <td>channel</td>
6058 <td>U16</td>
6059 <td> </td>
6060 <td>
6061
6062  
6063 </td>
6064 <td>
6065 <b></b>
6066  
6067 </td>
6068 </tr>
6069 <tr>
6070 <td>tree</td>
6071 <td>TREE</td>
6072 <td> </td>
6073 <td>
6074
6075  
6076 </td>
6077 <td>
6078 <b></b>
6079  
6080 </td>
6081 </tr>
6082 </table>
6083
6084 <h4>
6085 <a name="S4406"></a>ORIGIN: SERVER;
6086 MESSAGE: upd_tree</h4>
6087 NUMERIC TYPE (hex): 4406<p>
6088 </p>
6089 <table border="1" width="100%">
6090 <tr>
6091 <th width="10%">NAME</th>
6092 <th width="8%">TYPE</th>
6093 <th width="4%">VALUE</th>
6094 <th>DESCRIPTION</th>
6095 <th width="10%">GUARD</th>
6096 </tr>
6097 <tr>
6098 <td>channel</td>
6099 <td>U16</td>
6100 <td> </td>
6101 <td>
6102
6103  
6104 </td>
6105 <td>
6106 <b></b>
6107  
6108 </td>
6109 </tr>
6110 <tr>
6111 <td>tree</td>
6112 <td>TREE</td>
6113 <td> </td>
6114 <td>
6115
6116  
6117 </td>
6118 <td>
6119 <b></b>
6120  
6121 </td>
6122 </tr>
6123 </table>
6124
6125 <h4>
6126 <a name="S4409"></a>ORIGIN: SERVER;
6127 MESSAGE: superko</h4>
6128 NUMERIC TYPE (hex): 4409<p>
6129 Superko-warning.
6130 </p>
6131 <table border="1" width="100%">
6132 <tr>
6133 <th width="10%">NAME</th>
6134 <th width="8%">TYPE</th>
6135 <th width="4%">VALUE</th>
6136 <th>DESCRIPTION</th>
6137 <th width="10%">GUARD</th>
6138 </tr>
6139 <tr>
6140 <td>channel</td>
6141 <td>U16</td>
6142 <td> </td>
6143 <td>
6144
6145  
6146 </td>
6147 <td>
6148 <b></b>
6149  
6150 </td>
6151 </tr>
6152 </table>
6153
6154 <h4>
6155 <a name="S440b"></a>ORIGIN: SERVER;
6156 MESSAGE: final_result</h4>
6157 NUMERIC TYPE (hex): 440b<p>
6158 </p>
6159 <table border="1" width="100%">
6160 <tr>
6161 <th width="10%">NAME</th>
6162 <th width="8%">TYPE</th>
6163 <th width="4%">VALUE</th>
6164 <th>DESCRIPTION</th>
6165 <th width="10%">GUARD</th>
6166 </tr>
6167 <tr>
6168 <td>channel</td>
6169 <td>U16</td>
6170 <td> </td>
6171 <td>
6172
6173  
6174 </td>
6175 <td>
6176 <b></b>
6177  
6178 </td>
6179 </tr>
6180 <tr>
6181 <td>blackscore</td>
6182 <td>scorevalues</td>
6183 <td> </td>
6184 <td>
6185
6186  
6187 </td>
6188 <td>
6189 <b></b>
6190  
6191 </td>
6192 </tr>
6193 <tr>
6194 <td>whitescore</td>
6195 <td>scorevalues</td>
6196 <td> </td>
6197 <td>
6198
6199  
6200 </td>
6201 <td>
6202 <b></b>
6203  
6204 </td>
6205 </tr>
6206 </table>
6207
6208 <h4>
6209 <a name="S440e"></a>ORIGIN: SERVER;
6210 MESSAGE: req_undo</h4>
6211 NUMERIC TYPE (hex): 440e<p>
6212 </p>
6213 <table border="1" width="100%">
6214 <tr>
6215 <th width="10%">NAME</th>
6216 <th width="8%">TYPE</th>
6217 <th width="4%">VALUE</th>
6218 <th>DESCRIPTION</th>
6219 <th width="10%">GUARD</th>
6220 </tr>
6221 <tr>
6222 <td>channel</td>
6223 <td>U16</td>
6224 <td> </td>
6225 <td>
6226
6227
6228  
6229 </td>
6230 <td>
6231 <b></b>
6232  
6233 </td>
6234 </tr>
6235 </table>
6236
6237 <h4>
6238 <a name="S4410"></a>ORIGIN: SERVER;
6239 MESSAGE: resign_game</h4>
6240 NUMERIC TYPE (hex): 4410<p>
6241 </p>
6242 <table border="1" width="100%">
6243 <tr>
6244 <th width="10%">NAME</th>
6245 <th width="8%">TYPE</th>
6246 <th width="4%">VALUE</th>
6247 <th>DESCRIPTION</th>
6248 <th width="10%">GUARD</th>
6249 </tr>
6250 <tr>
6251 <td>channel</td>
6252 <td>U16</td>
6253 <td> </td>
6254 <td>
6255
6256  
6257 </td>
6258 <td>
6259 <b></b>
6260  
6261 </td>
6262 </tr>
6263 <tr>
6264 <td>player</td>
6265 <td>U8</td>
6266 <td> </td>
6267 <td>
6268
6269  
6270 </td>
6271 <td>
6272 <b></b>
6273  
6274 </td>
6275 </tr>
6276 </table>
6277
6278 <h4>
6279 <a name="S4415"></a>ORIGIN: SERVER;
6280 MESSAGE: game_error</h4>
6281 NUMERIC TYPE (hex): 4415<p>
6282 </p>
6283 <table border="1" width="100%">
6284 <tr>
6285 <th width="10%">NAME</th>
6286 <th width="8%">TYPE</th>
6287 <th width="4%">VALUE</th>
6288 <th>DESCRIPTION</th>
6289 <th width="10%">GUARD</th>
6290 </tr>
6291 <tr>
6292 <td>channel</td>
6293 <td>U16</td>
6294 <td> </td>
6295 <td>
6296
6297  
6298 </td>
6299 <td>
6300 <b></b>
6301  
6302 </td>
6303 </tr>
6304 <tr>
6305 <td>message</td>
6306 <td>CONSTANT</td>
6307 <td>Sorry, this is a lecture game. Only authorized players are allowed to make comments. </td>
6308 <td>
6309
6310  
6311 </td>
6312 <td>
6313 <b></b>
6314  
6315 </td>
6316 </tr>
6317 </table>
6318
6319 <h4>
6320 <a name="S441a"></a>ORIGIN: SERVER;
6321 MESSAGE: set_teacher</h4>
6322 NUMERIC TYPE (hex): 441a<p>
6323 </p>
6324 <table border="1" width="100%">
6325 <tr>
6326 <th width="10%">NAME</th>
6327 <th width="8%">TYPE</th>
6328 <th width="4%">VALUE</th>
6329 <th>DESCRIPTION</th>
6330 <th width="10%">GUARD</th>
6331 </tr>
6332 <tr>
6333 <td>channel</td>
6334 <td>U16</td>
6335 <td> </td>
6336 <td>
6337
6338  
6339 </td>
6340 <td>
6341 <b></b>
6342  
6343 </td>
6344 </tr>
6345 <tr>
6346 <td>name</td>
6347 <td>username</td>
6348 <td> </td>
6349 <td>
6350
6351  
6352 </td>
6353 <td>
6354 <b></b>
6355  
6356 </td>
6357 </tr>
6358 </table>
6359
6360 <h4>
6361 <a name="S441d"></a>ORIGIN: SERVER;
6362 MESSAGE: owner_left</h4>
6363 NUMERIC TYPE (hex): 441d<p>
6364 </p>
6365 <table border="1" width="100%">
6366 <tr>
6367 <th width="10%">NAME</th>
6368 <th width="8%">TYPE</th>
6369 <th width="4%">VALUE</th>
6370 <th>DESCRIPTION</th>
6371 <th width="10%">GUARD</th>
6372 </tr>
6373 <tr>
6374 <td>channel</td>
6375 <td>U16</td>
6376 <td> </td>
6377 <td>
6378
6379  
6380 </td>
6381 <td>
6382 <b></b>
6383  
6384 </td>
6385 </tr>
6386 <tr>
6387 <td>message</td>
6388 <td>CONSTANT</td>
6389 <td>Sorry, the owner of this game has left. Nobody will be allowed to edit it until the owner returns. </td>
6390 <td>
6391
6392  
6393 </td>
6394 <td>
6395 <b></b>
6396  
6397 </td>
6398 </tr>
6399 </table>
6400
6401 <h4>
6402 <a name="S441e"></a>ORIGIN: SERVER;
6403 MESSAGE: teacher_left</h4>
6404 NUMERIC TYPE (hex): 441e<p>
6405 Unclear.
6406 </p>
6407 <table border="1" width="100%">
6408 <tr>
6409 <th width="10%">NAME</th>
6410 <th width="8%">TYPE</th>
6411 <th width="4%">VALUE</th>
6412 <th>DESCRIPTION</th>
6413 <th width="10%">GUARD</th>
6414 </tr>
6415 <tr>
6416 <td>channel</td>
6417 <td>U16</td>
6418 <td> </td>
6419 <td>
6420
6421  
6422 </td>
6423 <td>
6424 <b></b>
6425  
6426 </td>
6427 </tr>
6428 </table>
6429
6430 <h4>
6431 <a name="S4422"></a>ORIGIN: SERVER;
6432 MESSAGE: allow_user_result</h4>
6433 NUMERIC TYPE (hex): 4422<p>
6434 </p>
6435 <table border="1" width="100%">
6436 <tr>
6437 <th width="10%">NAME</th>
6438 <th width="8%">TYPE</th>
6439 <th width="4%">VALUE</th>
6440 <th>DESCRIPTION</th>
6441 <th width="10%">GUARD</th>
6442 </tr>
6443 <tr>
6444 <td>message</td>
6445 <td>CONSTANT</td>
6446 <td>User "%s" will now be allowed full access to your game. </td>
6447 <td>
6448
6449  
6450 </td>
6451 <td>
6452 <b></b>
6453  
6454 </td>
6455 </tr>
6456 <tr>
6457 <td>channel</td>
6458 <td>U16</td>
6459 <td> </td>
6460 <td>
6461
6462  
6463 </td>
6464 <td>
6465 <b></b>
6466  
6467 </td>
6468 </tr>
6469 </table>
6470
6471 <h4>
6472 <a name="S4424"></a>ORIGIN: SERVER;
6473 MESSAGE: allow_user_result</h4>
6474 NUMERIC TYPE (hex): 4424<p>
6475 </p>
6476 <table border="1" width="100%">
6477 <tr>
6478 <th width="10%">NAME</th>
6479 <th width="8%">TYPE</th>
6480 <th width="4%">VALUE</th>
6481 <th>DESCRIPTION</th>
6482 <th width="10%">GUARD</th>
6483 </tr>
6484 <tr>
6485 <td>message</td>
6486 <td>CONSTANT</td>
6487 <td>Sorry, user "%s" is a guest and cannot be allowed full access to your game. </td>
6488 <td>
6489
6490  
6491 </td>
6492 <td>
6493 <b></b>
6494  
6495 </td>
6496 </tr>
6497 <tr>
6498 <td>channel</td>
6499 <td>U16</td>
6500 <td> </td>
6501 <td>
6502
6503  
6504 </td>
6505 <td>
6506 <b></b>
6507  
6508 </td>
6509 </tr>
6510 </table>
6511
6512 <h4>
6513 <a name="S4425"></a>ORIGIN: SERVER;
6514 MESSAGE: allow_user_result</h4>
6515 NUMERIC TYPE (hex): 4425<p>
6516 </p>
6517 <table border="1" width="100%">
6518 <tr>
6519 <th width="10%">NAME</th>
6520 <th width="8%">TYPE</th>
6521 <th width="4%">VALUE</th>
6522 <th>DESCRIPTION</th>
6523 <th width="10%">GUARD</th>
6524 </tr>
6525 <tr>
6526 <td>message</td>
6527 <td>CONSTANT</td>
6528 <td>Sorry, user "%s" does not seem to exist and cannot be allowed into your game. </td>
6529 <td>
6530
6531  
6532 </td>
6533 <td>
6534 <b></b>
6535  
6536 </td>
6537 </tr>
6538 <tr>
6539 <td>channel</td>
6540 <td>U16</td>
6541 <td> </td>
6542 <td>
6543
6544  
6545 </td>
6546 <td>
6547 <b></b>
6548  
6549 </td>
6550 </tr>
6551 </table>
6552
6553 <h4>
6554 <a name="S4428"></a>ORIGIN: SERVER;
6555 MESSAGE: add_tree</h4>
6556 NUMERIC TYPE (hex): 4428<p>
6557 <p>See <a href="#S4405">set_tree(4405)</a>. In addition, flags the tree as being
6558 uploaded completely.</p>
6559 </p>
6560 <table border="1" width="100%">
6561 <tr>
6562 <th width="10%">NAME</th>
6563 <th width="8%">TYPE</th>
6564 <th width="4%">VALUE</th>
6565 <th>DESCRIPTION</th>
6566 <th width="10%">GUARD</th>
6567 </tr>
6568 <tr>
6569 <td>channel</td>
6570 <td>U16</td>
6571 <td> </td>
6572 <td>
6573
6574  
6575 </td>
6576 <td>
6577 <b></b>
6578  
6579 </td>
6580 </tr>
6581 <tr>
6582 <td>tree</td>
6583 <td>TREE</td>
6584 <td> </td>
6585 <td>
6586
6587  
6588 </td>
6589 <td>
6590 <b></b>
6591  
6592 </td>
6593 </tr>
6594 </table>
6595
6596 <h4>
6597 <a name="S4429"></a>ORIGIN: SERVER;
6598 MESSAGE: reject_challenge</h4>
6599 NUMERIC TYPE (hex): 4429<p>
6600 Reject a challenge by a given user. Not checked.
6601
6602 </p>
6603 <table border="1" width="100%">
6604 <tr>
6605 <th width="10%">NAME</th>
6606 <th width="8%">TYPE</th>
6607 <th width="4%">VALUE</th>
6608 <th>DESCRIPTION</th>
6609 <th width="10%">GUARD</th>
6610 </tr>
6611 <tr>
6612 <td>channel</td>
6613 <td>U16</td>
6614 <td> </td>
6615 <td>
6616
6617  
6618 </td>
6619 <td>
6620 <b></b>
6621  
6622 </td>
6623 </tr>
6624 <tr>
6625 <td>name</td>
6626 <td>username</td>
6627 <td> </td>
6628 <td>
6629
6630  
6631 </td>
6632 <td>
6633 <b></b>
6634  
6635 </td>
6636 </tr>
6637 </table>
6638
6639 <h4>
6640 <a name="C442f"></a>ORIGIN: CLIENT;
6641 MESSAGE: new_game</h4>
6642 NUMERIC TYPE (hex): 442f<p>
6643 <p>Notifies the client that a new game has been created. This
6644 message is sent long *after* upd_observers etc. has been received.
6645 *sigh*</p>
6646 </p>
6647 <table border="1" width="100%">
6648 <tr>
6649 <th width="10%">NAME</th>
6650 <th width="8%">TYPE</th>
6651 <th width="4%">VALUE</th>
6652 <th>DESCRIPTION</th>
6653 <th width="10%">GUARD</th>
6654 </tr>
6655 <tr>
6656 <td>channel</td>
6657 <td>U16</td>
6658 <td> </td>
6659 <td>
6660
6661  
6662 </td>
6663 <td>
6664 <b></b>
6665  
6666 </td>
6667 </tr>
6668 <tr>
6669 <td>id</td>
6670 <td>U16</td>
6671 <td> </td>
6672 <td>
6673
6674  
6675 </td>
6676 <td>
6677 <b></b>
6678  
6679 </td>
6680 </tr>
6681 </table>
6682
6683 <h4>
6684 <a name="S4433"></a>ORIGIN: SERVER;
6685 MESSAGE: req_result</h4>
6686 NUMERIC TYPE (hex): 4433<p>
6687 Unclear.
6688 </p>
6689 <table border="1" width="100%">
6690 <tr>
6691 <th width="10%">NAME</th>
6692 <th width="8%">TYPE</th>
6693 <th width="4%">VALUE</th>
6694 <th>DESCRIPTION</th>
6695 <th width="10%">GUARD</th>
6696 </tr>
6697 <tr>
6698 <td>channel</td>
6699 <td>U16</td>
6700 <td> </td>
6701 <td>
6702 # # recv_result(?)
6703
6704  
6705 </td>
6706 <td>
6707 <b></b>
6708  
6709 </td>
6710 </tr>
6711 </table>
6712
6713 <h4>
6714 <a name="S4434"></a>ORIGIN: SERVER;
6715 MESSAGE: unknown4434</h4>
6716 NUMERIC TYPE (hex): 4434<p>
6717 </p>
6718 <table border="1" width="100%">
6719 <tr>
6720 <th width="10%">NAME</th>
6721 <th width="8%">TYPE</th>
6722 <th width="4%">VALUE</th>
6723 <th>DESCRIPTION</th>
6724 <th width="10%">GUARD</th>
6725 </tr>
6726 <tr>
6727 <td>channel</td>
6728 <td>U16</td>
6729 <td> </td>
6730 <td>
6731
6732  
6733 </td>
6734 <td>
6735 <b></b>
6736  
6737 </td>
6738 </tr>
6739 <tr>
6740 <td>b1</td>
6741 <td>U8</td>
6742 <td> </td>
6743 <td>
6744 ?? !demonstration game??
6745
6746  
6747 </td>
6748 <td>
6749 <b></b>
6750  
6751 </td>
6752 </tr>
6753 </table>
6754
6755 <!-- added after 2.5.2 -->
6756 <h4>
6757 <a name="C443b"></a>ORIGIN: CLIENT;
6758 MESSAGE: unknown_443b</h4>
6759 NUMERIC TYPE (hex): 443b<p>
6760 </p>
6761 <table border="1" width="100%">
6762 <tr>
6763 <th width="10%">NAME</th>
6764 <th width="8%">TYPE</th>
6765 <th width="4%">VALUE</th>
6766 <th>DESCRIPTION</th>
6767 <th width="10%">GUARD</th>
6768 </tr>
6769 <tr>
6770 <td>channel</td>
6771 <td>U16</td>
6772 <td> </td>
6773 <td>
6774
6775  
6776 </td>
6777 <td>
6778 <b></b>
6779  
6780 </td>
6781 </tr>
6782 <tr>
6783 <td>channel2</td>
6784 <td>U16</td>
6785 <td> </td>
6786 <td>
6787
6788  
6789 </td>
6790 <td>
6791 <b></b>
6792  
6793 </td>
6794 </tr>
6795 </table>
6796 </body>
6797 </html>