ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.46
Committed: Sun May 16 17:39:05 2004 UTC (20 years ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.45: +76 -13 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.45 $</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="C031b"></a>ORIGIN: CLIENT;
1799 MESSAGE: unknown_031b</h4>
1800 NUMERIC TYPE (hex): 031b<p>
1801 <p>
1802 Most probably has something to do witht he open games list or
1803 maybe sth. else.
1804 00000: 20202020 20202020 20202020 20202036 6
1805 00010: 42001b03 51010000 00000000 00000000 B...Q...........
1806 </p>
1807 </p>
1808 <table border="1" width="100%">
1809 <tr>
1810 <th width="10%">NAME</th>
1811 <th width="8%">TYPE</th>
1812 <th width="4%">VALUE</th>
1813 <th>DESCRIPTION</th>
1814 <th width="10%">GUARD</th>
1815 </tr>
1816 <tr>
1817 <td>channel</td>
1818 <td>U16</td>
1819 <td> </td>
1820 <td>
1821
1822  
1823 </td>
1824 <td>
1825 <b></b>
1826  
1827 </td>
1828 </tr>
1829 </table>
1830
1831 <h4>
1832 <a name="C0413"></a>ORIGIN: CLIENT;
1833 MESSAGE: req_game_record</h4>
1834 NUMERIC TYPE (hex): 0413<p>
1835 <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>
1836 </p>
1837 <table border="1" width="100%">
1838 <tr>
1839 <th width="10%">NAME</th>
1840 <th width="8%">TYPE</th>
1841 <th width="4%">VALUE</th>
1842 <th>DESCRIPTION</th>
1843 <th width="10%">GUARD</th>
1844 </tr>
1845 <tr>
1846 <td>name</td>
1847 <td>username</td>
1848 <td> </td>
1849 <td>
1850
1851  
1852 </td>
1853 <td>
1854 <b></b>
1855  
1856 </td>
1857 </tr>
1858 <tr>
1859 <td>timestamp</td>
1860 <td>timestamp</td>
1861 <td> </td>
1862 <td>
1863 If zero, start at the newest games, else only send games
1864 before the given timestap.
1865
1866  
1867 </td>
1868 <td>
1869 <b></b>
1870  
1871 </td>
1872 </tr>
1873 </table>
1874
1875 <h4>
1876 <a name="C4300"></a>ORIGIN: CLIENT;
1877 MESSAGE: join_room</h4>
1878 NUMERIC TYPE (hex): 4300<p>
1879 <p>Joins the given room. <a href="#S4300">join_room(4300)</a> messages for yourself
1880 and all users in that room, as well as the initial gamelist, are
1881 send if the room exists. If not, timeout...</p>
1882 </p>
1883 <table border="1" width="100%">
1884 <tr>
1885 <th width="10%">NAME</th>
1886 <th width="8%">TYPE</th>
1887 <th width="4%">VALUE</th>
1888 <th>DESCRIPTION</th>
1889 <th width="10%">GUARD</th>
1890 </tr>
1891 <tr>
1892 <td>channel</td>
1893 <td>U16</td>
1894 <td> </td>
1895 <td>
1896
1897  
1898 </td>
1899 <td>
1900 <b></b>
1901  
1902 </td>
1903 </tr>
1904 <tr>
1905 <td>user</td>
1906 <td>user</td>
1907 <td> </td>
1908 <td>
1909
1910  
1911 </td>
1912 <td>
1913 <b></b>
1914  
1915 </td>
1916 </tr>
1917 </table>
1918
1919 <h4>
1920 <a name="C4301"></a>ORIGIN: CLIENT;
1921 MESSAGE: msg_room</h4>
1922 NUMERIC TYPE (hex): 4301<p>
1923 Send a message to the room.
1924 </p>
1925 <table border="1" width="100%">
1926 <tr>
1927 <th width="10%">NAME</th>
1928 <th width="8%">TYPE</th>
1929 <th width="4%">VALUE</th>
1930 <th>DESCRIPTION</th>
1931 <th width="10%">GUARD</th>
1932 </tr>
1933 <tr>
1934 <td>channel</td>
1935 <td>U16</td>
1936 <td> </td>
1937 <td>
1938
1939  
1940 </td>
1941 <td>
1942 <b></b>
1943  
1944 </td>
1945 </tr>
1946 <tr>
1947 <td>name</td>
1948 <td>username</td>
1949 <td> </td>
1950 <td>
1951 Must be the login-name of the user.
1952
1953  
1954 </td>
1955 <td>
1956 <b></b>
1957  
1958 </td>
1959 </tr>
1960 <tr>
1961 <td>message</td>
1962 <td>STRING</td>
1963 <td> </td>
1964 <td>
1965
1966  
1967 </td>
1968 <td>
1969 <b></b>
1970  
1971 </td>
1972 </tr>
1973 </table>
1974
1975 <h4>
1976 <a name="C4302"></a>ORIGIN: CLIENT;
1977 MESSAGE: part_room</h4>
1978 NUMERIC TYPE (hex): 4302<p>
1979 Remove yourself (or maybe others as admin) from a room.
1980 </p>
1981 <table border="1" width="100%">
1982 <tr>
1983 <th width="10%">NAME</th>
1984 <th width="8%">TYPE</th>
1985 <th width="4%">VALUE</th>
1986 <th>DESCRIPTION</th>
1987 <th width="10%">GUARD</th>
1988 </tr>
1989 <tr>
1990 <td>channel</td>
1991 <td>U16</td>
1992 <td> </td>
1993 <td>
1994
1995  
1996 </td>
1997 <td>
1998 <b></b>
1999  
2000 </td>
2001 </tr>
2002 <tr>
2003 <td>name</td>
2004 <td>username</td>
2005 <td> </td>
2006 <td>
2007
2008  
2009 </td>
2010 <td>
2011 <b></b>
2012  
2013 </td>
2014 </tr>
2015 </table>
2016
2017 <h4>
2018 <a name="C4305"></a>ORIGIN: CLIENT;
2019 MESSAGE: new_game</h4>
2020 NUMERIC TYPE (hex): 4305<p>
2021 <p>Unclear. Start a new game.
2022 <p>Clone: 00000: 20202020 20202020 20202020 20203238 28
2023 00010: 9d000543 0d000000 00000000 00130201 ...C............
2024 00020: 0000ffff ffffffff ffffffff 00000000 ..ÿÿÿÿÿÿÿÿÿÿ....</p>
2025 </p>
2026 </p>
2027 <table border="1" width="100%">
2028 <tr>
2029 <th width="10%">NAME</th>
2030 <th width="8%">TYPE</th>
2031 <th width="4%">VALUE</th>
2032 <th>DESCRIPTION</th>
2033 <th width="10%">GUARD</th>
2034 </tr>
2035 <tr>
2036 <td>channel</td>
2037 <td>U16</td>
2038 <td> </td>
2039 <td>
2040
2041  
2042 </td>
2043 <td>
2044 <b></b>
2045  
2046 </td>
2047 </tr>
2048 <tr>
2049 <td>id</td>
2050 <td>U16</td>
2051 <td> </td>
2052 <td>
2053
2054  
2055 </td>
2056 <td>
2057 <b></b>
2058  
2059 </td>
2060 </tr>
2061 <tr>
2062 <td>gametype</td>
2063 <td>U32</td>
2064 <td> </td>
2065 <td>
2066
2067  
2068 </td>
2069 <td>
2070 <b></b>
2071  
2072 </td>
2073 </tr>
2074 <tr>
2075 <td>rules</td>
2076 <td>rules</td>
2077 <td> </td>
2078 <td>
2079
2080  
2081 </td>
2082 <td>
2083 <b></b>
2084  
2085 </td>
2086 </tr>
2087 <tr>
2088 <td>notes</td>
2089 <td>STRING</td>
2090 <td> </td>
2091 <td>
2092
2093  
2094 </td>
2095 <td>
2096 <b></b>
2097  
2098 </td>
2099 </tr>
2100 </table>
2101
2102 <h4>
2103 <a name="C430a"></a>ORIGIN: CLIENT;
2104 MESSAGE: load_game</h4>
2105 NUMERIC TYPE (hex): 430a<p>
2106 Load an existing game into a room(?)
2107 There is no indication that a new game is there except
2108 for a upd_observers message with your name in it. Which means
2109 you have to watch upd_observers messages that are not for any
2110 currently open game and open one. Ugh.
2111 </p>
2112 <table border="1" width="100%">
2113 <tr>
2114 <th width="10%">NAME</th>
2115 <th width="8%">TYPE</th>
2116 <th width="4%">VALUE</th>
2117 <th>DESCRIPTION</th>
2118 <th width="10%">GUARD</th>
2119 </tr>
2120 <tr>
2121 <td>channel</td>
2122 <td>U16</td>
2123 <td> </td>
2124 <td>
2125 The room to load the game into.
2126
2127  
2128 </td>
2129 <td>
2130 <b></b>
2131  
2132 </td>
2133 </tr>
2134 <tr>
2135 <td>timestamp</td>
2136 <td>timestamp</td>
2137 <td> </td>
2138 <td>
2139 From the game record.
2140
2141  
2142 </td>
2143 <td>
2144 <b></b>
2145  
2146 </td>
2147 </tr>
2148 <tr>
2149 <td>user</td>
2150 <td>username</td>
2151 <td> </td>
2152 <td>
2153
2154  
2155 </td>
2156 <td>
2157 <b></b>
2158  
2159 </td>
2160 </tr>
2161 <tr>
2162 <td>flags</td>
2163 <td>U8</td>
2164 <td> </td>
2165 <td>
2166 0 == public, 2 == private
2167
2168  
2169 </td>
2170 <td>
2171 <b></b>
2172  
2173 </td>
2174 </tr>
2175 </table>
2176
2177 <h4>
2178 <a name="C430b"></a>ORIGIN: CLIENT;
2179 MESSAGE: req_games</h4>
2180 NUMERIC TYPE (hex): 430b<p>
2181 Request to update room game list (send this once per minute to get
2182 updated). Results in upd_games messages.
2183 </p>
2184 <table border="1" width="100%">
2185 <tr>
2186 <th width="10%">NAME</th>
2187 <th width="8%">TYPE</th>
2188 <th width="4%">VALUE</th>
2189 <th>DESCRIPTION</th>
2190 <th width="10%">GUARD</th>
2191 </tr>
2192 <tr>
2193 <td>channel</td>
2194 <td>U16</td>
2195 <td> </td>
2196 <td>
2197
2198  
2199 </td>
2200 <td>
2201 <b></b>
2202  
2203 </td>
2204 </tr>
2205 </table>
2206
2207 <h4>
2208 <a name="C4319"></a>ORIGIN: CLIENT;
2209 MESSAGE: req_desc</h4>
2210 NUMERIC TYPE (hex): 4319<p>
2211 Request room description.
2212 </p>
2213 <table border="1" width="100%">
2214 <tr>
2215 <th width="10%">NAME</th>
2216 <th width="8%">TYPE</th>
2217 <th width="4%">VALUE</th>
2218 <th>DESCRIPTION</th>
2219 <th width="10%">GUARD</th>
2220 </tr>
2221 <tr>
2222 <td>channel</td>
2223 <td>U16</td>
2224 <td> </td>
2225 <td>
2226
2227  
2228 </td>
2229 <td>
2230 <b></b>
2231  
2232 </td>
2233 </tr>
2234 </table>
2235
2236 <h4>
2237 <a name="C4400"></a>ORIGIN: CLIENT;
2238 MESSAGE: send_challenge</h4>
2239 NUMERIC TYPE (hex): 4400<p>
2240 Unclear.
2241 </p>
2242 <table border="1" width="100%">
2243 <tr>
2244 <th width="10%">NAME</th>
2245 <th width="8%">TYPE</th>
2246 <th width="4%">VALUE</th>
2247 <th>DESCRIPTION</th>
2248 <th width="10%">GUARD</th>
2249 </tr>
2250 <tr>
2251 <td>channel</td>
2252 <td>U16</td>
2253 <td> </td>
2254 <td>
2255
2256  
2257 </td>
2258 <td>
2259 <b></b>
2260  
2261 </td>
2262 </tr>
2263 <tr>
2264 <td>black</td>
2265 <td>username</td>
2266 <td> </td>
2267 <td>
2268
2269  
2270 </td>
2271 <td>
2272 <b></b>
2273  
2274 </td>
2275 </tr>
2276 <tr>
2277 <td>white</td>
2278 <td>username</td>
2279 <td> </td>
2280 <td>
2281 More following... TREE or challenge.
2282
2283  
2284 </td>
2285 <td>
2286 <b></b>
2287  
2288 </td>
2289 </tr>
2290 </table>
2291
2292 <h4>
2293 <a name="C4403"></a>ORIGIN: CLIENT;
2294 MESSAGE: join_game</h4>
2295 NUMERIC TYPE (hex): 4403<p>
2296 Join a game. See join_room.
2297 </p>
2298 <table border="1" width="100%">
2299 <tr>
2300 <th width="10%">NAME</th>
2301 <th width="8%">TYPE</th>
2302 <th width="4%">VALUE</th>
2303 <th>DESCRIPTION</th>
2304 <th width="10%">GUARD</th>
2305 </tr>
2306 <tr>
2307 <td>channel</td>
2308 <td>U16</td>
2309 <td> </td>
2310 <td>
2311
2312  
2313 </td>
2314 <td>
2315 <b></b>
2316  
2317 </td>
2318 </tr>
2319 <tr>
2320 <td>user</td>
2321 <td>user</td>
2322 <td> </td>
2323 <td>
2324
2325  
2326 </td>
2327 <td>
2328 <b></b>
2329  
2330 </td>
2331 </tr>
2332 </table>
2333
2334 <h4>
2335 <a name="C4404"></a>ORIGIN: CLIENT;
2336 MESSAGE: part_game</h4>
2337 NUMERIC TYPE (hex): 4404<p>
2338 Leave (or kick as admin?) a certain user from a game.
2339 </p>
2340 <table border="1" width="100%">
2341 <tr>
2342 <th width="10%">NAME</th>
2343 <th width="8%">TYPE</th>
2344 <th width="4%">VALUE</th>
2345 <th>DESCRIPTION</th>
2346 <th width="10%">GUARD</th>
2347 </tr>
2348 <tr>
2349 <td>channel</td>
2350 <td>U16</td>
2351 <td> </td>
2352 <td>
2353
2354  
2355 </td>
2356 <td>
2357 <b></b>
2358  
2359 </td>
2360 </tr>
2361 <tr>
2362 <td>name</td>
2363 <td>username</td>
2364 <td> </td>
2365 <td>
2366
2367  
2368 </td>
2369 <td>
2370 <b></b>
2371  
2372 </td>
2373 </tr>
2374 </table>
2375
2376 <h4>
2377 <a name="C4405"></a>ORIGIN: CLIENT;
2378 MESSAGE: set_tree</h4>
2379 NUMERIC TYPE (hex): 4405<p>
2380 Possibly upload an initial game to an empty room. Not tested.
2381
2382 </p>
2383 <table border="1" width="100%">
2384 <tr>
2385 <th width="10%">NAME</th>
2386 <th width="8%">TYPE</th>
2387 <th width="4%">VALUE</th>
2388 <th>DESCRIPTION</th>
2389 <th width="10%">GUARD</th>
2390 </tr>
2391 <tr>
2392 <td>channel</td>
2393 <td>U16</td>
2394 <td> </td>
2395 <td>
2396
2397  
2398 </td>
2399 <td>
2400 <b></b>
2401  
2402 </td>
2403 </tr>
2404 <tr>
2405 <td>tree</td>
2406 <td>TREE</td>
2407 <td> </td>
2408 <td>
2409
2410  
2411 </td>
2412 <td>
2413 <b></b>
2414  
2415 </td>
2416 </tr>
2417 </table>
2418
2419 <h4>
2420 <a name="C4406"></a>ORIGIN: CLIENT;
2421 MESSAGE: upd_tree</h4>
2422 NUMERIC TYPE (hex): 4406<p>
2423 Upload a partial game tree to the server. This is used to send moves
2424 and even in-game comments to the server. For the comments, the
2425 server prepends the username and rank.
2426
2427 </p>
2428 <table border="1" width="100%">
2429 <tr>
2430 <th width="10%">NAME</th>
2431 <th width="8%">TYPE</th>
2432 <th width="4%">VALUE</th>
2433 <th>DESCRIPTION</th>
2434 <th width="10%">GUARD</th>
2435 </tr>
2436 <tr>
2437 <td>channel</td>
2438 <td>U16</td>
2439 <td> </td>
2440 <td>
2441
2442  
2443 </td>
2444 <td>
2445 <b></b>
2446  
2447 </td>
2448 </tr>
2449 <tr>
2450 <td>tree</td>
2451 <td>TREE</td>
2452 <td> </td>
2453 <td>
2454
2455  
2456 </td>
2457 <td>
2458 <b></b>
2459  
2460 </td>
2461 </tr>
2462 </table>
2463
2464 <h4>
2465 <a name="C4408"></a>ORIGIN: CLIENT;
2466 MESSAGE: get_tree</h4>
2467 NUMERIC TYPE (hex): 4408<p>
2468 Request the game tree starting at a given node. This is used
2469 when the server only sends a partial tree (with end code "more").
2470 </p>
2471 <table border="1" width="100%">
2472 <tr>
2473 <th width="10%">NAME</th>
2474 <th width="8%">TYPE</th>
2475 <th width="4%">VALUE</th>
2476 <th>DESCRIPTION</th>
2477 <th width="10%">GUARD</th>
2478 </tr>
2479 <tr>
2480 <td>channel</td>
2481 <td>U16</td>
2482 <td> </td>
2483 <td>
2484
2485  
2486 </td>
2487 <td>
2488 <b></b>
2489  
2490 </td>
2491 </tr>
2492 <tr>
2493 <td>node</td>
2494 <td>U32</td>
2495 <td> </td>
2496 <td>
2497
2498  
2499 </td>
2500 <td>
2501 <b></b>
2502  
2503 </td>
2504 </tr>
2505 </table>
2506
2507 <h4>
2508 <a name="C440c"></a>ORIGIN: CLIENT;
2509 MESSAGE: claim_win</h4>
2510 NUMERIC TYPE (hex): 440c<p>
2511 Unclear.
2512 </p>
2513 <table border="1" width="100%">
2514 <tr>
2515 <th width="10%">NAME</th>
2516 <th width="8%">TYPE</th>
2517 <th width="4%">VALUE</th>
2518 <th>DESCRIPTION</th>
2519 <th width="10%">GUARD</th>
2520 </tr>
2521 <tr>
2522 <td>channel</td>
2523 <td>U16</td>
2524 <td> </td>
2525 <td>
2526
2527  
2528 </td>
2529 <td>
2530 <b></b>
2531  
2532 </td>
2533 </tr>
2534 <tr>
2535 <td>_byte</td>
2536 <td>U8 </td>
2537 <td> </td>
2538 <td>
2539 Player colour maybe? Unclear.
2540
2541  
2542 </td>
2543 <td>
2544 <b></b>
2545  
2546 </td>
2547 </tr>
2548 </table>
2549
2550 <h4>
2551 <a name="C440d"></a>ORIGIN: CLIENT;
2552 MESSAGE: add_time</h4>
2553 NUMERIC TYPE (hex): 440d<p>
2554 Not checked.
2555
2556 </p>
2557 <table border="1" width="100%">
2558 <tr>
2559 <th width="10%">NAME</th>
2560 <th width="8%">TYPE</th>
2561 <th width="4%">VALUE</th>
2562 <th>DESCRIPTION</th>
2563 <th width="10%">GUARD</th>
2564 </tr>
2565 <tr>
2566 <td>channel</td>
2567 <td>U16</td>
2568 <td> </td>
2569 <td>
2570
2571  
2572 </td>
2573 <td>
2574 <b></b>
2575  
2576 </td>
2577 </tr>
2578 <tr>
2579 <td>time</td>
2580 <td>U32</td>
2581 <td> </td>
2582 <td>
2583
2584  
2585 </td>
2586 <td>
2587 <b></b>
2588  
2589 </td>
2590 </tr>
2591 <tr>
2592 <td>player</td>
2593 <td>U8</td>
2594 <td> </td>
2595 <td>
2596
2597  
2598 </td>
2599 <td>
2600 <b></b>
2601  
2602 </td>
2603 </tr>
2604 </table>
2605
2606 <h4>
2607 <a name="C440f"></a>ORIGIN: CLIENT;
2608 MESSAGE: grant_undo</h4>
2609 NUMERIC TYPE (hex): 440f<p>
2610 Can be send after a req_undo message was received to grant the undo.
2611 </p>
2612 <table border="1" width="100%">
2613 <tr>
2614 <th width="10%">NAME</th>
2615 <th width="8%">TYPE</th>
2616 <th width="4%">VALUE</th>
2617 <th>DESCRIPTION</th>
2618 <th width="10%">GUARD</th>
2619 </tr>
2620 <tr>
2621 <td>channel</td>
2622 <td>U16</td>
2623 <td> </td>
2624 <td>
2625
2626  
2627 </td>
2628 <td>
2629 <b></b>
2630  
2631 </td>
2632 </tr>
2633 </table>
2634
2635 <h4>
2636 <a name="C4410"></a>ORIGIN: CLIENT;
2637 MESSAGE: resign_game</h4>
2638 NUMERIC TYPE (hex): 4410<p>
2639 Resign the game.
2640 </p>
2641 <table border="1" width="100%">
2642 <tr>
2643 <th width="10%">NAME</th>
2644 <th width="8%">TYPE</th>
2645 <th width="4%">VALUE</th>
2646 <th>DESCRIPTION</th>
2647 <th width="10%">GUARD</th>
2648 </tr>
2649 <tr>
2650 <td>channel</td>
2651 <td>U16</td>
2652 <td> </td>
2653 <td>
2654
2655  
2656 </td>
2657 <td>
2658 <b></b>
2659  
2660 </td>
2661 </tr>
2662 <tr>
2663 <td>player</td>
2664 <td>U8</td>
2665 <td> </td>
2666 <td>
2667
2668  
2669 </td>
2670 <td>
2671 <b></b>
2672  
2673 </td>
2674 </tr>
2675 </table>
2676
2677 <h4>
2678 <a name="C441a"></a>ORIGIN: CLIENT;
2679 MESSAGE: set_teacher</h4>
2680 NUMERIC TYPE (hex): 441a<p>
2681 Change the teacher to somebody else (or possibly yourself == take it).
2682 </p>
2683 <table border="1" width="100%">
2684 <tr>
2685 <th width="10%">NAME</th>
2686 <th width="8%">TYPE</th>
2687 <th width="4%">VALUE</th>
2688 <th>DESCRIPTION</th>
2689 <th width="10%">GUARD</th>
2690 </tr>
2691 <tr>
2692 <td>channel</td>
2693 <td>U16</td>
2694 <td> </td>
2695 <td>
2696
2697  
2698 </td>
2699 <td>
2700 <b></b>
2701  
2702 </td>
2703 </tr>
2704 <tr>
2705 <td>name</td>
2706 <td>username</td>
2707 <td> </td>
2708 <td>
2709
2710  
2711 </td>
2712 <td>
2713 <b></b>
2714  
2715 </td>
2716 </tr>
2717 </table>
2718
2719 <h4>
2720 <a name="C4422"></a>ORIGIN: CLIENT;
2721 MESSAGE: allow_user</h4>
2722 NUMERIC TYPE (hex): 4422<p>
2723 Unclear. Maybe allow users to talk? No idea, really.
2724
2725 </p>
2726 <table border="1" width="100%">
2727 <tr>
2728 <th width="10%">NAME</th>
2729 <th width="8%">TYPE</th>
2730 <th width="4%">VALUE</th>
2731 <th>DESCRIPTION</th>
2732 <th width="10%">GUARD</th>
2733 </tr>
2734 <tr>
2735 <td>channel</td>
2736 <td>U16</td>
2737 <td> </td>
2738 <td>
2739
2740  
2741 </td>
2742 <td>
2743 <b></b>
2744  
2745 </td>
2746 </tr>
2747 <tr>
2748 <td>othername</td>
2749 <td>username</td>
2750 <td> </td>
2751 <td>
2752
2753  
2754 </td>
2755 <td>
2756 <b></b>
2757  
2758 </td>
2759 </tr>
2760 <tr>
2761 <td>name</td>
2762 <td>username</td>
2763 <td> </td>
2764 <td>; # gives user access to the game (to what? ;)
2765
2766  
2767 </td>
2768 <td>
2769 <b></b>
2770  
2771 </td>
2772 </tr>
2773 </table>
2774
2775 <h4>
2776 <a name="C4423"></a>ORIGIN: CLIENT;
2777 MESSAGE: set_privacy</h4>
2778 NUMERIC TYPE (hex): 4423<p>
2779 Probably sets the "quiet" flag. Not checked.
2780 </p>
2781 <table border="1" width="100%">
2782 <tr>
2783 <th width="10%">NAME</th>
2784 <th width="8%">TYPE</th>
2785 <th width="4%">VALUE</th>
2786 <th>DESCRIPTION</th>
2787 <th width="10%">GUARD</th>
2788 </tr>
2789 <tr>
2790 <td>channel</td>
2791 <td>U16</td>
2792 <td> </td>
2793 <td>
2794
2795  
2796 </td>
2797 <td>
2798 <b></b>
2799  
2800 </td>
2801 </tr>
2802 <tr>
2803 <td>private</td>
2804 <td>U8</td>
2805 <td> </td>
2806 <td>
2807
2808  
2809 </td>
2810 <td>
2811 <b></b>
2812  
2813 </td>
2814 </tr>
2815 </table>
2816
2817 <h4>
2818 <a name="C4429"></a>ORIGIN: CLIENT;
2819 MESSAGE: reject_challenge</h4>
2820 NUMERIC TYPE (hex): 4429<p>
2821 Reject a challenge from a given user. Not checked.
2822
2823 </p>
2824 <table border="1" width="100%">
2825 <tr>
2826 <th width="10%">NAME</th>
2827 <th width="8%">TYPE</th>
2828 <th width="4%">VALUE</th>
2829 <th>DESCRIPTION</th>
2830 <th width="10%">GUARD</th>
2831 </tr>
2832 <tr>
2833 <td>channel</td>
2834 <td>U16</td>
2835 <td> </td>
2836 <td>
2837
2838  
2839 </td>
2840 <td>
2841 <b></b>
2842  
2843 </td>
2844 </tr>
2845 <tr>
2846 <td>name</td>
2847 <td>username</td>
2848 <td> </td>
2849 <td>
2850
2851  
2852 </td>
2853 <td>
2854 <b></b>
2855  
2856 </td>
2857 </tr>
2858 </table>
2859
2860 <h4>
2861 <a name="C442e"></a>ORIGIN: CLIENT;
2862 MESSAGE: save_game</h4>
2863 NUMERIC TYPE (hex): 442e<p>
2864 <p>Is send when a game is closed and should be saved on the gamerecord.</p>
2865 </p>
2866 <table border="1" width="100%">
2867 <tr>
2868 <th width="10%">NAME</th>
2869 <th width="8%">TYPE</th>
2870 <th width="4%">VALUE</th>
2871 <th>DESCRIPTION</th>
2872 <th width="10%">GUARD</th>
2873 </tr>
2874 <tr>
2875 <td>channel</td>
2876 <td>U16</td>
2877 <td> </td>
2878 <td>
2879
2880  
2881 </td>
2882 <td>
2883 <b></b>
2884  
2885 </td>
2886 </tr>
2887 </table>
2888
2889 <h4>
2890 <a name="C4433"></a>ORIGIN: CLIENT;
2891 MESSAGE: req_result</h4>
2892 NUMERIC TYPE (hex): 4433<p>
2893 I forgot.
2894
2895 </p>
2896 <table border="1" width="100%">
2897 <tr>
2898 <th width="10%">NAME</th>
2899 <th width="8%">TYPE</th>
2900 <th width="4%">VALUE</th>
2901 <th>DESCRIPTION</th>
2902 <th width="10%">GUARD</th>
2903 </tr>
2904 <tr>
2905 <td>channel</td>
2906 <td>U16</td>
2907 <td> </td>
2908 <td>
2909
2910  
2911 </td>
2912 <td>
2913 <b></b>
2914  
2915 </td>
2916 </tr>
2917 </table>
2918
2919 <h4>
2920 <a name="C4436"></a>ORIGIN: CLIENT;
2921 MESSAGE: msg_game</h4>
2922 NUMERIC TYPE (hex): 4436<p>
2923 </p>
2924 <table border="1" width="100%">
2925 <tr>
2926 <th width="10%">NAME</th>
2927 <th width="8%">TYPE</th>
2928 <th width="4%">VALUE</th>
2929 <th>DESCRIPTION</th>
2930 <th width="10%">GUARD</th>
2931 </tr>
2932 <tr>
2933 <td>channel</td>
2934 <td>U16</td>
2935 <td> </td>
2936 <td>
2937
2938  
2939 </td>
2940 <td>
2941 <b></b>
2942  
2943 </td>
2944 </tr>
2945 <tr>
2946 <td>message</td>
2947 <td>STRING</td>
2948 <td> </td>
2949 <td>
2950
2951  
2952 </td>
2953 <td>
2954 <b></b>
2955  
2956 </td>
2957 </tr>
2958 </table>
2959
2960 <h4>
2961 <a name="Cffff"></a>ORIGIN: CLIENT;
2962 MESSAGE: quit</h4>
2963 NUMERIC TYPE (hex): ffff<p>
2964 <p>Sent by the client just before it logs out.</p>
2965 </p>
2966 <table border="1" width="100%">
2967 <tr>
2968 <th width="10%">NAME</th>
2969 <th width="8%">TYPE</th>
2970 <th width="4%">VALUE</th>
2971 <th>DESCRIPTION</th>
2972 <th width="10%">GUARD</th>
2973 </tr>
2974 </table>
2975
2976 <h2>Structs mainly used in messages send by the server</h2>
2977
2978 <h4>STRUCTURE challenge_defaults</h4>
2979 <p>
2980 Send soon after log-in to set the defaults for game challenges.
2981 </p>
2982 <table border="1" width="100%">
2983 <tr>
2984 <th width="10%">NAME</th>
2985 <th width="8%">TYPE</th>
2986 <th width="4%">VALUE</th>
2987 <th>DESCRIPTION</th>
2988 <th width="10%">GUARD</th>
2989 </tr>
2990 <tr>
2991 <td>gametype</td>
2992 <td>U32</td>
2993 <td> </td>
2994 <td>
2995
2996  
2997 </td>
2998 <td>
2999 <b></b>
3000  
3001 </td>
3002 </tr>
3003 <tr>
3004 <td>size</td>
3005 <td>U32</td>
3006 <td> </td>
3007 <td>
3008
3009  
3010 </td>
3011 <td>
3012 <b></b>
3013  
3014 </td>
3015 </tr>
3016 <tr>
3017 <td>timesys</td>
3018 <td>U32</td>
3019 <td> </td>
3020 <td>
3021
3022  
3023 </td>
3024 <td>
3025 <b></b>
3026  
3027 </td>
3028 </tr>
3029 <tr>
3030 <td>time</td>
3031 <td>U32</td>
3032 <td> </td>
3033 <td>
3034
3035  
3036 </td>
3037 <td>
3038 <b></b>
3039  
3040 </td>
3041 </tr>
3042 <tr>
3043 <td>byo_time</td>
3044 <td>U32</td>
3045 <td> </td>
3046 <td>
3047
3048  
3049 </td>
3050 <td>
3051 <b></b>
3052  
3053 </td>
3054 </tr>
3055 <tr>
3056 <td>byo_periods</td>
3057 <td>U32</td>
3058 <td> </td>
3059 <td>
3060
3061  
3062 </td>
3063 <td>
3064 <b></b>
3065  
3066 </td>
3067 </tr>
3068 <tr>
3069 <td>can_time</td>
3070 <td>U32</td>
3071 <td> </td>
3072 <td>
3073
3074  
3075 </td>
3076 <td>
3077 <b></b>
3078  
3079 </td>
3080 </tr>
3081 <tr>
3082 <td>can_stones</td>
3083 <td>U32</td>
3084 <td> </td>
3085 <td>
3086
3087  
3088 </td>
3089 <td>
3090 <b></b>
3091  
3092 </td>
3093 </tr>
3094 </table>
3095
3096 <h4>STRUCTURE challenge</h4>
3097 CLASS: KGS::Challenge<br />
3098 <p>
3099 A challenge.
3100
3101 </p>
3102 <table border="1" width="100%">
3103 <tr>
3104 <th width="10%">NAME</th>
3105 <th width="8%">TYPE</th>
3106 <th width="4%">VALUE</th>
3107 <th>DESCRIPTION</th>
3108 <th width="10%">GUARD</th>
3109 </tr>
3110 <tr>
3111 <td>user1</td>
3112 <td>user</td>
3113 <td> </td>
3114 <td>
3115
3116  
3117 </td>
3118 <td>
3119 <b></b>
3120  
3121 </td>
3122 </tr>
3123 <tr>
3124 <td>user2</td>
3125 <td>user</td>
3126 <td> </td>
3127 <td>
3128
3129  
3130 </td>
3131 <td>
3132 <b></b>
3133  
3134 </td>
3135 </tr>
3136 <tr>
3137 <td>gametype</td>
3138 <td>U32</td>
3139 <td> </td>
3140 <td>
3141
3142  
3143 </td>
3144 <td>
3145 <b></b>
3146  
3147 </td>
3148 </tr>
3149 <tr>
3150 <td>rules</td>
3151 <td>rules</td>
3152 <td> </td>
3153 <td>
3154 Maybe the rules" are in TREE format. I forgot.
3155
3156  
3157 </td>
3158 <td>
3159 <b></b>
3160  
3161 </td>
3162 </tr>
3163 </table>
3164
3165 <h4>STRUCTURE game</h4>
3166 CLASS: KGS::Game<br />
3167 <p>
3168 Basic information about a game. Used in rooms for the gamelist and
3169 in games to detect when a game is saved, changed type (e.g. R =&gt; D)
3170 etc.
3171
3172 </p>
3173 <table border="1" width="100%">
3174 <tr>
3175 <th width="10%">NAME</th>
3176 <th width="8%">TYPE</th>
3177 <th width="4%">VALUE</th>
3178 <th>DESCRIPTION</th>
3179 <th width="10%">GUARD</th>
3180 </tr>
3181 <tr>
3182 <td>channel</td>
3183 <td>U16</td>
3184 <td> </td>
3185 <td>
3186
3187  
3188 </td>
3189 <td>
3190 <b></b>
3191  
3192 </td>
3193 </tr>
3194 <tr>
3195 <td>type</td>
3196 <td>U8</td>
3197 <td> </td>
3198 <td>
3199
3200  
3201 </td>
3202 <td>
3203 <b></b>
3204  
3205 </td>
3206 </tr>
3207 <tr>
3208 <td>user1</td>
3209 <td>user</td>
3210 <td> </td>
3211 <td>
3212 White
3213
3214  
3215 </td>
3216 <td>
3217 <b></b>
3218  
3219 </td>
3220 </tr>
3221 <tr>
3222 <td>user2</td>
3223 <td>user</td>
3224 <td> </td>
3225 <td>
3226 Black
3227
3228  
3229 </td>
3230 <td>
3231 <b></b>
3232  
3233 </td>
3234 </tr>
3235 <tr>
3236 <td>user3</td>
3237 <td>user</td>
3238 <td> </td>
3239 <td>
3240 Owner
3241
3242  
3243 </td>
3244 <td>
3245 <b></b>
3246  
3247 </td>
3248 </tr>
3249 <tr>
3250 <td>size</td>
3251 <td>U8</td>
3252 <td> </td>
3253 <td>
3254
3255  
3256 </td>
3257 <td>
3258 <b></b>
3259  
3260 </td>
3261 </tr>
3262 <tr>
3263 <td>handicap</td>
3264 <td>I8</td>
3265 <td> </td>
3266 <td>
3267 &lt; 0 not fully setup
3268
3269  
3270 </td>
3271 <td>
3272 <b></b>
3273  
3274 </td>
3275 </tr>
3276 <tr>
3277 <td>komi</td>
3278 <td>komi16</td>
3279 <td> </td>
3280 <td>
3281
3282  
3283 </td>
3284 <td>
3285 <b></b>
3286  
3287 </td>
3288 </tr>
3289 <tr>
3290 <td>moves</td>
3291 <td>I16</td>
3292 <td> </td>
3293 <td>
3294 This field reflects either the movenum or the score, sorry, not even guards help, as
3295 the flags to determine that are _after_ the field. Arg. Divide by two to get the actual
3296 score (NOT score16!) (arg²).
3297
3298  
3299 </td>
3300 <td>
3301 <b></b>
3302  
3303 </td>
3304 </tr>
3305 <tr>
3306 <td>flags</td>
3307 <td>U16</td>
3308 <td> </td>
3309 <td>
3310
3311  
3312 </td>
3313 <td>
3314 <b></b>
3315  
3316 </td>
3317 </tr>
3318 <tr>
3319 <td>observers</td>
3320 <td>U32</td>
3321 <td> </td>
3322 <td>
3323
3324  
3325 </td>
3326 <td>
3327 <b></b>
3328  
3329 </td>
3330 </tr>
3331 <tr>
3332 <td>saved</td>
3333 <td>flag</td>
3334 <td> </td>
3335 <td>
3336
3337  
3338 </td>
3339 <td>
3340 <b></b>
3341  
3342 </td>
3343 </tr>
3344 <tr>
3345 <td>notes</td>
3346 <td>STRING</td>
3347 <td> </td>
3348 <td>
3349
3350  
3351 </td>
3352 <td>
3353 <b>handicap</b> &lt; 0
3354  
3355 </td>
3356 </tr>
3357 </table>
3358
3359 <h4>STRUCTURE room_obs</h4>
3360 <p>
3361 Obsolete.
3362
3363 </p>
3364 <table border="1" width="100%">
3365 <tr>
3366 <th width="10%">NAME</th>
3367 <th width="8%">TYPE</th>
3368 <th width="4%">VALUE</th>
3369 <th>DESCRIPTION</th>
3370 <th width="10%">GUARD</th>
3371 </tr>
3372 <tr>
3373 <td>name</td>
3374 <td>roomname</td>
3375 <td> </td>
3376 <td>
3377
3378  
3379 </td>
3380 <td>
3381 <b></b>
3382  
3383 </td>
3384 </tr>
3385 <tr>
3386 <td>channel</td>
3387 <td>U16</td>
3388 <td> </td>
3389 <td>
3390
3391  
3392 </td>
3393 <td>
3394 <b></b>
3395  
3396 </td>
3397 </tr>
3398 <tr>
3399 <td>flags</td>
3400 <td>U32</td>
3401 <td> </td>
3402 <td>
3403
3404  
3405 </td>
3406 <td>
3407 <b></b>
3408  
3409 </td>
3410 </tr>
3411 <tr>
3412 <td>users</td>
3413 <td>U32</td>
3414 <td> </td>
3415 <td>
3416
3417  
3418 </td>
3419 <td>
3420 <b></b>
3421  
3422 </td>
3423 </tr>
3424 </table>
3425
3426 <h4>STRUCTURE room</h4>
3427 CLASS: KGS::Room<br />
3428 <p>
3429 </p>
3430 <table border="1" width="100%">
3431 <tr>
3432 <th width="10%">NAME</th>
3433 <th width="8%">TYPE</th>
3434 <th width="4%">VALUE</th>
3435 <th>DESCRIPTION</th>
3436 <th width="10%">GUARD</th>
3437 </tr>
3438 <tr>
3439 <td>channel</td>
3440 <td>U16</td>
3441 <td> </td>
3442 <td>
3443
3444  
3445 </td>
3446 <td>
3447 <b></b>
3448  
3449 </td>
3450 </tr>
3451 <tr>
3452 <td>flags</td>
3453 <td>U8</td>
3454 <td> </td>
3455 <td>
3456
3457  
3458 </td>
3459 <td>
3460 <b></b>
3461  
3462 </td>
3463 </tr>
3464 <tr>
3465 <td>group</td>
3466 <td>U8</td>
3467 <td> </td>
3468 <td>
3469
3470  
3471 </td>
3472 <td>
3473 <b></b>
3474  
3475 </td>
3476 </tr>
3477 <tr>
3478 <td>users</td>
3479 <td>U16</td>
3480 <td> </td>
3481 <td>
3482
3483  
3484 </td>
3485 <td>
3486 <b></b>
3487  
3488 </td>
3489 </tr>
3490 <tr>
3491 <td>games</td>
3492 <td>U16</td>
3493 <td> </td>
3494 <td>
3495
3496  
3497 </td>
3498 <td>
3499 <b></b>
3500  
3501 </td>
3502 </tr>
3503 <tr>
3504 <td>name</td>
3505 <td>STRING</td>
3506 <td> </td>
3507 <td>
3508
3509  
3510 </td>
3511 <td>
3512 <b></b>
3513  
3514 </td>
3515 </tr>
3516 </table>
3517
3518 <h4>STRUCTURE scorevalues</h4>
3519 CLASS: KGS::Score<br />
3520 <p>
3521 </p>
3522 <table border="1" width="100%">
3523 <tr>
3524 <th width="10%">NAME</th>
3525 <th width="8%">TYPE</th>
3526 <th width="4%">VALUE</th>
3527 <th>DESCRIPTION</th>
3528 <th width="10%">GUARD</th>
3529 </tr>
3530 <tr>
3531 <td>score</td>
3532 <td>score32</td>
3533 <td> </td>
3534 <td>
3535
3536  
3537 </td>
3538 <td>
3539 <b></b>
3540  
3541 </td>
3542 </tr>
3543 <tr>
3544 <td>territory</td>
3545 <td>U32</td>
3546 <td> </td>
3547 <td>
3548
3549  
3550 </td>
3551 <td>
3552 <b></b>
3553  
3554 </td>
3555 </tr>
3556 <tr>
3557 <td>captures</td>
3558 <td>U32</td>
3559 <td> </td>
3560 <td>
3561
3562  
3563 </td>
3564 <td>
3565 <b></b>
3566  
3567 </td>
3568 </tr>
3569 <tr>
3570 <td>i3</td>
3571 <td>U32</td>
3572 <td> </td>
3573 <td>
3574
3575  
3576 </td>
3577 <td>
3578 <b></b>
3579  
3580 </td>
3581 </tr>
3582 <tr>
3583 <td>f2</td>
3584 <td>U32</td>
3585 <td> </td>
3586 <td>
3587
3588  
3589 </td>
3590 <td>
3591 <b></b>
3592  
3593 </td>
3594 </tr>
3595 <tr>
3596 <td>komi</td>
3597 <td>komi324</td>
3598 <td> </td>
3599 <td>
3600
3601  
3602 </td>
3603 <td>
3604 <b></b>
3605  
3606 </td>
3607 </tr>
3608 <tr>
3609 <td>i4</td>
3610 <td>U32</td>
3611 <td> </td>
3612 <td>
3613 Apparently the i3, f2, i4 are zero.
3614
3615  
3616 </td>
3617 <td>
3618 <b></b>
3619  
3620 </td>
3621 </tr>
3622 </table>
3623
3624 <h4>STRUCTURE game_record</h4>
3625 CLASS: KGS::GameRecord<br />
3626 <p>
3627 <p>A single game record entry, as seen in <a href="#S0008">userinfo(0008)</a>.</p>
3628 </p>
3629 <table border="1" width="100%">
3630 <tr>
3631 <th width="10%">NAME</th>
3632 <th width="8%">TYPE</th>
3633 <th width="4%">VALUE</th>
3634 <th>DESCRIPTION</th>
3635 <th width="10%">GUARD</th>
3636 </tr>
3637 <tr>
3638 <td>timestamp</td>
3639 <td>timestamp</td>
3640 <td> </td>
3641 <td>
3642 Time this game was played.
3643
3644  
3645 </td>
3646 <td>
3647 <b></b>
3648  
3649 </td>
3650 </tr>
3651 <tr>
3652 <td>flags1</td>
3653 <td>U8</td>
3654 <td> </td>
3655 <td>
3656
3657  
3658 </td>
3659 <td>
3660 <b></b>
3661  
3662 </td>
3663 </tr>
3664 <tr>
3665 <td>user1</td>
3666 <td>user</td>
3667 <td> </td>
3668 <td>
3669 White, flags contain low 8 bits of revision (bits 16-23).
3670
3671  
3672 </td>
3673 <td>
3674 <b></b>
3675  
3676 </td>
3677 </tr>
3678 <tr>
3679 <td>user2</td>
3680 <td>user</td>
3681 <td> </td>
3682 <td>
3683 Black, flags contain high 8 bits of revision (bits 16-23).
3684
3685  
3686 </td>
3687 <td>
3688 <b></b>
3689  
3690 </td>
3691 </tr>
3692 <tr>
3693 <td>user3</td>
3694 <td>user</td>
3695 <td> </td>
3696 <td>
3697
3698
3699  
3700 </td>
3701 <td>
3702 <b></b>
3703  
3704 </td>
3705 </tr>
3706 <tr>
3707 <td>flags2</td>
3708 <td>U16</td>
3709 <td> </td>
3710 <td>
3711
3712  
3713 </td>
3714 <td>
3715 <b></b>
3716  
3717 </td>
3718 </tr>
3719 <tr>
3720 <td>score</td>
3721 <td>score16</td>
3722 <td> </td>
3723 <td>
3724
3725  
3726 </td>
3727 <td>
3728 <b></b>
3729  
3730 </td>
3731 </tr>
3732 <tr>
3733 <td>flags3</td>
3734 <td>U8</td>
3735 <td> </td>
3736 <td>
3737
3738
3739  
3740 </td>
3741 <td>
3742 <b></b>
3743  
3744 </td>
3745 </tr>
3746 </table>
3747
3748 <h2>Server-generated messages</h2>
3749
3750 <h4>
3751 <a name="S0001"></a>ORIGIN: SERVER;
3752 MESSAGE: login</h4>
3753 NUMERIC TYPE (hex): 0001
3754 (possibly in response to
3755 <a href="#C0000">login(0000)</a>
3756 )
3757 <p>
3758 </p>
3759 <table border="1" width="100%">
3760 <tr>
3761 <th width="10%">NAME</th>
3762 <th width="8%">TYPE</th>
3763 <th width="4%">VALUE</th>
3764 <th>DESCRIPTION</th>
3765 <th width="10%">GUARD</th>
3766 </tr>
3767 <tr>
3768 <td>message</td>
3769 <td>CONSTANT</td>
3770 <td>login successful </td>
3771 <td>
3772
3773  
3774 </td>
3775 <td>
3776 <b></b>
3777  
3778 </td>
3779 </tr>
3780 <tr>
3781 <td>success</td>
3782 <td>CONSTANT</td>
3783 <td>1 </td>
3784 <td>
3785
3786  
3787 </td>
3788 <td>
3789 <b></b>
3790  
3791 </td>
3792 </tr>
3793 </table>
3794
3795 <h4>
3796 <a name="S0002"></a>ORIGIN: SERVER;
3797 MESSAGE: login</h4>
3798 NUMERIC TYPE (hex): 0002
3799 (possibly in response to
3800 <a href="#C0000">login(0000)</a>
3801 )
3802 <p>
3803 </p>
3804 <table border="1" width="100%">
3805 <tr>
3806 <th width="10%">NAME</th>
3807 <th width="8%">TYPE</th>
3808 <th width="4%">VALUE</th>
3809 <th>DESCRIPTION</th>
3810 <th width="10%">GUARD</th>
3811 </tr>
3812 <tr>
3813 <td>message</td>
3814 <td>CONSTANT</td>
3815 <td>login successful: client version is outdated. </td>
3816 <td>
3817
3818  
3819 </td>
3820 <td>
3821 <b></b>
3822  
3823 </td>
3824 </tr>
3825 <tr>
3826 <td>success</td>
3827 <td>CONSTANT</td>
3828 <td>1 </td>
3829 <td>
3830
3831  
3832 </td>
3833 <td>
3834 <b></b>
3835  
3836 </td>
3837 </tr>
3838 </table>
3839
3840 <h4>
3841 <a name="S0003"></a>ORIGIN: SERVER;
3842 MESSAGE: login</h4>
3843 NUMERIC TYPE (hex): 0003
3844 (possibly in response to
3845 <a href="#C0000">login(0000)</a>
3846 )
3847 <p>
3848 </p>
3849 <table border="1" width="100%">
3850 <tr>
3851 <th width="10%">NAME</th>
3852 <th width="8%">TYPE</th>
3853 <th width="4%">VALUE</th>
3854 <th>DESCRIPTION</th>
3855 <th width="10%">GUARD</th>
3856 </tr>
3857 <tr>
3858 <td>message</td>
3859 <td>CONSTANT</td>
3860 <td>login failed: client version out of date </td>
3861 <td>
3862 ** maybe more following? **
3863
3864  
3865 </td>
3866 <td>
3867 <b></b>
3868  
3869 </td>
3870 </tr>
3871 </table>
3872
3873 <h4>
3874 <a name="S0004"></a>ORIGIN: SERVER;
3875 MESSAGE: login</h4>
3876 NUMERIC TYPE (hex): 0004
3877 (possibly in response to
3878 <a href="#C0000">login(0000)</a>
3879 )
3880 <p>
3881 </p>
3882 <table border="1" width="100%">
3883 <tr>
3884 <th width="10%">NAME</th>
3885 <th width="8%">TYPE</th>
3886 <th width="4%">VALUE</th>
3887 <th>DESCRIPTION</th>
3888 <th width="10%">GUARD</th>
3889 </tr>
3890 <tr>
3891 <td>message</td>
3892 <td>CONSTANT</td>
3893 <td>login failed: wrong password </td>
3894 <td>
3895 ** maybe more following? **
3896
3897  
3898 </td>
3899 <td>
3900 <b></b>
3901  
3902 </td>
3903 </tr>
3904 </table>
3905
3906 <h4>
3907 <a name="S0005"></a>ORIGIN: SERVER;
3908 MESSAGE: login</h4>
3909 NUMERIC TYPE (hex): 0005
3910 (possibly in response to
3911 <a href="#C0000">login(0000)</a>
3912 )
3913 <p>
3914 </p>
3915 <table border="1" width="100%">
3916 <tr>
3917 <th width="10%">NAME</th>
3918 <th width="8%">TYPE</th>
3919 <th width="4%">VALUE</th>
3920 <th>DESCRIPTION</th>
3921 <th width="10%">GUARD</th>
3922 </tr>
3923 <tr>
3924 <td>message</td>
3925 <td>CONSTANT</td>
3926 <td>login failed: specified user does not exist </td>
3927 <td>
3928
3929  
3930 </td>
3931 <td>
3932 <b></b>
3933  
3934 </td>
3935 </tr>
3936 </table>
3937
3938 <h4>
3939 <a name="S0006"></a>ORIGIN: SERVER;
3940 MESSAGE: login</h4>
3941 NUMERIC TYPE (hex): 0006
3942 (possibly in response to
3943 <a href="#C0000">login(0000)</a>
3944 )
3945 <p>
3946 </p>
3947 <table border="1" width="100%">
3948 <tr>
3949 <th width="10%">NAME</th>
3950 <th width="8%">TYPE</th>
3951 <th width="4%">VALUE</th>
3952 <th>DESCRIPTION</th>
3953 <th width="10%">GUARD</th>
3954 </tr>
3955 <tr>
3956 <td>message</td>
3957 <td>CONSTANT</td>
3958 <td>login failed: registered user of same name exists </td>
3959 <td>
3960
3961  
3962 </td>
3963 <td>
3964 <b></b>
3965  
3966 </td>
3967 </tr>
3968 </table>
3969
3970 <h4>
3971 <a name="S0008"></a>ORIGIN: SERVER;
3972 MESSAGE: userinfo</h4>
3973 NUMERIC TYPE (hex): 0008
3974 (possibly in response to
3975 <a href="#C0007">req_userinfo(0007)</a>
3976 )
3977 <p>
3978 User info.
3979 </p>
3980 <table border="1" width="100%">
3981 <tr>
3982 <th width="10%">NAME</th>
3983 <th width="8%">TYPE</th>
3984 <th width="4%">VALUE</th>
3985 <th>DESCRIPTION</th>
3986 <th width="10%">GUARD</th>
3987 </tr>
3988 <tr>
3989 <td>_unused0</td>
3990 <td>flag</td>
3991 <td> </td>
3992 <td>
3993
3994  
3995 </td>
3996 <td>
3997 <b></b>
3998  
3999 </td>
4000 </tr>
4001 <tr>
4002 <td>user</td>
4003 <td>user</td>
4004 <td> </td>
4005 <td>
4006
4007  
4008 </td>
4009 <td>
4010 <b></b>
4011  
4012 </td>
4013 </tr>
4014 <tr>
4015 <td>_unused1</td>
4016 <td>U64</td>
4017 <td> </td>
4018 <td>
4019
4020  
4021 </td>
4022 <td>
4023 <b></b>
4024  
4025 </td>
4026 </tr>
4027 <tr>
4028 <td>realname</td>
4029 <td>realname</td>
4030 <td> </td>
4031 <td>
4032
4033  
4034 </td>
4035 <td>
4036 <b></b>
4037  
4038 </td>
4039 </tr>
4040 <tr>
4041 <td>email</td>
4042 <td>email</td>
4043 <td> </td>
4044 <td>
4045
4046  
4047 </td>
4048 <td>
4049 <b></b>
4050  
4051 </td>
4052 </tr>
4053 <tr>
4054 <td>info</td>
4055 <td>userinfo</td>
4056 <td> </td>
4057 <td>
4058
4059  
4060 </td>
4061 <td>
4062 <b></b>
4063  
4064 </td>
4065 </tr>
4066 <tr>
4067 <td>homepage</td>
4068 <td>url</td>
4069 <td> </td>
4070 <td>
4071
4072  
4073 </td>
4074 <td>
4075 <b></b>
4076  
4077 </td>
4078 </tr>
4079 <tr>
4080 <td>regdate</td>
4081 <td>timestamp</td>
4082 <td> </td>
4083 <td>
4084 When the user registered (0 == never registered).
4085
4086  
4087 </td>
4088 <td>
4089 <b></b>
4090  
4091 </td>
4092 </tr>
4093 <tr>
4094 <td>lastlogin</td>
4095 <td>timestamp</td>
4096 <td> </td>
4097 <td>
4098 When the user logged in for the last time.
4099
4100  
4101 </td>
4102 <td>
4103 <b></b>
4104  
4105 </td>
4106 </tr>
4107 </table>
4108
4109 <h4>
4110 <a name="S0009"></a>ORIGIN: SERVER;
4111 MESSAGE: upd_userinfo_result</h4>
4112 NUMERIC TYPE (hex): 0009<p>
4113 </p>
4114 <table border="1" width="100%">
4115 <tr>
4116 <th width="10%">NAME</th>
4117 <th width="8%">TYPE</th>
4118 <th width="4%">VALUE</th>
4119 <th>DESCRIPTION</th>
4120 <th width="10%">GUARD</th>
4121 </tr>
4122 <tr>
4123 <td>name</td>
4124 <td>username</td>
4125 <td> </td>
4126 <td>
4127
4128  
4129 </td>
4130 <td>
4131 <b></b>
4132  
4133 </td>
4134 </tr>
4135 <tr>
4136 <td>message</td>
4137 <td>CONSTANT</td>
4138 <td>Thanks for registering. </td>
4139 <td>
4140
4141  
4142 </td>
4143 <td>
4144 <b></b>
4145  
4146 </td>
4147 </tr>
4148 </table>
4149
4150 <h4>
4151 <a name="S000a"></a>ORIGIN: SERVER;
4152 MESSAGE: upd_userinfo_result</h4>
4153 NUMERIC TYPE (hex): 000a<p>
4154 </p>
4155 <table border="1" width="100%">
4156 <tr>
4157 <th width="10%">NAME</th>
4158 <th width="8%">TYPE</th>
4159 <th width="4%">VALUE</th>
4160 <th>DESCRIPTION</th>
4161 <th width="10%">GUARD</th>
4162 </tr>
4163 <tr>
4164 <td>name</td>
4165 <td>username</td>
4166 <td> </td>
4167 <td>
4168
4169  
4170 </td>
4171 <td>
4172 <b></b>
4173  
4174 </td>
4175 </tr>
4176 <tr>
4177 <td>message</td>
4178 <td>CONSTANT</td>
4179 <td>The user "%s" has been successfully updated. </td>
4180 <td>
4181
4182  
4183 </td>
4184 <td>
4185 <b></b>
4186  
4187 </td>
4188 </tr>
4189 </table>
4190
4191 <h4>
4192 <a name="S000b"></a>ORIGIN: SERVER;
4193 MESSAGE: upd_userinfo_result</h4>
4194 NUMERIC TYPE (hex): 000b<p>
4195 </p>
4196 <table border="1" width="100%">
4197 <tr>
4198 <th width="10%">NAME</th>
4199 <th width="8%">TYPE</th>
4200 <th width="4%">VALUE</th>
4201 <th>DESCRIPTION</th>
4202 <th width="10%">GUARD</th>
4203 </tr>
4204 <tr>
4205 <td>name</td>
4206 <td>username</td>
4207 <td> </td>
4208 <td>
4209
4210  
4211 </td>
4212 <td>
4213 <b></b>
4214  
4215 </td>
4216 </tr>
4217 <tr>
4218 <td>message</td>
4219 <td>CONSTANT</td>
4220 <td>There is no user "%s". Update failed. </td>
4221 <td>
4222
4223  
4224 </td>
4225 <td>
4226 <b></b>
4227  
4228 </td>
4229 </tr>
4230 </table>
4231
4232 <h4>
4233 <a name="S0012"></a>ORIGIN: SERVER;
4234 MESSAGE: userinfo_failed</h4>
4235 NUMERIC TYPE (hex): 0012<p>
4236 <p>Sent when no userinfo for the requested user could be found(?)</p>
4237 </p>
4238 <table border="1" width="100%">
4239 <tr>
4240 <th width="10%">NAME</th>
4241 <th width="8%">TYPE</th>
4242 <th width="4%">VALUE</th>
4243 <th>DESCRIPTION</th>
4244 <th width="10%">GUARD</th>
4245 </tr>
4246 <tr>
4247 <td>name</td>
4248 <td>username</td>
4249 <td> </td>
4250 <td>
4251
4252  
4253 </td>
4254 <td>
4255 <b></b>
4256  
4257 </td>
4258 </tr>
4259 </table>
4260
4261 <h4>
4262 <a name="S0013"></a>ORIGIN: SERVER;
4263 MESSAGE: msg_chat</h4>
4264 NUMERIC TYPE (hex): 0013<p>
4265 </p>
4266 <table border="1" width="100%">
4267 <tr>
4268 <th width="10%">NAME</th>
4269 <th width="8%">TYPE</th>
4270 <th width="4%">VALUE</th>
4271 <th>DESCRIPTION</th>
4272 <th width="10%">GUARD</th>
4273 </tr>
4274 <tr>
4275 <td>name</td>
4276 <td>username</td>
4277 <td> </td>
4278 <td>
4279 Name of sender (either yourself (echo) or other)
4280
4281  
4282 </td>
4283 <td>
4284 <b></b>
4285  
4286 </td>
4287 </tr>
4288 <tr>
4289 <td>name2</td>
4290 <td>username</td>
4291 <td> </td>
4292 <td>
4293 Name of recipient.
4294
4295  
4296 </td>
4297 <td>
4298 <b></b>
4299  
4300 </td>
4301 </tr>
4302 <tr>
4303 <td>message</td>
4304 <td>STRING</td>
4305 <td> </td>
4306 <td>
4307
4308  
4309 </td>
4310 <td>
4311 <b></b>
4312  
4313 </td>
4314 </tr>
4315 </table>
4316
4317 <h4>
4318 <a name="S0015"></a>ORIGIN: SERVER;
4319 MESSAGE: stats</h4>
4320 NUMERIC TYPE (hex): 0015
4321 (possibly in response to
4322 <a href="#C0014">req_stats(0014)</a>
4323 )
4324 <p>
4325 </p>
4326 <table border="1" width="100%">
4327 <tr>
4328 <th width="10%">NAME</th>
4329 <th width="8%">TYPE</th>
4330 <th width="4%">VALUE</th>
4331 <th>DESCRIPTION</th>
4332 <th width="10%">GUARD</th>
4333 </tr>
4334 <tr>
4335 <td>ver_major</td>
4336 <td>U16</td>
4337 <td> </td>
4338 <td>
4339
4340  
4341 </td>
4342 <td>
4343 <b></b>
4344  
4345 </td>
4346 </tr>
4347 <tr>
4348 <td>ver_minor</td>
4349 <td>U16</td>
4350 <td> </td>
4351 <td>
4352
4353  
4354 </td>
4355 <td>
4356 <b></b>
4357  
4358 </td>
4359 </tr>
4360 <tr>
4361 <td>ver_micro</td>
4362 <td>U16</td>
4363 <td> </td>
4364 <td>
4365
4366  
4367 </td>
4368 <td>
4369 <b></b>
4370  
4371 </td>
4372 </tr>
4373 <tr>
4374 <td>boot_time</td>
4375 <td>timestamp</td>
4376 <td> </td>
4377 <td>
4378
4379  
4380 </td>
4381 <td>
4382 <b></b>
4383  
4384 </td>
4385 </tr>
4386 <tr>
4387 <td>users_cur</td>
4388 <td>U32</td>
4389 <td> </td>
4390 <td>
4391
4392  
4393 </td>
4394 <td>
4395 <b></b>
4396  
4397 </td>
4398 </tr>
4399 <tr>
4400 <td>users_max</td>
4401 <td>U32</td>
4402 <td> </td>
4403 <td>
4404
4405  
4406 </td>
4407 <td>
4408 <b></b>
4409  
4410 </td>
4411 </tr>
4412 <tr>
4413 <td>users_lim</td>
4414 <td>U32</td>
4415 <td> </td>
4416 <td>
4417
4418  
4419 </td>
4420 <td>
4421 <b></b>
4422  
4423 </td>
4424 </tr>
4425 <tr>
4426 <td>accts_cur</td>
4427 <td>U32</td>
4428 <td> </td>
4429 <td>
4430
4431  
4432 </td>
4433 <td>
4434 <b></b>
4435  
4436 </td>
4437 </tr>
4438 <tr>
4439 <td>accts_max</td>
4440 <td>U32</td>
4441 <td> </td>
4442 <td>
4443
4444  
4445 </td>
4446 <td>
4447 <b></b>
4448  
4449 </td>
4450 </tr>
4451 <tr>
4452 <td>unknown1</td>
4453 <td>U32</td>
4454 <td> </td>
4455 <td>
4456
4457  
4458 </td>
4459 <td>
4460 <b></b>
4461  
4462 </td>
4463 </tr>
4464 <tr>
4465 <td>work_max</td>
4466 <td>U32</td>
4467 <td> </td>
4468 <td>
4469
4470  
4471 </td>
4472 <td>
4473 <b></b>
4474  
4475 </td>
4476 </tr>
4477 <tr>
4478 <td>rooms_cur</td>
4479 <td>U32</td>
4480 <td> </td>
4481 <td>
4482
4483  
4484 </td>
4485 <td>
4486 <b></b>
4487  
4488 </td>
4489 </tr>
4490 <tr>
4491 <td>rooms_max</td>
4492 <td>U32</td>
4493 <td> </td>
4494 <td>
4495
4496  
4497 </td>
4498 <td>
4499 <b></b>
4500  
4501 </td>
4502 </tr>
4503 <tr>
4504 <td>rooms_lim</td>
4505 <td>U32</td>
4506 <td> </td>
4507 <td>
4508
4509  
4510 </td>
4511 <td>
4512 <b></b>
4513  
4514 </td>
4515 </tr>
4516 <tr>
4517 <td>games_cur</td>
4518 <td>U32</td>
4519 <td> </td>
4520 <td>
4521
4522  
4523 </td>
4524 <td>
4525 <b></b>
4526  
4527 </td>
4528 </tr>
4529 <tr>
4530 <td>games_max</td>
4531 <td>U32</td>
4532 <td> </td>
4533 <td>
4534
4535  
4536 </td>
4537 <td>
4538 <b></b>
4539  
4540 </td>
4541 </tr>
4542 <tr>
4543 <td>games_lim</td>
4544 <td>U32</td>
4545 <td> </td>
4546 <td>
4547
4548  
4549 </td>
4550 <td>
4551 <b></b>
4552  
4553 </td>
4554 </tr>
4555 <tr>
4556 <td>results_cur</td>
4557 <td>U32</td>
4558 <td> </td>
4559 <td>
4560
4561  
4562 </td>
4563 <td>
4564 <b></b>
4565  
4566 </td>
4567 </tr>
4568 <tr>
4569 <td>results_max</td>
4570 <td>U32</td>
4571 <td> </td>
4572 <td>
4573
4574  
4575 </td>
4576 <td>
4577 <b></b>
4578  
4579 </td>
4580 </tr>
4581 <tr>
4582 <td>unknown2</td>
4583 <td>U32</td>
4584 <td> </td>
4585 <td>
4586
4587  
4588 </td>
4589 <td>
4590 <b></b>
4591  
4592 </td>
4593 </tr>
4594 <tr>
4595 <td>params_cur</td>
4596 <td>U32</td>
4597 <td> </td>
4598 <td>
4599
4600  
4601 </td>
4602 <td>
4603 <b></b>
4604  
4605 </td>
4606 </tr>
4607 <tr>
4608 <td>params_max</td>
4609 <td>U32</td>
4610 <td> </td>
4611 <td>
4612
4613  
4614 </td>
4615 <td>
4616 <b></b>
4617  
4618 </td>
4619 </tr>
4620 <tr>
4621 <td>bytes_in</td>
4622 <td>U64</td>
4623 <td> </td>
4624 <td>
4625
4626  
4627 </td>
4628 <td>
4629 <b></b>
4630  
4631 </td>
4632 </tr>
4633 <tr>
4634 <td>packets_in</td>
4635 <td>U64</td>
4636 <td> </td>
4637 <td>
4638
4639  
4640 </td>
4641 <td>
4642 <b></b>
4643  
4644 </td>
4645 </tr>
4646 <tr>
4647 <td>bytes_out</td>
4648 <td>U64</td>
4649 <td> </td>
4650 <td>
4651
4652  
4653 </td>
4654 <td>
4655 <b></b>
4656  
4657 </td>
4658 </tr>
4659 <tr>
4660 <td>packets_out</td>
4661 <td>U64</td>
4662 <td> </td>
4663 <td>
4664
4665  
4666 </td>
4667 <td>
4668 <b></b>
4669  
4670 </td>
4671 </tr>
4672 </table>
4673
4674 <h4>
4675 <a name="S0016"></a>ORIGIN: SERVER;
4676 MESSAGE: idle_warn</h4>
4677 NUMERIC TYPE (hex): 0016
4678 (possibly in response to
4679 <a href="#C0016">idle_reset(0016)</a>
4680 )
4681 <p>
4682 idle warning, autologout soon (10 minutes...)
4683 </p>
4684 <table border="1" width="100%">
4685 <tr>
4686 <th width="10%">NAME</th>
4687 <th width="8%">TYPE</th>
4688 <th width="4%">VALUE</th>
4689 <th>DESCRIPTION</th>
4690 <th width="10%">GUARD</th>
4691 </tr>
4692 </table>
4693
4694 <h4>
4695 <a name="S0018"></a>ORIGIN: SERVER;
4696 MESSAGE: login</h4>
4697 NUMERIC TYPE (hex): 0018
4698 (possibly in response to
4699 <a href="#C0000">login(0000)</a>
4700 )
4701 <p>
4702 </p>
4703 <table border="1" width="100%">
4704 <tr>
4705 <th width="10%">NAME</th>
4706 <th width="8%">TYPE</th>
4707 <th width="4%">VALUE</th>
4708 <th>DESCRIPTION</th>
4709 <th width="10%">GUARD</th>
4710 </tr>
4711 <tr>
4712 <td>message</td>
4713 <td>CONSTANT</td>
4714 <td>logged out: another client logged in with your username </td>
4715 <td>
4716
4717  
4718 </td>
4719 <td>
4720 <b></b>
4721  
4722 </td>
4723 </tr>
4724 </table>
4725
4726 <h4>
4727 <a name="S001c"></a>ORIGIN: SERVER;
4728 MESSAGE: login</h4>
4729 NUMERIC TYPE (hex): 001c
4730 (possibly in response to
4731 <a href="#C0000">login(0000)</a>
4732 )
4733 <p>
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>message</td>
4745 <td>CONSTANT</td>
4746 <td>logged out: idle for too long </td>
4747 <td>
4748
4749  
4750 </td>
4751 <td>
4752 <b></b>
4753  
4754 </td>
4755 </tr>
4756 </table>
4757
4758 <h4>
4759 <a name="S0020"></a>ORIGIN: SERVER;
4760 MESSAGE: error</h4>
4761 NUMERIC TYPE (hex): 0020<p>
4762 </p>
4763 <table border="1" width="100%">
4764 <tr>
4765 <th width="10%">NAME</th>
4766 <th width="8%">TYPE</th>
4767 <th width="4%">VALUE</th>
4768 <th>DESCRIPTION</th>
4769 <th width="10%">GUARD</th>
4770 </tr>
4771 <tr>
4772 <td>message</td>
4773 <td>CONSTANT</td>
4774 <td>Sorry, you have too many unfinished games. You cannot turn on your rank. Please finish some of your games, then try again. </td>
4775 <td>
4776
4777  
4778 </td>
4779 <td>
4780 <b></b>
4781  
4782 </td>
4783 </tr>
4784 </table>
4785
4786 <h4>
4787 <a name="S0022"></a>ORIGIN: SERVER;
4788 MESSAGE: login</h4>
4789 NUMERIC TYPE (hex): 0022
4790 (possibly in response to
4791 <a href="#C0000">login(0000)</a>
4792 )
4793 <p>
4794 I was blocked sooo many times for developing this client that it was
4795 easy to figure out. The KGS admins sure need no extra nazi training
4796 :(
4797 </p>
4798 <table border="1" width="100%">
4799 <tr>
4800 <th width="10%">NAME</th>
4801 <th width="8%">TYPE</th>
4802 <th width="4%">VALUE</th>
4803 <th>DESCRIPTION</th>
4804 <th width="10%">GUARD</th>
4805 </tr>
4806 <tr>
4807 <td>reason</td>
4808 <td>STRING</td>
4809 <td> </td>
4810 <td>
4811
4812  
4813 </td>
4814 <td>
4815 <b></b>
4816  
4817 </td>
4818 </tr>
4819 <tr>
4820 <td>result</td>
4821 <td>CONSTANT</td>
4822 <td>user or ip blocked </td>
4823 <td>
4824
4825  
4826 </td>
4827 <td>
4828 <b></b>
4829  
4830 </td>
4831 </tr>
4832 </table>
4833
4834 <h4>
4835 <a name="S001b"></a>ORIGIN: SERVER;
4836 MESSAGE: timewarning_default</h4>
4837 NUMERIC TYPE (hex): 001b
4838 (possibly in response to
4839 <a href="#C0000">login(0000)</a>
4840 )
4841 <p>
4842 WILD guess
4843 </p>
4844 <table border="1" width="100%">
4845 <tr>
4846 <th width="10%">NAME</th>
4847 <th width="8%">TYPE</th>
4848 <th width="4%">VALUE</th>
4849 <th>DESCRIPTION</th>
4850 <th width="10%">GUARD</th>
4851 </tr>
4852 <tr>
4853 <td>channel</td>
4854 <td>U16</td>
4855 <td> </td>
4856 <td>
4857
4858  
4859 </td>
4860 <td>
4861 <b></b>
4862  
4863 </td>
4864 </tr>
4865 <tr>
4866 <td>time</td>
4867 <td>U16</td>
4868 <td> </td>
4869 <td>
4870
4871  
4872 </td>
4873 <td>
4874 <b></b>
4875  
4876 </td>
4877 </tr>
4878 </table>
4879
4880 <h4>
4881 <a name="S001c"></a>ORIGIN: SERVER;
4882 MESSAGE: idle_err</h4>
4883 NUMERIC TYPE (hex): 001c<p>
4884 autologout
4885 </p>
4886 <table border="1" width="100%">
4887 <tr>
4888 <th width="10%">NAME</th>
4889 <th width="8%">TYPE</th>
4890 <th width="4%">VALUE</th>
4891 <th>DESCRIPTION</th>
4892 <th width="10%">GUARD</th>
4893 </tr>
4894 </table>
4895
4896 <h4>
4897 <a name="S001d"></a>ORIGIN: SERVER;
4898 MESSAGE: ping</h4>
4899 NUMERIC TYPE (hex): 001d<p>
4900 Sent by the server regularly, but not answering them
4901 isn't valid. Strange form of keepalive?
4902 </p>
4903 <table border="1" width="100%">
4904 <tr>
4905 <th width="10%">NAME</th>
4906 <th width="8%">TYPE</th>
4907 <th width="4%">VALUE</th>
4908 <th>DESCRIPTION</th>
4909 <th width="10%">GUARD</th>
4910 </tr>
4911 </table>
4912
4913 <h4>
4914 <a name="S001e"></a>ORIGIN: SERVER;
4915 MESSAGE: usergraph</h4>
4916 NUMERIC TYPE (hex): 001e
4917 (possibly in response to
4918 <a href="#C001e">req_usergraph(001e)</a>
4919 )
4920 <p>
4921 User graph data.
4922 </p>
4923 <table border="1" width="100%">
4924 <tr>
4925 <th width="10%">NAME</th>
4926 <th width="8%">TYPE</th>
4927 <th width="4%">VALUE</th>
4928 <th>DESCRIPTION</th>
4929 <th width="10%">GUARD</th>
4930 </tr>
4931 <tr>
4932 <td>name</td>
4933 <td>username</td>
4934 <td> </td>
4935 <td>
4936
4937  
4938 </td>
4939 <td>
4940 <b></b>
4941  
4942 </td>
4943 </tr>
4944 <tr>
4945 <td>data</td>
4946 <td>I16</td>
4947 <td> </td>
4948 <td>
4949 If empty, no graph is available. The unit seems to
4950 be centi-kyu, with 1 dan == 0, 2 dan == 100, 1 kyu == -100.
4951 There is probably one entry per day, the newest one last.
4952
4953  
4954 </td>
4955 <td>
4956 <b></b>
4957  
4958 </td>
4959 </tr>
4960 </table>
4961
4962 <h4>
4963 <a name="S001f"></a>ORIGIN: SERVER;
4964 MESSAGE: memo</h4>
4965 NUMERIC TYPE (hex): 001f
4966 (possibly in response to
4967 <a href="#C001f">fetch_memos(001f)</a>
4968 )
4969 <p>
4970 Unclear. "Leave Message"?
4971 6 strings following.
4972 </p>
4973 <table border="1" width="100%">
4974 <tr>
4975 <th width="10%">NAME</th>
4976 <th width="8%">TYPE</th>
4977 <th width="4%">VALUE</th>
4978 <th>DESCRIPTION</th>
4979 <th width="10%">GUARD</th>
4980 </tr>
4981 <tr>
4982 <td>s1</td>
4983 <td>STRING</td>
4984 <td> </td>
4985 <td>
4986
4987  
4988 </td>
4989 <td>
4990 <b></b>
4991  
4992 </td>
4993 </tr>
4994 <tr>
4995 <td>s2</td>
4996 <td>STRING</td>
4997 <td> </td>
4998 <td>
4999
5000  
5001 </td>
5002 <td>
5003 <b></b>
5004  
5005 </td>
5006 </tr>
5007 <tr>
5008 <td>s3</td>
5009 <td>STRING</td>
5010 <td> </td>
5011 <td>
5012
5013  
5014 </td>
5015 <td>
5016 <b></b>
5017  
5018 </td>
5019 </tr>
5020 <tr>
5021 <td>s4</td>
5022 <td>STRING</td>
5023 <td> </td>
5024 <td>
5025
5026  
5027 </td>
5028 <td>
5029 <b></b>
5030  
5031 </td>
5032 </tr>
5033 <tr>
5034 <td>s5</td>
5035 <td>STRING</td>
5036 <td> </td>
5037 <td>
5038
5039  
5040 </td>
5041 <td>
5042 <b></b>
5043  
5044 </td>
5045 </tr>
5046 <tr>
5047 <td>s6</td>
5048 <td>STRING</td>
5049 <td> </td>
5050 <td>
5051
5052  
5053 </td>
5054 <td>
5055 <b></b>
5056  
5057 </td>
5058 </tr>
5059 </table>
5060
5061 <h4>
5062 <a name="S0021"></a>ORIGIN: SERVER;
5063 MESSAGE: userpic</h4>
5064 NUMERIC TYPE (hex): 0021
5065 (possibly in response to
5066 <a href="#C0021">req_pic(0021)</a>
5067 )
5068 <p>
5069 </p>
5070 <table border="1" width="100%">
5071 <tr>
5072 <th width="10%">NAME</th>
5073 <th width="8%">TYPE</th>
5074 <th width="4%">VALUE</th>
5075 <th>DESCRIPTION</th>
5076 <th width="10%">GUARD</th>
5077 </tr>
5078 <tr>
5079 <td>name</td>
5080 <td>username</td>
5081 <td> </td>
5082 <td>
5083 Reply to pic_req, contains an image in jpeg format.
5084
5085  
5086 </td>
5087 <td>
5088 <b></b>
5089  
5090 </td>
5091 </tr>
5092 <tr>
5093 <td>data</td>
5094 <td>DATA</td>
5095 <td> </td>
5096 <td>
5097
5098  
5099 </td>
5100 <td>
5101 <b></b>
5102  
5103 </td>
5104 </tr>
5105 </table>
5106
5107 <h4>
5108 <a name="S0100"></a>ORIGIN: SERVER;
5109 MESSAGE: gnotice</h4>
5110 NUMERIC TYPE (hex): 0100
5111 (possibly in response to
5112 <a href="#C0100">gnotice(0100)</a>
5113 )
5114 <p>
5115 global notice, sent to everybody
5116 </p>
5117 <table border="1" width="100%">
5118 <tr>
5119 <th width="10%">NAME</th>
5120 <th width="8%">TYPE</th>
5121 <th width="4%">VALUE</th>
5122 <th>DESCRIPTION</th>
5123 <th width="10%">GUARD</th>
5124 </tr>
5125 <tr>
5126 <td>notice</td>
5127 <td>STRING</td>
5128 <td> </td>
5129 <td>
5130
5131  
5132 </td>
5133 <td>
5134 <b></b>
5135  
5136 </td>
5137 </tr>
5138 </table>
5139
5140 <h4>
5141 <a name="S0202"></a>ORIGIN: SERVER;
5142 MESSAGE: notify_event</h4>
5143 NUMERIC TYPE (hex): 0202<p>
5144 # maybe soe notify? Totally unclear.
5145 # loc 0" type="userinfo, flags etc. loc 1 =&gt; gameinfo?, loc 2 =&gt; game result (more data)
5146 </p>
5147 <table border="1" width="100%">
5148 <tr>
5149 <th width="10%">NAME</th>
5150 <th width="8%">TYPE</th>
5151 <th width="4%">VALUE</th>
5152 <th>DESCRIPTION</th>
5153 <th width="10%">GUARD</th>
5154 </tr>
5155 <tr>
5156 <td>event</td>
5157 <td>U32</td>
5158 <td> </td>
5159 <td>
5160
5161  
5162 </td>
5163 <td>
5164 <b></b>
5165  
5166 </td>
5167 </tr>
5168 <tr>
5169 <td>user</td>
5170 <td>user</td>
5171 <td> </td>
5172 <td>
5173
5174  
5175 </td>
5176 <td>
5177 <b></b>
5178  
5179 </td>
5180 </tr>
5181 <tr>
5182 <td>gamerecord</td>
5183 <td>game_record</td>
5184 <td> </td>
5185 <td>
5186
5187  
5188 </td>
5189 <td>
5190 <b>event</b> == 2
5191  
5192 </td>
5193 </tr>
5194 </table>
5195
5196 <h4>
5197 <a name="S0310"></a>ORIGIN: SERVER;
5198 MESSAGE: priv_room</h4>
5199 NUMERIC TYPE (hex): 0310<p>
5200 "permission denied" when joining a room
5201 </p>
5202 <table border="1" width="100%">
5203 <tr>
5204 <th width="10%">NAME</th>
5205 <th width="8%">TYPE</th>
5206 <th width="4%">VALUE</th>
5207 <th>DESCRIPTION</th>
5208 <th width="10%">GUARD</th>
5209 </tr>
5210 <tr>
5211 <td>name</td>
5212 <td>STRING</td>
5213 <td> </td>
5214 <td>
5215
5216  
5217 </td>
5218 <td>
5219 <b></b>
5220  
5221 </td>
5222 </tr>
5223 </table>
5224
5225 <h4>
5226 <a name="S0318"></a>ORIGIN: SERVER;
5227 MESSAGE: upd_rooms</h4>
5228 NUMERIC TYPE (hex): 0318
5229 (possibly in response to
5230 <a href="#C0318">list_rooms(0318)</a>
5231 )
5232 <p>
5233 </p>
5234 <table border="1" width="100%">
5235 <tr>
5236 <th width="10%">NAME</th>
5237 <th width="8%">TYPE</th>
5238 <th width="4%">VALUE</th>
5239 <th>DESCRIPTION</th>
5240 <th width="10%">GUARD</th>
5241 </tr>
5242 <tr>
5243 <td>rooms</td>
5244 <td>room</td>
5245 <td> </td>
5246 <td>
5247
5248  
5249 </td>
5250 <td>
5251 <b></b>
5252  
5253 </td>
5254 </tr>
5255 </table>
5256
5257 <h4>
5258 <a name="S0411"></a>ORIGIN: SERVER;
5259 MESSAGE: chal_defaults</h4>
5260 NUMERIC TYPE (hex): 0411
5261 (possibly in response to
5262 <a href="#C0000">login(0000)</a>
5263 )
5264 <p>
5265 </p>
5266 <table border="1" width="100%">
5267 <tr>
5268 <th width="10%">NAME</th>
5269 <th width="8%">TYPE</th>
5270 <th width="4%">VALUE</th>
5271 <th>DESCRIPTION</th>
5272 <th width="10%">GUARD</th>
5273 </tr>
5274 <tr>
5275 <td>channel</td>
5276 <td>U16</td>
5277 <td> </td>
5278 <td>
5279
5280  
5281 </td>
5282 <td>
5283 <b></b>
5284  
5285 </td>
5286 </tr>
5287 <tr>
5288 <td>defaults</td>
5289 <td>challenge_defaults</td>
5290 <td> </td>
5291 <td>
5292
5293  
5294 </td>
5295 <td>
5296 <b></b>
5297  
5298 </td>
5299 </tr>
5300 </table>
5301
5302 <h4>
5303 <a name="S0412"></a>ORIGIN: SERVER;
5304 MESSAGE: game_error</h4>
5305 NUMERIC TYPE (hex): 0412<p>
5306 Unable to create challenge. The channel is be optional.
5307 </p>
5308 <table border="1" width="100%">
5309 <tr>
5310 <th width="10%">NAME</th>
5311 <th width="8%">TYPE</th>
5312 <th width="4%">VALUE</th>
5313 <th>DESCRIPTION</th>
5314 <th width="10%">GUARD</th>
5315 </tr>
5316 <tr>
5317 <td>message</td>
5318 <td>CONSTANT</td>
5319 <td>Sorry, you are already playing in one game, so you can't start playing in another. </td>
5320 <td>
5321
5322  
5323 </td>
5324 <td>
5325 <b></b>
5326  
5327 </td>
5328 </tr>
5329 <tr>
5330 <td>channel</td>
5331 <td>U16</td>
5332 <td> </td>
5333 <td>
5334
5335  
5336 </td>
5337 <td>
5338 <b></b>
5339  
5340 </td>
5341 </tr>
5342 </table>
5343
5344 <h4>
5345 <a name="S0414"></a>ORIGIN: SERVER;
5346 MESSAGE: game_record</h4>
5347 NUMERIC TYPE (hex): 0414
5348 (possibly in response to
5349 <a href="#C0413">req_game_record(0413)</a>
5350 )
5351 <p>
5352 The users game record.
5353 </p>
5354 <table border="1" width="100%">
5355 <tr>
5356 <th width="10%">NAME</th>
5357 <th width="8%">TYPE</th>
5358 <th width="4%">VALUE</th>
5359 <th>DESCRIPTION</th>
5360 <th width="10%">GUARD</th>
5361 </tr>
5362 <tr>
5363 <td>name</td>
5364 <td>username</td>
5365 <td> </td>
5366 <td>
5367
5368  
5369 </td>
5370 <td>
5371 <b></b>
5372  
5373 </td>
5374 </tr>
5375 <tr>
5376 <td>more</td>
5377 <td>flag</td>
5378 <td> </td>
5379 <td>
5380 Wether more games are available (must be requested manually)
5381
5382  
5383 </td>
5384 <td>
5385 <b></b>
5386  
5387 </td>
5388 </tr>
5389 <tr>
5390 <td>games</td>
5391 <td>game_record</td>
5392 <td> </td>
5393 <td>
5394
5395  
5396 </td>
5397 <td>
5398 <b></b>
5399  
5400 </td>
5401 </tr>
5402 </table>
5403
5404 <h4>
5405 <a name="S0417"></a>ORIGIN: SERVER;
5406 MESSAGE: error</h4>
5407 NUMERIC TYPE (hex): 0417<p>
5408 </p>
5409 <table border="1" width="100%">
5410 <tr>
5411 <th width="10%">NAME</th>
5412 <th width="8%">TYPE</th>
5413 <th width="4%">VALUE</th>
5414 <th>DESCRIPTION</th>
5415 <th width="10%">GUARD</th>
5416 </tr>
5417 <tr>
5418 <td>message</td>
5419 <td>CONSTANT</td>
5420 <td>Sorry, your opponent is currently not logged in, so you can't resume this game. </td>
5421 <td>
5422
5423  
5424 </td>
5425 <td>
5426 <b></b>
5427  
5428 </td>
5429 </tr>
5430 </table>
5431
5432 <h4>
5433 <a name="S0418"></a>ORIGIN: SERVER;
5434 MESSAGE: error</h4>
5435 NUMERIC TYPE (hex): 0418<p>
5436 </p>
5437 <table border="1" width="100%">
5438 <tr>
5439 <th width="10%">NAME</th>
5440 <th width="8%">TYPE</th>
5441 <th width="4%">VALUE</th>
5442 <th>DESCRIPTION</th>
5443 <th width="10%">GUARD</th>
5444 </tr>
5445 <tr>
5446 <td>message</td>
5447 <td>CONSTANT</td>
5448 <td>Sorry, your opponent is already playing in a game, so you cannot continue this one. </td>
5449 <td>
5450
5451  
5452 </td>
5453 <td>
5454 <b></b>
5455  
5456 </td>
5457 </tr>
5458 </table>
5459
5460 <h4>
5461 <a name="S0419"></a>ORIGIN: SERVER;
5462 MESSAGE: error</h4>
5463 NUMERIC TYPE (hex): 0419<p>
5464 </p>
5465 <table border="1" width="100%">
5466 <tr>
5467 <th width="10%">NAME</th>
5468 <th width="8%">TYPE</th>
5469 <th width="4%">VALUE</th>
5470 <th>DESCRIPTION</th>
5471 <th width="10%">GUARD</th>
5472 </tr>
5473 <tr>
5474 <td>message</td>
5475 <td>CONSTANT</td>
5476 <td>Sorry, the server is out of boards! Please wait a few minutes and try to start a game again. </td>
5477 <td>
5478
5479  
5480 </td>
5481 <td>
5482 <b></b>
5483  
5484 </td>
5485 </tr>
5486 </table>
5487
5488 <h4>
5489 <a name="S041c"></a>ORIGIN: SERVER;
5490 MESSAGE: upd_game2</h4>
5491 NUMERIC TYPE (hex): 041c<p>
5492 Unclear.
5493 </p>
5494 <table border="1" width="100%">
5495 <tr>
5496 <th width="10%">NAME</th>
5497 <th width="8%">TYPE</th>
5498 <th width="4%">VALUE</th>
5499 <th>DESCRIPTION</th>
5500 <th width="10%">GUARD</th>
5501 </tr>
5502 <tr>
5503 <td>channel_junk</td>
5504 <td>U16</td>
5505 <td> </td>
5506 <td>
5507
5508  
5509 </td>
5510 <td>
5511 <b></b>
5512  
5513 </td>
5514 </tr>
5515 <tr>
5516 <td>game</td>
5517 <td>game</td>
5518 <td> </td>
5519 <td>
5520
5521  
5522 </td>
5523 <td>
5524 <b></b>
5525  
5526 </td>
5527 </tr>
5528 </table>
5529
5530 <h4>
5531 <a name="S041f"></a>ORIGIN: SERVER;
5532 MESSAGE: error</h4>
5533 NUMERIC TYPE (hex): 041f<p>
5534 </p>
5535 <table border="1" width="100%">
5536 <tr>
5537 <th width="10%">NAME</th>
5538 <th width="8%">TYPE</th>
5539 <th width="4%">VALUE</th>
5540 <th>DESCRIPTION</th>
5541 <th width="10%">GUARD</th>
5542 </tr>
5543 <tr>
5544 <td>message</td>
5545 <td>CONSTANT</td>
5546 <td>Sorry, the game you tried to load was not correctly saved...probably caused by the server crashing. It cannot be recovered. </td>
5547 <td>
5548
5549  
5550 </td>
5551 <td>
5552 <b></b>
5553  
5554 </td>
5555 </tr>
5556 </table>
5557
5558 <h4>
5559 <a name="S0420"></a>ORIGIN: SERVER;
5560 MESSAGE: error</h4>
5561 NUMERIC TYPE (hex): 0420<p>
5562 </p>
5563 <table border="1" width="100%">
5564 <tr>
5565 <th width="10%">NAME</th>
5566 <th width="8%">TYPE</th>
5567 <th width="4%">VALUE</th>
5568 <th>DESCRIPTION</th>
5569 <th width="10%">GUARD</th>
5570 </tr>
5571 <tr>
5572 <td>message</td>
5573 <td>CONSTANT</td>
5574 <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>
5575 <td>
5576
5577  
5578 </td>
5579 <td>
5580 <b></b>
5581  
5582 </td>
5583 </tr>
5584 </table>
5585
5586 <h4>
5587 <a name="S0421"></a>ORIGIN: SERVER;
5588 MESSAGE: error</h4>
5589 NUMERIC TYPE (hex): 0421<p>
5590 </p>
5591 <table border="1" width="100%">
5592 <tr>
5593 <th width="10%">NAME</th>
5594 <th width="8%">TYPE</th>
5595 <th width="4%">VALUE</th>
5596 <th>DESCRIPTION</th>
5597 <th width="10%">GUARD</th>
5598 </tr>
5599 <tr>
5600 <td>message</td>
5601 <td>CONSTANT</td>
5602 <td>Sorry, this game is a private lesson. You will not be allowed to observe it. </td>
5603 <td>
5604
5605  
5606 </td>
5607 <td>
5608 <b></b>
5609  
5610 </td>
5611 </tr>
5612 </table>
5613
5614 <!-- added recently -->
5615 <h4>
5616 <a name="S043a"></a>ORIGIN: SERVER;
5617 MESSAGE: add_global_challenge</h4>
5618 NUMERIC TYPE (hex): 043a<p>
5619 <p>
5620 Adds or updates a global challenge (open game list).
5621 </p>
5622 </p>
5623 <table border="1" width="100%">
5624 <tr>
5625 <th width="10%">NAME</th>
5626 <th width="8%">TYPE</th>
5627 <th width="4%">VALUE</th>
5628 <th>DESCRIPTION</th>
5629 <th width="10%">GUARD</th>
5630 </tr>
5631 <tr>
5632 <td>channel</td>
5633 <td>U16</td>
5634 <td> </td>
5635 <td>
5636
5637  
5638 </td>
5639 <td>
5640 <b></b>
5641  
5642 </td>
5643 </tr>
5644 <tr>
5645 <td>game</td>
5646 <td>game</td>
5647 <td> </td>
5648 <td>
5649
5650  
5651 </td>
5652 <td>
5653 <b></b>
5654  
5655 </td>
5656 </tr>
5657 </table>
5658
5659 <h3>Room messages</h3>
5660
5661 <p>Not all room messages are for rooms only, and rooms need to parse
5662 not only these messages. Orthogonality, what for?</p>
5663
5664 <h4>
5665 <a name="S4300"></a>ORIGIN: SERVER;
5666 MESSAGE: join_room</h4>
5667 NUMERIC TYPE (hex): 4300
5668 (possibly in response to
5669 <a href="#C4300">join_room(4300)</a>
5670 )
5671 <p>
5672 </p>
5673 <table border="1" width="100%">
5674 <tr>
5675 <th width="10%">NAME</th>
5676 <th width="8%">TYPE</th>
5677 <th width="4%">VALUE</th>
5678 <th>DESCRIPTION</th>
5679 <th width="10%">GUARD</th>
5680 </tr>
5681 <tr>
5682 <td>channel</td>
5683 <td>U16</td>
5684 <td> </td>
5685 <td>
5686
5687  
5688 </td>
5689 <td>
5690 <b></b>
5691  
5692 </td>
5693 </tr>
5694 <tr>
5695 <td>users</td>
5696 <td>user</td>
5697 <td> </td>
5698 <td>
5699
5700  
5701 </td>
5702 <td>
5703 <b></b>
5704  
5705 </td>
5706 </tr>
5707 </table>
5708
5709 <h4>
5710 <a name="S4301"></a>ORIGIN: SERVER;
5711 MESSAGE: msg_room</h4>
5712 NUMERIC TYPE (hex): 4301<p>
5713 </p>
5714 <table border="1" width="100%">
5715 <tr>
5716 <th width="10%">NAME</th>
5717 <th width="8%">TYPE</th>
5718 <th width="4%">VALUE</th>
5719 <th>DESCRIPTION</th>
5720 <th width="10%">GUARD</th>
5721 </tr>
5722 <tr>
5723 <td>channel</td>
5724 <td>U16</td>
5725 <td> </td>
5726 <td>
5727
5728  
5729 </td>
5730 <td>
5731 <b></b>
5732  
5733 </td>
5734 </tr>
5735 <tr>
5736 <td>name</td>
5737 <td>username</td>
5738 <td> </td>
5739 <td>
5740
5741  
5742 </td>
5743 <td>
5744 <b></b>
5745  
5746 </td>
5747 </tr>
5748 <tr>
5749 <td>message</td>
5750 <td>STRING</td>
5751 <td> </td>
5752 <td>
5753
5754  
5755 </td>
5756 <td>
5757 <b></b>
5758  
5759 </td>
5760 </tr>
5761 </table>
5762
5763 <h4>
5764 <a name="S4302"></a>ORIGIN: SERVER;
5765 MESSAGE: part_room</h4>
5766 NUMERIC TYPE (hex): 4302<p>
5767 </p>
5768 <table border="1" width="100%">
5769 <tr>
5770 <th width="10%">NAME</th>
5771 <th width="8%">TYPE</th>
5772 <th width="4%">VALUE</th>
5773 <th>DESCRIPTION</th>
5774 <th width="10%">GUARD</th>
5775 </tr>
5776 <tr>
5777 <td>channel</td>
5778 <td>U16</td>
5779 <td> </td>
5780 <td>
5781
5782  
5783 </td>
5784 <td>
5785 <b></b>
5786  
5787 </td>
5788 </tr>
5789 <tr>
5790 <td>user</td>
5791 <td>user</td>
5792 <td> </td>
5793 <td>
5794
5795  
5796 </td>
5797 <td>
5798 <b></b>
5799  
5800 </td>
5801 </tr>
5802 </table>
5803
5804 <h4>
5805 <a name="S4303"></a>ORIGIN: SERVER;
5806 MESSAGE: del_room</h4>
5807 NUMERIC TYPE (hex): 4303<p>
5808 </p>
5809 <table border="1" width="100%">
5810 <tr>
5811 <th width="10%">NAME</th>
5812 <th width="8%">TYPE</th>
5813 <th width="4%">VALUE</th>
5814 <th>DESCRIPTION</th>
5815 <th width="10%">GUARD</th>
5816 </tr>
5817 <tr>
5818 <td>channel</td>
5819 <td>U16</td>
5820 <td> </td>
5821 <td>
5822
5823  
5824 </td>
5825 <td>
5826 <b></b>
5827  
5828 </td>
5829 </tr>
5830 </table>
5831
5832 <h4>
5833 <a name="S4304"></a>ORIGIN: SERVER;
5834 MESSAGE: upd_games</h4>
5835 NUMERIC TYPE (hex): 4304<p>
5836 </p>
5837 <table border="1" width="100%">
5838 <tr>
5839 <th width="10%">NAME</th>
5840 <th width="8%">TYPE</th>
5841 <th width="4%">VALUE</th>
5842 <th>DESCRIPTION</th>
5843 <th width="10%">GUARD</th>
5844 </tr>
5845 <tr>
5846 <td>channel</td>
5847 <td>U16</td>
5848 <td> </td>
5849 <td>
5850
5851  
5852 </td>
5853 <td>
5854 <b></b>
5855  
5856 </td>
5857 </tr>
5858 <tr>
5859 <td>games</td>
5860 <td>game</td>
5861 <td> </td>
5862 <td>
5863
5864  
5865 </td>
5866 <td>
5867 <b></b>
5868  
5869 </td>
5870 </tr>
5871 </table>
5872
5873 <h4>
5874 <a name="S4319"></a>ORIGIN: SERVER;
5875 MESSAGE: desc_room</h4>
5876 NUMERIC TYPE (hex): 4319<p>
5877 </p>
5878 <table border="1" width="100%">
5879 <tr>
5880 <th width="10%">NAME</th>
5881 <th width="8%">TYPE</th>
5882 <th width="4%">VALUE</th>
5883 <th>DESCRIPTION</th>
5884 <th width="10%">GUARD</th>
5885 </tr>
5886 <tr>
5887 <td>channel</td>
5888 <td>U16</td>
5889 <td> </td>
5890 <td>
5891
5892  
5893 </td>
5894 <td>
5895 <b></b>
5896  
5897 </td>
5898 </tr>
5899 <tr>
5900 <td>owner</td>
5901 <td>username</td>
5902 <td> </td>
5903 <td>
5904
5905  
5906 </td>
5907 <td>
5908 <b></b>
5909  
5910 </td>
5911 </tr>
5912 <tr>
5913 <td>description</td>
5914 <td>STRING</td>
5915 <td> </td>
5916 <td>
5917
5918  
5919 </td>
5920 <td>
5921 <b></b>
5922  
5923 </td>
5924 </tr>
5925 </table>
5926
5927 <h3>Game messages</h3>
5928
5929 <h4>
5930 <a name="S4400"></a>ORIGIN: SERVER;
5931 MESSAGE: upd_challenge</h4>
5932 NUMERIC TYPE (hex): 4400<p>
5933 Unclear.
5934 </p>
5935 <table border="1" width="100%">
5936 <tr>
5937 <th width="10%">NAME</th>
5938 <th width="8%">TYPE</th>
5939 <th width="4%">VALUE</th>
5940 <th>DESCRIPTION</th>
5941 <th width="10%">GUARD</th>
5942 </tr>
5943 <tr>
5944 <td>channel</td>
5945 <td>U16</td>
5946 <td> </td>
5947 <td>
5948
5949  
5950 </td>
5951 <td>
5952 <b></b>
5953  
5954 </td>
5955 </tr>
5956 <tr>
5957 <td>challenge</td>
5958 <td>challenge</td>
5959 <td> </td>
5960 <td>
5961
5962  
5963 </td>
5964 <td>
5965 <b></b>
5966  
5967 </td>
5968 </tr>
5969 </table>
5970
5971 <h4>
5972 <a name="S4401"></a>ORIGIN: SERVER;
5973 MESSAGE: upd_game</h4>
5974 NUMERIC TYPE (hex): 4401<p>
5975 </p>
5976 <table border="1" width="100%">
5977 <tr>
5978 <th width="10%">NAME</th>
5979 <th width="8%">TYPE</th>
5980 <th width="4%">VALUE</th>
5981 <th>DESCRIPTION</th>
5982 <th width="10%">GUARD</th>
5983 </tr>
5984 <tr>
5985 <td>channel</td>
5986 <td>U16</td>
5987 <td> </td>
5988 <td>
5989
5990  
5991 </td>
5992 <td>
5993 <b></b>
5994  
5995 </td>
5996 </tr>
5997 <tr>
5998 <td>game</td>
5999 <td>game</td>
6000 <td> </td>
6001 <td>
6002
6003  
6004 </td>
6005 <td>
6006 <b></b>
6007  
6008 </td>
6009 </tr>
6010 </table>
6011
6012 <h4>
6013 <a name="S4402"></a>ORIGIN: SERVER;
6014 MESSAGE: del_game</h4>
6015 NUMERIC TYPE (hex): 4402<p>
6016 </p>
6017 <table border="1" width="100%">
6018 <tr>
6019 <th width="10%">NAME</th>
6020 <th width="8%">TYPE</th>
6021 <th width="4%">VALUE</th>
6022 <th>DESCRIPTION</th>
6023 <th width="10%">GUARD</th>
6024 </tr>
6025 <tr>
6026 <td>channel</td>
6027 <td>U16</td>
6028 <td> </td>
6029 <td>
6030
6031  
6032 </td>
6033 <td>
6034 <b></b>
6035  
6036 </td>
6037 </tr>
6038 </table>
6039
6040 <h4>
6041 <a name="S4403"></a>ORIGIN: SERVER;
6042 MESSAGE: upd_observers</h4>
6043 NUMERIC TYPE (hex): 4403<p>
6044 </p>
6045 <table border="1" width="100%">
6046 <tr>
6047 <th width="10%">NAME</th>
6048 <th width="8%">TYPE</th>
6049 <th width="4%">VALUE</th>
6050 <th>DESCRIPTION</th>
6051 <th width="10%">GUARD</th>
6052 </tr>
6053 <tr>
6054 <td>channel</td>
6055 <td>U16</td>
6056 <td> </td>
6057 <td>
6058
6059  
6060 </td>
6061 <td>
6062 <b></b>
6063  
6064 </td>
6065 </tr>
6066 <tr>
6067 <td>users</td>
6068 <td>user</td>
6069 <td> </td>
6070 <td>
6071
6072  
6073 </td>
6074 <td>
6075 <b></b>
6076  
6077 </td>
6078 </tr>
6079 </table>
6080
6081 <h4>
6082 <a name="S4404"></a>ORIGIN: SERVER;
6083 MESSAGE: del_observer</h4>
6084 NUMERIC TYPE (hex): 4404<p>
6085 </p>
6086 <table border="1" width="100%">
6087 <tr>
6088 <th width="10%">NAME</th>
6089 <th width="8%">TYPE</th>
6090 <th width="4%">VALUE</th>
6091 <th>DESCRIPTION</th>
6092 <th width="10%">GUARD</th>
6093 </tr>
6094 <tr>
6095 <td>channel</td>
6096 <td>U16</td>
6097 <td> </td>
6098 <td>
6099
6100  
6101 </td>
6102 <td>
6103 <b></b>
6104  
6105 </td>
6106 </tr>
6107 <tr>
6108 <td>name</td>
6109 <td>username</td>
6110 <td> </td>
6111 <td>
6112
6113  
6114 </td>
6115 <td>
6116 <b></b>
6117  
6118 </td>
6119 </tr>
6120 </table>
6121
6122 <h4>
6123 <a name="S4405"></a>ORIGIN: SERVER;
6124 MESSAGE: set_tree</h4>
6125 NUMERIC TYPE (hex): 4405<p>
6126 </p>
6127 <table border="1" width="100%">
6128 <tr>
6129 <th width="10%">NAME</th>
6130 <th width="8%">TYPE</th>
6131 <th width="4%">VALUE</th>
6132 <th>DESCRIPTION</th>
6133 <th width="10%">GUARD</th>
6134 </tr>
6135 <tr>
6136 <td>channel</td>
6137 <td>U16</td>
6138 <td> </td>
6139 <td>
6140
6141  
6142 </td>
6143 <td>
6144 <b></b>
6145  
6146 </td>
6147 </tr>
6148 <tr>
6149 <td>tree</td>
6150 <td>TREE</td>
6151 <td> </td>
6152 <td>
6153
6154  
6155 </td>
6156 <td>
6157 <b></b>
6158  
6159 </td>
6160 </tr>
6161 </table>
6162
6163 <h4>
6164 <a name="S4406"></a>ORIGIN: SERVER;
6165 MESSAGE: upd_tree</h4>
6166 NUMERIC TYPE (hex): 4406<p>
6167 </p>
6168 <table border="1" width="100%">
6169 <tr>
6170 <th width="10%">NAME</th>
6171 <th width="8%">TYPE</th>
6172 <th width="4%">VALUE</th>
6173 <th>DESCRIPTION</th>
6174 <th width="10%">GUARD</th>
6175 </tr>
6176 <tr>
6177 <td>channel</td>
6178 <td>U16</td>
6179 <td> </td>
6180 <td>
6181
6182  
6183 </td>
6184 <td>
6185 <b></b>
6186  
6187 </td>
6188 </tr>
6189 <tr>
6190 <td>tree</td>
6191 <td>TREE</td>
6192 <td> </td>
6193 <td>
6194
6195  
6196 </td>
6197 <td>
6198 <b></b>
6199  
6200 </td>
6201 </tr>
6202 </table>
6203
6204 <h4>
6205 <a name="S4409"></a>ORIGIN: SERVER;
6206 MESSAGE: superko</h4>
6207 NUMERIC TYPE (hex): 4409<p>
6208 Superko-warning.
6209 </p>
6210 <table border="1" width="100%">
6211 <tr>
6212 <th width="10%">NAME</th>
6213 <th width="8%">TYPE</th>
6214 <th width="4%">VALUE</th>
6215 <th>DESCRIPTION</th>
6216 <th width="10%">GUARD</th>
6217 </tr>
6218 <tr>
6219 <td>channel</td>
6220 <td>U16</td>
6221 <td> </td>
6222 <td>
6223
6224  
6225 </td>
6226 <td>
6227 <b></b>
6228  
6229 </td>
6230 </tr>
6231 </table>
6232
6233 <h4>
6234 <a name="S440b"></a>ORIGIN: SERVER;
6235 MESSAGE: final_result</h4>
6236 NUMERIC TYPE (hex): 440b<p>
6237 </p>
6238 <table border="1" width="100%">
6239 <tr>
6240 <th width="10%">NAME</th>
6241 <th width="8%">TYPE</th>
6242 <th width="4%">VALUE</th>
6243 <th>DESCRIPTION</th>
6244 <th width="10%">GUARD</th>
6245 </tr>
6246 <tr>
6247 <td>channel</td>
6248 <td>U16</td>
6249 <td> </td>
6250 <td>
6251
6252  
6253 </td>
6254 <td>
6255 <b></b>
6256  
6257 </td>
6258 </tr>
6259 <tr>
6260 <td>blackscore</td>
6261 <td>scorevalues</td>
6262 <td> </td>
6263 <td>
6264
6265  
6266 </td>
6267 <td>
6268 <b></b>
6269  
6270 </td>
6271 </tr>
6272 <tr>
6273 <td>whitescore</td>
6274 <td>scorevalues</td>
6275 <td> </td>
6276 <td>
6277
6278  
6279 </td>
6280 <td>
6281 <b></b>
6282  
6283 </td>
6284 </tr>
6285 </table>
6286
6287 <h4>
6288 <a name="S440e"></a>ORIGIN: SERVER;
6289 MESSAGE: req_undo</h4>
6290 NUMERIC TYPE (hex): 440e<p>
6291 </p>
6292 <table border="1" width="100%">
6293 <tr>
6294 <th width="10%">NAME</th>
6295 <th width="8%">TYPE</th>
6296 <th width="4%">VALUE</th>
6297 <th>DESCRIPTION</th>
6298 <th width="10%">GUARD</th>
6299 </tr>
6300 <tr>
6301 <td>channel</td>
6302 <td>U16</td>
6303 <td> </td>
6304 <td>
6305
6306
6307  
6308 </td>
6309 <td>
6310 <b></b>
6311  
6312 </td>
6313 </tr>
6314 </table>
6315
6316 <h4>
6317 <a name="S4410"></a>ORIGIN: SERVER;
6318 MESSAGE: resign_game</h4>
6319 NUMERIC TYPE (hex): 4410<p>
6320 </p>
6321 <table border="1" width="100%">
6322 <tr>
6323 <th width="10%">NAME</th>
6324 <th width="8%">TYPE</th>
6325 <th width="4%">VALUE</th>
6326 <th>DESCRIPTION</th>
6327 <th width="10%">GUARD</th>
6328 </tr>
6329 <tr>
6330 <td>channel</td>
6331 <td>U16</td>
6332 <td> </td>
6333 <td>
6334
6335  
6336 </td>
6337 <td>
6338 <b></b>
6339  
6340 </td>
6341 </tr>
6342 <tr>
6343 <td>player</td>
6344 <td>U8</td>
6345 <td> </td>
6346 <td>
6347
6348  
6349 </td>
6350 <td>
6351 <b></b>
6352  
6353 </td>
6354 </tr>
6355 </table>
6356
6357 <h4>
6358 <a name="S4415"></a>ORIGIN: SERVER;
6359 MESSAGE: game_error</h4>
6360 NUMERIC TYPE (hex): 4415<p>
6361 </p>
6362 <table border="1" width="100%">
6363 <tr>
6364 <th width="10%">NAME</th>
6365 <th width="8%">TYPE</th>
6366 <th width="4%">VALUE</th>
6367 <th>DESCRIPTION</th>
6368 <th width="10%">GUARD</th>
6369 </tr>
6370 <tr>
6371 <td>channel</td>
6372 <td>U16</td>
6373 <td> </td>
6374 <td>
6375
6376  
6377 </td>
6378 <td>
6379 <b></b>
6380  
6381 </td>
6382 </tr>
6383 <tr>
6384 <td>message</td>
6385 <td>CONSTANT</td>
6386 <td>Sorry, this is a lecture game. Only authorized players are allowed to make comments. </td>
6387 <td>
6388
6389  
6390 </td>
6391 <td>
6392 <b></b>
6393  
6394 </td>
6395 </tr>
6396 </table>
6397
6398 <h4>
6399 <a name="S441a"></a>ORIGIN: SERVER;
6400 MESSAGE: set_teacher</h4>
6401 NUMERIC TYPE (hex): 441a<p>
6402 </p>
6403 <table border="1" width="100%">
6404 <tr>
6405 <th width="10%">NAME</th>
6406 <th width="8%">TYPE</th>
6407 <th width="4%">VALUE</th>
6408 <th>DESCRIPTION</th>
6409 <th width="10%">GUARD</th>
6410 </tr>
6411 <tr>
6412 <td>channel</td>
6413 <td>U16</td>
6414 <td> </td>
6415 <td>
6416
6417  
6418 </td>
6419 <td>
6420 <b></b>
6421  
6422 </td>
6423 </tr>
6424 <tr>
6425 <td>name</td>
6426 <td>username</td>
6427 <td> </td>
6428 <td>
6429
6430  
6431 </td>
6432 <td>
6433 <b></b>
6434  
6435 </td>
6436 </tr>
6437 </table>
6438
6439 <h4>
6440 <a name="S441d"></a>ORIGIN: SERVER;
6441 MESSAGE: owner_left</h4>
6442 NUMERIC TYPE (hex): 441d<p>
6443 </p>
6444 <table border="1" width="100%">
6445 <tr>
6446 <th width="10%">NAME</th>
6447 <th width="8%">TYPE</th>
6448 <th width="4%">VALUE</th>
6449 <th>DESCRIPTION</th>
6450 <th width="10%">GUARD</th>
6451 </tr>
6452 <tr>
6453 <td>channel</td>
6454 <td>U16</td>
6455 <td> </td>
6456 <td>
6457
6458  
6459 </td>
6460 <td>
6461 <b></b>
6462  
6463 </td>
6464 </tr>
6465 <tr>
6466 <td>message</td>
6467 <td>CONSTANT</td>
6468 <td>Sorry, the owner of this game has left. Nobody will be allowed to edit it until the owner returns. </td>
6469 <td>
6470
6471  
6472 </td>
6473 <td>
6474 <b></b>
6475  
6476 </td>
6477 </tr>
6478 </table>
6479
6480 <h4>
6481 <a name="S441e"></a>ORIGIN: SERVER;
6482 MESSAGE: teacher_left</h4>
6483 NUMERIC TYPE (hex): 441e<p>
6484 Unclear.
6485 </p>
6486 <table border="1" width="100%">
6487 <tr>
6488 <th width="10%">NAME</th>
6489 <th width="8%">TYPE</th>
6490 <th width="4%">VALUE</th>
6491 <th>DESCRIPTION</th>
6492 <th width="10%">GUARD</th>
6493 </tr>
6494 <tr>
6495 <td>channel</td>
6496 <td>U16</td>
6497 <td> </td>
6498 <td>
6499
6500  
6501 </td>
6502 <td>
6503 <b></b>
6504  
6505 </td>
6506 </tr>
6507 </table>
6508
6509 <h4>
6510 <a name="S4422"></a>ORIGIN: SERVER;
6511 MESSAGE: allow_user_result</h4>
6512 NUMERIC TYPE (hex): 4422<p>
6513 </p>
6514 <table border="1" width="100%">
6515 <tr>
6516 <th width="10%">NAME</th>
6517 <th width="8%">TYPE</th>
6518 <th width="4%">VALUE</th>
6519 <th>DESCRIPTION</th>
6520 <th width="10%">GUARD</th>
6521 </tr>
6522 <tr>
6523 <td>message</td>
6524 <td>CONSTANT</td>
6525 <td>User "%s" will now be allowed full access to your game. </td>
6526 <td>
6527
6528  
6529 </td>
6530 <td>
6531 <b></b>
6532  
6533 </td>
6534 </tr>
6535 <tr>
6536 <td>channel</td>
6537 <td>U16</td>
6538 <td> </td>
6539 <td>
6540
6541  
6542 </td>
6543 <td>
6544 <b></b>
6545  
6546 </td>
6547 </tr>
6548 </table>
6549
6550 <h4>
6551 <a name="S4424"></a>ORIGIN: SERVER;
6552 MESSAGE: allow_user_result</h4>
6553 NUMERIC TYPE (hex): 4424<p>
6554 </p>
6555 <table border="1" width="100%">
6556 <tr>
6557 <th width="10%">NAME</th>
6558 <th width="8%">TYPE</th>
6559 <th width="4%">VALUE</th>
6560 <th>DESCRIPTION</th>
6561 <th width="10%">GUARD</th>
6562 </tr>
6563 <tr>
6564 <td>message</td>
6565 <td>CONSTANT</td>
6566 <td>Sorry, user "%s" is a guest and cannot be allowed full access to your game. </td>
6567 <td>
6568
6569  
6570 </td>
6571 <td>
6572 <b></b>
6573  
6574 </td>
6575 </tr>
6576 <tr>
6577 <td>channel</td>
6578 <td>U16</td>
6579 <td> </td>
6580 <td>
6581
6582  
6583 </td>
6584 <td>
6585 <b></b>
6586  
6587 </td>
6588 </tr>
6589 </table>
6590
6591 <h4>
6592 <a name="S4425"></a>ORIGIN: SERVER;
6593 MESSAGE: allow_user_result</h4>
6594 NUMERIC TYPE (hex): 4425<p>
6595 </p>
6596 <table border="1" width="100%">
6597 <tr>
6598 <th width="10%">NAME</th>
6599 <th width="8%">TYPE</th>
6600 <th width="4%">VALUE</th>
6601 <th>DESCRIPTION</th>
6602 <th width="10%">GUARD</th>
6603 </tr>
6604 <tr>
6605 <td>message</td>
6606 <td>CONSTANT</td>
6607 <td>Sorry, user "%s" does not seem to exist and cannot be allowed into your game. </td>
6608 <td>
6609
6610  
6611 </td>
6612 <td>
6613 <b></b>
6614  
6615 </td>
6616 </tr>
6617 <tr>
6618 <td>channel</td>
6619 <td>U16</td>
6620 <td> </td>
6621 <td>
6622
6623  
6624 </td>
6625 <td>
6626 <b></b>
6627  
6628 </td>
6629 </tr>
6630 </table>
6631
6632 <h4>
6633 <a name="S4428"></a>ORIGIN: SERVER;
6634 MESSAGE: add_tree</h4>
6635 NUMERIC TYPE (hex): 4428<p>
6636 <p>See <a href="#S4405">set_tree(4405)</a>. In addition, flags the tree as being
6637 uploaded completely.</p>
6638 </p>
6639 <table border="1" width="100%">
6640 <tr>
6641 <th width="10%">NAME</th>
6642 <th width="8%">TYPE</th>
6643 <th width="4%">VALUE</th>
6644 <th>DESCRIPTION</th>
6645 <th width="10%">GUARD</th>
6646 </tr>
6647 <tr>
6648 <td>channel</td>
6649 <td>U16</td>
6650 <td> </td>
6651 <td>
6652
6653  
6654 </td>
6655 <td>
6656 <b></b>
6657  
6658 </td>
6659 </tr>
6660 <tr>
6661 <td>tree</td>
6662 <td>TREE</td>
6663 <td> </td>
6664 <td>
6665
6666  
6667 </td>
6668 <td>
6669 <b></b>
6670  
6671 </td>
6672 </tr>
6673 </table>
6674
6675 <h4>
6676 <a name="S4429"></a>ORIGIN: SERVER;
6677 MESSAGE: reject_challenge</h4>
6678 NUMERIC TYPE (hex): 4429<p>
6679 Reject a challenge by a given user. Not checked.
6680
6681 </p>
6682 <table border="1" width="100%">
6683 <tr>
6684 <th width="10%">NAME</th>
6685 <th width="8%">TYPE</th>
6686 <th width="4%">VALUE</th>
6687 <th>DESCRIPTION</th>
6688 <th width="10%">GUARD</th>
6689 </tr>
6690 <tr>
6691 <td>channel</td>
6692 <td>U16</td>
6693 <td> </td>
6694 <td>
6695
6696  
6697 </td>
6698 <td>
6699 <b></b>
6700  
6701 </td>
6702 </tr>
6703 <tr>
6704 <td>name</td>
6705 <td>username</td>
6706 <td> </td>
6707 <td>
6708
6709  
6710 </td>
6711 <td>
6712 <b></b>
6713  
6714 </td>
6715 </tr>
6716 </table>
6717
6718 <h4>
6719 <a name="S442f"></a>ORIGIN: SERVER;
6720 MESSAGE: new_game</h4>
6721 NUMERIC TYPE (hex): 442f<p>
6722 <p>Notifies the client that a new game has been created. This
6723 message is sent long *after* upd_games and upd_observers etc.
6724 have been received. *sigh*</p>
6725 </p>
6726 <table border="1" width="100%">
6727 <tr>
6728 <th width="10%">NAME</th>
6729 <th width="8%">TYPE</th>
6730 <th width="4%">VALUE</th>
6731 <th>DESCRIPTION</th>
6732 <th width="10%">GUARD</th>
6733 </tr>
6734 <tr>
6735 <td>channel</td>
6736 <td>U16</td>
6737 <td> </td>
6738 <td>
6739
6740  
6741 </td>
6742 <td>
6743 <b></b>
6744  
6745 </td>
6746 </tr>
6747 <tr>
6748 <td>id</td>
6749 <td>U16</td>
6750 <td> </td>
6751 <td>
6752
6753  
6754 </td>
6755 <td>
6756 <b></b>
6757  
6758 </td>
6759 </tr>
6760 </table>
6761
6762 <h4>
6763 <a name="S4433"></a>ORIGIN: SERVER;
6764 MESSAGE: req_result</h4>
6765 NUMERIC TYPE (hex): 4433<p>
6766 Unclear.
6767 </p>
6768 <table border="1" width="100%">
6769 <tr>
6770 <th width="10%">NAME</th>
6771 <th width="8%">TYPE</th>
6772 <th width="4%">VALUE</th>
6773 <th>DESCRIPTION</th>
6774 <th width="10%">GUARD</th>
6775 </tr>
6776 <tr>
6777 <td>channel</td>
6778 <td>U16</td>
6779 <td> </td>
6780 <td>
6781 # # recv_result(?)
6782
6783  
6784 </td>
6785 <td>
6786 <b></b>
6787  
6788 </td>
6789 </tr>
6790 </table>
6791
6792 <h4>
6793 <a name="S4434"></a>ORIGIN: SERVER;
6794 MESSAGE: unknown4434</h4>
6795 NUMERIC TYPE (hex): 4434<p>
6796 </p>
6797 <table border="1" width="100%">
6798 <tr>
6799 <th width="10%">NAME</th>
6800 <th width="8%">TYPE</th>
6801 <th width="4%">VALUE</th>
6802 <th>DESCRIPTION</th>
6803 <th width="10%">GUARD</th>
6804 </tr>
6805 <tr>
6806 <td>channel</td>
6807 <td>U16</td>
6808 <td> </td>
6809 <td>
6810
6811  
6812 </td>
6813 <td>
6814 <b></b>
6815  
6816 </td>
6817 </tr>
6818 <tr>
6819 <td>b1</td>
6820 <td>U8</td>
6821 <td> </td>
6822 <td>
6823 ?? !demonstration game??
6824
6825  
6826 </td>
6827 <td>
6828 <b></b>
6829  
6830 </td>
6831 </tr>
6832 </table>
6833
6834 <!-- added recently -->
6835 <h4>
6836 <a name="S443b"></a>ORIGIN: SERVER;
6837 MESSAGE: del_global_challenge</h4>
6838 NUMERIC TYPE (hex): 443b<p>
6839 <p>
6840 Remove a game from the global challenge list (open game list).
6841 </p>
6842 </p>
6843 <table border="1" width="100%">
6844 <tr>
6845 <th width="10%">NAME</th>
6846 <th width="8%">TYPE</th>
6847 <th width="4%">VALUE</th>
6848 <th>DESCRIPTION</th>
6849 <th width="10%">GUARD</th>
6850 </tr>
6851 <tr>
6852 <td>channel</td>
6853 <td>U16</td>
6854 <td> </td>
6855 <td>
6856
6857  
6858 </td>
6859 <td>
6860 <b></b>
6861  
6862 </td>
6863 </tr>
6864 <tr>
6865 <td>game</td>
6866 <td>U16</td>
6867 <td> </td>
6868 <td>
6869
6870  
6871 </td>
6872 <td>
6873 <b></b>
6874  
6875 </td>
6876 </tr>
6877 </table>
6878 </body>
6879 </html>