ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.html
Revision: 1.54
Committed: Tue May 25 18:36:34 2004 UTC (20 years ago) by pcg
Content type: text/html
Branch: MAIN
Changes since 1.53: +22 -49 lines
Log Message:
*** empty log message ***

File Contents

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