ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.73
Committed: Tue Jun 1 10:11:14 2004 UTC (20 years ago) by root
Content type: text/html
Branch: MAIN
Changes since 1.72: +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.72 $</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: unknown_030c</h4>
5815 NUMERIC TYPE (hex): 030c<p>
5816 <p>Not the slightest... No payload, either.</p>
5817 </p>
5818 <table border="1" width="100%">
5819 <tr>
5820 <th width="10%">NAME</th>
5821 <th width="8%">TYPE</th>
5822 <th width="4%">VALUE</th>
5823 <th>DESCRIPTION</th>
5824 <th width="10%">GUARD</th>
5825 </tr>
5826 </table>
5827
5828 <h4>
5829 <a name="S0310"></a>ORIGIN: SERVER;
5830 MESSAGE: priv_room</h4>
5831 NUMERIC TYPE (hex): 0310<p>
5832 "permission denied" when joining a room
5833 </p>
5834 <table border="1" width="100%">
5835 <tr>
5836 <th width="10%">NAME</th>
5837 <th width="8%">TYPE</th>
5838 <th width="4%">VALUE</th>
5839 <th>DESCRIPTION</th>
5840 <th width="10%">GUARD</th>
5841 </tr>
5842 <tr>
5843 <td>name</td>
5844 <td>STRING</td>
5845 <td> </td>
5846 <td>
5847
5848  
5849 </td>
5850 <td>
5851 <b></b>
5852  
5853 </td>
5854 </tr>
5855 </table>
5856
5857 <h4>
5858 <a name="S0318"></a>ORIGIN: SERVER;
5859 MESSAGE: upd_rooms</h4>
5860 NUMERIC TYPE (hex): 0318
5861 (possibly in response to
5862 <a href="#C0318">list_rooms(0318)</a>
5863 )
5864 <p>
5865 </p>
5866 <table border="1" width="100%">
5867 <tr>
5868 <th width="10%">NAME</th>
5869 <th width="8%">TYPE</th>
5870 <th width="4%">VALUE</th>
5871 <th>DESCRIPTION</th>
5872 <th width="10%">GUARD</th>
5873 </tr>
5874 <tr>
5875 <td>rooms</td>
5876 <td>room</td>
5877 <td> </td>
5878 <td>
5879
5880  
5881 </td>
5882 <td>
5883 <b></b>
5884  
5885 </td>
5886 </tr>
5887 </table>
5888
5889 <h4>
5890 <a name="S0411"></a>ORIGIN: SERVER;
5891 MESSAGE: chal_defaults</h4>
5892 NUMERIC TYPE (hex): 0411
5893 (possibly in response to
5894 <a href="#C0000">login(0000)</a>
5895 )
5896 <p>
5897 </p>
5898 <table border="1" width="100%">
5899 <tr>
5900 <th width="10%">NAME</th>
5901 <th width="8%">TYPE</th>
5902 <th width="4%">VALUE</th>
5903 <th>DESCRIPTION</th>
5904 <th width="10%">GUARD</th>
5905 </tr>
5906 <tr>
5907 <td>channel</td>
5908 <td>U16</td>
5909 <td> </td>
5910 <td>
5911
5912  
5913 </td>
5914 <td>
5915 <b></b>
5916  
5917 </td>
5918 </tr>
5919 <tr>
5920 <td>defaults</td>
5921 <td>challenge_defaults</td>
5922 <td> </td>
5923 <td>
5924
5925  
5926 </td>
5927 <td>
5928 <b></b>
5929  
5930 </td>
5931 </tr>
5932 </table>
5933
5934 <h4>
5935 <a name="S0412"></a>ORIGIN: SERVER;
5936 MESSAGE: already_playing</h4>
5937 NUMERIC TYPE (hex): 0412<p>
5938 Unable to create new game.
5939 </p>
5940 <table border="1" width="100%">
5941 <tr>
5942 <th width="10%">NAME</th>
5943 <th width="8%">TYPE</th>
5944 <th width="4%">VALUE</th>
5945 <th>DESCRIPTION</th>
5946 <th width="10%">GUARD</th>
5947 </tr>
5948 <tr>
5949 <td>message</td>
5950 <td>CONSTANT</td>
5951 <td>Sorry, you are already playing in one game, so you can't start playing in another. </td>
5952 <td>
5953
5954  
5955 </td>
5956 <td>
5957 <b></b>
5958  
5959 </td>
5960 </tr>
5961 <tr>
5962 <td>cid</td>
5963 <td>CLIENTID16</td>
5964 <td> </td>
5965 <td>
5966 <p>The cid of the new_game etc. request.</p>
5967
5968  
5969 </td>
5970 <td>
5971 <b></b>
5972  
5973 </td>
5974 </tr>
5975 </table>
5976
5977 <h4>
5978 <a name="S0414"></a>ORIGIN: SERVER;
5979 MESSAGE: game_record</h4>
5980 NUMERIC TYPE (hex): 0414
5981 (possibly in response to
5982 <a href="#C0413">req_game_record(0413)</a>
5983 )
5984 <p>
5985 The users game record.
5986 </p>
5987 <table border="1" width="100%">
5988 <tr>
5989 <th width="10%">NAME</th>
5990 <th width="8%">TYPE</th>
5991 <th width="4%">VALUE</th>
5992 <th>DESCRIPTION</th>
5993 <th width="10%">GUARD</th>
5994 </tr>
5995 <tr>
5996 <td>name</td>
5997 <td>username</td>
5998 <td> </td>
5999 <td>
6000
6001  
6002 </td>
6003 <td>
6004 <b></b>
6005  
6006 </td>
6007 </tr>
6008 <tr>
6009 <td>more</td>
6010 <td>flag</td>
6011 <td> </td>
6012 <td>
6013 Wether more games are available (must be requested manually)
6014
6015  
6016 </td>
6017 <td>
6018 <b></b>
6019  
6020 </td>
6021 </tr>
6022 <tr>
6023 <td>games</td>
6024 <td>game_record</td>
6025 <td> </td>
6026 <td>
6027
6028  
6029 </td>
6030 <td>
6031 <b></b>
6032  
6033 </td>
6034 </tr>
6035 </table>
6036
6037 <h4>
6038 <a name="S0417"></a>ORIGIN: SERVER;
6039 MESSAGE: error</h4>
6040 NUMERIC TYPE (hex): 0417<p>
6041 </p>
6042 <table border="1" width="100%">
6043 <tr>
6044 <th width="10%">NAME</th>
6045 <th width="8%">TYPE</th>
6046 <th width="4%">VALUE</th>
6047 <th>DESCRIPTION</th>
6048 <th width="10%">GUARD</th>
6049 </tr>
6050 <tr>
6051 <td>message</td>
6052 <td>CONSTANT</td>
6053 <td>Sorry, your opponent is currently not logged in, so you can't resume this game. </td>
6054 <td>
6055
6056  
6057 </td>
6058 <td>
6059 <b></b>
6060  
6061 </td>
6062 </tr>
6063 </table>
6064
6065 <h4>
6066 <a name="S0418"></a>ORIGIN: SERVER;
6067 MESSAGE: error</h4>
6068 NUMERIC TYPE (hex): 0418<p>
6069 </p>
6070 <table border="1" width="100%">
6071 <tr>
6072 <th width="10%">NAME</th>
6073 <th width="8%">TYPE</th>
6074 <th width="4%">VALUE</th>
6075 <th>DESCRIPTION</th>
6076 <th width="10%">GUARD</th>
6077 </tr>
6078 <tr>
6079 <td>message</td>
6080 <td>CONSTANT</td>
6081 <td>Sorry, your opponent is already playing in a game, so you cannot continue this one. </td>
6082 <td>
6083
6084  
6085 </td>
6086 <td>
6087 <b></b>
6088  
6089 </td>
6090 </tr>
6091 </table>
6092
6093 <h4>
6094 <a name="S0419"></a>ORIGIN: SERVER;
6095 MESSAGE: error</h4>
6096 NUMERIC TYPE (hex): 0419<p>
6097 </p>
6098 <table border="1" width="100%">
6099 <tr>
6100 <th width="10%">NAME</th>
6101 <th width="8%">TYPE</th>
6102 <th width="4%">VALUE</th>
6103 <th>DESCRIPTION</th>
6104 <th width="10%">GUARD</th>
6105 </tr>
6106 <tr>
6107 <td>message</td>
6108 <td>CONSTANT</td>
6109 <td>Sorry, the server is out of boards! Please wait a few minutes and try to start a game again. </td>
6110 <td>
6111
6112  
6113 </td>
6114 <td>
6115 <b></b>
6116  
6117 </td>
6118 </tr>
6119 </table>
6120
6121 <h4>
6122 <a name="S041c"></a>ORIGIN: SERVER;
6123 MESSAGE: upd_game2</h4>
6124 NUMERIC TYPE (hex): 041c<p>
6125 Unclear.
6126 </p>
6127 <table border="1" width="100%">
6128 <tr>
6129 <th width="10%">NAME</th>
6130 <th width="8%">TYPE</th>
6131 <th width="4%">VALUE</th>
6132 <th>DESCRIPTION</th>
6133 <th width="10%">GUARD</th>
6134 </tr>
6135 <tr>
6136 <td>channel_junk</td>
6137 <td>U16</td>
6138 <td> </td>
6139 <td>
6140
6141  
6142 </td>
6143 <td>
6144 <b></b>
6145  
6146 </td>
6147 </tr>
6148 <tr>
6149 <td>game</td>
6150 <td>game</td>
6151 <td> </td>
6152 <td>
6153
6154  
6155 </td>
6156 <td>
6157 <b></b>
6158  
6159 </td>
6160 </tr>
6161 </table>
6162
6163 <h4>
6164 <a name="S041f"></a>ORIGIN: SERVER;
6165 MESSAGE: error</h4>
6166 NUMERIC TYPE (hex): 041f<p>
6167 </p>
6168 <table border="1" width="100%">
6169 <tr>
6170 <th width="10%">NAME</th>
6171 <th width="8%">TYPE</th>
6172 <th width="4%">VALUE</th>
6173 <th>DESCRIPTION</th>
6174 <th width="10%">GUARD</th>
6175 </tr>
6176 <tr>
6177 <td>message</td>
6178 <td>CONSTANT</td>
6179 <td>Sorry, the game you tried to load was not correctly saved...probably caused by the server crashing. It cannot be recovered. </td>
6180 <td>
6181
6182  
6183 </td>
6184 <td>
6185 <b></b>
6186  
6187 </td>
6188 </tr>
6189 </table>
6190
6191 <h4>
6192 <a name="S0420"></a>ORIGIN: SERVER;
6193 MESSAGE: error</h4>
6194 NUMERIC TYPE (hex): 0420<p>
6195 </p>
6196 <table border="1" width="100%">
6197 <tr>
6198 <th width="10%">NAME</th>
6199 <th width="8%">TYPE</th>
6200 <th width="4%">VALUE</th>
6201 <th>DESCRIPTION</th>
6202 <th width="10%">GUARD</th>
6203 </tr>
6204 <tr>
6205 <td>message</td>
6206 <td>CONSTANT</td>
6207 <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>
6208 <td>
6209
6210  
6211 </td>
6212 <td>
6213 <b></b>
6214  
6215 </td>
6216 </tr>
6217 </table>
6218
6219 <h4>
6220 <a name="S0421"></a>ORIGIN: SERVER;
6221 MESSAGE: error</h4>
6222 NUMERIC TYPE (hex): 0421<p>
6223 </p>
6224 <table border="1" width="100%">
6225 <tr>
6226 <th width="10%">NAME</th>
6227 <th width="8%">TYPE</th>
6228 <th width="4%">VALUE</th>
6229 <th>DESCRIPTION</th>
6230 <th width="10%">GUARD</th>
6231 </tr>
6232 <tr>
6233 <td>message</td>
6234 <td>CONSTANT</td>
6235 <td>Sorry, this game is a private lesson. You will not be allowed to observe it. </td>
6236 <td>
6237
6238  
6239 </td>
6240 <td>
6241 <b></b>
6242  
6243 </td>
6244 </tr>
6245 </table>
6246
6247 <!-- added recently -->
6248 <h4>
6249 <a name="S043a"></a>ORIGIN: SERVER;
6250 MESSAGE: add_global_challenge</h4>
6251 NUMERIC TYPE (hex): 043a<p>
6252 <p>
6253 Adds or updates a global challenge (open game list).
6254 </p>
6255 </p>
6256 <table border="1" width="100%">
6257 <tr>
6258 <th width="10%">NAME</th>
6259 <th width="8%">TYPE</th>
6260 <th width="4%">VALUE</th>
6261 <th>DESCRIPTION</th>
6262 <th width="10%">GUARD</th>
6263 </tr>
6264 <tr>
6265 <td>channel</td>
6266 <td>U16</td>
6267 <td> </td>
6268 <td>
6269 <p>
6270 The room this game is associated with.
6271 </p>
6272
6273  
6274 </td>
6275 <td>
6276 <b></b>
6277  
6278 </td>
6279 </tr>
6280 <tr>
6281 <td>game</td>
6282 <td>game</td>
6283 <td> </td>
6284 <td>
6285 <p>The game. The "moves" member contains a small number. Probably garbage.</p>
6286
6287  
6288 </td>
6289 <td>
6290 <b></b>
6291  
6292 </td>
6293 </tr>
6294 </table>
6295
6296 <h3>Room messages</h3>
6297
6298 <p>Not all room messages are for rooms only, and rooms need to parse
6299 not only these messages. Orthogonality, what for?</p>
6300
6301 <h4>
6302 <a name="S4300"></a>ORIGIN: SERVER;
6303 MESSAGE: join_room</h4>
6304 NUMERIC TYPE (hex): 4300
6305 (possibly in response to
6306 <a href="#C4300">join_room(4300)</a>
6307 )
6308 <p>
6309 </p>
6310 <table border="1" width="100%">
6311 <tr>
6312 <th width="10%">NAME</th>
6313 <th width="8%">TYPE</th>
6314 <th width="4%">VALUE</th>
6315 <th>DESCRIPTION</th>
6316 <th width="10%">GUARD</th>
6317 </tr>
6318 <tr>
6319 <td>channel</td>
6320 <td>U16</td>
6321 <td> </td>
6322 <td>
6323
6324  
6325 </td>
6326 <td>
6327 <b></b>
6328  
6329 </td>
6330 </tr>
6331 <tr>
6332 <td>users</td>
6333 <td>user</td>
6334 <td> </td>
6335 <td>
6336
6337  
6338 </td>
6339 <td>
6340 <b></b>
6341  
6342 </td>
6343 </tr>
6344 </table>
6345
6346 <h4>
6347 <a name="S4301"></a>ORIGIN: SERVER;
6348 MESSAGE: msg_room</h4>
6349 NUMERIC TYPE (hex): 4301<p>
6350 </p>
6351 <table border="1" width="100%">
6352 <tr>
6353 <th width="10%">NAME</th>
6354 <th width="8%">TYPE</th>
6355 <th width="4%">VALUE</th>
6356 <th>DESCRIPTION</th>
6357 <th width="10%">GUARD</th>
6358 </tr>
6359 <tr>
6360 <td>channel</td>
6361 <td>U16</td>
6362 <td> </td>
6363 <td>
6364
6365  
6366 </td>
6367 <td>
6368 <b></b>
6369  
6370 </td>
6371 </tr>
6372 <tr>
6373 <td>name</td>
6374 <td>username</td>
6375 <td> </td>
6376 <td>
6377
6378  
6379 </td>
6380 <td>
6381 <b></b>
6382  
6383 </td>
6384 </tr>
6385 <tr>
6386 <td>message</td>
6387 <td>STRING</td>
6388 <td> </td>
6389 <td>
6390
6391  
6392 </td>
6393 <td>
6394 <b></b>
6395  
6396 </td>
6397 </tr>
6398 </table>
6399
6400 <h4>
6401 <a name="S4302"></a>ORIGIN: SERVER;
6402 MESSAGE: part_room</h4>
6403 NUMERIC TYPE (hex): 4302<p>
6404 </p>
6405 <table border="1" width="100%">
6406 <tr>
6407 <th width="10%">NAME</th>
6408 <th width="8%">TYPE</th>
6409 <th width="4%">VALUE</th>
6410 <th>DESCRIPTION</th>
6411 <th width="10%">GUARD</th>
6412 </tr>
6413 <tr>
6414 <td>channel</td>
6415 <td>U16</td>
6416 <td> </td>
6417 <td>
6418
6419  
6420 </td>
6421 <td>
6422 <b></b>
6423  
6424 </td>
6425 </tr>
6426 <tr>
6427 <td>user</td>
6428 <td>user</td>
6429 <td> </td>
6430 <td>
6431
6432  
6433 </td>
6434 <td>
6435 <b></b>
6436  
6437 </td>
6438 </tr>
6439 </table>
6440
6441 <h4>
6442 <a name="S4303"></a>ORIGIN: SERVER;
6443 MESSAGE: del_room</h4>
6444 NUMERIC TYPE (hex): 4303<p>
6445 </p>
6446 <table border="1" width="100%">
6447 <tr>
6448 <th width="10%">NAME</th>
6449 <th width="8%">TYPE</th>
6450 <th width="4%">VALUE</th>
6451 <th>DESCRIPTION</th>
6452 <th width="10%">GUARD</th>
6453 </tr>
6454 <tr>
6455 <td>channel</td>
6456 <td>U16</td>
6457 <td> </td>
6458 <td>
6459
6460  
6461 </td>
6462 <td>
6463 <b></b>
6464  
6465 </td>
6466 </tr>
6467 </table>
6468
6469 <h4>
6470 <a name="S4304"></a>ORIGIN: SERVER;
6471 MESSAGE: upd_games</h4>
6472 NUMERIC TYPE (hex): 4304<p>
6473 </p>
6474 <table border="1" width="100%">
6475 <tr>
6476 <th width="10%">NAME</th>
6477 <th width="8%">TYPE</th>
6478 <th width="4%">VALUE</th>
6479 <th>DESCRIPTION</th>
6480 <th width="10%">GUARD</th>
6481 </tr>
6482 <tr>
6483 <td>channel</td>
6484 <td>U16</td>
6485 <td> </td>
6486 <td>
6487
6488  
6489 </td>
6490 <td>
6491 <b></b>
6492  
6493 </td>
6494 </tr>
6495 <tr>
6496 <td>games</td>
6497 <td>game</td>
6498 <td> </td>
6499 <td>
6500
6501  
6502 </td>
6503 <td>
6504 <b></b>
6505  
6506 </td>
6507 </tr>
6508 </table>
6509
6510 <h4>
6511 <a name="S4319"></a>ORIGIN: SERVER;
6512 MESSAGE: desc_room</h4>
6513 NUMERIC TYPE (hex): 4319<p>
6514 </p>
6515 <table border="1" width="100%">
6516 <tr>
6517 <th width="10%">NAME</th>
6518 <th width="8%">TYPE</th>
6519 <th width="4%">VALUE</th>
6520 <th>DESCRIPTION</th>
6521 <th width="10%">GUARD</th>
6522 </tr>
6523 <tr>
6524 <td>channel</td>
6525 <td>U16</td>
6526 <td> </td>
6527 <td>
6528
6529  
6530 </td>
6531 <td>
6532 <b></b>
6533  
6534 </td>
6535 </tr>
6536 <tr>
6537 <td>owner</td>
6538 <td>username</td>
6539 <td> </td>
6540 <td>
6541
6542  
6543 </td>
6544 <td>
6545 <b></b>
6546  
6547 </td>
6548 </tr>
6549 <tr>
6550 <td>description</td>
6551 <td>STRING</td>
6552 <td> </td>
6553 <td>
6554
6555  
6556 </td>
6557 <td>
6558 <b></b>
6559  
6560 </td>
6561 </tr>
6562 </table>
6563
6564 <h3>Game messages</h3>
6565
6566 <h4>
6567 <a name="S4400"></a>ORIGIN: SERVER;
6568 MESSAGE: challenge</h4>
6569 NUMERIC TYPE (hex): 4400<p>
6570 Unclear.
6571 </p>
6572 <table border="1" width="100%">
6573 <tr>
6574 <th width="10%">NAME</th>
6575 <th width="8%">TYPE</th>
6576 <th width="4%">VALUE</th>
6577 <th>DESCRIPTION</th>
6578 <th width="10%">GUARD</th>
6579 </tr>
6580 <tr>
6581 <td>channel</td>
6582 <td>U16</td>
6583 <td> </td>
6584 <td>
6585
6586  
6587 </td>
6588 <td>
6589 <b></b>
6590  
6591 </td>
6592 </tr>
6593 <tr>
6594 <td>black</td>
6595 <td>user</td>
6596 <td> </td>
6597 <td>
6598
6599  
6600 </td>
6601 <td>
6602 <b></b>
6603  
6604 </td>
6605 </tr>
6606 <tr>
6607 <td>white</td>
6608 <td>user</td>
6609 <td> </td>
6610 <td>
6611
6612  
6613 </td>
6614 <td>
6615 <b></b>
6616  
6617 </td>
6618 </tr>
6619 <tr>
6620 <td>gametype</td>
6621 <td>U8</td>
6622 <td> </td>
6623 <td>
6624
6625  
6626 </td>
6627 <td>
6628 <b></b>
6629  
6630 </td>
6631 </tr>
6632 <tr>
6633 <td>cid</td>
6634 <td>CLIENTID8</td>
6635 <td> </td>
6636 <td>
6637 <p>Possibly an id. No idea. Better echo this from the challenge request.</p>
6638
6639  
6640 </td>
6641 <td>
6642 <b></b>
6643  
6644 </td>
6645 </tr>
6646 <tr>
6647 <td>rules</td>
6648 <td>rules</td>
6649 <td> </td>
6650 <td>
6651
6652  
6653 </td>
6654 <td>
6655 <b></b>
6656  
6657 </td>
6658 </tr>
6659 <tr>
6660 <td>notes</td>
6661 <td>STRING</td>
6662 <td> </td>
6663 <td>
6664 <p>This field is optional</p>
6665
6666  
6667 </td>
6668 <td>
6669 <b></b>
6670  
6671 </td>
6672 </tr>
6673 </table>
6674
6675 <h4>
6676 <a name="S4401"></a>ORIGIN: SERVER;
6677 MESSAGE: upd_game</h4>
6678 NUMERIC TYPE (hex): 4401<p>
6679 </p>
6680 <table border="1" width="100%">
6681 <tr>
6682 <th width="10%">NAME</th>
6683 <th width="8%">TYPE</th>
6684 <th width="4%">VALUE</th>
6685 <th>DESCRIPTION</th>
6686 <th width="10%">GUARD</th>
6687 </tr>
6688 <tr>
6689 <td>channel</td>
6690 <td>U16</td>
6691 <td> </td>
6692 <td>
6693
6694  
6695 </td>
6696 <td>
6697 <b></b>
6698  
6699 </td>
6700 </tr>
6701 <tr>
6702 <td>game</td>
6703 <td>game</td>
6704 <td> </td>
6705 <td>
6706
6707  
6708 </td>
6709 <td>
6710 <b></b>
6711  
6712 </td>
6713 </tr>
6714 </table>
6715
6716 <h4>
6717 <a name="S4402"></a>ORIGIN: SERVER;
6718 MESSAGE: del_game</h4>
6719 NUMERIC TYPE (hex): 4402<p>
6720 </p>
6721 <table border="1" width="100%">
6722 <tr>
6723 <th width="10%">NAME</th>
6724 <th width="8%">TYPE</th>
6725 <th width="4%">VALUE</th>
6726 <th>DESCRIPTION</th>
6727 <th width="10%">GUARD</th>
6728 </tr>
6729 <tr>
6730 <td>channel</td>
6731 <td>U16</td>
6732 <td> </td>
6733 <td>
6734
6735  
6736 </td>
6737 <td>
6738 <b></b>
6739  
6740 </td>
6741 </tr>
6742 </table>
6743
6744 <h4>
6745 <a name="S4403"></a>ORIGIN: SERVER;
6746 MESSAGE: upd_observers</h4>
6747 NUMERIC TYPE (hex): 4403<p>
6748 </p>
6749 <table border="1" width="100%">
6750 <tr>
6751 <th width="10%">NAME</th>
6752 <th width="8%">TYPE</th>
6753 <th width="4%">VALUE</th>
6754 <th>DESCRIPTION</th>
6755 <th width="10%">GUARD</th>
6756 </tr>
6757 <tr>
6758 <td>channel</td>
6759 <td>U16</td>
6760 <td> </td>
6761 <td>
6762
6763  
6764 </td>
6765 <td>
6766 <b></b>
6767  
6768 </td>
6769 </tr>
6770 <tr>
6771 <td>users</td>
6772 <td>user</td>
6773 <td> </td>
6774 <td>
6775
6776  
6777 </td>
6778 <td>
6779 <b></b>
6780  
6781 </td>
6782 </tr>
6783 </table>
6784
6785 <h4>
6786 <a name="S4404"></a>ORIGIN: SERVER;
6787 MESSAGE: del_observer</h4>
6788 NUMERIC TYPE (hex): 4404<p>
6789 </p>
6790 <table border="1" width="100%">
6791 <tr>
6792 <th width="10%">NAME</th>
6793 <th width="8%">TYPE</th>
6794 <th width="4%">VALUE</th>
6795 <th>DESCRIPTION</th>
6796 <th width="10%">GUARD</th>
6797 </tr>
6798 <tr>
6799 <td>channel</td>
6800 <td>U16</td>
6801 <td> </td>
6802 <td>
6803
6804  
6805 </td>
6806 <td>
6807 <b></b>
6808  
6809 </td>
6810 </tr>
6811 <tr>
6812 <td>name</td>
6813 <td>username</td>
6814 <td> </td>
6815 <td>
6816
6817  
6818 </td>
6819 <td>
6820 <b></b>
6821  
6822 </td>
6823 </tr>
6824 </table>
6825
6826 <h4>
6827 <a name="S4405"></a>ORIGIN: SERVER;
6828 MESSAGE: set_tree</h4>
6829 NUMERIC TYPE (hex): 4405<p>
6830 </p>
6831 <table border="1" width="100%">
6832 <tr>
6833 <th width="10%">NAME</th>
6834 <th width="8%">TYPE</th>
6835 <th width="4%">VALUE</th>
6836 <th>DESCRIPTION</th>
6837 <th width="10%">GUARD</th>
6838 </tr>
6839 <tr>
6840 <td>channel</td>
6841 <td>U16</td>
6842 <td> </td>
6843 <td>
6844
6845  
6846 </td>
6847 <td>
6848 <b></b>
6849  
6850 </td>
6851 </tr>
6852 <tr>
6853 <td>tree</td>
6854 <td>TREE</td>
6855 <td> </td>
6856 <td>
6857
6858  
6859 </td>
6860 <td>
6861 <b></b>
6862  
6863 </td>
6864 </tr>
6865 </table>
6866
6867 <h4>
6868 <a name="S4406"></a>ORIGIN: SERVER;
6869 MESSAGE: upd_tree</h4>
6870 NUMERIC TYPE (hex): 4406<p>
6871 </p>
6872 <table border="1" width="100%">
6873 <tr>
6874 <th width="10%">NAME</th>
6875 <th width="8%">TYPE</th>
6876 <th width="4%">VALUE</th>
6877 <th>DESCRIPTION</th>
6878 <th width="10%">GUARD</th>
6879 </tr>
6880 <tr>
6881 <td>channel</td>
6882 <td>U16</td>
6883 <td> </td>
6884 <td>
6885
6886  
6887 </td>
6888 <td>
6889 <b></b>
6890  
6891 </td>
6892 </tr>
6893 <tr>
6894 <td>tree</td>
6895 <td>TREE</td>
6896 <td> </td>
6897 <td>
6898
6899  
6900 </td>
6901 <td>
6902 <b></b>
6903  
6904 </td>
6905 </tr>
6906 </table>
6907
6908 <h4>
6909 <a name="S4409"></a>ORIGIN: SERVER;
6910 MESSAGE: superko</h4>
6911 NUMERIC TYPE (hex): 4409<p>
6912 Superko-warning.
6913 </p>
6914 <table border="1" width="100%">
6915 <tr>
6916 <th width="10%">NAME</th>
6917 <th width="8%">TYPE</th>
6918 <th width="4%">VALUE</th>
6919 <th>DESCRIPTION</th>
6920 <th width="10%">GUARD</th>
6921 </tr>
6922 <tr>
6923 <td>channel</td>
6924 <td>U16</td>
6925 <td> </td>
6926 <td>
6927
6928  
6929 </td>
6930 <td>
6931 <b></b>
6932  
6933 </td>
6934 </tr>
6935 </table>
6936
6937 <h4>
6938 <a name="S440a"></a>ORIGIN: SERVER;
6939 MESSAGE: game_done</h4>
6940 NUMERIC TYPE (hex): 440a<p>
6941 <p>Send by the server when one of the players sends a done.</p>
6942 </p>
6943 <table border="1" width="100%">
6944 <tr>
6945 <th width="10%">NAME</th>
6946 <th width="8%">TYPE</th>
6947 <th width="4%">VALUE</th>
6948 <th>DESCRIPTION</th>
6949 <th width="10%">GUARD</th>
6950 </tr>
6951 <tr>
6952 <td>channel</td>
6953 <td>U16</td>
6954 <td> </td>
6955 <td>
6956
6957  
6958 </td>
6959 <td>
6960 <b></b>
6961  
6962 </td>
6963 </tr>
6964 <tr>
6965 <td>id</td>
6966 <td>U32</td>
6967 <td> </td>
6968 <td>
6969 <p>An id field to make sure that the client responds to the correct done click.</p>
6970 <p>The high bit has the "please press done again" warning function, i.e. if set, opponent has changed board.</p>
6971
6972  
6973 </td>
6974 <td>
6975 <b></b>
6976  
6977 </td>
6978 </tr>
6979 <tr>
6980 <td>black</td>
6981 <td>flag</td>
6982 <td> </td>
6983 <td>
6984
6985  
6986 </td>
6987 <td>
6988 <b></b>
6989  
6990 </td>
6991 </tr>
6992 <tr>
6993 <td>white</td>
6994 <td>flag</td>
6995 <td> </td>
6996 <td>
6997
6998  
6999 </td>
7000 <td>
7001 <b></b>
7002  
7003 </td>
7004 </tr>
7005 </table>
7006
7007 <h4>
7008 <a name="S440b"></a>ORIGIN: SERVER;
7009 MESSAGE: final_result</h4>
7010 NUMERIC TYPE (hex): 440b<p>
7011 </p>
7012 <table border="1" width="100%">
7013 <tr>
7014 <th width="10%">NAME</th>
7015 <th width="8%">TYPE</th>
7016 <th width="4%">VALUE</th>
7017 <th>DESCRIPTION</th>
7018 <th width="10%">GUARD</th>
7019 </tr>
7020 <tr>
7021 <td>channel</td>
7022 <td>U16</td>
7023 <td> </td>
7024 <td>
7025
7026  
7027 </td>
7028 <td>
7029 <b></b>
7030  
7031 </td>
7032 </tr>
7033 <tr>
7034 <td>blackscore</td>
7035 <td>scorevalues</td>
7036 <td> </td>
7037 <td>
7038
7039  
7040 </td>
7041 <td>
7042 <b></b>
7043  
7044 </td>
7045 </tr>
7046 <tr>
7047 <td>whitescore</td>
7048 <td>scorevalues</td>
7049 <td> </td>
7050 <td>
7051
7052  
7053 </td>
7054 <td>
7055 <b></b>
7056  
7057 </td>
7058 </tr>
7059 </table>
7060
7061 <h4>
7062 <a name="S440c"></a>ORIGIN: SERVER;
7063 MESSAGE: time_win</h4>
7064 NUMERIC TYPE (hex): 440c<p>
7065 <p>Sent when the opponent is out of time and moves, or when the other
7066 requests <a href="#S0008">userinfo(0008)</a>.</p>
7067 </p>
7068 <table border="1" width="100%">
7069 <tr>
7070 <th width="10%">NAME</th>
7071 <th width="8%">TYPE</th>
7072 <th width="4%">VALUE</th>
7073 <th>DESCRIPTION</th>
7074 <th width="10%">GUARD</th>
7075 </tr>
7076 <tr>
7077 <td>channel</td>
7078 <td>U16</td>
7079 <td> </td>
7080 <td>
7081
7082  
7083 </td>
7084 <td>
7085 <b></b>
7086  
7087 </td>
7088 </tr>
7089 <tr>
7090 <td>player</td>
7091 <td>U8</td>
7092 <td> </td>
7093 <td>
7094 <p>Colour who won.</p>
7095
7096  
7097 </td>
7098 <td>
7099 <b></b>
7100  
7101 </td>
7102 </tr>
7103 </table>
7104
7105 <h4>
7106 <a name="S440e"></a>ORIGIN: SERVER;
7107 MESSAGE: req_undo</h4>
7108 NUMERIC TYPE (hex): 440e<p>
7109 </p>
7110 <table border="1" width="100%">
7111 <tr>
7112 <th width="10%">NAME</th>
7113 <th width="8%">TYPE</th>
7114 <th width="4%">VALUE</th>
7115 <th>DESCRIPTION</th>
7116 <th width="10%">GUARD</th>
7117 </tr>
7118 <tr>
7119 <td>channel</td>
7120 <td>U16</td>
7121 <td> </td>
7122 <td>
7123
7124  
7125 </td>
7126 <td>
7127 <b></b>
7128  
7129 </td>
7130 </tr>
7131 </table>
7132
7133 <h4>
7134 <a name="S4410"></a>ORIGIN: SERVER;
7135 MESSAGE: resign_game</h4>
7136 NUMERIC TYPE (hex): 4410<p>
7137 </p>
7138 <table border="1" width="100%">
7139 <tr>
7140 <th width="10%">NAME</th>
7141 <th width="8%">TYPE</th>
7142 <th width="4%">VALUE</th>
7143 <th>DESCRIPTION</th>
7144 <th width="10%">GUARD</th>
7145 </tr>
7146 <tr>
7147 <td>channel</td>
7148 <td>U16</td>
7149 <td> </td>
7150 <td>
7151
7152  
7153 </td>
7154 <td>
7155 <b></b>
7156  
7157 </td>
7158 </tr>
7159 <tr>
7160 <td>player</td>
7161 <td>U8</td>
7162 <td> </td>
7163 <td>
7164
7165  
7166 </td>
7167 <td>
7168 <b></b>
7169  
7170 </td>
7171 </tr>
7172 </table>
7173
7174 <h4>
7175 <a name="S4415"></a>ORIGIN: SERVER;
7176 MESSAGE: game_error</h4>
7177 NUMERIC TYPE (hex): 4415<p>
7178 </p>
7179 <table border="1" width="100%">
7180 <tr>
7181 <th width="10%">NAME</th>
7182 <th width="8%">TYPE</th>
7183 <th width="4%">VALUE</th>
7184 <th>DESCRIPTION</th>
7185 <th width="10%">GUARD</th>
7186 </tr>
7187 <tr>
7188 <td>channel</td>
7189 <td>U16</td>
7190 <td> </td>
7191 <td>
7192
7193  
7194 </td>
7195 <td>
7196 <b></b>
7197  
7198 </td>
7199 </tr>
7200 <tr>
7201 <td>message</td>
7202 <td>CONSTANT</td>
7203 <td>Sorry, this is a lecture game. Only authorized players are allowed to make comments. </td>
7204 <td>
7205
7206  
7207 </td>
7208 <td>
7209 <b></b>
7210  
7211 </td>
7212 </tr>
7213 </table>
7214
7215 <h4>
7216 <a name="S441a"></a>ORIGIN: SERVER;
7217 MESSAGE: set_teacher</h4>
7218 NUMERIC TYPE (hex): 441a<p>
7219 </p>
7220 <table border="1" width="100%">
7221 <tr>
7222 <th width="10%">NAME</th>
7223 <th width="8%">TYPE</th>
7224 <th width="4%">VALUE</th>
7225 <th>DESCRIPTION</th>
7226 <th width="10%">GUARD</th>
7227 </tr>
7228 <tr>
7229 <td>channel</td>
7230 <td>U16</td>
7231 <td> </td>
7232 <td>
7233
7234  
7235 </td>
7236 <td>
7237 <b></b>
7238  
7239 </td>
7240 </tr>
7241 <tr>
7242 <td>name</td>
7243 <td>username</td>
7244 <td> </td>
7245 <td>
7246
7247  
7248 </td>
7249 <td>
7250 <b></b>
7251  
7252 </td>
7253 </tr>
7254 </table>
7255
7256 <h4>
7257 <a name="S441d"></a>ORIGIN: SERVER;
7258 MESSAGE: owner_left</h4>
7259 NUMERIC TYPE (hex): 441d<p>
7260 </p>
7261 <table border="1" width="100%">
7262 <tr>
7263 <th width="10%">NAME</th>
7264 <th width="8%">TYPE</th>
7265 <th width="4%">VALUE</th>
7266 <th>DESCRIPTION</th>
7267 <th width="10%">GUARD</th>
7268 </tr>
7269 <tr>
7270 <td>channel</td>
7271 <td>U16</td>
7272 <td> </td>
7273 <td>
7274
7275  
7276 </td>
7277 <td>
7278 <b></b>
7279  
7280 </td>
7281 </tr>
7282 <tr>
7283 <td>message</td>
7284 <td>CONSTANT</td>
7285 <td>Sorry, the owner of this game has left. Nobody will be allowed to edit it until the owner returns. </td>
7286 <td>
7287
7288  
7289 </td>
7290 <td>
7291 <b></b>
7292  
7293 </td>
7294 </tr>
7295 </table>
7296
7297 <h4>
7298 <a name="S441e"></a>ORIGIN: SERVER;
7299 MESSAGE: teacher_left</h4>
7300 NUMERIC TYPE (hex): 441e<p>
7301 Unclear.
7302 </p>
7303 <table border="1" width="100%">
7304 <tr>
7305 <th width="10%">NAME</th>
7306 <th width="8%">TYPE</th>
7307 <th width="4%">VALUE</th>
7308 <th>DESCRIPTION</th>
7309 <th width="10%">GUARD</th>
7310 </tr>
7311 <tr>
7312 <td>channel</td>
7313 <td>U16</td>
7314 <td> </td>
7315 <td>
7316
7317  
7318 </td>
7319 <td>
7320 <b></b>
7321  
7322 </td>
7323 </tr>
7324 </table>
7325
7326 <h4>
7327 <a name="S4422"></a>ORIGIN: SERVER;
7328 MESSAGE: allow_user_result</h4>
7329 NUMERIC TYPE (hex): 4422<p>
7330 </p>
7331 <table border="1" width="100%">
7332 <tr>
7333 <th width="10%">NAME</th>
7334 <th width="8%">TYPE</th>
7335 <th width="4%">VALUE</th>
7336 <th>DESCRIPTION</th>
7337 <th width="10%">GUARD</th>
7338 </tr>
7339 <tr>
7340 <td>message</td>
7341 <td>CONSTANT</td>
7342 <td>User "%s" will now be allowed full access to your game. </td>
7343 <td>
7344
7345  
7346 </td>
7347 <td>
7348 <b></b>
7349  
7350 </td>
7351 </tr>
7352 <tr>
7353 <td>channel</td>
7354 <td>U16</td>
7355 <td> </td>
7356 <td>
7357
7358  
7359 </td>
7360 <td>
7361 <b></b>
7362  
7363 </td>
7364 </tr>
7365 </table>
7366
7367 <h4>
7368 <a name="S4424"></a>ORIGIN: SERVER;
7369 MESSAGE: allow_user_result</h4>
7370 NUMERIC TYPE (hex): 4424<p>
7371 </p>
7372 <table border="1" width="100%">
7373 <tr>
7374 <th width="10%">NAME</th>
7375 <th width="8%">TYPE</th>
7376 <th width="4%">VALUE</th>
7377 <th>DESCRIPTION</th>
7378 <th width="10%">GUARD</th>
7379 </tr>
7380 <tr>
7381 <td>message</td>
7382 <td>CONSTANT</td>
7383 <td>Sorry, user "%s" is a guest and cannot be allowed full access to your game. </td>
7384 <td>
7385
7386  
7387 </td>
7388 <td>
7389 <b></b>
7390  
7391 </td>
7392 </tr>
7393 <tr>
7394 <td>channel</td>
7395 <td>U16</td>
7396 <td> </td>
7397 <td>
7398
7399  
7400 </td>
7401 <td>
7402 <b></b>
7403  
7404 </td>
7405 </tr>
7406 </table>
7407
7408 <h4>
7409 <a name="S4425"></a>ORIGIN: SERVER;
7410 MESSAGE: allow_user_result</h4>
7411 NUMERIC TYPE (hex): 4425<p>
7412 </p>
7413 <table border="1" width="100%">
7414 <tr>
7415 <th width="10%">NAME</th>
7416 <th width="8%">TYPE</th>
7417 <th width="4%">VALUE</th>
7418 <th>DESCRIPTION</th>
7419 <th width="10%">GUARD</th>
7420 </tr>
7421 <tr>
7422 <td>message</td>
7423 <td>CONSTANT</td>
7424 <td>Sorry, user "%s" does not seem to exist and cannot be allowed into your game. </td>
7425 <td>
7426
7427  
7428 </td>
7429 <td>
7430 <b></b>
7431  
7432 </td>
7433 </tr>
7434 <tr>
7435 <td>channel</td>
7436 <td>U16</td>
7437 <td> </td>
7438 <td>
7439
7440  
7441 </td>
7442 <td>
7443 <b></b>
7444  
7445 </td>
7446 </tr>
7447 </table>
7448
7449 <h4>
7450 <a name="S4428"></a>ORIGIN: SERVER;
7451 MESSAGE: add_tree</h4>
7452 NUMERIC TYPE (hex): 4428<p>
7453 <p>See <a href="#S4405">set_tree(4405)</a>. In addition, flags the tree as being
7454 uploaded completely.</p>
7455 </p>
7456 <table border="1" width="100%">
7457 <tr>
7458 <th width="10%">NAME</th>
7459 <th width="8%">TYPE</th>
7460 <th width="4%">VALUE</th>
7461 <th>DESCRIPTION</th>
7462 <th width="10%">GUARD</th>
7463 </tr>
7464 <tr>
7465 <td>channel</td>
7466 <td>U16</td>
7467 <td> </td>
7468 <td>
7469
7470  
7471 </td>
7472 <td>
7473 <b></b>
7474  
7475 </td>
7476 </tr>
7477 <tr>
7478 <td>tree</td>
7479 <td>TREE</td>
7480 <td> </td>
7481 <td>
7482
7483  
7484 </td>
7485 <td>
7486 <b></b>
7487  
7488 </td>
7489 </tr>
7490 </table>
7491
7492 <h4>
7493 <a name="S4429"></a>ORIGIN: SERVER;
7494 MESSAGE: reject_challenge</h4>
7495 NUMERIC TYPE (hex): 4429<p>
7496 Reject a challenge by a given user. Not checked.
7497 </p>
7498 <table border="1" width="100%">
7499 <tr>
7500 <th width="10%">NAME</th>
7501 <th width="8%">TYPE</th>
7502 <th width="4%">VALUE</th>
7503 <th>DESCRIPTION</th>
7504 <th width="10%">GUARD</th>
7505 </tr>
7506 <tr>
7507 <td>channel</td>
7508 <td>U16</td>
7509 <td> </td>
7510 <td>
7511
7512  
7513 </td>
7514 <td>
7515 <b></b>
7516  
7517 </td>
7518 </tr>
7519 <tr>
7520 <td>name</td>
7521 <td>username</td>
7522 <td> </td>
7523 <td>
7524
7525  
7526 </td>
7527 <td>
7528 <b></b>
7529  
7530 </td>
7531 </tr>
7532 <tr>
7533 <td>gametype</td>
7534 <td>U8</td>
7535 <td> </td>
7536 <td>
7537
7538  
7539 </td>
7540 <td>
7541 <b></b>
7542  
7543 </td>
7544 </tr>
7545 <tr>
7546 <td>cid</td>
7547 <td>CLIENTID8</td>
7548 <td> </td>
7549 <td>
7550 <p>Possibly an id. No idea. Better echo this from the challenge request.</p>
7551
7552  
7553 </td>
7554 <td>
7555 <b></b>
7556  
7557 </td>
7558 </tr>
7559 <tr>
7560 <td>rules</td>
7561 <td>rules</td>
7562 <td> </td>
7563 <td>
7564
7565  
7566 </td>
7567 <td>
7568 <b></b>
7569  
7570 </td>
7571 </tr>
7572 </table>
7573
7574 <h4>
7575 <a name="S442b"></a>ORIGIN: SERVER;
7576 MESSAGE: set_comments</h4>
7577 NUMERIC TYPE (hex): 442b<p>
7578 <p>Sent at end of games to set the comments not seen previously.</p>
7579 </p>
7580 <table border="1" width="100%">
7581 <tr>
7582 <th width="10%">NAME</th>
7583 <th width="8%">TYPE</th>
7584 <th width="4%">VALUE</th>
7585 <th>DESCRIPTION</th>
7586 <th width="10%">GUARD</th>
7587 </tr>
7588 <tr>
7589 <td>channel</td>
7590 <td>U16</td>
7591 <td> </td>
7592 <td>
7593
7594  
7595 </td>
7596 <td>
7597 <b></b>
7598  
7599 </td>
7600 </tr>
7601 <tr>
7602 <td>node</td>
7603 <td>U32</td>
7604 <td> </td>
7605 <td>
7606
7607  
7608 </td>
7609 <td>
7610 <b></b>
7611  
7612 </td>
7613 </tr>
7614 <tr>
7615 <td>comments</td>
7616 <td>STRING</td>
7617 <td> </td>
7618 <td>
7619
7620  
7621 </td>
7622 <td>
7623 <b></b>
7624  
7625 </td>
7626 </tr>
7627 </table>
7628
7629 <h4>
7630 <a name="S442c"></a>ORIGIN: SERVER;
7631 MESSAGE: add_comments</h4>
7632 NUMERIC TYPE (hex): 442c<p>
7633 <p>Sent at end of games to add all game commentary.</p>
7634 </p>
7635 <table border="1" width="100%">
7636 <tr>
7637 <th width="10%">NAME</th>
7638 <th width="8%">TYPE</th>
7639 <th width="4%">VALUE</th>
7640 <th>DESCRIPTION</th>
7641 <th width="10%">GUARD</th>
7642 </tr>
7643 <tr>
7644 <td>channel</td>
7645 <td>U16</td>
7646 <td> </td>
7647 <td>
7648
7649  
7650 </td>
7651 <td>
7652 <b></b>
7653  
7654 </td>
7655 </tr>
7656 <tr>
7657 <td>node</td>
7658 <td>U32</td>
7659 <td> </td>
7660 <td>
7661
7662  
7663 </td>
7664 <td>
7665 <b></b>
7666  
7667 </td>
7668 </tr>
7669 <tr>
7670 <td>comments</td>
7671 <td>STRING</td>
7672 <td> </td>
7673 <td>
7674
7675  
7676 </td>
7677 <td>
7678 <b></b>
7679  
7680 </td>
7681 </tr>
7682 </table>
7683
7684 <h4>
7685 <a name="S442d"></a>ORIGIN: SERVER;
7686 MESSAGE: more_comments</h4>
7687 NUMERIC TYPE (hex): 442d<p>
7688 <p>Quite brokenly, the server sends you this to make you ask for more comments.
7689 Reply with <a href="#S442d">more_comments(442d)</a>.</p>
7690 </p>
7691 <table border="1" width="100%">
7692 <tr>
7693 <th width="10%">NAME</th>
7694 <th width="8%">TYPE</th>
7695 <th width="4%">VALUE</th>
7696 <th>DESCRIPTION</th>
7697 <th width="10%">GUARD</th>
7698 </tr>
7699 <tr>
7700 <td>channel</td>
7701 <td>U16</td>
7702 <td> </td>
7703 <td>
7704
7705  
7706 </td>
7707 <td>
7708 <b></b>
7709  
7710 </td>
7711 </tr>
7712 <tr>
7713 <td>node</td>
7714 <td>U32</td>
7715 <td> </td>
7716 <td>
7717
7718  
7719 </td>
7720 <td>
7721 <b></b>
7722  
7723 </td>
7724 </tr>
7725 </table>
7726
7727 <h4>
7728 <a name="S442f"></a>ORIGIN: SERVER;
7729 MESSAGE: new_game</h4>
7730 NUMERIC TYPE (hex): 442f<p>
7731 <p>Notifies the client that a new game has been created. This
7732 message is sent long *after* upd_games and upd_observers etc.
7733 have been received. *sigh*</p>
7734 </p>
7735 <table border="1" width="100%">
7736 <tr>
7737 <th width="10%">NAME</th>
7738 <th width="8%">TYPE</th>
7739 <th width="4%">VALUE</th>
7740 <th>DESCRIPTION</th>
7741 <th width="10%">GUARD</th>
7742 </tr>
7743 <tr>
7744 <td>channel</td>
7745 <td>U16</td>
7746 <td> </td>
7747 <td>
7748 <p>The newly created game.</p>
7749
7750  
7751 </td>
7752 <td>
7753 <b></b>
7754  
7755 </td>
7756 </tr>
7757 <tr>
7758 <td>cid</td>
7759 <td>CLIENTID16</td>
7760 <td> </td>
7761 <td>
7762 <p>The ID sent to the server in new_game.</p>
7763
7764  
7765 </td>
7766 <td>
7767 <b></b>
7768  
7769 </td>
7770 </tr>
7771 </table>
7772
7773 <h4>
7774 <a name="S4433"></a>ORIGIN: SERVER;
7775 MESSAGE: req_result</h4>
7776 NUMERIC TYPE (hex): 4433<p>
7777 Unclear.
7778 </p>
7779 <table border="1" width="100%">
7780 <tr>
7781 <th width="10%">NAME</th>
7782 <th width="8%">TYPE</th>
7783 <th width="4%">VALUE</th>
7784 <th>DESCRIPTION</th>
7785 <th width="10%">GUARD</th>
7786 </tr>
7787 <tr>
7788 <td>channel</td>
7789 <td>U16</td>
7790 <td> </td>
7791 <td>
7792 # # recv_result(?)
7793
7794  
7795 </td>
7796 <td>
7797 <b></b>
7798  
7799 </td>
7800 </tr>
7801 </table>
7802
7803 <h4>
7804 <a name="S4434"></a>ORIGIN: SERVER;
7805 MESSAGE: set_quiet</h4>
7806 NUMERIC TYPE (hex): 4434<p>
7807 <p>Sets (or clears) the quiet flag on a game.</p>
7808 </p>
7809 <table border="1" width="100%">
7810 <tr>
7811 <th width="10%">NAME</th>
7812 <th width="8%">TYPE</th>
7813 <th width="4%">VALUE</th>
7814 <th>DESCRIPTION</th>
7815 <th width="10%">GUARD</th>
7816 </tr>
7817 <tr>
7818 <td>channel</td>
7819 <td>U16</td>
7820 <td> </td>
7821 <td>
7822
7823  
7824 </td>
7825 <td>
7826 <b></b>
7827  
7828 </td>
7829 </tr>
7830 <tr>
7831 <td>quiet</td>
7832 <td>flag</td>
7833 <td> </td>
7834 <td>
7835
7836  
7837 </td>
7838 <td>
7839 <b></b>
7840  
7841 </td>
7842 </tr>
7843 </table>
7844
7845 <h4>
7846 <a name="S4437"></a>ORIGIN: SERVER;
7847 MESSAGE: set_gametime</h4>
7848 NUMERIC TYPE (hex): 4437<p>
7849 <p>Sent when joining a running game. Gives the remaining time +
7850 periods/moves for the players, to correctly initialize the clocks.</p>
7851 </p>
7852 <table border="1" width="100%">
7853 <tr>
7854 <th width="10%">NAME</th>
7855 <th width="8%">TYPE</th>
7856 <th width="4%">VALUE</th>
7857 <th>DESCRIPTION</th>
7858 <th width="10%">GUARD</th>
7859 </tr>
7860 <tr>
7861 <td>channel</td>
7862 <td>U16</td>
7863 <td> </td>
7864 <td>
7865
7866  
7867 </td>
7868 <td>
7869 <b></b>
7870  
7871 </td>
7872 </tr>
7873 <tr>
7874 <td>black_time</td>
7875 <td>time</td>
7876 <td> </td>
7877 <td>
7878
7879  
7880 </td>
7881 <td>
7882 <b></b>
7883  
7884 </td>
7885 </tr>
7886 <tr>
7887 <td>black_moves</td>
7888 <td>U16</td>
7889 <td> </td>
7890 <td>
7891
7892  
7893 </td>
7894 <td>
7895 <b></b>
7896  
7897 </td>
7898 </tr>
7899 <tr>
7900 <td>white_time</td>
7901 <td>time</td>
7902 <td> </td>
7903 <td>
7904
7905  
7906 </td>
7907 <td>
7908 <b></b>
7909  
7910 </td>
7911 </tr>
7912 <tr>
7913 <td>white_moves</td>
7914 <td>U16</td>
7915 <td> </td>
7916 <td>
7917
7918  
7919 </td>
7920 <td>
7921 <b></b>
7922  
7923 </td>
7924 </tr>
7925 </table>
7926
7927 <h4>
7928 <a name="S443b"></a>ORIGIN: SERVER;
7929 MESSAGE: del_global_challenge</h4>
7930 NUMERIC TYPE (hex): 443b<p>
7931 <p>
7932 Remove a game from the global challenge list (open game list).
7933 </p>
7934 </p>
7935 <table border="1" width="100%">
7936 <tr>
7937 <th width="10%">NAME</th>
7938 <th width="8%">TYPE</th>
7939 <th width="4%">VALUE</th>
7940 <th>DESCRIPTION</th>
7941 <th width="10%">GUARD</th>
7942 </tr>
7943 <tr>
7944 <td>channel</td>
7945 <td>U16</td>
7946 <td> </td>
7947 <td>
7948 <p>The game id to remove.</p>
7949
7950  
7951 </td>
7952 <td>
7953 <b></b>
7954  
7955 </td>
7956 </tr>
7957 <tr>
7958 <td>game</td>
7959 <td>U16</td>
7960 <td> </td>
7961 <td>
7962 <p>Probably the same. I suggest to use this id for no good reason.</p>
7963
7964  
7965 </td>
7966 <td>
7967 <b></b>
7968  
7969 </td>
7970 </tr>
7971 </table>
7972 </body>
7973 </html>