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