ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.37
Committed: Mon Aug 4 02:14:44 2003 UTC (20 years, 10 months ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.36: +807 -313 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.36 $</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 ccepting != 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>enum: SCORE</h4>
440 <p>
441 <p>Special score values, in addition to numerical scores. Some are also used with their
442 negative value.</p>
443 </p>
444 <table border="1" width="100%">
445 <tr>
446 <th width="10%">NAME</th>
447 <th width="8%">TYPE</th>
448 <th width="4%">VALUE</th>
449 <th>DESCRIPTION</th>
450 <th width="10%">GUARD</th>
451 </tr>
452 <tr>
453 <td>TIMEOUT</td>
454 <td></td>
455 <td>16384 / 4 </td>
456 <td>
457 Also used negatively to score for white instead of black.
458
459
460  
461 </td>
462 <td>
463 <b></b>
464  
465 </td>
466 </tr>
467 <tr>
468 <td>RESIGN</td>
469 <td></td>
470 <td>16385 / 4 </td>
471 <td>
472 Also used negatively to score for white instead of black.
473
474
475  
476 </td>
477 <td>
478 <b></b>
479  
480 </td>
481 </tr>
482 <tr>
483 <td>FORFEIT</td>
484 <td></td>
485 <td> 0 / 4 </td>
486 <td>
487 Also used negatively to score for white instead of black.
488
489
490  
491 </td>
492 <td>
493 <b></b>
494  
495 </td>
496 </tr>
497 <tr>
498 <td>JIGO</td>
499 <td></td>
500 <td>16386 / 4 </td>
501 <td>
502
503
504  
505 </td>
506 <td>
507 <b></b>
508  
509 </td>
510 </tr>
511 <tr>
512 <td>NO_RESULT</td>
513 <td></td>
514 <td>16386 / 4 </td>
515 <td>
516
517  
518 </td>
519 <td>
520 <b></b>
521  
522 </td>
523 </tr>
524 <tr>
525 <td>ADJOURNED</td>
526 <td></td>
527 <td>16387 / 4 </td>
528 <td>
529
530  
531 </td>
532 <td>
533 <b></b>
534  
535 </td>
536 </tr>
537 <tr>
538 <td>UNKNOWN</td>
539 <td></td>
540 <td>16389 / 4 </td>
541 <td>
542
543  
544 </td>
545 <td>
546 <b></b>
547  
548 </td>
549 </tr>
550 </table>
551
552 <h4>enum: RULESET</h4>
553 <p>
554 </p>
555 <table border="1" width="100%">
556 <tr>
557 <th width="10%">NAME</th>
558 <th width="8%">TYPE</th>
559 <th width="4%">VALUE</th>
560 <th>DESCRIPTION</th>
561 <th width="10%">GUARD</th>
562 </tr>
563 <tr>
564 <td>JAPANESE</td>
565 <td></td>
566 <td>0 </td>
567 <td>
568
569  
570 </td>
571 <td>
572 <b></b>
573  
574 </td>
575 </tr>
576 <tr>
577 <td>CHINESE </td>
578 <td></td>
579 <td>1 </td>
580 <td>
581
582  
583 </td>
584 <td>
585 <b></b>
586  
587 </td>
588 </tr>
589 <tr>
590 <td>AGA</td>
591 <td></td>
592 <td>2 </td>
593 <td>
594
595  
596 </td>
597 <td>
598 <b></b>
599  
600 </td>
601 </tr>
602 <tr>
603 <td>NEW_ZEALAND</td>
604 <td></td>
605 <td>3 </td>
606 <td>
607
608  
609 </td>
610 <td>
611 <b></b>
612  
613 </td>
614 </tr>
615 </table>
616
617 <h4>enum: TIMESYS</h4>
618 <p>
619 </p>
620 <table border="1" width="100%">
621 <tr>
622 <th width="10%">NAME</th>
623 <th width="8%">TYPE</th>
624 <th width="4%">VALUE</th>
625 <th>DESCRIPTION</th>
626 <th width="10%">GUARD</th>
627 </tr>
628 <tr>
629 <td>NONE</td>
630 <td></td>
631 <td>0 </td>
632 <td>
633
634  
635 </td>
636 <td>
637 <b></b>
638  
639 </td>
640 </tr>
641 <tr>
642 <td>ABSOLUTE</td>
643 <td></td>
644 <td>1 </td>
645 <td>
646
647  
648 </td>
649 <td>
650 <b></b>
651  
652 </td>
653 </tr>
654 <tr>
655 <td>BYO_YOMI</td>
656 <td></td>
657 <td>2 </td>
658 <td>
659
660  
661 </td>
662 <td>
663 <b></b>
664  
665 </td>
666 </tr>
667 <tr>
668 <td>CANADIAN</td>
669 <td></td>
670 <td>3 </td>
671 <td>
672
673  
674 </td>
675 <td>
676 <b></b>
677  
678 </td>
679 </tr>
680 </table>
681
682 <h4>enum: COLOUR</h4>
683 <p>
684 <p>Convinience constants used in several places.</p>
685 </p>
686 <table border="1" width="100%">
687 <tr>
688 <th width="10%">NAME</th>
689 <th width="8%">TYPE</th>
690 <th width="4%">VALUE</th>
691 <th>DESCRIPTION</th>
692 <th width="10%">GUARD</th>
693 </tr>
694 <tr>
695 <td>BLACK</td>
696 <td></td>
697 <td>0 </td>
698 <td>
699
700  
701 </td>
702 <td>
703 <b></b>
704  
705 </td>
706 </tr>
707 <tr>
708 <td>WHITE</td>
709 <td></td>
710 <td>1 </td>
711 <td>
712
713  
714 </td>
715 <td>
716 <b></b>
717  
718 </td>
719 </tr>
720 </table>
721
722 <h2>Structs used in send &amp; receive messages</h2>
723
724 <h4>STRUCTURE user</h4>
725 CLASS: KGS::User<br />
726 <p>
727
728 <p>Everywhere a user + flags is required, even used in some places
729 where only a username is required. I see no general rule on when a
730 complete user and when a partial user is required.</p>
731 </p>
732 <table border="1" width="100%">
733 <tr>
734 <th width="10%">NAME</th>
735 <th width="8%">TYPE</th>
736 <th width="4%">VALUE</th>
737 <th>DESCRIPTION</th>
738 <th width="10%">GUARD</th>
739 </tr>
740 <tr>
741 <td>name</td>
742 <td>username</td>
743 <td> </td>
744 <td>
745
746  
747 </td>
748 <td>
749 <b></b>
750  
751 </td>
752 </tr>
753 <tr>
754 <td>flags</td>
755 <td>U32</td>
756 <td>1 </td>
757 <td>
758
759  
760 </td>
761 <td>
762 <b></b>
763  
764 </td>
765 </tr>
766 </table>
767
768 <h4>STRUCTURE rules</h4>
769 CLASS: KGS::Rules<br />
770 <p>
771
772 <p>This structure is used for challanges as well as in the special
773 TREE "subprotocol". It tightly encodes the game parameters.</p>
774 </p>
775 <table border="1" width="100%">
776 <tr>
777 <th width="10%">NAME</th>
778 <th width="8%">TYPE</th>
779 <th width="4%">VALUE</th>
780 <th>DESCRIPTION</th>
781 <th width="10%">GUARD</th>
782 </tr>
783 <tr>
784 <td>ruleset</td>
785 <td>U8</td>
786 <td> </td>
787 <td>
788
789  
790 </td>
791 <td>
792 <b></b>
793  
794 </td>
795 </tr>
796 <tr>
797 <td>size</td>
798 <td>U8</td>
799 <td> </td>
800 <td>
801
802  
803 </td>
804 <td>
805 <b></b>
806  
807 </td>
808 </tr>
809 <tr>
810 <td>handicap</td>
811 <td>U8</td>
812 <td> </td>
813 <td>
814
815  
816 </td>
817 <td>
818 <b></b>
819  
820 </td>
821 </tr>
822 <tr>
823 <td>komi</td>
824 <td>komi16</td>
825 <td> </td>
826 <td>
827
828  
829 </td>
830 <td>
831 <b></b>
832  
833 </td>
834 </tr>
835 <tr>
836 <td>timesys</td>
837 <td>U8</td>
838 <td> </td>
839 <td>
840
841  
842 </td>
843 <td>
844 <b></b>
845  
846 </td>
847 </tr>
848 <tr>
849 <td>time</td>
850 <td>U32</td>
851 <td> </td>
852 <td>
853
854  
855 </td>
856 <td>
857 <b></b>
858  
859 </td>
860 </tr>
861 <tr>
862 <td>interval</td>
863 <td>U32</td>
864 <td> </td>
865 <td>
866 byo-yomi time / canadian time
867
868  
869 </td>
870 <td>
871 <b></b>
872  
873 </td>
874 </tr>
875 <tr>
876 <td>count</td>
877 <td>U16</td>
878 <td> </td>
879 <td>
880 periods / moves
881
882  
883 </td>
884 <td>
885 <b></b>
886  
887 </td>
888 </tr>
889 </table>
890
891 <h2>Structs used in messages from the client</h2>
892
893 <h2>Client-generated messages</h2>
894
895 <h4>
896 <a name="C0000"></a>ORIGIN: CLIENT;
897 MESSAGE: login</h4>
898 NUMERIC TYPE (hex): 0000<p>
899
900 <p>Sent to login, usually the first message sent. The password needs to be set when the
901 guest flag is true.
902 Possible replies: <a href="#S0001">login(0001)</a>
903 <a href="#S0002">login(0002)</a>
904 <a href="#S0003">login(0003)</a>
905 <a href="#S0004">login(0004)</a>
906 <a href="#S0005">login(0005)</a>
907 <a href="#S0006">login(0006)</a>
908 <a href="#S0018">login(0018)</a>
909 <a href="#S0022">login(0022)</a>. Followed by: <a href="#S001b">timewarning_default(001b)</a> <a href="#S0411">chal_defaults(0411)</a>
910 </p>
911 </p>
912 <table border="1" width="100%">
913 <tr>
914 <th width="10%">NAME</th>
915 <th width="8%">TYPE</th>
916 <th width="4%">VALUE</th>
917 <th>DESCRIPTION</th>
918 <th width="10%">GUARD</th>
919 </tr>
920 <tr>
921 <td>ver_major</td>
922 <td>U32</td>
923 <td>2 </td>
924 <td>
925
926  
927 </td>
928 <td>
929 <b></b>
930  
931 </td>
932 </tr>
933 <tr>
934 <td>ver_minor</td>
935 <td>U32</td>
936 <td>5 </td>
937 <td>
938
939  
940 </td>
941 <td>
942 <b></b>
943  
944 </td>
945 </tr>
946 <tr>
947 <td>ver_micro</td>
948 <td>U32</td>
949 <td>1 </td>
950 <td>
951
952  
953 </td>
954 <td>
955 <b></b>
956  
957 </td>
958 </tr>
959 <tr>
960 <td>name</td>
961 <td>username</td>
962 <td> </td>
963 <td>
964
965  
966 </td>
967 <td>
968 <b></b>
969  
970 </td>
971 </tr>
972 <tr>
973 <td>password</td>
974 <td>password</td>
975 <td>0 </td>
976 <td>
977
978  
979 </td>
980 <td>
981 <b></b>
982  
983 </td>
984 </tr>
985 <tr>
986 <td>guest</td>
987 <td>flag</td>
988 <td>1 </td>
989 <td>
990
991  
992 </td>
993 <td>
994 <b></b>
995  
996 </td>
997 </tr>
998 <tr>
999 <td>_unknown3</td>
1000 <td>U16</td>
1001 <td>0 </td>
1002 <td>
1003
1004  
1005 </td>
1006 <td>
1007 <b></b>
1008  
1009 </td>
1010 </tr>
1011 <tr>
1012 <td>locale</td>
1013 <td>locale</td>
1014 <td>"en_US" </td>
1015 <td>
1016
1017  
1018 </td>
1019 <td>
1020 <b></b>
1021  
1022 </td>
1023 </tr>
1024 <tr>
1025 <td>clientver</td>
1026 <td>DATA</td>
1027 <td>"1.4.1_01:Swing app:Sun Microsystems Inc." </td>
1028 <td>
1029 The "default" is the java vm version, not exactly he client version. However,
1030 you should always send a text like "Jonathan's C client bersion 0.6" or somesuch,
1031 so the server can, if necessary, block broken clients or client versions.
1032
1033  
1034 </td>
1035 <td>
1036 <b></b>
1037  
1038 </td>
1039 </tr>
1040 </table>
1041
1042 <h4>
1043 <a name="C0007"></a>ORIGIN: CLIENT;
1044 MESSAGE: req_userinfo</h4>
1045 NUMERIC TYPE (hex): 0007<p>
1046 <p>Request info about a certain user. Possible reply: <a href="#S0008">userinfo(0008)</a>
1047 </p>
1048 </p>
1049 <table border="1" width="100%">
1050 <tr>
1051 <th width="10%">NAME</th>
1052 <th width="8%">TYPE</th>
1053 <th width="4%">VALUE</th>
1054 <th>DESCRIPTION</th>
1055 <th width="10%">GUARD</th>
1056 </tr>
1057 <tr>
1058 <td>name</td>
1059 <td>username</td>
1060 <td> </td>
1061 <td>
1062
1063  
1064 </td>
1065 <td>
1066 <b></b>
1067  
1068 </td>
1069 </tr>
1070 </table>
1071
1072 <h4>
1073 <a name="C0007"></a>ORIGIN: CLIENT;
1074 MESSAGE: update_userinfo</h4>
1075 NUMERIC TYPE (hex): 0007<p>
1076 <p>Update user info. Message structure is very similar
1077 to <a href="#S0008">userinfo(0008)</a>.</p>
1078 </p>
1079 <table border="1" width="100%">
1080 <tr>
1081 <th width="10%">NAME</th>
1082 <th width="8%">TYPE</th>
1083 <th width="4%">VALUE</th>
1084 <th>DESCRIPTION</th>
1085 <th width="10%">GUARD</th>
1086 </tr>
1087 <tr>
1088 <td>setpass</td>
1089 <td>flag</td>
1090 <td> </td>
1091 <td>
1092 Should the password be updated?
1093
1094  
1095 </td>
1096 <td>
1097 <b></b>
1098  
1099 </td>
1100 </tr>
1101 <tr>
1102 <td>password</td>
1103 <td>password</td>
1104 <td>0 </td>
1105 <td>
1106
1107  
1108 </td>
1109 <td>
1110 <b></b>
1111  
1112 </td>
1113 </tr>
1114 <tr>
1115 <td>realname</td>
1116 <td>realname</td>
1117 <td> </td>
1118 <td>
1119
1120  
1121 </td>
1122 <td>
1123 <b></b>
1124  
1125 </td>
1126 </tr>
1127 <tr>
1128 <td>email</td>
1129 <td>email</td>
1130 <td> </td>
1131 <td>
1132
1133  
1134 </td>
1135 <td>
1136 <b></b>
1137  
1138 </td>
1139 </tr>
1140 <tr>
1141 <td>info</td>
1142 <td>userinfo</td>
1143 <td> </td>
1144 <td>
1145
1146  
1147 </td>
1148 <td>
1149 <b></b>
1150  
1151 </td>
1152 </tr>
1153 <tr>
1154 <td>homepage</td>
1155 <td>url</td>
1156 <td> </td>
1157 <td>
1158
1159  
1160 </td>
1161 <td>
1162 <b></b>
1163  
1164 </td>
1165 </tr>
1166 <tr>
1167 <td>_unused</td>
1168 <td>U64</td>
1169 <td>0 </td>
1170 <td>
1171
1172  
1173 </td>
1174 <td>
1175 <b></b>
1176  
1177 </td>
1178 </tr>
1179 <tr>
1180 <td>_unused</td>
1181 <td>U64</td>
1182 <td>0 </td>
1183 <td>
1184
1185  
1186 </td>
1187 <td>
1188 <b></b>
1189  
1190 </td>
1191 </tr>
1192 </table>
1193
1194 <h4>
1195 <a name="C0013"></a>ORIGIN: CLIENT;
1196 MESSAGE: msg_chat</h4>
1197 NUMERIC TYPE (hex): 0013<p>
1198 <p>This message is sent to initiate or continue a private chat with
1199 a user. You'll always receive a copy of what you have sent back
1200 from the server (as usual).</p>
1201 </p>
1202 <table border="1" width="100%">
1203 <tr>
1204 <th width="10%">NAME</th>
1205 <th width="8%">TYPE</th>
1206 <th width="4%">VALUE</th>
1207 <th>DESCRIPTION</th>
1208 <th width="10%">GUARD</th>
1209 </tr>
1210 <tr>
1211 <td>name</td>
1212 <td>username</td>
1213 <td> </td>
1214 <td>
1215 Name of sender ("yourself").
1216
1217  
1218 </td>
1219 <td>
1220 <b></b>
1221  
1222 </td>
1223 </tr>
1224 <tr>
1225 <td>name2</td>
1226 <td>username</td>
1227 <td> </td>
1228 <td>
1229 Name of recipient.
1230
1231  
1232 </td>
1233 <td>
1234 <b></b>
1235  
1236 </td>
1237 </tr>
1238 <tr>
1239 <td>message</td>
1240 <td>STRING</td>
1241 <td> </td>
1242 <td>
1243 The message.
1244
1245  
1246 </td>
1247 <td>
1248 <b></b>
1249  
1250 </td>
1251 </tr>
1252 </table>
1253
1254 <h4>
1255 <a name="C0014"></a>ORIGIN: CLIENT;
1256 MESSAGE: req_stats</h4>
1257 NUMERIC TYPE (hex): 0014<p>
1258 <p>Request server statistics. Replied with <a href="#S0015">stats(0015)</a>
1259 </p>
1260 </p>
1261 <table border="1" width="100%">
1262 <tr>
1263 <th width="10%">NAME</th>
1264 <th width="8%">TYPE</th>
1265 <th width="4%">VALUE</th>
1266 <th>DESCRIPTION</th>
1267 <th width="10%">GUARD</th>
1268 </tr>
1269 </table>
1270
1271 <h4>
1272 <a name="C0016"></a>ORIGIN: CLIENT;
1273 MESSAGE: idle_reset</h4>
1274 NUMERIC TYPE (hex): 0016<p>
1275 <p>Send in response to <a href="#S0016">idle_warn(0016)</a> to keep the server from disconnecting.</p>
1276 </p>
1277 <table border="1" width="100%">
1278 <tr>
1279 <th width="10%">NAME</th>
1280 <th width="8%">TYPE</th>
1281 <th width="4%">VALUE</th>
1282 <th>DESCRIPTION</th>
1283 <th width="10%">GUARD</th>
1284 </tr>
1285 </table>
1286
1287 <h4>
1288 <a name="C001d"></a>ORIGIN: CLIENT;
1289 MESSAGE: ping</h4>
1290 NUMERIC TYPE (hex): 001d<p>
1291 <p>Wild guess, I send it in <a href="#S0016">idle_warn(0016)</a>.</p>
1292 </p>
1293 <table border="1" width="100%">
1294 <tr>
1295 <th width="10%">NAME</th>
1296 <th width="8%">TYPE</th>
1297 <th width="4%">VALUE</th>
1298 <th>DESCRIPTION</th>
1299 <th width="10%">GUARD</th>
1300 </tr>
1301 </table>
1302
1303 <h4>
1304 <a name="C001e"></a>ORIGIN: CLIENT;
1305 MESSAGE: req_usergraph</h4>
1306 NUMERIC TYPE (hex): 001e<p>
1307 <p>Request user graph data, replied with <a href="#S001e">usergraph(001e)</a>.</p>
1308 </p>
1309 <table border="1" width="100%">
1310 <tr>
1311 <th width="10%">NAME</th>
1312 <th width="8%">TYPE</th>
1313 <th width="4%">VALUE</th>
1314 <th>DESCRIPTION</th>
1315 <th width="10%">GUARD</th>
1316 </tr>
1317 <tr>
1318 <td>name</td>
1319 <td>username</td>
1320 <td> </td>
1321 <td>
1322
1323  
1324 </td>
1325 <td>
1326 <b></b>
1327  
1328 </td>
1329 </tr>
1330 </table>
1331
1332 <h4>
1333 <a name="C001f"></a>ORIGIN: CLIENT;
1334 MESSAGE: fetch_memos</h4>
1335 NUMERIC TYPE (hex): 001f<p>
1336 <p>Unclear. Fetch all outstanding memos? Replied with <a href="#S001f">memo(001f)</a>
1337 </p>
1338 </p>
1339 <table border="1" width="100%">
1340 <tr>
1341 <th width="10%">NAME</th>
1342 <th width="8%">TYPE</th>
1343 <th width="4%">VALUE</th>
1344 <th>DESCRIPTION</th>
1345 <th width="10%">GUARD</th>
1346 </tr>
1347 </table>
1348
1349 <h4>
1350 <a name="C0021"></a>ORIGIN: CLIENT;
1351 MESSAGE: req_pic</h4>
1352 NUMERIC TYPE (hex): 0021<p>
1353 <p>Request a user picture from the server. Results in a <a href="#S0021">userpic(0021)</a>
1354 or a timeout.</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 <tr>
1365 <td>name</td>
1366 <td>username</td>
1367 <td> </td>
1368 <td>
1369
1370  
1371 </td>
1372 <td>
1373 <b></b>
1374  
1375 </td>
1376 </tr>
1377 </table>
1378
1379 <h4>
1380 <a name="C0021"></a>ORIGIN: CLIENT;
1381 MESSAGE: upload_pic</h4>
1382 NUMERIC TYPE (hex): 0021<p>
1383 Same code as pic_req, but with an additional data section that
1384 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels.
1385 </p>
1386 <table border="1" width="100%">
1387 <tr>
1388 <th width="10%">NAME</th>
1389 <th width="8%">TYPE</th>
1390 <th width="4%">VALUE</th>
1391 <th>DESCRIPTION</th>
1392 <th width="10%">GUARD</th>
1393 </tr>
1394 <tr>
1395 <td>name</td>
1396 <td>username</td>
1397 <td> </td>
1398 <td>
1399
1400  
1401 </td>
1402 <td>
1403 <b></b>
1404  
1405 </td>
1406 </tr>
1407 <tr>
1408 <td>data</td>
1409 <td>DATA</td>
1410 <td> </td>
1411 <td>
1412
1413  
1414 </td>
1415 <td>
1416 <b></b>
1417  
1418 </td>
1419 </tr>
1420 </table>
1421
1422 <h4>
1423 <a name="C0023"></a>ORIGIN: CLIENT;
1424 MESSAGE: send_memo</h4>
1425 NUMERIC TYPE (hex): 0023<p>
1426 </p>
1427 <table border="1" width="100%">
1428 <tr>
1429 <th width="10%">NAME</th>
1430 <th width="8%">TYPE</th>
1431 <th width="4%">VALUE</th>
1432 <th>DESCRIPTION</th>
1433 <th width="10%">GUARD</th>
1434 </tr>
1435 <tr>
1436 <td>name</td>
1437 <td>username</td>
1438 <td> </td>
1439 <td>
1440
1441  
1442 </td>
1443 <td>
1444 <b></b>
1445  
1446 </td>
1447 </tr>
1448 <tr>
1449 <td>msg</td>
1450 <td>STRING</td>
1451 <td> </td>
1452 <td>
1453
1454  
1455 </td>
1456 <td>
1457 <b></b>
1458  
1459 </td>
1460 </tr>
1461 </table>
1462
1463 <h4>
1464 <a name="C0100"></a>ORIGIN: CLIENT;
1465 MESSAGE: gnotice</h4>
1466 NUMERIC TYPE (hex): 0100<p>
1467 <p>Send a global message. Maybe. Never tried, for obvious reasons :/. Results
1468 in a <a href="#S0100">gnotice(0100)</a> sent to all users.</p>
1469 </p>
1470 <table border="1" width="100%">
1471 <tr>
1472 <th width="10%">NAME</th>
1473 <th width="8%">TYPE</th>
1474 <th width="4%">VALUE</th>
1475 <th>DESCRIPTION</th>
1476 <th width="10%">GUARD</th>
1477 </tr>
1478 <tr>
1479 <td>notice</td>
1480 <td>STRING</td>
1481 <td> </td>
1482 <td>
1483
1484  
1485 </td>
1486 <td>
1487 <b></b>
1488  
1489 </td>
1490 </tr>
1491 </table>
1492
1493 <h4>
1494 <a name="C0200"></a>ORIGIN: CLIENT;
1495 MESSAGE: notify_add</h4>
1496 NUMERIC TYPE (hex): 0200<p>
1497
1498 <p>Probably setting a notifier on a username, to get informed about
1499 changes using messages. sending your own
1500 username gives you a disconnect, so don't do that at home, kids!</p>
1501 </p>
1502 <table border="1" width="100%">
1503 <tr>
1504 <th width="10%">NAME</th>
1505 <th width="8%">TYPE</th>
1506 <th width="4%">VALUE</th>
1507 <th>DESCRIPTION</th>
1508 <th width="10%">GUARD</th>
1509 </tr>
1510 <tr>
1511 <td>name</td>
1512 <td>username</td>
1513 <td> </td>
1514 <td>
1515
1516  
1517 </td>
1518 <td>
1519 <b></b>
1520  
1521 </td>
1522 </tr>
1523 </table>
1524
1525 <h4>
1526 <a name="C0201"></a>ORIGIN: CLIENT;
1527 MESSAGE: notify_del</h4>
1528 NUMERIC TYPE (hex): 0201<p>
1529
1530 <p>Probably remove the notifier again.</p>
1531 </p>
1532 <table border="1" width="100%">
1533 <tr>
1534 <th width="10%">NAME</th>
1535 <th width="8%">TYPE</th>
1536 <th width="4%">VALUE</th>
1537 <th>DESCRIPTION</th>
1538 <th width="10%">GUARD</th>
1539 </tr>
1540 <tr>
1541 <td>name</td>
1542 <td>username</td>
1543 <td> </td>
1544 <td>
1545
1546  
1547 </td>
1548 <td>
1549 <b></b>
1550  
1551 </td>
1552 </tr>
1553 </table>
1554
1555 <h4>
1556 <a name="C0318"></a>ORIGIN: CLIENT;
1557 MESSAGE: list_rooms</h4>
1558 NUMERIC TYPE (hex): 0318<p>
1559 <p>List the rooms in a specific group/category. Results in a <a href="#S0318">upd_rooms(0318)</a> message.</p>
1560 </p>
1561 <table border="1" width="100%">
1562 <tr>
1563 <th width="10%">NAME</th>
1564 <th width="8%">TYPE</th>
1565 <th width="4%">VALUE</th>
1566 <th>DESCRIPTION</th>
1567 <th width="10%">GUARD</th>
1568 </tr>
1569 <tr>
1570 <td>group</td>
1571 <td>U8</td>
1572 <td> </td>
1573 <td>
1574
1575  
1576 </td>
1577 <td>
1578 <b></b>
1579  
1580 </td>
1581 </tr>
1582 </table>
1583
1584 <h4>
1585 <a name="C031a"></a>ORIGIN: CLIENT;
1586 MESSAGE: new_room</h4>
1587 NUMERIC TYPE (hex): 031a<p>
1588 Create a new room. Not verified.
1589 </p>
1590 <table border="1" width="100%">
1591 <tr>
1592 <th width="10%">NAME</th>
1593 <th width="8%">TYPE</th>
1594 <th width="4%">VALUE</th>
1595 <th>DESCRIPTION</th>
1596 <th width="10%">GUARD</th>
1597 </tr>
1598 <tr>
1599 <td>name</td>
1600 <td>username</td>
1601 <td> </td>
1602 <td>
1603
1604  
1605 </td>
1606 <td>
1607 <b></b>
1608  
1609 </td>
1610 </tr>
1611 <tr>
1612 <td>i1</td>
1613 <td>U32</td>
1614 <td>0 </td>
1615 <td>
1616
1617  
1618 </td>
1619 <td>
1620 <b></b>
1621  
1622 </td>
1623 </tr>
1624 <tr>
1625 <td>b1</td>
1626 <td>U8</td>
1627 <td>0 </td>
1628 <td>
1629
1630  
1631 </td>
1632 <td>
1633 <b></b>
1634  
1635 </td>
1636 </tr>
1637 <tr>
1638 <td>b2</td>
1639 <td>U8</td>
1640 <td>255 </td>
1641 <td>
1642
1643  
1644 </td>
1645 <td>
1646 <b></b>
1647  
1648 </td>
1649 </tr>
1650 <tr>
1651 <td>b3</td>
1652 <td>U8</td>
1653 <td>255 </td>
1654 <td>
1655
1656  
1657 </td>
1658 <td>
1659 <b></b>
1660  
1661 </td>
1662 </tr>
1663 <tr>
1664 <td>group</td>
1665 <td>U8</td>
1666 <td>1 </td>
1667 <td>
1668
1669  
1670 </td>
1671 <td>
1672 <b></b>
1673  
1674 </td>
1675 </tr>
1676 <tr>
1677 <td>name</td>
1678 <td>STRING</td>
1679 <td> </td>
1680 <td>
1681
1682  
1683 </td>
1684 <td>
1685 <b></b>
1686  
1687 </td>
1688 </tr>
1689 <tr>
1690 <td>description</td>
1691 <td>STRING</td>
1692 <td> </td>
1693 <td>
1694
1695  
1696 </td>
1697 <td>
1698 <b></b>
1699  
1700 </td>
1701 </tr>
1702 <tr>
1703 <td>flags</td>
1704 <td>U8</td>
1705 <td> </td>
1706 <td>
1707 0x10 .. private room etc.. see code
1708
1709  
1710 </td>
1711 <td>
1712 <b></b>
1713  
1714 </td>
1715 </tr>
1716 </table>
1717
1718 <h4>
1719 <a name="C0413"></a>ORIGIN: CLIENT;
1720 MESSAGE: req_game_record</h4>
1721 NUMERIC TYPE (hex): 0413<p>
1722 <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>
1723 </p>
1724 <table border="1" width="100%">
1725 <tr>
1726 <th width="10%">NAME</th>
1727 <th width="8%">TYPE</th>
1728 <th width="4%">VALUE</th>
1729 <th>DESCRIPTION</th>
1730 <th width="10%">GUARD</th>
1731 </tr>
1732 <tr>
1733 <td>name</td>
1734 <td>username</td>
1735 <td> </td>
1736 <td>
1737
1738  
1739 </td>
1740 <td>
1741 <b></b>
1742  
1743 </td>
1744 </tr>
1745 <tr>
1746 <td>timestamp</td>
1747 <td>timestamp</td>
1748 <td> </td>
1749 <td>
1750 If zero, start at the newest games, else only send games
1751 before the given timestap.
1752
1753  
1754 </td>
1755 <td>
1756 <b></b>
1757  
1758 </td>
1759 </tr>
1760 </table>
1761
1762 <h4>
1763 <a name="C4300"></a>ORIGIN: CLIENT;
1764 MESSAGE: join_room</h4>
1765 NUMERIC TYPE (hex): 4300<p>
1766 <p>Joins the given room. <a href="#S4300">join_room(4300)</a> messages for yourself
1767 and all users in that room, as well as the initial gamelist, are
1768 send if the room exists. If not, timeout...</p>
1769 </p>
1770 <table border="1" width="100%">
1771 <tr>
1772 <th width="10%">NAME</th>
1773 <th width="8%">TYPE</th>
1774 <th width="4%">VALUE</th>
1775 <th>DESCRIPTION</th>
1776 <th width="10%">GUARD</th>
1777 </tr>
1778 <tr>
1779 <td>channel</td>
1780 <td>U16</td>
1781 <td> </td>
1782 <td>
1783
1784  
1785 </td>
1786 <td>
1787 <b></b>
1788  
1789 </td>
1790 </tr>
1791 <tr>
1792 <td>user</td>
1793 <td>user</td>
1794 <td> </td>
1795 <td>
1796
1797  
1798 </td>
1799 <td>
1800 <b></b>
1801  
1802 </td>
1803 </tr>
1804 </table>
1805
1806 <h4>
1807 <a name="C4301"></a>ORIGIN: CLIENT;
1808 MESSAGE: msg_room</h4>
1809 NUMERIC TYPE (hex): 4301<p>
1810 Send a message to the room.
1811 </p>
1812 <table border="1" width="100%">
1813 <tr>
1814 <th width="10%">NAME</th>
1815 <th width="8%">TYPE</th>
1816 <th width="4%">VALUE</th>
1817 <th>DESCRIPTION</th>
1818 <th width="10%">GUARD</th>
1819 </tr>
1820 <tr>
1821 <td>channel</td>
1822 <td>U16</td>
1823 <td> </td>
1824 <td>
1825
1826  
1827 </td>
1828 <td>
1829 <b></b>
1830  
1831 </td>
1832 </tr>
1833 <tr>
1834 <td>name</td>
1835 <td>username</td>
1836 <td> </td>
1837 <td>
1838 Must be the login-name of the user.
1839
1840  
1841 </td>
1842 <td>
1843 <b></b>
1844  
1845 </td>
1846 </tr>
1847 <tr>
1848 <td>message</td>
1849 <td>STRING</td>
1850 <td> </td>
1851 <td>
1852
1853  
1854 </td>
1855 <td>
1856 <b></b>
1857  
1858 </td>
1859 </tr>
1860 </table>
1861
1862 <h4>
1863 <a name="C4302"></a>ORIGIN: CLIENT;
1864 MESSAGE: part_room</h4>
1865 NUMERIC TYPE (hex): 4302<p>
1866 Remove yourself (or maybe others as admin) from a room.
1867 </p>
1868 <table border="1" width="100%">
1869 <tr>
1870 <th width="10%">NAME</th>
1871 <th width="8%">TYPE</th>
1872 <th width="4%">VALUE</th>
1873 <th>DESCRIPTION</th>
1874 <th width="10%">GUARD</th>
1875 </tr>
1876 <tr>
1877 <td>channel</td>
1878 <td>U16</td>
1879 <td> </td>
1880 <td>
1881
1882  
1883 </td>
1884 <td>
1885 <b></b>
1886  
1887 </td>
1888 </tr>
1889 <tr>
1890 <td>name</td>
1891 <td>username</td>
1892 <td> </td>
1893 <td>
1894
1895  
1896 </td>
1897 <td>
1898 <b></b>
1899  
1900 </td>
1901 </tr>
1902 </table>
1903
1904 <h4>
1905 <a name="C4305"></a>ORIGIN: CLIENT;
1906 MESSAGE: new_game</h4>
1907 NUMERIC TYPE (hex): 4305<p>
1908 Unclear. Start a new game.
1909 </p>
1910 <table border="1" width="100%">
1911 <tr>
1912 <th width="10%">NAME</th>
1913 <th width="8%">TYPE</th>
1914 <th width="4%">VALUE</th>
1915 <th>DESCRIPTION</th>
1916 <th width="10%">GUARD</th>
1917 </tr>
1918 <tr>
1919 <td>channel</td>
1920 <td>U16</td>
1921 <td> </td>
1922 <td>
1923
1924  
1925 </td>
1926 <td>
1927 <b></b>
1928  
1929 </td>
1930 </tr>
1931 <tr>
1932 <td>id</td>
1933 <td>U16</td>
1934 <td> </td>
1935 <td>
1936
1937  
1938 </td>
1939 <td>
1940 <b></b>
1941  
1942 </td>
1943 </tr>
1944 <tr>
1945 <td>gametype</td>
1946 <td>U32</td>
1947 <td> </td>
1948 <td>
1949
1950  
1951 </td>
1952 <td>
1953 <b></b>
1954  
1955 </td>
1956 </tr>
1957 <tr>
1958 <td>rules</td>
1959 <td>rules</td>
1960 <td> </td>
1961 <td>
1962
1963  
1964 </td>
1965 <td>
1966 <b></b>
1967  
1968 </td>
1969 </tr>
1970 <tr>
1971 <td>notes</td>
1972 <td>STRING</td>
1973 <td> </td>
1974 <td>
1975
1976  
1977 </td>
1978 <td>
1979 <b></b>
1980  
1981 </td>
1982 </tr>
1983 </table>
1984
1985 <h4>
1986 <a name="C430b"></a>ORIGIN: CLIENT;
1987 MESSAGE: req_games</h4>
1988 NUMERIC TYPE (hex): 430b<p>
1989 Request to update room game list (send this once per minute to get
1990 updated). Results in upd_games messages.
1991 </p>
1992 <table border="1" width="100%">
1993 <tr>
1994 <th width="10%">NAME</th>
1995 <th width="8%">TYPE</th>
1996 <th width="4%">VALUE</th>
1997 <th>DESCRIPTION</th>
1998 <th width="10%">GUARD</th>
1999 </tr>
2000 <tr>
2001 <td>channel</td>
2002 <td>U16</td>
2003 <td> </td>
2004 <td>
2005
2006  
2007 </td>
2008 <td>
2009 <b></b>
2010  
2011 </td>
2012 </tr>
2013 </table>
2014
2015 <h4>
2016 <a name="C4319"></a>ORIGIN: CLIENT;
2017 MESSAGE: req_desc</h4>
2018 NUMERIC TYPE (hex): 4319<p>
2019 Request room description.
2020 </p>
2021 <table border="1" width="100%">
2022 <tr>
2023 <th width="10%">NAME</th>
2024 <th width="8%">TYPE</th>
2025 <th width="4%">VALUE</th>
2026 <th>DESCRIPTION</th>
2027 <th width="10%">GUARD</th>
2028 </tr>
2029 <tr>
2030 <td>channel</td>
2031 <td>U16</td>
2032 <td> </td>
2033 <td>
2034
2035  
2036 </td>
2037 <td>
2038 <b></b>
2039  
2040 </td>
2041 </tr>
2042 </table>
2043
2044 <h4>
2045 <a name="C4400"></a>ORIGIN: CLIENT;
2046 MESSAGE: send_challenge</h4>
2047 NUMERIC TYPE (hex): 4400<p>
2048 Unclear.
2049 </p>
2050 <table border="1" width="100%">
2051 <tr>
2052 <th width="10%">NAME</th>
2053 <th width="8%">TYPE</th>
2054 <th width="4%">VALUE</th>
2055 <th>DESCRIPTION</th>
2056 <th width="10%">GUARD</th>
2057 </tr>
2058 <tr>
2059 <td>channel</td>
2060 <td>U16</td>
2061 <td> </td>
2062 <td>
2063
2064  
2065 </td>
2066 <td>
2067 <b></b>
2068  
2069 </td>
2070 </tr>
2071 <tr>
2072 <td>black</td>
2073 <td>username</td>
2074 <td> </td>
2075 <td>
2076
2077  
2078 </td>
2079 <td>
2080 <b></b>
2081  
2082 </td>
2083 </tr>
2084 <tr>
2085 <td>white</td>
2086 <td>username</td>
2087 <td> </td>
2088 <td>
2089 More following... TREE or challenge.
2090
2091  
2092 </td>
2093 <td>
2094 <b></b>
2095  
2096 </td>
2097 </tr>
2098 </table>
2099
2100 <h4>
2101 <a name="C4403"></a>ORIGIN: CLIENT;
2102 MESSAGE: join_game</h4>
2103 NUMERIC TYPE (hex): 4403<p>
2104 Join a game. See join_room.
2105 </p>
2106 <table border="1" width="100%">
2107 <tr>
2108 <th width="10%">NAME</th>
2109 <th width="8%">TYPE</th>
2110 <th width="4%">VALUE</th>
2111 <th>DESCRIPTION</th>
2112 <th width="10%">GUARD</th>
2113 </tr>
2114 <tr>
2115 <td>channel</td>
2116 <td>U16</td>
2117 <td> </td>
2118 <td>
2119
2120  
2121 </td>
2122 <td>
2123 <b></b>
2124  
2125 </td>
2126 </tr>
2127 <tr>
2128 <td>user</td>
2129 <td>user</td>
2130 <td> </td>
2131 <td>
2132
2133  
2134 </td>
2135 <td>
2136 <b></b>
2137  
2138 </td>
2139 </tr>
2140 </table>
2141
2142 <h4>
2143 <a name="C4404"></a>ORIGIN: CLIENT;
2144 MESSAGE: part_game</h4>
2145 NUMERIC TYPE (hex): 4404<p>
2146 Leave (or kick as admin?) a certain user from a game.
2147 </p>
2148 <table border="1" width="100%">
2149 <tr>
2150 <th width="10%">NAME</th>
2151 <th width="8%">TYPE</th>
2152 <th width="4%">VALUE</th>
2153 <th>DESCRIPTION</th>
2154 <th width="10%">GUARD</th>
2155 </tr>
2156 <tr>
2157 <td>channel</td>
2158 <td>U16</td>
2159 <td> </td>
2160 <td>
2161
2162  
2163 </td>
2164 <td>
2165 <b></b>
2166  
2167 </td>
2168 </tr>
2169 <tr>
2170 <td>name</td>
2171 <td>username</td>
2172 <td> </td>
2173 <td>
2174
2175  
2176 </td>
2177 <td>
2178 <b></b>
2179  
2180 </td>
2181 </tr>
2182 </table>
2183
2184 <h4>
2185 <a name="C4405"></a>ORIGIN: CLIENT;
2186 MESSAGE: set_tree</h4>
2187 NUMERIC TYPE (hex): 4405<p>
2188 Possibly upload an initial game to an empty room. Not tested.
2189
2190 </p>
2191 <table border="1" width="100%">
2192 <tr>
2193 <th width="10%">NAME</th>
2194 <th width="8%">TYPE</th>
2195 <th width="4%">VALUE</th>
2196 <th>DESCRIPTION</th>
2197 <th width="10%">GUARD</th>
2198 </tr>
2199 <tr>
2200 <td>channel</td>
2201 <td>U16</td>
2202 <td> </td>
2203 <td>
2204
2205  
2206 </td>
2207 <td>
2208 <b></b>
2209  
2210 </td>
2211 </tr>
2212 <tr>
2213 <td>tree</td>
2214 <td>TREE</td>
2215 <td> </td>
2216 <td>
2217
2218  
2219 </td>
2220 <td>
2221 <b></b>
2222  
2223 </td>
2224 </tr>
2225 </table>
2226
2227 <h4>
2228 <a name="C4406"></a>ORIGIN: CLIENT;
2229 MESSAGE: upd_tree</h4>
2230 NUMERIC TYPE (hex): 4406<p>
2231 Upload a partial game tree to the server. This is used to send moves
2232 and even in-game comments to the server. For the comments, the
2233 server prepends the username and rank.
2234
2235 </p>
2236 <table border="1" width="100%">
2237 <tr>
2238 <th width="10%">NAME</th>
2239 <th width="8%">TYPE</th>
2240 <th width="4%">VALUE</th>
2241 <th>DESCRIPTION</th>
2242 <th width="10%">GUARD</th>
2243 </tr>
2244 <tr>
2245 <td>channel</td>
2246 <td>U16</td>
2247 <td> </td>
2248 <td>
2249
2250  
2251 </td>
2252 <td>
2253 <b></b>
2254  
2255 </td>
2256 </tr>
2257 <tr>
2258 <td>tree</td>
2259 <td>TREE</td>
2260 <td> </td>
2261 <td>
2262
2263  
2264 </td>
2265 <td>
2266 <b></b>
2267  
2268 </td>
2269 </tr>
2270 </table>
2271
2272 <h4>
2273 <a name="C4408"></a>ORIGIN: CLIENT;
2274 MESSAGE: get_tree</h4>
2275 NUMERIC TYPE (hex): 4408<p>
2276 Request the game tree starting at a given node. This is used
2277 when the server only sends a partial tree (with end code "more").
2278 </p>
2279 <table border="1" width="100%">
2280 <tr>
2281 <th width="10%">NAME</th>
2282 <th width="8%">TYPE</th>
2283 <th width="4%">VALUE</th>
2284 <th>DESCRIPTION</th>
2285 <th width="10%">GUARD</th>
2286 </tr>
2287 <tr>
2288 <td>channel</td>
2289 <td>U16</td>
2290 <td> </td>
2291 <td>
2292
2293  
2294 </td>
2295 <td>
2296 <b></b>
2297  
2298 </td>
2299 </tr>
2300 <tr>
2301 <td>node</td>
2302 <td>U32</td>
2303 <td> </td>
2304 <td>
2305
2306  
2307 </td>
2308 <td>
2309 <b></b>
2310  
2311 </td>
2312 </tr>
2313 </table>
2314
2315 <h4>
2316 <a name="C440c"></a>ORIGIN: CLIENT;
2317 MESSAGE: claim_win</h4>
2318 NUMERIC TYPE (hex): 440c<p>
2319 Unclear.
2320 </p>
2321 <table border="1" width="100%">
2322 <tr>
2323 <th width="10%">NAME</th>
2324 <th width="8%">TYPE</th>
2325 <th width="4%">VALUE</th>
2326 <th>DESCRIPTION</th>
2327 <th width="10%">GUARD</th>
2328 </tr>
2329 <tr>
2330 <td>channel</td>
2331 <td>U16</td>
2332 <td> </td>
2333 <td>
2334
2335  
2336 </td>
2337 <td>
2338 <b></b>
2339  
2340 </td>
2341 </tr>
2342 <tr>
2343 <td>_byte</td>
2344 <td>U8 </td>
2345 <td> </td>
2346 <td>
2347 Player colour maybe? Unclear.
2348
2349  
2350 </td>
2351 <td>
2352 <b></b>
2353  
2354 </td>
2355 </tr>
2356 </table>
2357
2358 <h4>
2359 <a name="C440d"></a>ORIGIN: CLIENT;
2360 MESSAGE: add_time</h4>
2361 NUMERIC TYPE (hex): 440d<p>
2362 Not checked.
2363
2364 </p>
2365 <table border="1" width="100%">
2366 <tr>
2367 <th width="10%">NAME</th>
2368 <th width="8%">TYPE</th>
2369 <th width="4%">VALUE</th>
2370 <th>DESCRIPTION</th>
2371 <th width="10%">GUARD</th>
2372 </tr>
2373 <tr>
2374 <td>channel</td>
2375 <td>U16</td>
2376 <td> </td>
2377 <td>
2378
2379  
2380 </td>
2381 <td>
2382 <b></b>
2383  
2384 </td>
2385 </tr>
2386 <tr>
2387 <td>time</td>
2388 <td>U32</td>
2389 <td> </td>
2390 <td>
2391
2392  
2393 </td>
2394 <td>
2395 <b></b>
2396  
2397 </td>
2398 </tr>
2399 <tr>
2400 <td>player</td>
2401 <td>U8</td>
2402 <td> </td>
2403 <td>
2404
2405  
2406 </td>
2407 <td>
2408 <b></b>
2409  
2410 </td>
2411 </tr>
2412 </table>
2413
2414 <h4>
2415 <a name="C440f"></a>ORIGIN: CLIENT;
2416 MESSAGE: grant_undo</h4>
2417 NUMERIC TYPE (hex): 440f<p>
2418 Can be send after a req_undo message was received to grant the undo.
2419 </p>
2420 <table border="1" width="100%">
2421 <tr>
2422 <th width="10%">NAME</th>
2423 <th width="8%">TYPE</th>
2424 <th width="4%">VALUE</th>
2425 <th>DESCRIPTION</th>
2426 <th width="10%">GUARD</th>
2427 </tr>
2428 <tr>
2429 <td>channel</td>
2430 <td>U16</td>
2431 <td> </td>
2432 <td>
2433
2434  
2435 </td>
2436 <td>
2437 <b></b>
2438  
2439 </td>
2440 </tr>
2441 </table>
2442
2443 <h4>
2444 <a name="C4410"></a>ORIGIN: CLIENT;
2445 MESSAGE: resign_game</h4>
2446 NUMERIC TYPE (hex): 4410<p>
2447 Resign the game.
2448 </p>
2449 <table border="1" width="100%">
2450 <tr>
2451 <th width="10%">NAME</th>
2452 <th width="8%">TYPE</th>
2453 <th width="4%">VALUE</th>
2454 <th>DESCRIPTION</th>
2455 <th width="10%">GUARD</th>
2456 </tr>
2457 <tr>
2458 <td>channel</td>
2459 <td>U16</td>
2460 <td> </td>
2461 <td>
2462
2463  
2464 </td>
2465 <td>
2466 <b></b>
2467  
2468 </td>
2469 </tr>
2470 <tr>
2471 <td>player</td>
2472 <td>U8</td>
2473 <td> </td>
2474 <td>
2475
2476  
2477 </td>
2478 <td>
2479 <b></b>
2480  
2481 </td>
2482 </tr>
2483 </table>
2484
2485 <h4>
2486 <a name="C441a"></a>ORIGIN: CLIENT;
2487 MESSAGE: set_teacher</h4>
2488 NUMERIC TYPE (hex): 441a<p>
2489 Change the teacher to somebody else (or possibly yourself == take it).
2490 </p>
2491 <table border="1" width="100%">
2492 <tr>
2493 <th width="10%">NAME</th>
2494 <th width="8%">TYPE</th>
2495 <th width="4%">VALUE</th>
2496 <th>DESCRIPTION</th>
2497 <th width="10%">GUARD</th>
2498 </tr>
2499 <tr>
2500 <td>channel</td>
2501 <td>U16</td>
2502 <td> </td>
2503 <td>
2504
2505  
2506 </td>
2507 <td>
2508 <b></b>
2509  
2510 </td>
2511 </tr>
2512 <tr>
2513 <td>name</td>
2514 <td>username</td>
2515 <td> </td>
2516 <td>
2517
2518  
2519 </td>
2520 <td>
2521 <b></b>
2522  
2523 </td>
2524 </tr>
2525 </table>
2526
2527 <h4>
2528 <a name="C4422"></a>ORIGIN: CLIENT;
2529 MESSAGE: add_user</h4>
2530 NUMERIC TYPE (hex): 4422<p>
2531 Unclear. Maybe allow users to talk? No idea, really.
2532
2533 </p>
2534 <table border="1" width="100%">
2535 <tr>
2536 <th width="10%">NAME</th>
2537 <th width="8%">TYPE</th>
2538 <th width="4%">VALUE</th>
2539 <th>DESCRIPTION</th>
2540 <th width="10%">GUARD</th>
2541 </tr>
2542 <tr>
2543 <td>channel</td>
2544 <td>U16</td>
2545 <td> </td>
2546 <td>
2547
2548  
2549 </td>
2550 <td>
2551 <b></b>
2552  
2553 </td>
2554 </tr>
2555 <tr>
2556 <td>othername</td>
2557 <td>username</td>
2558 <td> </td>
2559 <td>
2560
2561  
2562 </td>
2563 <td>
2564 <b></b>
2565  
2566 </td>
2567 </tr>
2568 <tr>
2569 <td>name</td>
2570 <td>username</td>
2571 <td> </td>
2572 <td>; # gives user access to the game (to what? ;)
2573
2574  
2575 </td>
2576 <td>
2577 <b></b>
2578  
2579 </td>
2580 </tr>
2581 </table>
2582
2583 <h4>
2584 <a name="C4423"></a>ORIGIN: CLIENT;
2585 MESSAGE: set_privacy</h4>
2586 NUMERIC TYPE (hex): 4423<p>
2587 Probably sets the "quiet" flag. Not checked.
2588 </p>
2589 <table border="1" width="100%">
2590 <tr>
2591 <th width="10%">NAME</th>
2592 <th width="8%">TYPE</th>
2593 <th width="4%">VALUE</th>
2594 <th>DESCRIPTION</th>
2595 <th width="10%">GUARD</th>
2596 </tr>
2597 <tr>
2598 <td>channel</td>
2599 <td>U16</td>
2600 <td> </td>
2601 <td>
2602
2603  
2604 </td>
2605 <td>
2606 <b></b>
2607  
2608 </td>
2609 </tr>
2610 <tr>
2611 <td>private</td>
2612 <td>U8</td>
2613 <td> </td>
2614 <td>
2615
2616  
2617 </td>
2618 <td>
2619 <b></b>
2620  
2621 </td>
2622 </tr>
2623 </table>
2624
2625 <h4>
2626 <a name="C4429"></a>ORIGIN: CLIENT;
2627 MESSAGE: reject_challenge</h4>
2628 NUMERIC TYPE (hex): 4429<p>
2629 Reject a challenge from a given user. Not checked.
2630
2631 </p>
2632 <table border="1" width="100%">
2633 <tr>
2634 <th width="10%">NAME</th>
2635 <th width="8%">TYPE</th>
2636 <th width="4%">VALUE</th>
2637 <th>DESCRIPTION</th>
2638 <th width="10%">GUARD</th>
2639 </tr>
2640 <tr>
2641 <td>channel</td>
2642 <td>U16</td>
2643 <td> </td>
2644 <td>
2645
2646  
2647 </td>
2648 <td>
2649 <b></b>
2650  
2651 </td>
2652 </tr>
2653 <tr>
2654 <td>name</td>
2655 <td>username</td>
2656 <td> </td>
2657 <td>
2658
2659  
2660 </td>
2661 <td>
2662 <b></b>
2663  
2664 </td>
2665 </tr>
2666 </table>
2667
2668 <h4>
2669 <a name="C4433"></a>ORIGIN: CLIENT;
2670 MESSAGE: req_result</h4>
2671 NUMERIC TYPE (hex): 4433<p>
2672 I forgot.
2673
2674 </p>
2675 <table border="1" width="100%">
2676 <tr>
2677 <th width="10%">NAME</th>
2678 <th width="8%">TYPE</th>
2679 <th width="4%">VALUE</th>
2680 <th>DESCRIPTION</th>
2681 <th width="10%">GUARD</th>
2682 </tr>
2683 <tr>
2684 <td>channel</td>
2685 <td>U16</td>
2686 <td> </td>
2687 <td>
2688
2689  
2690 </td>
2691 <td>
2692 <b></b>
2693  
2694 </td>
2695 </tr>
2696 </table>
2697
2698 <h4>
2699 <a name="C4436"></a>ORIGIN: CLIENT;
2700 MESSAGE: msg_game</h4>
2701 NUMERIC TYPE (hex): 4436<p>
2702 </p>
2703 <table border="1" width="100%">
2704 <tr>
2705 <th width="10%">NAME</th>
2706 <th width="8%">TYPE</th>
2707 <th width="4%">VALUE</th>
2708 <th>DESCRIPTION</th>
2709 <th width="10%">GUARD</th>
2710 </tr>
2711 <tr>
2712 <td>channel</td>
2713 <td>U16</td>
2714 <td> </td>
2715 <td>
2716
2717  
2718 </td>
2719 <td>
2720 <b></b>
2721  
2722 </td>
2723 </tr>
2724 <tr>
2725 <td>message</td>
2726 <td>STRING</td>
2727 <td> </td>
2728 <td>
2729
2730  
2731 </td>
2732 <td>
2733 <b></b>
2734  
2735 </td>
2736 </tr>
2737 </table>
2738
2739 <h4>
2740 <a name="Cffff"></a>ORIGIN: CLIENT;
2741 MESSAGE: quit</h4>
2742 NUMERIC TYPE (hex): ffff<p>
2743 <p>Sent by the client just before it logs out.</p>
2744 </p>
2745 <table border="1" width="100%">
2746 <tr>
2747 <th width="10%">NAME</th>
2748 <th width="8%">TYPE</th>
2749 <th width="4%">VALUE</th>
2750 <th>DESCRIPTION</th>
2751 <th width="10%">GUARD</th>
2752 </tr>
2753 </table>
2754
2755 <h2>Structs mainly used in messages send by the server</h2>
2756
2757 <h4>STRUCTURE challenge_defaults</h4>
2758 <p>
2759 Send soon after log-in to set the defaults for game challenges.
2760 </p>
2761 <table border="1" width="100%">
2762 <tr>
2763 <th width="10%">NAME</th>
2764 <th width="8%">TYPE</th>
2765 <th width="4%">VALUE</th>
2766 <th>DESCRIPTION</th>
2767 <th width="10%">GUARD</th>
2768 </tr>
2769 <tr>
2770 <td>gametype</td>
2771 <td>U32</td>
2772 <td> </td>
2773 <td>
2774
2775  
2776 </td>
2777 <td>
2778 <b></b>
2779  
2780 </td>
2781 </tr>
2782 <tr>
2783 <td>size</td>
2784 <td>U32</td>
2785 <td> </td>
2786 <td>
2787
2788  
2789 </td>
2790 <td>
2791 <b></b>
2792  
2793 </td>
2794 </tr>
2795 <tr>
2796 <td>timesys</td>
2797 <td>U32</td>
2798 <td> </td>
2799 <td>
2800
2801  
2802 </td>
2803 <td>
2804 <b></b>
2805  
2806 </td>
2807 </tr>
2808 <tr>
2809 <td>time</td>
2810 <td>U32</td>
2811 <td> </td>
2812 <td>
2813
2814  
2815 </td>
2816 <td>
2817 <b></b>
2818  
2819 </td>
2820 </tr>
2821 <tr>
2822 <td>byo_time</td>
2823 <td>U32</td>
2824 <td> </td>
2825 <td>
2826
2827  
2828 </td>
2829 <td>
2830 <b></b>
2831  
2832 </td>
2833 </tr>
2834 <tr>
2835 <td>byo_periods</td>
2836 <td>U32</td>
2837 <td> </td>
2838 <td>
2839
2840  
2841 </td>
2842 <td>
2843 <b></b>
2844  
2845 </td>
2846 </tr>
2847 <tr>
2848 <td>can_time</td>
2849 <td>U32</td>
2850 <td> </td>
2851 <td>
2852
2853  
2854 </td>
2855 <td>
2856 <b></b>
2857  
2858 </td>
2859 </tr>
2860 <tr>
2861 <td>can_stones</td>
2862 <td>U32</td>
2863 <td> </td>
2864 <td>
2865
2866  
2867 </td>
2868 <td>
2869 <b></b>
2870  
2871 </td>
2872 </tr>
2873 </table>
2874
2875 <h4>STRUCTURE challenge</h4>
2876 CLASS: KGS::Challenge<br />
2877 <p>
2878 A challenge.
2879
2880 </p>
2881 <table border="1" width="100%">
2882 <tr>
2883 <th width="10%">NAME</th>
2884 <th width="8%">TYPE</th>
2885 <th width="4%">VALUE</th>
2886 <th>DESCRIPTION</th>
2887 <th width="10%">GUARD</th>
2888 </tr>
2889 <tr>
2890 <td>user1</td>
2891 <td>user</td>
2892 <td> </td>
2893 <td>
2894
2895  
2896 </td>
2897 <td>
2898 <b></b>
2899  
2900 </td>
2901 </tr>
2902 <tr>
2903 <td>user2</td>
2904 <td>user</td>
2905 <td> </td>
2906 <td>
2907
2908  
2909 </td>
2910 <td>
2911 <b></b>
2912  
2913 </td>
2914 </tr>
2915 <tr>
2916 <td>gametype</td>
2917 <td>U32</td>
2918 <td> </td>
2919 <td>
2920
2921  
2922 </td>
2923 <td>
2924 <b></b>
2925  
2926 </td>
2927 </tr>
2928 <tr>
2929 <td>rules</td>
2930 <td>rules</td>
2931 <td> </td>
2932 <td>
2933 Maybe the rules" are in TREE format. I forgot.
2934
2935  
2936 </td>
2937 <td>
2938 <b></b>
2939  
2940 </td>
2941 </tr>
2942 </table>
2943
2944 <h4>STRUCTURE game</h4>
2945 CLASS: KGS::Game<br />
2946 <p>
2947 Basic information about a game. Used in rooms for the gamelist and
2948 in games to detect when a game is saved, changed type (e.g. R =&gt; D)
2949 etc.
2950
2951 </p>
2952 <table border="1" width="100%">
2953 <tr>
2954 <th width="10%">NAME</th>
2955 <th width="8%">TYPE</th>
2956 <th width="4%">VALUE</th>
2957 <th>DESCRIPTION</th>
2958 <th width="10%">GUARD</th>
2959 </tr>
2960 <tr>
2961 <td>channel</td>
2962 <td>U16</td>
2963 <td> </td>
2964 <td>
2965
2966  
2967 </td>
2968 <td>
2969 <b></b>
2970  
2971 </td>
2972 </tr>
2973 <tr>
2974 <td>type</td>
2975 <td>U8</td>
2976 <td> </td>
2977 <td>
2978
2979  
2980 </td>
2981 <td>
2982 <b></b>
2983  
2984 </td>
2985 </tr>
2986 <tr>
2987 <td>user1</td>
2988 <td>user</td>
2989 <td> </td>
2990 <td>
2991 White
2992
2993  
2994 </td>
2995 <td>
2996 <b></b>
2997  
2998 </td>
2999 </tr>
3000 <tr>
3001 <td>user2</td>
3002 <td>user</td>
3003 <td> </td>
3004 <td>
3005 Black
3006
3007  
3008 </td>
3009 <td>
3010 <b></b>
3011  
3012 </td>
3013 </tr>
3014 <tr>
3015 <td>user3</td>
3016 <td>user</td>
3017 <td> </td>
3018 <td>
3019 Owner
3020
3021  
3022 </td>
3023 <td>
3024 <b></b>
3025  
3026 </td>
3027 </tr>
3028 <tr>
3029 <td>size</td>
3030 <td>U8</td>
3031 <td> </td>
3032 <td>
3033
3034  
3035 </td>
3036 <td>
3037 <b></b>
3038  
3039 </td>
3040 </tr>
3041 <tr>
3042 <td>handicap</td>
3043 <td>I8</td>
3044 <td> </td>
3045 <td>
3046 &lt; 0 not fully setup
3047
3048  
3049 </td>
3050 <td>
3051 <b></b>
3052  
3053 </td>
3054 </tr>
3055 <tr>
3056 <td>komi</td>
3057 <td>komi16</td>
3058 <td> </td>
3059 <td>
3060
3061  
3062 </td>
3063 <td>
3064 <b></b>
3065  
3066 </td>
3067 </tr>
3068 <tr>
3069 <td>moves</td>
3070 <td>I16</td>
3071 <td> </td>
3072 <td>
3073 This field reflects either the movenum or the score, sorry, not even guards help, as
3074 the flags to determine that are _after_ the field. Arg. Divide by two to get the actual
3075 score (NOT score16!) (arg²).
3076
3077  
3078 </td>
3079 <td>
3080 <b></b>
3081  
3082 </td>
3083 </tr>
3084 <tr>
3085 <td>flags</td>
3086 <td>U16</td>
3087 <td> </td>
3088 <td>
3089
3090  
3091 </td>
3092 <td>
3093 <b></b>
3094  
3095 </td>
3096 </tr>
3097 <tr>
3098 <td>observers</td>
3099 <td>U32</td>
3100 <td> </td>
3101 <td>
3102
3103  
3104 </td>
3105 <td>
3106 <b></b>
3107  
3108 </td>
3109 </tr>
3110 <tr>
3111 <td>saved</td>
3112 <td>flag</td>
3113 <td> </td>
3114 <td>
3115
3116  
3117 </td>
3118 <td>
3119 <b></b>
3120  
3121 </td>
3122 </tr>
3123 <tr>
3124 <td>notes</td>
3125 <td>STRING</td>
3126 <td> </td>
3127 <td>
3128
3129  
3130 </td>
3131 <td>
3132 <b>handicap</b> &lt; 0
3133  
3134 </td>
3135 </tr>
3136 </table>
3137
3138 <h4>STRUCTURE room_obs</h4>
3139 <p>
3140 Obsolete.
3141
3142 </p>
3143 <table border="1" width="100%">
3144 <tr>
3145 <th width="10%">NAME</th>
3146 <th width="8%">TYPE</th>
3147 <th width="4%">VALUE</th>
3148 <th>DESCRIPTION</th>
3149 <th width="10%">GUARD</th>
3150 </tr>
3151 <tr>
3152 <td>name</td>
3153 <td>roomname</td>
3154 <td> </td>
3155 <td>
3156
3157  
3158 </td>
3159 <td>
3160 <b></b>
3161  
3162 </td>
3163 </tr>
3164 <tr>
3165 <td>channel</td>
3166 <td>U16</td>
3167 <td> </td>
3168 <td>
3169
3170  
3171 </td>
3172 <td>
3173 <b></b>
3174  
3175 </td>
3176 </tr>
3177 <tr>
3178 <td>flags</td>
3179 <td>U32</td>
3180 <td> </td>
3181 <td>
3182
3183  
3184 </td>
3185 <td>
3186 <b></b>
3187  
3188 </td>
3189 </tr>
3190 <tr>
3191 <td>users</td>
3192 <td>U32</td>
3193 <td> </td>
3194 <td>
3195
3196  
3197 </td>
3198 <td>
3199 <b></b>
3200  
3201 </td>
3202 </tr>
3203 </table>
3204
3205 <h4>STRUCTURE room</h4>
3206 CLASS: KGS::Room<br />
3207 <p>
3208 </p>
3209 <table border="1" width="100%">
3210 <tr>
3211 <th width="10%">NAME</th>
3212 <th width="8%">TYPE</th>
3213 <th width="4%">VALUE</th>
3214 <th>DESCRIPTION</th>
3215 <th width="10%">GUARD</th>
3216 </tr>
3217 <tr>
3218 <td>channel</td>
3219 <td>U16</td>
3220 <td> </td>
3221 <td>
3222
3223  
3224 </td>
3225 <td>
3226 <b></b>
3227  
3228 </td>
3229 </tr>
3230 <tr>
3231 <td>flags</td>
3232 <td>U8</td>
3233 <td> </td>
3234 <td>
3235
3236  
3237 </td>
3238 <td>
3239 <b></b>
3240  
3241 </td>
3242 </tr>
3243 <tr>
3244 <td>group</td>
3245 <td>U8</td>
3246 <td> </td>
3247 <td>
3248
3249  
3250 </td>
3251 <td>
3252 <b></b>
3253  
3254 </td>
3255 </tr>
3256 <tr>
3257 <td>users</td>
3258 <td>U16</td>
3259 <td> </td>
3260 <td>
3261
3262  
3263 </td>
3264 <td>
3265 <b></b>
3266  
3267 </td>
3268 </tr>
3269 <tr>
3270 <td>games</td>
3271 <td>U16</td>
3272 <td> </td>
3273 <td>
3274
3275  
3276 </td>
3277 <td>
3278 <b></b>
3279  
3280 </td>
3281 </tr>
3282 <tr>
3283 <td>name</td>
3284 <td>STRING</td>
3285 <td> </td>
3286 <td>
3287
3288  
3289 </td>
3290 <td>
3291 <b></b>
3292  
3293 </td>
3294 </tr>
3295 </table>
3296
3297 <h4>STRUCTURE scorevalues</h4>
3298 CLASS: KGS::Score<br />
3299 <p>
3300 </p>
3301 <table border="1" width="100%">
3302 <tr>
3303 <th width="10%">NAME</th>
3304 <th width="8%">TYPE</th>
3305 <th width="4%">VALUE</th>
3306 <th>DESCRIPTION</th>
3307 <th width="10%">GUARD</th>
3308 </tr>
3309 <tr>
3310 <td>score</td>
3311 <td>score32</td>
3312 <td> </td>
3313 <td>
3314
3315  
3316 </td>
3317 <td>
3318 <b></b>
3319  
3320 </td>
3321 </tr>
3322 <tr>
3323 <td>territory</td>
3324 <td>U32</td>
3325 <td> </td>
3326 <td>
3327
3328  
3329 </td>
3330 <td>
3331 <b></b>
3332  
3333 </td>
3334 </tr>
3335 <tr>
3336 <td>captures</td>
3337 <td>U32</td>
3338 <td> </td>
3339 <td>
3340
3341  
3342 </td>
3343 <td>
3344 <b></b>
3345  
3346 </td>
3347 </tr>
3348 <tr>
3349 <td>i3</td>
3350 <td>U32</td>
3351 <td> </td>
3352 <td>
3353
3354  
3355 </td>
3356 <td>
3357 <b></b>
3358  
3359 </td>
3360 </tr>
3361 <tr>
3362 <td>f2</td>
3363 <td>U32</td>
3364 <td> </td>
3365 <td>
3366
3367  
3368 </td>
3369 <td>
3370 <b></b>
3371  
3372 </td>
3373 </tr>
3374 <tr>
3375 <td>komi</td>
3376 <td>komi324</td>
3377 <td> </td>
3378 <td>
3379
3380  
3381 </td>
3382 <td>
3383 <b></b>
3384  
3385 </td>
3386 </tr>
3387 <tr>
3388 <td>i4</td>
3389 <td>U32</td>
3390 <td> </td>
3391 <td>
3392 Apparently the i3, f2, i4 are zero.
3393
3394  
3395 </td>
3396 <td>
3397 <b></b>
3398  
3399 </td>
3400 </tr>
3401 </table>
3402
3403 <h4>STRUCTURE game_record</h4>
3404 CLASS: KGS::GameRecord<br />
3405 <p>
3406 <p>A single game record entry, as seen in <a href="#S0008">userinfo(0008)</a>.</p>
3407 </p>
3408 <table border="1" width="100%">
3409 <tr>
3410 <th width="10%">NAME</th>
3411 <th width="8%">TYPE</th>
3412 <th width="4%">VALUE</th>
3413 <th>DESCRIPTION</th>
3414 <th width="10%">GUARD</th>
3415 </tr>
3416 <tr>
3417 <td>timestamp</td>
3418 <td>timestamp</td>
3419 <td> </td>
3420 <td>
3421 Time this game was played.
3422
3423  
3424 </td>
3425 <td>
3426 <b></b>
3427  
3428 </td>
3429 </tr>
3430 <tr>
3431 <td>type</td>
3432 <td>U8</td>
3433 <td> </td>
3434 <td>
3435 High four bits are handicap, low four bits are gametype (encoded strangely? unclear).
3436
3437  
3438 </td>
3439 <td>
3440 <b></b>
3441  
3442 </td>
3443 </tr>
3444 <tr>
3445 <td>user1</td>
3446 <td>user</td>
3447 <td> </td>
3448 <td>
3449 White, flags contain low 8 bits of revision (bits 16-23).
3450
3451  
3452 </td>
3453 <td>
3454 <b></b>
3455  
3456 </td>
3457 </tr>
3458 <tr>
3459 <td>user2</td>
3460 <td>user</td>
3461 <td> </td>
3462 <td>
3463 Black, flags contain high 8 bits of revision (bits 16-23).
3464
3465  
3466 </td>
3467 <td>
3468 <b></b>
3469  
3470 </td>
3471 </tr>
3472 <tr>
3473 <td>user3</td>
3474 <td>user</td>
3475 <td> </td>
3476 <td>
3477
3478
3479  
3480 </td>
3481 <td>
3482 <b></b>
3483  
3484 </td>
3485 </tr>
3486 <tr>
3487 <td>komi</td>
3488 <td>komi16</td>
3489 <td> </td>
3490 <td>
3491
3492  
3493 </td>
3494 <td>
3495 <b></b>
3496  
3497 </td>
3498 </tr>
3499 <tr>
3500 <td>score</td>
3501 <td>score16</td>
3502 <td> </td>
3503 <td>
3504
3505  
3506 </td>
3507 <td>
3508 <b></b>
3509  
3510 </td>
3511 </tr>
3512 <tr>
3513 <td>status</td>
3514 <td>U8</td>
3515 <td> </td>
3516 <td>
3517
3518
3519  
3520 </td>
3521 <td>
3522 <b></b>
3523  
3524 </td>
3525 </tr>
3526 </table>
3527
3528 <h2>Server-generated messages</h2>
3529
3530 <h4>
3531 <a name="S0001"></a>ORIGIN: SERVER;
3532 MESSAGE: login</h4>
3533 NUMERIC TYPE (hex): 0001
3534 (possibly in response to
3535 <a href="#C0000">login(0000)</a>
3536 )
3537 <p>
3538 </p>
3539 <table border="1" width="100%">
3540 <tr>
3541 <th width="10%">NAME</th>
3542 <th width="8%">TYPE</th>
3543 <th width="4%">VALUE</th>
3544 <th>DESCRIPTION</th>
3545 <th width="10%">GUARD</th>
3546 </tr>
3547 <tr>
3548 <td>result</td>
3549 <td>CONSTANT</td>
3550 <td>"login ok" </td>
3551 <td>
3552
3553  
3554 </td>
3555 <td>
3556 <b></b>
3557  
3558 </td>
3559 </tr>
3560 <tr>
3561 <td>success</td>
3562 <td>CONSTANT</td>
3563 <td>1 </td>
3564 <td>
3565
3566  
3567 </td>
3568 <td>
3569 <b></b>
3570  
3571 </td>
3572 </tr>
3573 </table>
3574
3575 <h4>
3576 <a name="S0002"></a>ORIGIN: SERVER;
3577 MESSAGE: login</h4>
3578 NUMERIC TYPE (hex): 0002
3579 (possibly in response to
3580 <a href="#C0000">login(0000)</a>
3581 )
3582 <p>
3583 </p>
3584 <table border="1" width="100%">
3585 <tr>
3586 <th width="10%">NAME</th>
3587 <th width="8%">TYPE</th>
3588 <th width="4%">VALUE</th>
3589 <th>DESCRIPTION</th>
3590 <th width="10%">GUARD</th>
3591 </tr>
3592 <tr>
3593 <td>result</td>
3594 <td>CONSTANT</td>
3595 <td>"guest login ok" </td>
3596 <td>
3597
3598  
3599 </td>
3600 <td>
3601 <b></b>
3602  
3603 </td>
3604 </tr>
3605 <tr>
3606 <td>success</td>
3607 <td>CONSTANT</td>
3608 <td>1 </td>
3609 <td>
3610
3611  
3612 </td>
3613 <td>
3614 <b></b>
3615  
3616 </td>
3617 </tr>
3618 </table>
3619
3620 <h4>
3621 <a name="S0003"></a>ORIGIN: SERVER;
3622 MESSAGE: login</h4>
3623 NUMERIC TYPE (hex): 0003
3624 (possibly in response to
3625 <a href="#C0000">login(0000)</a>
3626 )
3627 <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>result</td>
3639 <td>CONSTANT</td>
3640 <td>"login error 3" </td>
3641 <td>
3642 ** maybe more following? **
3643
3644  
3645 </td>
3646 <td>
3647 <b></b>
3648  
3649 </td>
3650 </tr>
3651 </table>
3652
3653 <h4>
3654 <a name="S0004"></a>ORIGIN: SERVER;
3655 MESSAGE: login</h4>
3656 NUMERIC TYPE (hex): 0004
3657 (possibly in response to
3658 <a href="#C0000">login(0000)</a>
3659 )
3660 <p>
3661 </p>
3662 <table border="1" width="100%">
3663 <tr>
3664 <th width="10%">NAME</th>
3665 <th width="8%">TYPE</th>
3666 <th width="4%">VALUE</th>
3667 <th>DESCRIPTION</th>
3668 <th width="10%">GUARD</th>
3669 </tr>
3670 <tr>
3671 <td>result</td>
3672 <td>CONSTANT</td>
3673 <td>"wrong password" </td>
3674 <td>
3675 ** maybe more following? **
3676
3677  
3678 </td>
3679 <td>
3680 <b></b>
3681  
3682 </td>
3683 </tr>
3684 </table>
3685
3686 <h4>
3687 <a name="S0005"></a>ORIGIN: SERVER;
3688 MESSAGE: login</h4>
3689 NUMERIC TYPE (hex): 0005
3690 (possibly in response to
3691 <a href="#C0000">login(0000)</a>
3692 )
3693 <p>
3694 </p>
3695 <table border="1" width="100%">
3696 <tr>
3697 <th width="10%">NAME</th>
3698 <th width="8%">TYPE</th>
3699 <th width="4%">VALUE</th>
3700 <th>DESCRIPTION</th>
3701 <th width="10%">GUARD</th>
3702 </tr>
3703 <tr>
3704 <td>result</td>
3705 <td>CONSTANT</td>
3706 <td>"user unknown" </td>
3707 <td>
3708 ** maybe more following? **
3709
3710  
3711 </td>
3712 <td>
3713 <b></b>
3714  
3715 </td>
3716 </tr>
3717 </table>
3718
3719 <h4>
3720 <a name="S0006"></a>ORIGIN: SERVER;
3721 MESSAGE: login</h4>
3722 NUMERIC TYPE (hex): 0006
3723 (possibly in response to
3724 <a href="#C0000">login(0000)</a>
3725 )
3726 <p>
3727 </p>
3728 <table border="1" width="100%">
3729 <tr>
3730 <th width="10%">NAME</th>
3731 <th width="8%">TYPE</th>
3732 <th width="4%">VALUE</th>
3733 <th>DESCRIPTION</th>
3734 <th width="10%">GUARD</th>
3735 </tr>
3736 <tr>
3737 <td>result</td>
3738 <td>CONSTANT</td>
3739 <td>"user exists" </td>
3740 <td>
3741 ** maybe more following? **
3742
3743  
3744 </td>
3745 <td>
3746 <b></b>
3747  
3748 </td>
3749 </tr>
3750 </table>
3751
3752 <h4>
3753 <a name="S0008"></a>ORIGIN: SERVER;
3754 MESSAGE: userinfo</h4>
3755 NUMERIC TYPE (hex): 0008
3756 (possibly in response to
3757 <a href="#C0007">req_userinfo(0007)</a>
3758 )
3759 <p>
3760 User info.
3761 </p>
3762 <table border="1" width="100%">
3763 <tr>
3764 <th width="10%">NAME</th>
3765 <th width="8%">TYPE</th>
3766 <th width="4%">VALUE</th>
3767 <th>DESCRIPTION</th>
3768 <th width="10%">GUARD</th>
3769 </tr>
3770 <tr>
3771 <td>_unused0</td>
3772 <td>flag</td>
3773 <td> </td>
3774 <td>
3775
3776  
3777 </td>
3778 <td>
3779 <b></b>
3780  
3781 </td>
3782 </tr>
3783 <tr>
3784 <td>user</td>
3785 <td>user</td>
3786 <td> </td>
3787 <td>
3788
3789  
3790 </td>
3791 <td>
3792 <b></b>
3793  
3794 </td>
3795 </tr>
3796 <tr>
3797 <td>_unused1</td>
3798 <td>U64</td>
3799 <td> </td>
3800 <td>
3801
3802  
3803 </td>
3804 <td>
3805 <b></b>
3806  
3807 </td>
3808 </tr>
3809 <tr>
3810 <td>realname</td>
3811 <td>realname</td>
3812 <td> </td>
3813 <td>
3814
3815  
3816 </td>
3817 <td>
3818 <b></b>
3819  
3820 </td>
3821 </tr>
3822 <tr>
3823 <td>email</td>
3824 <td>email</td>
3825 <td> </td>
3826 <td>
3827
3828  
3829 </td>
3830 <td>
3831 <b></b>
3832  
3833 </td>
3834 </tr>
3835 <tr>
3836 <td>info</td>
3837 <td>userinfo</td>
3838 <td> </td>
3839 <td>
3840
3841  
3842 </td>
3843 <td>
3844 <b></b>
3845  
3846 </td>
3847 </tr>
3848 <tr>
3849 <td>homepage</td>
3850 <td>url</td>
3851 <td> </td>
3852 <td>
3853
3854  
3855 </td>
3856 <td>
3857 <b></b>
3858  
3859 </td>
3860 </tr>
3861 <tr>
3862 <td>regdate</td>
3863 <td>timestamp</td>
3864 <td> </td>
3865 <td>
3866 When the user registered (0 == never registered).
3867
3868  
3869 </td>
3870 <td>
3871 <b></b>
3872  
3873 </td>
3874 </tr>
3875 <tr>
3876 <td>lastlogin</td>
3877 <td>timestamp</td>
3878 <td> </td>
3879 <td>
3880 When the user logged in for the last time.
3881
3882  
3883 </td>
3884 <td>
3885 <b></b>
3886  
3887 </td>
3888 </tr>
3889 </table>
3890
3891 <h4>
3892 <a name="S0013"></a>ORIGIN: SERVER;
3893 MESSAGE: msg_chat</h4>
3894 NUMERIC TYPE (hex): 0013<p>
3895 </p>
3896 <table border="1" width="100%">
3897 <tr>
3898 <th width="10%">NAME</th>
3899 <th width="8%">TYPE</th>
3900 <th width="4%">VALUE</th>
3901 <th>DESCRIPTION</th>
3902 <th width="10%">GUARD</th>
3903 </tr>
3904 <tr>
3905 <td>name</td>
3906 <td>username</td>
3907 <td> </td>
3908 <td>
3909 Name of sender (either yourself (echo) or other)
3910
3911  
3912 </td>
3913 <td>
3914 <b></b>
3915  
3916 </td>
3917 </tr>
3918 <tr>
3919 <td>name2</td>
3920 <td>username</td>
3921 <td> </td>
3922 <td>
3923 Name of recipient.
3924
3925  
3926 </td>
3927 <td>
3928 <b></b>
3929  
3930 </td>
3931 </tr>
3932 <tr>
3933 <td>message</td>
3934 <td>STRING</td>
3935 <td> </td>
3936 <td>
3937
3938  
3939 </td>
3940 <td>
3941 <b></b>
3942  
3943 </td>
3944 </tr>
3945 </table>
3946
3947 <h4>
3948 <a name="S0015"></a>ORIGIN: SERVER;
3949 MESSAGE: stats</h4>
3950 NUMERIC TYPE (hex): 0015
3951 (possibly in response to
3952 <a href="#C0014">req_stats(0014)</a>
3953 )
3954 <p>
3955 </p>
3956 <table border="1" width="100%">
3957 <tr>
3958 <th width="10%">NAME</th>
3959 <th width="8%">TYPE</th>
3960 <th width="4%">VALUE</th>
3961 <th>DESCRIPTION</th>
3962 <th width="10%">GUARD</th>
3963 </tr>
3964 <tr>
3965 <td>ver_major</td>
3966 <td>U16</td>
3967 <td> </td>
3968 <td>
3969
3970  
3971 </td>
3972 <td>
3973 <b></b>
3974  
3975 </td>
3976 </tr>
3977 <tr>
3978 <td>ver_minor</td>
3979 <td>U16</td>
3980 <td> </td>
3981 <td>
3982
3983  
3984 </td>
3985 <td>
3986 <b></b>
3987  
3988 </td>
3989 </tr>
3990 <tr>
3991 <td>ver_micro</td>
3992 <td>U16</td>
3993 <td> </td>
3994 <td>
3995
3996  
3997 </td>
3998 <td>
3999 <b></b>
4000  
4001 </td>
4002 </tr>
4003 <tr>
4004 <td>boot_time</td>
4005 <td>timestamp</td>
4006 <td> </td>
4007 <td>
4008
4009  
4010 </td>
4011 <td>
4012 <b></b>
4013  
4014 </td>
4015 </tr>
4016 <tr>
4017 <td>users_cur</td>
4018 <td>U32</td>
4019 <td> </td>
4020 <td>
4021
4022  
4023 </td>
4024 <td>
4025 <b></b>
4026  
4027 </td>
4028 </tr>
4029 <tr>
4030 <td>users_max</td>
4031 <td>U32</td>
4032 <td> </td>
4033 <td>
4034
4035  
4036 </td>
4037 <td>
4038 <b></b>
4039  
4040 </td>
4041 </tr>
4042 <tr>
4043 <td>users_lim</td>
4044 <td>U32</td>
4045 <td> </td>
4046 <td>
4047
4048  
4049 </td>
4050 <td>
4051 <b></b>
4052  
4053 </td>
4054 </tr>
4055 <tr>
4056 <td>accts_cur</td>
4057 <td>U32</td>
4058 <td> </td>
4059 <td>
4060
4061  
4062 </td>
4063 <td>
4064 <b></b>
4065  
4066 </td>
4067 </tr>
4068 <tr>
4069 <td>accts_max</td>
4070 <td>U32</td>
4071 <td> </td>
4072 <td>
4073
4074  
4075 </td>
4076 <td>
4077 <b></b>
4078  
4079 </td>
4080 </tr>
4081 <tr>
4082 <td>unknown1</td>
4083 <td>U32</td>
4084 <td> </td>
4085 <td>
4086
4087  
4088 </td>
4089 <td>
4090 <b></b>
4091  
4092 </td>
4093 </tr>
4094 <tr>
4095 <td>work_max</td>
4096 <td>U32</td>
4097 <td> </td>
4098 <td>
4099
4100  
4101 </td>
4102 <td>
4103 <b></b>
4104  
4105 </td>
4106 </tr>
4107 <tr>
4108 <td>rooms_cur</td>
4109 <td>U32</td>
4110 <td> </td>
4111 <td>
4112
4113  
4114 </td>
4115 <td>
4116 <b></b>
4117  
4118 </td>
4119 </tr>
4120 <tr>
4121 <td>rooms_max</td>
4122 <td>U32</td>
4123 <td> </td>
4124 <td>
4125
4126  
4127 </td>
4128 <td>
4129 <b></b>
4130  
4131 </td>
4132 </tr>
4133 <tr>
4134 <td>rooms_lim</td>
4135 <td>U32</td>
4136 <td> </td>
4137 <td>
4138
4139  
4140 </td>
4141 <td>
4142 <b></b>
4143  
4144 </td>
4145 </tr>
4146 <tr>
4147 <td>games_cur</td>
4148 <td>U32</td>
4149 <td> </td>
4150 <td>
4151
4152  
4153 </td>
4154 <td>
4155 <b></b>
4156  
4157 </td>
4158 </tr>
4159 <tr>
4160 <td>games_max</td>
4161 <td>U32</td>
4162 <td> </td>
4163 <td>
4164
4165  
4166 </td>
4167 <td>
4168 <b></b>
4169  
4170 </td>
4171 </tr>
4172 <tr>
4173 <td>games_lim</td>
4174 <td>U32</td>
4175 <td> </td>
4176 <td>
4177
4178  
4179 </td>
4180 <td>
4181 <b></b>
4182  
4183 </td>
4184 </tr>
4185 <tr>
4186 <td>results_cur</td>
4187 <td>U32</td>
4188 <td> </td>
4189 <td>
4190
4191  
4192 </td>
4193 <td>
4194 <b></b>
4195  
4196 </td>
4197 </tr>
4198 <tr>
4199 <td>results_max</td>
4200 <td>U32</td>
4201 <td> </td>
4202 <td>
4203
4204  
4205 </td>
4206 <td>
4207 <b></b>
4208  
4209 </td>
4210 </tr>
4211 <tr>
4212 <td>unknown2</td>
4213 <td>U32</td>
4214 <td> </td>
4215 <td>
4216
4217  
4218 </td>
4219 <td>
4220 <b></b>
4221  
4222 </td>
4223 </tr>
4224 <tr>
4225 <td>params_cur</td>
4226 <td>U32</td>
4227 <td> </td>
4228 <td>
4229
4230  
4231 </td>
4232 <td>
4233 <b></b>
4234  
4235 </td>
4236 </tr>
4237 <tr>
4238 <td>params_max</td>
4239 <td>U32</td>
4240 <td> </td>
4241 <td>
4242
4243  
4244 </td>
4245 <td>
4246 <b></b>
4247  
4248 </td>
4249 </tr>
4250 <tr>
4251 <td>bytes_in</td>
4252 <td>U64</td>
4253 <td> </td>
4254 <td>
4255
4256  
4257 </td>
4258 <td>
4259 <b></b>
4260  
4261 </td>
4262 </tr>
4263 <tr>
4264 <td>packets_in</td>
4265 <td>U64</td>
4266 <td> </td>
4267 <td>
4268
4269  
4270 </td>
4271 <td>
4272 <b></b>
4273  
4274 </td>
4275 </tr>
4276 <tr>
4277 <td>bytes_out</td>
4278 <td>U64</td>
4279 <td> </td>
4280 <td>
4281
4282  
4283 </td>
4284 <td>
4285 <b></b>
4286  
4287 </td>
4288 </tr>
4289 <tr>
4290 <td>packets_out</td>
4291 <td>U64</td>
4292 <td> </td>
4293 <td>
4294
4295  
4296 </td>
4297 <td>
4298 <b></b>
4299  
4300 </td>
4301 </tr>
4302 </table>
4303
4304 <h4>
4305 <a name="S0016"></a>ORIGIN: SERVER;
4306 MESSAGE: idle_warn</h4>
4307 NUMERIC TYPE (hex): 0016
4308 (possibly in response to
4309 <a href="#C0016">idle_reset(0016)</a>
4310 )
4311 <p>
4312 idle warning, autologout soon (10 minutes...)
4313 </p>
4314 <table border="1" width="100%">
4315 <tr>
4316 <th width="10%">NAME</th>
4317 <th width="8%">TYPE</th>
4318 <th width="4%">VALUE</th>
4319 <th>DESCRIPTION</th>
4320 <th width="10%">GUARD</th>
4321 </tr>
4322 </table>
4323
4324 <h4>
4325 <a name="S0018"></a>ORIGIN: SERVER;
4326 MESSAGE: login</h4>
4327 NUMERIC TYPE (hex): 0018
4328 (possibly in response to
4329 <a href="#C0000">login(0000)</a>
4330 )
4331 <p>
4332 </p>
4333 <table border="1" width="100%">
4334 <tr>
4335 <th width="10%">NAME</th>
4336 <th width="8%">TYPE</th>
4337 <th width="4%">VALUE</th>
4338 <th>DESCRIPTION</th>
4339 <th width="10%">GUARD</th>
4340 </tr>
4341 <tr>
4342 <td>result</td>
4343 <td>CONSTANT</td>
4344 <td>"login error 18" </td>
4345 <td>
4346 ** maybe more following? **
4347
4348  
4349 </td>
4350 <td>
4351 <b></b>
4352  
4353 </td>
4354 </tr>
4355 </table>
4356
4357 <h4>
4358 <a name="S0022"></a>ORIGIN: SERVER;
4359 MESSAGE: login</h4>
4360 NUMERIC TYPE (hex): 0022
4361 (possibly in response to
4362 <a href="#C0000">login(0000)</a>
4363 )
4364 <p>
4365 I was blocked sooo many times for developing this client that it was
4366 easy to figure out. The KGS admins sure need no extra nazi training
4367 :(
4368 </p>
4369 <table border="1" width="100%">
4370 <tr>
4371 <th width="10%">NAME</th>
4372 <th width="8%">TYPE</th>
4373 <th width="4%">VALUE</th>
4374 <th>DESCRIPTION</th>
4375 <th width="10%">GUARD</th>
4376 </tr>
4377 <tr>
4378 <td>reason</td>
4379 <td>STRING</td>
4380 <td> </td>
4381 <td>
4382
4383  
4384 </td>
4385 <td>
4386 <b></b>
4387  
4388 </td>
4389 </tr>
4390 <tr>
4391 <td>result</td>
4392 <td>CONSTANT</td>
4393 <td>"user or ip blocked" </td>
4394 <td>
4395
4396  
4397 </td>
4398 <td>
4399 <b></b>
4400  
4401 </td>
4402 </tr>
4403 </table>
4404
4405 <h4>
4406 <a name="S001b"></a>ORIGIN: SERVER;
4407 MESSAGE: timewarning_default</h4>
4408 NUMERIC TYPE (hex): 001b
4409 (possibly in response to
4410 <a href="#C0000">login(0000)</a>
4411 )
4412 <p>
4413 WILD guess
4414 </p>
4415 <table border="1" width="100%">
4416 <tr>
4417 <th width="10%">NAME</th>
4418 <th width="8%">TYPE</th>
4419 <th width="4%">VALUE</th>
4420 <th>DESCRIPTION</th>
4421 <th width="10%">GUARD</th>
4422 </tr>
4423 <tr>
4424 <td>channel</td>
4425 <td>U16</td>
4426 <td> </td>
4427 <td>
4428
4429  
4430 </td>
4431 <td>
4432 <b></b>
4433  
4434 </td>
4435 </tr>
4436 <tr>
4437 <td>time</td>
4438 <td>U16</td>
4439 <td> </td>
4440 <td>
4441
4442  
4443 </td>
4444 <td>
4445 <b></b>
4446  
4447 </td>
4448 </tr>
4449 </table>
4450
4451 <h4>
4452 <a name="S001c"></a>ORIGIN: SERVER;
4453 MESSAGE: idle_err</h4>
4454 NUMERIC TYPE (hex): 001c<p>
4455 autologout
4456 </p>
4457 <table border="1" width="100%">
4458 <tr>
4459 <th width="10%">NAME</th>
4460 <th width="8%">TYPE</th>
4461 <th width="4%">VALUE</th>
4462 <th>DESCRIPTION</th>
4463 <th width="10%">GUARD</th>
4464 </tr>
4465 </table>
4466
4467 <h4>
4468 <a name="S001d"></a>ORIGIN: SERVER;
4469 MESSAGE: ping</h4>
4470 NUMERIC TYPE (hex): 001d<p>
4471 Sent by the server regularly, but not answering them
4472 isn't valid. Strange form of keepalive?
4473 </p>
4474 <table border="1" width="100%">
4475 <tr>
4476 <th width="10%">NAME</th>
4477 <th width="8%">TYPE</th>
4478 <th width="4%">VALUE</th>
4479 <th>DESCRIPTION</th>
4480 <th width="10%">GUARD</th>
4481 </tr>
4482 </table>
4483
4484 <h4>
4485 <a name="S001e"></a>ORIGIN: SERVER;
4486 MESSAGE: usergraph</h4>
4487 NUMERIC TYPE (hex): 001e
4488 (possibly in response to
4489 <a href="#C001e">req_usergraph(001e)</a>
4490 )
4491 <p>
4492 User graph data.
4493 </p>
4494 <table border="1" width="100%">
4495 <tr>
4496 <th width="10%">NAME</th>
4497 <th width="8%">TYPE</th>
4498 <th width="4%">VALUE</th>
4499 <th>DESCRIPTION</th>
4500 <th width="10%">GUARD</th>
4501 </tr>
4502 <tr>
4503 <td>name</td>
4504 <td>username</td>
4505 <td> </td>
4506 <td>
4507
4508  
4509 </td>
4510 <td>
4511 <b></b>
4512  
4513 </td>
4514 </tr>
4515 <tr>
4516 <td>data</td>
4517 <td>I16</td>
4518 <td> </td>
4519 <td>
4520 If empty, no graph is available. The unit seems to
4521 be centi-kyu, with 1 dan == 0, 2 dan == 100, 1 kyu == -100.
4522 There is probably one entry per day, the newest one last.
4523
4524  
4525 </td>
4526 <td>
4527 <b></b>
4528  
4529 </td>
4530 </tr>
4531 </table>
4532
4533 <h4>
4534 <a name="S001f"></a>ORIGIN: SERVER;
4535 MESSAGE: memo</h4>
4536 NUMERIC TYPE (hex): 001f
4537 (possibly in response to
4538 <a href="#C001f">fetch_memos(001f)</a>
4539 )
4540 <p>
4541 Unclear. "Leave Message"?
4542 6 strings following.
4543 </p>
4544 <table border="1" width="100%">
4545 <tr>
4546 <th width="10%">NAME</th>
4547 <th width="8%">TYPE</th>
4548 <th width="4%">VALUE</th>
4549 <th>DESCRIPTION</th>
4550 <th width="10%">GUARD</th>
4551 </tr>
4552 <tr>
4553 <td>s1</td>
4554 <td>STRING</td>
4555 <td> </td>
4556 <td>
4557
4558  
4559 </td>
4560 <td>
4561 <b></b>
4562  
4563 </td>
4564 </tr>
4565 <tr>
4566 <td>s2</td>
4567 <td>STRING</td>
4568 <td> </td>
4569 <td>
4570
4571  
4572 </td>
4573 <td>
4574 <b></b>
4575  
4576 </td>
4577 </tr>
4578 <tr>
4579 <td>s3</td>
4580 <td>STRING</td>
4581 <td> </td>
4582 <td>
4583
4584  
4585 </td>
4586 <td>
4587 <b></b>
4588  
4589 </td>
4590 </tr>
4591 <tr>
4592 <td>s4</td>
4593 <td>STRING</td>
4594 <td> </td>
4595 <td>
4596
4597  
4598 </td>
4599 <td>
4600 <b></b>
4601  
4602 </td>
4603 </tr>
4604 <tr>
4605 <td>s5</td>
4606 <td>STRING</td>
4607 <td> </td>
4608 <td>
4609
4610  
4611 </td>
4612 <td>
4613 <b></b>
4614  
4615 </td>
4616 </tr>
4617 <tr>
4618 <td>s6</td>
4619 <td>STRING</td>
4620 <td> </td>
4621 <td>
4622
4623  
4624 </td>
4625 <td>
4626 <b></b>
4627  
4628 </td>
4629 </tr>
4630 </table>
4631
4632 <h4>
4633 <a name="S0021"></a>ORIGIN: SERVER;
4634 MESSAGE: userpic</h4>
4635 NUMERIC TYPE (hex): 0021
4636 (possibly in response to
4637 <a href="#C0021">req_pic(0021)</a>
4638 )
4639 <p>
4640 </p>
4641 <table border="1" width="100%">
4642 <tr>
4643 <th width="10%">NAME</th>
4644 <th width="8%">TYPE</th>
4645 <th width="4%">VALUE</th>
4646 <th>DESCRIPTION</th>
4647 <th width="10%">GUARD</th>
4648 </tr>
4649 <tr>
4650 <td>name</td>
4651 <td>username</td>
4652 <td> </td>
4653 <td>
4654 Reply to pic_req, contains an image in jpeg format.
4655
4656  
4657 </td>
4658 <td>
4659 <b></b>
4660  
4661 </td>
4662 </tr>
4663 <tr>
4664 <td>data</td>
4665 <td>DATA</td>
4666 <td> </td>
4667 <td>
4668
4669  
4670 </td>
4671 <td>
4672 <b></b>
4673  
4674 </td>
4675 </tr>
4676 </table>
4677
4678 <h4>
4679 <a name="S0100"></a>ORIGIN: SERVER;
4680 MESSAGE: gnotice</h4>
4681 NUMERIC TYPE (hex): 0100
4682 (possibly in response to
4683 <a href="#C0100">gnotice(0100)</a>
4684 )
4685 <p>
4686 global notice, sent to everybody
4687 </p>
4688 <table border="1" width="100%">
4689 <tr>
4690 <th width="10%">NAME</th>
4691 <th width="8%">TYPE</th>
4692 <th width="4%">VALUE</th>
4693 <th>DESCRIPTION</th>
4694 <th width="10%">GUARD</th>
4695 </tr>
4696 <tr>
4697 <td>notice</td>
4698 <td>STRING</td>
4699 <td> </td>
4700 <td>
4701
4702  
4703 </td>
4704 <td>
4705 <b></b>
4706  
4707 </td>
4708 </tr>
4709 </table>
4710
4711 <h4>
4712 <a name="S0202"></a>ORIGIN: SERVER;
4713 MESSAGE: notify_event</h4>
4714 NUMERIC TYPE (hex): 0202<p>
4715 # maybe soe notify? Totally unclear.
4716 # loc 0" type="userinfo, flags etc. loc 1 =&gt; gameinfo?, loc 2 =&gt; game result (more data)
4717 </p>
4718 <table border="1" width="100%">
4719 <tr>
4720 <th width="10%">NAME</th>
4721 <th width="8%">TYPE</th>
4722 <th width="4%">VALUE</th>
4723 <th>DESCRIPTION</th>
4724 <th width="10%">GUARD</th>
4725 </tr>
4726 <tr>
4727 <td>event</td>
4728 <td>U32</td>
4729 <td> </td>
4730 <td>
4731
4732  
4733 </td>
4734 <td>
4735 <b></b>
4736  
4737 </td>
4738 </tr>
4739 <tr>
4740 <td>user</td>
4741 <td>user</td>
4742 <td> </td>
4743 <td>
4744
4745  
4746 </td>
4747 <td>
4748 <b></b>
4749  
4750 </td>
4751 </tr>
4752 <tr>
4753 <td>gamerecord</td>
4754 <td>game_record</td>
4755 <td> </td>
4756 <td>
4757
4758  
4759 </td>
4760 <td>
4761 <b>event</b> == 2
4762  
4763 </td>
4764 </tr>
4765 </table>
4766
4767 <h4>
4768 <a name="S0310"></a>ORIGIN: SERVER;
4769 MESSAGE: priv_room</h4>
4770 NUMERIC TYPE (hex): 0310<p>
4771 "permission denied" when joining a room
4772 </p>
4773 <table border="1" width="100%">
4774 <tr>
4775 <th width="10%">NAME</th>
4776 <th width="8%">TYPE</th>
4777 <th width="4%">VALUE</th>
4778 <th>DESCRIPTION</th>
4779 <th width="10%">GUARD</th>
4780 </tr>
4781 <tr>
4782 <td>name</td>
4783 <td>STRING</td>
4784 <td> </td>
4785 <td>
4786
4787  
4788 </td>
4789 <td>
4790 <b></b>
4791  
4792 </td>
4793 </tr>
4794 </table>
4795
4796 <h4>
4797 <a name="S0318"></a>ORIGIN: SERVER;
4798 MESSAGE: upd_rooms</h4>
4799 NUMERIC TYPE (hex): 0318
4800 (possibly in response to
4801 <a href="#C0318">list_rooms(0318)</a>
4802 )
4803 <p>
4804 </p>
4805 <table border="1" width="100%">
4806 <tr>
4807 <th width="10%">NAME</th>
4808 <th width="8%">TYPE</th>
4809 <th width="4%">VALUE</th>
4810 <th>DESCRIPTION</th>
4811 <th width="10%">GUARD</th>
4812 </tr>
4813 <tr>
4814 <td>rooms</td>
4815 <td>room</td>
4816 <td> </td>
4817 <td>
4818
4819  
4820 </td>
4821 <td>
4822 <b></b>
4823  
4824 </td>
4825 </tr>
4826 </table>
4827
4828 <h4>
4829 <a name="S0411"></a>ORIGIN: SERVER;
4830 MESSAGE: chal_defaults</h4>
4831 NUMERIC TYPE (hex): 0411
4832 (possibly in response to
4833 <a href="#C0000">login(0000)</a>
4834 )
4835 <p>
4836 </p>
4837 <table border="1" width="100%">
4838 <tr>
4839 <th width="10%">NAME</th>
4840 <th width="8%">TYPE</th>
4841 <th width="4%">VALUE</th>
4842 <th>DESCRIPTION</th>
4843 <th width="10%">GUARD</th>
4844 </tr>
4845 <tr>
4846 <td>channel</td>
4847 <td>U16</td>
4848 <td> </td>
4849 <td>
4850
4851  
4852 </td>
4853 <td>
4854 <b></b>
4855  
4856 </td>
4857 </tr>
4858 <tr>
4859 <td>defaults</td>
4860 <td>challenge_defaults</td>
4861 <td> </td>
4862 <td>
4863
4864  
4865 </td>
4866 <td>
4867 <b></b>
4868  
4869 </td>
4870 </tr>
4871 </table>
4872
4873 <h4>
4874 <a name="S0412"></a>ORIGIN: SERVER;
4875 MESSAGE: rej_game</h4>
4876 NUMERIC TYPE (hex): 0412<p>
4877 Unable to create challenge. The channel might be optional.
4878 </p>
4879 <table border="1" width="100%">
4880 <tr>
4881 <th width="10%">NAME</th>
4882 <th width="8%">TYPE</th>
4883 <th width="4%">VALUE</th>
4884 <th>DESCRIPTION</th>
4885 <th width="10%">GUARD</th>
4886 </tr>
4887 <tr>
4888 <td>channel</td>
4889 <td>U16</td>
4890 <td> </td>
4891 <td>
4892
4893  
4894 </td>
4895 <td>
4896 <b></b>
4897  
4898 </td>
4899 </tr>
4900 </table>
4901
4902 <h4>
4903 <a name="S0414"></a>ORIGIN: SERVER;
4904 MESSAGE: game_record</h4>
4905 NUMERIC TYPE (hex): 0414
4906 (possibly in response to
4907 <a href="#C0413">req_game_record(0413)</a>
4908 )
4909 <p>
4910 The users game record.
4911 </p>
4912 <table border="1" width="100%">
4913 <tr>
4914 <th width="10%">NAME</th>
4915 <th width="8%">TYPE</th>
4916 <th width="4%">VALUE</th>
4917 <th>DESCRIPTION</th>
4918 <th width="10%">GUARD</th>
4919 </tr>
4920 <tr>
4921 <td>name</td>
4922 <td>username</td>
4923 <td> </td>
4924 <td>
4925
4926  
4927 </td>
4928 <td>
4929 <b></b>
4930  
4931 </td>
4932 </tr>
4933 <tr>
4934 <td>more</td>
4935 <td>flag</td>
4936 <td> </td>
4937 <td>
4938 Wether more games are available (must be requested manually)
4939
4940  
4941 </td>
4942 <td>
4943 <b></b>
4944  
4945 </td>
4946 </tr>
4947 <tr>
4948 <td>games</td>
4949 <td>game_record</td>
4950 <td> </td>
4951 <td>
4952
4953  
4954 </td>
4955 <td>
4956 <b></b>
4957  
4958 </td>
4959 </tr>
4960 </table>
4961
4962 <h4>
4963 <a name="S041c"></a>ORIGIN: SERVER;
4964 MESSAGE: upd_game2</h4>
4965 NUMERIC TYPE (hex): 041c<p>
4966 Unclear.
4967 </p>
4968 <table border="1" width="100%">
4969 <tr>
4970 <th width="10%">NAME</th>
4971 <th width="8%">TYPE</th>
4972 <th width="4%">VALUE</th>
4973 <th>DESCRIPTION</th>
4974 <th width="10%">GUARD</th>
4975 </tr>
4976 <tr>
4977 <td>channel_junk</td>
4978 <td>U16</td>
4979 <td> </td>
4980 <td>
4981
4982  
4983 </td>
4984 <td>
4985 <b></b>
4986  
4987 </td>
4988 </tr>
4989 <tr>
4990 <td>game</td>
4991 <td>game</td>
4992 <td> </td>
4993 <td>
4994
4995  
4996 </td>
4997 <td>
4998 <b></b>
4999  
5000 </td>
5001 </tr>
5002 </table>
5003
5004 <h3>Room messages</h3>
5005
5006 <p>Not all room messages are for rooms only, and rooms need to parse
5007 not only these messages. Orthogonality, what for?</p>
5008
5009 <h4>
5010 <a name="S4300"></a>ORIGIN: SERVER;
5011 MESSAGE: join_room</h4>
5012 NUMERIC TYPE (hex): 4300
5013 (possibly in response to
5014 <a href="#C4300">join_room(4300)</a>
5015 )
5016 <p>
5017 </p>
5018 <table border="1" width="100%">
5019 <tr>
5020 <th width="10%">NAME</th>
5021 <th width="8%">TYPE</th>
5022 <th width="4%">VALUE</th>
5023 <th>DESCRIPTION</th>
5024 <th width="10%">GUARD</th>
5025 </tr>
5026 <tr>
5027 <td>channel</td>
5028 <td>U16</td>
5029 <td> </td>
5030 <td>
5031
5032  
5033 </td>
5034 <td>
5035 <b></b>
5036  
5037 </td>
5038 </tr>
5039 <tr>
5040 <td>users</td>
5041 <td>user</td>
5042 <td> </td>
5043 <td>
5044
5045  
5046 </td>
5047 <td>
5048 <b></b>
5049  
5050 </td>
5051 </tr>
5052 </table>
5053
5054 <h4>
5055 <a name="S4301"></a>ORIGIN: SERVER;
5056 MESSAGE: msg_room</h4>
5057 NUMERIC TYPE (hex): 4301<p>
5058 </p>
5059 <table border="1" width="100%">
5060 <tr>
5061 <th width="10%">NAME</th>
5062 <th width="8%">TYPE</th>
5063 <th width="4%">VALUE</th>
5064 <th>DESCRIPTION</th>
5065 <th width="10%">GUARD</th>
5066 </tr>
5067 <tr>
5068 <td>channel</td>
5069 <td>U16</td>
5070 <td> </td>
5071 <td>
5072
5073  
5074 </td>
5075 <td>
5076 <b></b>
5077  
5078 </td>
5079 </tr>
5080 <tr>
5081 <td>name</td>
5082 <td>username</td>
5083 <td> </td>
5084 <td>
5085
5086  
5087 </td>
5088 <td>
5089 <b></b>
5090  
5091 </td>
5092 </tr>
5093 <tr>
5094 <td>message</td>
5095 <td>STRING</td>
5096 <td> </td>
5097 <td>
5098
5099  
5100 </td>
5101 <td>
5102 <b></b>
5103  
5104 </td>
5105 </tr>
5106 </table>
5107
5108 <h4>
5109 <a name="S4302"></a>ORIGIN: SERVER;
5110 MESSAGE: part_room</h4>
5111 NUMERIC TYPE (hex): 4302<p>
5112 </p>
5113 <table border="1" width="100%">
5114 <tr>
5115 <th width="10%">NAME</th>
5116 <th width="8%">TYPE</th>
5117 <th width="4%">VALUE</th>
5118 <th>DESCRIPTION</th>
5119 <th width="10%">GUARD</th>
5120 </tr>
5121 <tr>
5122 <td>channel</td>
5123 <td>U16</td>
5124 <td> </td>
5125 <td>
5126
5127  
5128 </td>
5129 <td>
5130 <b></b>
5131  
5132 </td>
5133 </tr>
5134 <tr>
5135 <td>user</td>
5136 <td>user</td>
5137 <td> </td>
5138 <td>
5139
5140  
5141 </td>
5142 <td>
5143 <b></b>
5144  
5145 </td>
5146 </tr>
5147 </table>
5148
5149 <h4>
5150 <a name="S4303"></a>ORIGIN: SERVER;
5151 MESSAGE: del_room</h4>
5152 NUMERIC TYPE (hex): 4303<p>
5153 </p>
5154 <table border="1" width="100%">
5155 <tr>
5156 <th width="10%">NAME</th>
5157 <th width="8%">TYPE</th>
5158 <th width="4%">VALUE</th>
5159 <th>DESCRIPTION</th>
5160 <th width="10%">GUARD</th>
5161 </tr>
5162 <tr>
5163 <td>channel</td>
5164 <td>U16</td>
5165 <td> </td>
5166 <td>
5167
5168  
5169 </td>
5170 <td>
5171 <b></b>
5172  
5173 </td>
5174 </tr>
5175 </table>
5176
5177 <h4>
5178 <a name="S4304"></a>ORIGIN: SERVER;
5179 MESSAGE: upd_games</h4>
5180 NUMERIC TYPE (hex): 4304<p>
5181 </p>
5182 <table border="1" width="100%">
5183 <tr>
5184 <th width="10%">NAME</th>
5185 <th width="8%">TYPE</th>
5186 <th width="4%">VALUE</th>
5187 <th>DESCRIPTION</th>
5188 <th width="10%">GUARD</th>
5189 </tr>
5190 <tr>
5191 <td>channel</td>
5192 <td>U16</td>
5193 <td> </td>
5194 <td>
5195
5196  
5197 </td>
5198 <td>
5199 <b></b>
5200  
5201 </td>
5202 </tr>
5203 <tr>
5204 <td>games</td>
5205 <td>game</td>
5206 <td> </td>
5207 <td>
5208
5209  
5210 </td>
5211 <td>
5212 <b></b>
5213  
5214 </td>
5215 </tr>
5216 </table>
5217
5218 <h4>
5219 <a name="S4319"></a>ORIGIN: SERVER;
5220 MESSAGE: desc_room</h4>
5221 NUMERIC TYPE (hex): 4319<p>
5222 </p>
5223 <table border="1" width="100%">
5224 <tr>
5225 <th width="10%">NAME</th>
5226 <th width="8%">TYPE</th>
5227 <th width="4%">VALUE</th>
5228 <th>DESCRIPTION</th>
5229 <th width="10%">GUARD</th>
5230 </tr>
5231 <tr>
5232 <td>channel</td>
5233 <td>U16</td>
5234 <td> </td>
5235 <td>
5236
5237  
5238 </td>
5239 <td>
5240 <b></b>
5241  
5242 </td>
5243 </tr>
5244 <tr>
5245 <td>owner</td>
5246 <td>username</td>
5247 <td> </td>
5248 <td>
5249
5250  
5251 </td>
5252 <td>
5253 <b></b>
5254  
5255 </td>
5256 </tr>
5257 <tr>
5258 <td>description</td>
5259 <td>STRING</td>
5260 <td> </td>
5261 <td>
5262
5263  
5264 </td>
5265 <td>
5266 <b></b>
5267  
5268 </td>
5269 </tr>
5270 </table>
5271
5272 <h3>Game messages</h3>
5273
5274 <h4>
5275 <a name="S4400"></a>ORIGIN: SERVER;
5276 MESSAGE: upd_challenge</h4>
5277 NUMERIC TYPE (hex): 4400<p>
5278 Unclear.
5279 </p>
5280 <table border="1" width="100%">
5281 <tr>
5282 <th width="10%">NAME</th>
5283 <th width="8%">TYPE</th>
5284 <th width="4%">VALUE</th>
5285 <th>DESCRIPTION</th>
5286 <th width="10%">GUARD</th>
5287 </tr>
5288 <tr>
5289 <td>channel</td>
5290 <td>U16</td>
5291 <td> </td>
5292 <td>
5293
5294  
5295 </td>
5296 <td>
5297 <b></b>
5298  
5299 </td>
5300 </tr>
5301 <tr>
5302 <td>challenge</td>
5303 <td>challenge</td>
5304 <td> </td>
5305 <td>
5306
5307  
5308 </td>
5309 <td>
5310 <b></b>
5311  
5312 </td>
5313 </tr>
5314 </table>
5315
5316 <h4>
5317 <a name="S4401"></a>ORIGIN: SERVER;
5318 MESSAGE: upd_game</h4>
5319 NUMERIC TYPE (hex): 4401<p>
5320 </p>
5321 <table border="1" width="100%">
5322 <tr>
5323 <th width="10%">NAME</th>
5324 <th width="8%">TYPE</th>
5325 <th width="4%">VALUE</th>
5326 <th>DESCRIPTION</th>
5327 <th width="10%">GUARD</th>
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 <tr>
5343 <td>game</td>
5344 <td>game</td>
5345 <td> </td>
5346 <td>
5347
5348  
5349 </td>
5350 <td>
5351 <b></b>
5352  
5353 </td>
5354 </tr>
5355 </table>
5356
5357 <h4>
5358 <a name="S4402"></a>ORIGIN: SERVER;
5359 MESSAGE: del_game</h4>
5360 NUMERIC TYPE (hex): 4402<p>
5361 </p>
5362 <table border="1" width="100%">
5363 <tr>
5364 <th width="10%">NAME</th>
5365 <th width="8%">TYPE</th>
5366 <th width="4%">VALUE</th>
5367 <th>DESCRIPTION</th>
5368 <th width="10%">GUARD</th>
5369 </tr>
5370 <tr>
5371 <td>channel</td>
5372 <td>U16</td>
5373 <td> </td>
5374 <td>
5375
5376  
5377 </td>
5378 <td>
5379 <b></b>
5380  
5381 </td>
5382 </tr>
5383 </table>
5384
5385 <h4>
5386 <a name="S4403"></a>ORIGIN: SERVER;
5387 MESSAGE: upd_observers</h4>
5388 NUMERIC TYPE (hex): 4403<p>
5389 </p>
5390 <table border="1" width="100%">
5391 <tr>
5392 <th width="10%">NAME</th>
5393 <th width="8%">TYPE</th>
5394 <th width="4%">VALUE</th>
5395 <th>DESCRIPTION</th>
5396 <th width="10%">GUARD</th>
5397 </tr>
5398 <tr>
5399 <td>channel</td>
5400 <td>U16</td>
5401 <td> </td>
5402 <td>
5403
5404  
5405 </td>
5406 <td>
5407 <b></b>
5408  
5409 </td>
5410 </tr>
5411 <tr>
5412 <td>users</td>
5413 <td>user</td>
5414 <td> </td>
5415 <td>
5416
5417  
5418 </td>
5419 <td>
5420 <b></b>
5421  
5422 </td>
5423 </tr>
5424 </table>
5425
5426 <h4>
5427 <a name="S4404"></a>ORIGIN: SERVER;
5428 MESSAGE: del_observer</h4>
5429 NUMERIC TYPE (hex): 4404<p>
5430 </p>
5431 <table border="1" width="100%">
5432 <tr>
5433 <th width="10%">NAME</th>
5434 <th width="8%">TYPE</th>
5435 <th width="4%">VALUE</th>
5436 <th>DESCRIPTION</th>
5437 <th width="10%">GUARD</th>
5438 </tr>
5439 <tr>
5440 <td>channel</td>
5441 <td>U16</td>
5442 <td> </td>
5443 <td>
5444
5445  
5446 </td>
5447 <td>
5448 <b></b>
5449  
5450 </td>
5451 </tr>
5452 <tr>
5453 <td>name</td>
5454 <td>username</td>
5455 <td> </td>
5456 <td>
5457
5458  
5459 </td>
5460 <td>
5461 <b></b>
5462  
5463 </td>
5464 </tr>
5465 </table>
5466
5467 <h4>
5468 <a name="S4405"></a>ORIGIN: SERVER;
5469 MESSAGE: set_tree</h4>
5470 NUMERIC TYPE (hex): 4405<p>
5471 </p>
5472 <table border="1" width="100%">
5473 <tr>
5474 <th width="10%">NAME</th>
5475 <th width="8%">TYPE</th>
5476 <th width="4%">VALUE</th>
5477 <th>DESCRIPTION</th>
5478 <th width="10%">GUARD</th>
5479 </tr>
5480 <tr>
5481 <td>channel</td>
5482 <td>U16</td>
5483 <td> </td>
5484 <td>
5485
5486  
5487 </td>
5488 <td>
5489 <b></b>
5490  
5491 </td>
5492 </tr>
5493 <tr>
5494 <td>tree</td>
5495 <td>TREE</td>
5496 <td> </td>
5497 <td>
5498
5499  
5500 </td>
5501 <td>
5502 <b></b>
5503  
5504 </td>
5505 </tr>
5506 </table>
5507
5508 <h4>
5509 <a name="S4406"></a>ORIGIN: SERVER;
5510 MESSAGE: upd_tree</h4>
5511 NUMERIC TYPE (hex): 4406<p>
5512 </p>
5513 <table border="1" width="100%">
5514 <tr>
5515 <th width="10%">NAME</th>
5516 <th width="8%">TYPE</th>
5517 <th width="4%">VALUE</th>
5518 <th>DESCRIPTION</th>
5519 <th width="10%">GUARD</th>
5520 </tr>
5521 <tr>
5522 <td>channel</td>
5523 <td>U16</td>
5524 <td> </td>
5525 <td>
5526
5527  
5528 </td>
5529 <td>
5530 <b></b>
5531  
5532 </td>
5533 </tr>
5534 <tr>
5535 <td>tree</td>
5536 <td>TREE</td>
5537 <td> </td>
5538 <td>
5539
5540  
5541 </td>
5542 <td>
5543 <b></b>
5544  
5545 </td>
5546 </tr>
5547 </table>
5548
5549 <h4>
5550 <a name="S4409"></a>ORIGIN: SERVER;
5551 MESSAGE: superko</h4>
5552 NUMERIC TYPE (hex): 4409<p>
5553 Superko-warning.
5554 </p>
5555 <table border="1" width="100%">
5556 <tr>
5557 <th width="10%">NAME</th>
5558 <th width="8%">TYPE</th>
5559 <th width="4%">VALUE</th>
5560 <th>DESCRIPTION</th>
5561 <th width="10%">GUARD</th>
5562 </tr>
5563 <tr>
5564 <td>channel</td>
5565 <td>U16</td>
5566 <td> </td>
5567 <td>
5568
5569  
5570 </td>
5571 <td>
5572 <b></b>
5573  
5574 </td>
5575 </tr>
5576 </table>
5577
5578 <h4>
5579 <a name="S440b"></a>ORIGIN: SERVER;
5580 MESSAGE: final_result</h4>
5581 NUMERIC TYPE (hex): 440b<p>
5582 </p>
5583 <table border="1" width="100%">
5584 <tr>
5585 <th width="10%">NAME</th>
5586 <th width="8%">TYPE</th>
5587 <th width="4%">VALUE</th>
5588 <th>DESCRIPTION</th>
5589 <th width="10%">GUARD</th>
5590 </tr>
5591 <tr>
5592 <td>channel</td>
5593 <td>U16</td>
5594 <td> </td>
5595 <td>
5596
5597  
5598 </td>
5599 <td>
5600 <b></b>
5601  
5602 </td>
5603 </tr>
5604 <tr>
5605 <td>blackscore</td>
5606 <td>scorevalues</td>
5607 <td> </td>
5608 <td>
5609
5610  
5611 </td>
5612 <td>
5613 <b></b>
5614  
5615 </td>
5616 </tr>
5617 <tr>
5618 <td>whitescore</td>
5619 <td>scorevalues</td>
5620 <td> </td>
5621 <td>
5622
5623  
5624 </td>
5625 <td>
5626 <b></b>
5627  
5628 </td>
5629 </tr>
5630 </table>
5631
5632 <h4>
5633 <a name="S440e"></a>ORIGIN: SERVER;
5634 MESSAGE: req_undo</h4>
5635 NUMERIC TYPE (hex): 440e<p>
5636 </p>
5637 <table border="1" width="100%">
5638 <tr>
5639 <th width="10%">NAME</th>
5640 <th width="8%">TYPE</th>
5641 <th width="4%">VALUE</th>
5642 <th>DESCRIPTION</th>
5643 <th width="10%">GUARD</th>
5644 </tr>
5645 <tr>
5646 <td>channel</td>
5647 <td>U16</td>
5648 <td> </td>
5649 <td>
5650
5651
5652  
5653 </td>
5654 <td>
5655 <b></b>
5656  
5657 </td>
5658 </tr>
5659 </table>
5660
5661 <h4>
5662 <a name="S4410"></a>ORIGIN: SERVER;
5663 MESSAGE: resign_game</h4>
5664 NUMERIC TYPE (hex): 4410<p>
5665 </p>
5666 <table border="1" width="100%">
5667 <tr>
5668 <th width="10%">NAME</th>
5669 <th width="8%">TYPE</th>
5670 <th width="4%">VALUE</th>
5671 <th>DESCRIPTION</th>
5672 <th width="10%">GUARD</th>
5673 </tr>
5674 <tr>
5675 <td>channel</td>
5676 <td>U16</td>
5677 <td> </td>
5678 <td>
5679
5680  
5681 </td>
5682 <td>
5683 <b></b>
5684  
5685 </td>
5686 </tr>
5687 <tr>
5688 <td>player</td>
5689 <td>U8</td>
5690 <td> </td>
5691 <td>
5692
5693  
5694 </td>
5695 <td>
5696 <b></b>
5697  
5698 </td>
5699 </tr>
5700 </table>
5701
5702 <h4>
5703 <a name="S441a"></a>ORIGIN: SERVER;
5704 MESSAGE: set_teacher</h4>
5705 NUMERIC TYPE (hex): 441a<p>
5706 </p>
5707 <table border="1" width="100%">
5708 <tr>
5709 <th width="10%">NAME</th>
5710 <th width="8%">TYPE</th>
5711 <th width="4%">VALUE</th>
5712 <th>DESCRIPTION</th>
5713 <th width="10%">GUARD</th>
5714 </tr>
5715 <tr>
5716 <td>channel</td>
5717 <td>U16</td>
5718 <td> </td>
5719 <td>
5720
5721  
5722 </td>
5723 <td>
5724 <b></b>
5725  
5726 </td>
5727 </tr>
5728 <tr>
5729 <td>name</td>
5730 <td>username</td>
5731 <td> </td>
5732 <td>
5733
5734  
5735 </td>
5736 <td>
5737 <b></b>
5738  
5739 </td>
5740 </tr>
5741 </table>
5742
5743 <h4>
5744 <a name="S441d"></a>ORIGIN: SERVER;
5745 MESSAGE: owner_left</h4>
5746 NUMERIC TYPE (hex): 441d<p>
5747 Unclear.
5748 </p>
5749 <table border="1" width="100%">
5750 <tr>
5751 <th width="10%">NAME</th>
5752 <th width="8%">TYPE</th>
5753 <th width="4%">VALUE</th>
5754 <th>DESCRIPTION</th>
5755 <th width="10%">GUARD</th>
5756 </tr>
5757 <tr>
5758 <td>channel</td>
5759 <td>U16</td>
5760 <td> </td>
5761 <td>
5762
5763  
5764 </td>
5765 <td>
5766 <b></b>
5767  
5768 </td>
5769 </tr>
5770 </table>
5771
5772 <h4>
5773 <a name="S441e"></a>ORIGIN: SERVER;
5774 MESSAGE: teacher_left</h4>
5775 NUMERIC TYPE (hex): 441e<p>
5776 Unclear.
5777 </p>
5778 <table border="1" width="100%">
5779 <tr>
5780 <th width="10%">NAME</th>
5781 <th width="8%">TYPE</th>
5782 <th width="4%">VALUE</th>
5783 <th>DESCRIPTION</th>
5784 <th width="10%">GUARD</th>
5785 </tr>
5786 <tr>
5787 <td>channel</td>
5788 <td>U16</td>
5789 <td> </td>
5790 <td>
5791
5792  
5793 </td>
5794 <td>
5795 <b></b>
5796  
5797 </td>
5798 </tr>
5799 </table>
5800
5801 <h4>
5802 <a name="S4422"></a>ORIGIN: SERVER;
5803 MESSAGE: unknown4422</h4>
5804 NUMERIC TYPE (hex): 4422<p>
5805 change teacher? something to do with editing?
5806 </p>
5807 <table border="1" width="100%">
5808 <tr>
5809 <th width="10%">NAME</th>
5810 <th width="8%">TYPE</th>
5811 <th width="4%">VALUE</th>
5812 <th>DESCRIPTION</th>
5813 <th width="10%">GUARD</th>
5814 </tr>
5815 <tr>
5816 <td>channel</td>
5817 <td>U16</td>
5818 <td> </td>
5819 <td>
5820
5821  
5822 </td>
5823 <td>
5824 <b></b>
5825  
5826 </td>
5827 </tr>
5828 <tr>
5829 <td>name1</td>
5830 <td>username</td>
5831 <td> </td>
5832 <td>
5833
5834  
5835 </td>
5836 <td>
5837 <b></b>
5838  
5839 </td>
5840 </tr>
5841 <tr>
5842 <td>name2</td>
5843 <td>username</td>
5844 <td> </td>
5845 <td>
5846
5847  
5848 </td>
5849 <td>
5850 <b></b>
5851  
5852 </td>
5853 </tr>
5854 </table>
5855
5856 <h4>
5857 <a name="S4428"></a>ORIGIN: SERVER;
5858 MESSAGE: add_tree</h4>
5859 NUMERIC TYPE (hex): 4428<p>
5860 <p>See <a href="#S4405">set_tree(4405)</a>. In addition, flags the tree as being
5861 uploaded completely.</p>
5862 </p>
5863 <table border="1" width="100%">
5864 <tr>
5865 <th width="10%">NAME</th>
5866 <th width="8%">TYPE</th>
5867 <th width="4%">VALUE</th>
5868 <th>DESCRIPTION</th>
5869 <th width="10%">GUARD</th>
5870 </tr>
5871 <tr>
5872 <td>channel</td>
5873 <td>U16</td>
5874 <td> </td>
5875 <td>
5876
5877  
5878 </td>
5879 <td>
5880 <b></b>
5881  
5882 </td>
5883 </tr>
5884 <tr>
5885 <td>tree</td>
5886 <td>TREE</td>
5887 <td> </td>
5888 <td>
5889
5890  
5891 </td>
5892 <td>
5893 <b></b>
5894  
5895 </td>
5896 </tr>
5897 </table>
5898
5899 <h4>
5900 <a name="S4433"></a>ORIGIN: SERVER;
5901 MESSAGE: req_result</h4>
5902 NUMERIC TYPE (hex): 4433<p>
5903 Unclear.
5904 </p>
5905 <table border="1" width="100%">
5906 <tr>
5907 <th width="10%">NAME</th>
5908 <th width="8%">TYPE</th>
5909 <th width="4%">VALUE</th>
5910 <th>DESCRIPTION</th>
5911 <th width="10%">GUARD</th>
5912 </tr>
5913 <tr>
5914 <td>channel</td>
5915 <td>U16</td>
5916 <td> </td>
5917 <td>
5918 # # recv_result(?)
5919
5920  
5921 </td>
5922 <td>
5923 <b></b>
5924  
5925 </td>
5926 </tr>
5927 </table>
5928
5929 <h4>
5930 <a name="S4434"></a>ORIGIN: SERVER;
5931 MESSAGE: unknown4434</h4>
5932 NUMERIC TYPE (hex): 4434<p>
5933 </p>
5934 <table border="1" width="100%">
5935 <tr>
5936 <th width="10%">NAME</th>
5937 <th width="8%">TYPE</th>
5938 <th width="4%">VALUE</th>
5939 <th>DESCRIPTION</th>
5940 <th width="10%">GUARD</th>
5941 </tr>
5942 <tr>
5943 <td>channel</td>
5944 <td>U16</td>
5945 <td> </td>
5946 <td>
5947
5948  
5949 </td>
5950 <td>
5951 <b></b>
5952  
5953 </td>
5954 </tr>
5955 <tr>
5956 <td>b1</td>
5957 <td>U8</td>
5958 <td> </td>
5959 <td>
5960 ?? !demonstration game??
5961
5962  
5963 </td>
5964 <td>
5965 <b></b>
5966  
5967 </td>
5968 </tr>
5969 </table>
5970
5971 </body>
5972 </html>