ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.39
Committed: Sat Aug 16 16:17:52 2003 UTC (20 years, 9 months ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.38: +76 -1 lines
Log Message:
*** empty log message ***

File Contents

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