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