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