ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.xml
Revision: 1.11
Committed: Thu Jun 5 20:05:43 2003 UTC (20 years, 11 months ago) by pcg
Content type: text/xml
Branch: MAIN
Changes since 1.10: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 <?xml version="1.0" encoding="utf-8"?>
2     <html>
3     <head>
4     <title>KGS Protocol Description</title>
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 pcg 1.11 <h1>$Revision: 1.10 $</h1>
26 pcg 1.10
27 pcg 1.1 <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     trivial.</p>
33 pcg 1.10
34     <p><b>Please note that the author of KGS has told me that he will
35     change the protocol in response to my efforts. This does not
36     necessarily mean that he will change the protocol just to make it
37     difficult to reverse-engineer the protocol, but if this happens,
38     I might not have the resources the track them, if they are too
39     extensive. Anyway, he made it clear that no help whatsoever is to be
40     expected.</b></p>
41 pcg 1.1
42 pcg 1.4 <p>If you feel you need to update the visual appearance of this
43 pcg 1.11 document, feel free to look <tt>doc/doc2html.xsl</tt> and improve
44 pcg 1.4 it.</p>
45    
46 pcg 1.8 <p>The current version of this document can always be found at
47     <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
48     the HTML version of it can be found
49     <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>.
50     </p>
51    
52 pcg 1.1 <h2>Structure and conventions of this document and the protocol</h2>
53    
54     <p>"Send" means messages send from the client to the server, while
55     "received" means messages send by the server to the client.</p>
56    
57 pcg 1.4 <p>Everything on the wire is in little-endian format (what a shame).</p>
58 pcg 1.1
59 pcg 1.4 <p>Primitive types are mostly integers (signed
60     "<code>I</code>&lt;bits&gt;", unsigned "<code>U</code>&lt;bits&gt;"),
61     ascii strings ("<code>username</code>"), or zero-terminated
62     UCS2-Strings ("<code>STRING</code>"). Yes, I know java is supposed to
63     do UTF-16, but no implementation seems to care...</p>
64 pcg 1.1
65     <p>For the rest, go figure or bug me, Marc Lehmann &lt;pcg@goof.com&gt;</p>
66    
67     <h2>Stream and message structure.</h2>
68    
69 pcg 1.4 <p>After connecting to the server, a handshake byte is sent. It's
70     the major version number of the protocol the client expects to
71     receive. Version 3 and 4 are mostly the same, except that Version 4
72     clients expect server messages to be compressed, version 3 clients
73     not.</p>
74    
75     <p>The server sends back his protocol number, which is always 3 in
76     the current protocol. Most of the protocol variation is determined by
77     the server using the client version that is used in the initial login
78     message, not the initial handshake byte.</p>
79 pcg 1.1
80     <p>After the initial handshake, the client sends uncompressed
81     messages, while the server sends back a zlib-compressed
82     stream (<a href="http://rfc1950.x42.com/">rfc1950</a> and <a
83     href="http://rfc1950.x42.com/">rfc1951</a>).</p>
84    
85     <p>All messages have the same header:</p>
86    
87 pcg 1.3 <struct name="message_header" send="yes" recv="yes">
88     <member name="_unknown" type="U16"/>
89     <member name="length" type="U16"/>
90 pcg 1.1 The length is the length of the full message including the header.
91 pcg 1.3 <member name="type" type="U16"/>
92 pcg 1.1 If the type is &gt;= 0x4000 this is a message for a specific channel. The channel
93 pcg 1.3 number is always the next U16.
94     </struct>
95    
96     <h2>Primitive types used in the protocol.</h2>
97    
98 pcg 1.9 <p>Apart from the basic types, I need to define some extra types to
99     deal with fixed-point values (based on integer types) or fixed-length
100     strings (either 7-bit-ascii or more limited (<code>A</code>), or UCS-2
101     based (<code>S</code>)).</p>
102 pcg 1.3
103     <type name="username" type="A" length="12"/>
104 pcg 1.9
105     <p>The basic user or login name, used throughout the protocol
106     as a handle to the user.</p>
107    
108 pcg 1.3 <type name="roomname" type="S" length="25"/><!-- argh, how horribly broken -->
109 pcg 1.9
110     <p>Many strings in the protocol are fixed-width for no good reason
111     (maybe this is one reason for using compression in enwer versions, as
112     the packets itself are wasting lots of space.</p>
113    
114 pcg 1.3 <type name="locale" type="A" length="5"/>
115 pcg 1.9
116     <p>A kind of locale specifier. It seems the general format seems to be
117     lowercase language, underscore, uppercase location, e.g. en_US. More
118     fancy specifications don't fit.</p>
119    
120 pcg 1.3 <type name="flag" type="U8" multiplier="1"/>
121 pcg 1.9
122     <p>Just a simple boolean value. 0 means false, and 1 generally true,
123     but I suggest ccepting != 0 as true.</p>
124    
125 pcg 1.6 <type name="komi16" type="I16" multiplier="2"/>
126     <type name="komi32" type="I32" multiplier="2"/>
127 pcg 1.9
128     <p>Komi values are multiplied by 2 to make them integer in the
129     protocol. Of course, sometimes they are encoded in 16 bits, sometimes
130     in 32. Get used to this.</p>
131    
132 pcg 1.3 <type name="result" type="I32" multiplier="2"/>
133 pcg 1.9
134     <p>The game result is also multiplied by four to give it higher
135     resolution. There are also special values for wins by time etc.</p>
136    
137 pcg 1.3 <type name="score" type="I32" multiplier="4"/>
138 pcg 1.9
139     <p>A score value (used for displaying the score at the end of a game)
140     are multiplied by four for a change. I have not yet seen 0.25 scores,
141     please somebody tell me where they happen, or if they happen.</p>
142    
143 pcg 1.7 <type name="time" type="U32" multiplier="1000"/>
144 pcg 1.1
145 pcg 1.9 <p>Time values are multiplied by 1000, giving them millisecond
146     accuracy.</p>
147    
148 pcg 1.2 <h2>Constants, enumeration and set types used in the protocol.</h2>
149 pcg 1.1
150     <p>Baaah... not yet.</p>
151    
152 pcg 1.3 <h2>Structs used in send &amp; receive messages</h2>
153 pcg 1.1
154 pcg 1.3 <struct name="user" class="KGS::User">
155 pcg 1.9
156     Everywhere a user + flags is required, even used in some places
157     where only a username is required. I see no general rule on when a
158     complete user and when a partial user is required.
159    
160 pcg 1.3 <member name="name" type="username"/>
161     <member name="flags" type="U32" default="1"/>
162     </struct>
163 pcg 1.1
164 pcg 1.6 <struct name="rules" class="KGS::Rules">
165 pcg 1.9
166     This structure is used for challanges as well as in the special
167     TREE "subprotocol". It tightly encodes the game parameters.
168    
169 pcg 1.6 <member name="ruleset" type="U8"/>
170     <member name="size" type="U8"/>
171     <member name="handicap" type="U8"/>
172     <member name="komi" type="komi16"/>
173     <member name="timesys" type="U8"/>
174     <member name="time" type="U32"/>
175     <member name="interval" type="U32"/>
176     byo-yomi time / canadian time
177     <member name="count" type="U16"/>
178     periods / moves
179     </struct>
180    
181 pcg 1.3 <h2>Structs used in send messages</h2>
182 pcg 1.1
183     <message type="0000" name="login" send="yes">
184 pcg 1.9
185     Send on the initial login. The password needs to be set when the
186     guest flag is true.
187    
188 pcg 1.3 <member name="ver_major" type="U32" default="2"/>
189     <member name="ver_minor" type="U32" default="4"/>
190     <member name="ver_micro" type="U32" default="67"/>
191     <member name="name" type="username"/>
192     <member name="password " type="U64" default="0"/>
193     Password is a number calculated as follows (VERY insecure, basically plaintext!):
194 pcg 1.4 password = 0; for char in characters do password ← password * 1055 + ascii_code (char);
195 pcg 1.3 <member name="guest" type="flag" default="1"/>
196     <member name="_unknown3" type="U16" default="0"/>
197     <member name="locale" type="locale" default='"en_US"'/>
198     <member name="clientver" type="DATA" default='"1.4.1_01:Swing app:Sun Microsystems Inc."'/>
199 pcg 1.4 The "default" is the java vm version, not exactly he client version. However,
200     you should always send a tetx like "Jonathan's C client bersion 0.6" or somesuch,
201     so the server can, if necessary, block broken clients or client versions.
202 pcg 1.1 </message>
203    
204 pcg 1.2 <message type="0014" name="server_stats" send="yes">
205 pcg 1.1 Request server statistics.
206     </message>
207    
208 pcg 1.2 <message type="0021" name="pic_req" send="yes">
209 pcg 1.9 Request a user picture from the server. Results in a userpic-reply
210     or a timeout :/.
211 pcg 1.3 <member name="name" type="username"/>
212 pcg 1.1 </message>
213    
214 pcg 1.2 <message type="0021" name="pic_upload" send="yes">
215 pcg 1.1 Same code as pic_req, but with an additional data section that
216 pcg 1.4 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels.
217 pcg 1.3 <member name="name" type="username"/>
218 pcg 1.1 <member name="data" type="DATA"/>
219     </message>
220    
221 pcg 1.2 <message type="0100" name="gnotice" send="yes">
222 pcg 1.1 Send a global message. Maybe. Never tried, for obvious reasons :/
223     <member name="notice" type="STRING"/>
224     </message>
225    
226 pcg 1.2 <message type="0318" name="list_rooms" send="yes">
227 pcg 1.9 List the rooms in a specific group/category. Results in a upd_rooms message.
228 pcg 1.3 <member name="group" type="U8"/>
229 pcg 1.1 </message>
230    
231 pcg 1.2 <message type="031a" name="new_room" send="yes">
232 pcg 1.1 Create a new room. Not verified.
233 pcg 1.3 <member name="name" type="username"/>
234     <member name="i1" type="U32" default="0"/>
235     <member name="b1" type="U8" default="0"/>
236     <member name="b2" type="U8" default="255"/>
237     <member name="b3" type="U8" default="255"/>
238     <member name="group" type="U8" default="1"/>
239 pcg 1.1 <member name="name" type="STRING"/>
240     <member name="description" type="STRING"/>
241 pcg 1.3 <member name="flags" type="U8"/>
242 pcg 1.1 0x10 .. private room etc.. see code
243     </message>
244    
245     <message type="4300" name="join_room" send="yes">
246 pcg 1.9 Joins the given room. join_room messages for yourself
247     and all users in that room, as well as the initial gamelist, are
248     send if the room exists. If not, timeout...
249 pcg 1.3 <member name="channel" type="U16"/>
250 pcg 1.1 <member name="user" type="user"/>
251     </message>
252    
253     <message type="4301" name="msg_room" send="yes">
254 pcg 1.9 Send a message to the room.
255 pcg 1.3 <member name="channel" type="U16"/>
256     <member name="name" type="username"/>
257 pcg 1.9 Must be the login-name of the user.
258 pcg 1.1 <member name="message" type="STRING"/>
259     </message>
260    
261     <message type="4302" name="part_room" send="yes">
262 pcg 1.9 Remove yourself (or maybe others as admin) from a room.
263 pcg 1.3 <member name="channel" type="U16"/>
264     <member name="name" type="username"/>
265 pcg 1.1 </message>
266    
267     <message type="4305" name="new_game" send="yes">
268 pcg 1.9 Unclear.
269 pcg 1.3 <member name="channel" type="U16"/>
270     <member name="id" type="U16"/>
271     <member name="gametype" type="U32"/>
272 pcg 1.1 <member name="rules" type="rules"/>
273     <member name="notes" type="STRING"/>
274     </message>
275    
276     <message type="430b" name="req_games" send="yes">
277 pcg 1.9 Request to update room game list (send this once per minute to get
278     updated). Results in upd_games messages.
279 pcg 1.3 <member name="channel" type="U16"/>
280 pcg 1.1 </message>
281    
282     <message type="4319" name="req_desc" send="yes">
283     Request room description.
284 pcg 1.3 <member name="channel" type="U16"/>
285 pcg 1.1 </message>
286    
287     <message type="4400" name="send_chal" send="yes">
288 pcg 1.9 Unclear.
289 pcg 1.3 <member name="channel" type="U16"/>
290     <member name="black" type="username"/>
291     <member name="white" type="username"/>
292 pcg 1.1 More following... TREE or challenge.
293     </message>
294    
295     <message type="4403" name="join_game" send="yes">
296 pcg 1.9 Join a game. See join_room.
297 pcg 1.5 <member name="channel" type="U16"/>
298 pcg 1.1 <member name="user" type="user"/>
299     </message>
300    
301     <message type="4404" name="part_game" send="yes">
302 pcg 1.9 Leave (or kick as admin?) a certain user from a game.
303 pcg 1.3 <member name="channel" type="U16"/>
304     <member name="name" type="username"/>
305 pcg 1.1 </message>
306    
307     <message type="4405" name="set_tree" send="yes">
308 pcg 1.9 Upload a partial game tree to the server. This is used
309     to send moves and even in-game comments to the server. For the comments,
310     the server prepends the username and rank.
311 pcg 1.3 <member name="channel" type="U16"/>
312 pcg 1.1 <member name="tree" type="TREE"/>
313     </message>
314    
315     <message type="4408" name="get_tree" send="yes">
316 pcg 1.9 Request the game tree starting at a given node. This is used
317     when the server only sends a partial tree (with end code "more").
318 pcg 1.3 <member name="channel" type="U16"/>
319     <member name="node" type="U32"/>
320 pcg 1.1 </message>
321    
322     <message type="440c" name="claim_win" send="yes">
323 pcg 1.9 Unclear.
324 pcg 1.3 <member name="channel" type="U16"/>
325     <member name="_byte" type="U8 "/>
326 pcg 1.1 Player colour maybe? Unclear.
327     </message>
328    
329     <message type="440d" name="add_time" send="yes">
330 pcg 1.9 Not checked.
331    
332 pcg 1.3 <member name="channel" type="U16"/>
333     <member name="time" type="U32"/>
334     <member name="player" type="U8"/>
335 pcg 1.1 </message>
336    
337     <message type="440f" name="grant_undo" send="yes">
338 pcg 1.9 Can be send after a req_undo message was received to grant the undo.
339 pcg 1.3 <member name="channel" type="U16"/>
340 pcg 1.1 </message>
341    
342     <message type="4410" name="resign_game" send="yes">
343 pcg 1.9 Resign the game.
344 pcg 1.3 <member name="channel" type="U16"/>
345     <member name="player" type="U8"/>
346 pcg 1.1 </message>
347    
348     <message type="441a" name="set_teacher" send="yes">
349 pcg 1.9 Change the teacher to somebody else (or possibly yourself == take it).
350 pcg 1.3 <member name="channel" type="U16"/>
351     <member name="name" type="username"/>
352 pcg 1.1 </message>
353    
354     <message type="4422" name="add_user" send="yes">
355 pcg 1.9 Unclear. Maybe allow users to talk? No idea, really.
356    
357 pcg 1.3 <member name="channel" type="U16"/>
358     <member name="othername" type="username"/>
359     <member name="name" type="username"/>; # gives user access to the game (to what? ;)
360 pcg 1.1 </message>
361    
362     <message type="4423" name="set_privacy" send="yes">
363 pcg 1.9 Probably sets the "quiet" flag. Not checked.
364 pcg 1.3 <member name="channel" type="U16"/>
365     <member name="private" type="U8"/>
366 pcg 1.1 </message>
367    
368     <message type="4429" name="reject_chal" send="yes">
369 pcg 1.9 Reject a challenge from a given user. Not checked.
370    
371 pcg 1.3 <member name="channel" type="U16"/>
372     <member name="name" type="username"/>
373 pcg 1.1 </message>
374    
375     <message type="4433" name="req_result" send="yes">
376 pcg 1.9 I forgot.
377    
378 pcg 1.3 <member name="channel" type="U16"/>
379 pcg 1.1 </message>
380    
381 pcg 1.3 <h2>Structs mainly used in receive messages</h2>
382 pcg 1.1
383 pcg 1.3 <struct name="challenge_defaults">
384 pcg 1.9 Send soon after log-in to set the defaults for game challenges.
385 pcg 1.3 <member name="gametype" type="U32"/>
386     <member name="size" type="U32"/>
387     <member name="timesys" type="U32"/>
388     <member name="time" type="U32"/>
389     <member name="byo_time" type="U32"/>
390     <member name="byo_periods" type="U32"/>
391     <member name="can_time" type="U32"/>
392     <member name="can_stones" type="U32"/>
393     </struct>
394    
395     <struct name="challenge" class="KGS::Challenge">
396 pcg 1.9 A challenge.
397    
398 pcg 1.1 <member name="user1" type="user"/>
399     <member name="user2" type="user"/>
400 pcg 1.3 <member name="gametype" type="U32"/>
401 pcg 1.1 <member name="rules" type="rules"/>
402     Maybe the rules" are in TREE format. I forgot.
403 pcg 1.3 </struct>
404 pcg 1.1
405 pcg 1.3 <struct name="game" class="KGS::Game">
406 pcg 1.9 Basic information about a game. Used in rooms for the gamelist and
407     in games to detect when a game is saved, changed type (e.g. R => D)
408     etc.
409    
410 pcg 1.3 <member name="channel" type="U16"/>
411     <member name="type" type="U32"/>
412 pcg 1.1 <member name="user1" type="user"/>
413     White
414     <member name="user2" type="user"/>
415     Black
416     <member name="user3" type="user"/>
417     Owner
418 pcg 1.3 <member name="size" type="U32"/>
419 pcg 1.1 <member name="handicap" type="I32"/>
420     &lt; 0 not fully setup
421 pcg 1.6 <member name="komi" type="komi32"/>
422 pcg 1.3 <member name="moves" type="U16"/>
423     <member name="flags" type="U16"/>
424     <member name="observers" type="U32"/>
425     <member name="saved" type="flag"/>
426     <member name="notes" type="STRING" guard-member="handicap" guard-cond="&lt; 0"/>
427     </struct>
428    
429     <struct name="room_obs">
430 pcg 1.9 Obsolete.
431    
432 pcg 1.3 <member name="name" type="roomname"/>
433     <member name="channel" type="U16"/>
434     <member name="flags" type="U32"/>
435 pcg 1.4 <member name="users" type="U32"/>
436 pcg 1.3 </struct>
437    
438     <struct name="room" class="KGS::Room">
439     <member name="channel" type="U16"/>
440     <member name="flags" type="U8"/>
441     <member name="group" type="U8"/>
442     <member name="users" type="U16"/>
443     <member name="games" type="U16"/>
444 pcg 1.4 <member name="name" type="STRING"/>
445 pcg 1.3 </struct>
446 pcg 1.1
447 pcg 1.3 <struct name="score" class="KGS::Score">
448     <member name="score" type="score"/>
449     <member name="territory" type="U32"/>
450     <member name="captures" type="U32"/>
451     <member name="i3" type="U32"/>
452     <member name="f2" type="U32"/>
453 pcg 1.6 <member name="komi" type="komi32"/>
454 pcg 1.4 <member name="i4" type="U32"/>
455 pcg 1.3 Apparently the i3, f2, i4 are zero.
456     </struct>
457 pcg 1.1
458     <h2>Receive messages</h2>
459    
460     <message type="0001" name="login" recv="yes">
461 pcg 1.3 <member name="result" type="CONSTANT" default='"login ok"'/>
462 pcg 1.1 <member name="success" type="CONSTANT" default="1"/>
463     </message>
464    
465     <message type="0002" name="login" recv="yes">
466 pcg 1.3 <member name="result" type="CONSTANT" default='"guest login ok"'/>
467 pcg 1.1 <member name="success" type="CONSTANT" default="1"/>
468     </message>
469    
470     <message type="0003" name="login" recv="yes">
471 pcg 1.3 <member name="result" type="CONSTANT" default='"login error 3"'/>
472 pcg 1.1 ** maybe more following? **
473     </message>
474    
475     <message type="0004" name="login" recv="yes">
476 pcg 1.3 <member name="result" type="CONSTANT" default='"wrong password"'/>
477 pcg 1.1 ** maybe more following? **
478     </message>
479    
480     <message type="0005" name="login" recv="yes">
481 pcg 1.3 <member name="result" type="CONSTANT" default='"user unknown"'/>
482 pcg 1.1 ** maybe more following? **
483     </message>
484    
485     <message type="0006" name="login" recv="yes">
486 pcg 1.3 <member name="result" type="CONSTANT" default='"user exists"'/>
487 pcg 1.1 ** maybe more following? **
488     </message>
489    
490     <message type="0018" name="login" recv="yes">
491 pcg 1.3 <member name="result" type="CONSTANT" default='"login error 18"'/>
492 pcg 1.1 ** maybe more following? **
493     </message>
494    
495     <message type="0022" name="login" recv="yes">
496 pcg 1.7 <!-- "thanks" to jyem for blocking me ;)-->
497 pcg 1.3 <member name="result" type="CONSTANT" default='"user or ip blocked"'/>
498 pcg 1.1 <member name="reason" type="STRING"/>
499     </message>
500    
501     <message type="0013" name="msg_chat" recv="yes">
502 pcg 1.3 <member name="user1" type="username"/>
503     <member name="user2" type="username"/>
504 pcg 1.1 <member name="message" type="STRING"/>
505     </message>
506    
507     <message type="0015" name="stats" recv="yes">
508 pcg 1.3 <member name="ver_major" type="U16"/>
509     <member name="ver_minor" type="U16"/>
510     <member name="ver_micro" type="U16"/>
511     <member name="boot_time" type="U64"/>
512     <member name="users_cur" type="U32"/>
513     <member name="users_max" type="U32"/>
514     <member name="users_lim" type="U32"/>
515     <member name="accts_cur" type="U32"/>
516     <member name="accts_max" type="U32"/>
517     <member name="unknown1" type="U32"/>
518     <member name="work_max" type="U32"/>
519     <member name="rooms_cur" type="U32"/>
520     <member name="rooms_max" type="U32"/>
521     <member name="rooms_lim" type="U32"/>
522     <member name="games_cur" type="U32"/>
523     <member name="games_max" type="U32"/>
524     <member name="games_lim" type="U32"/>
525     <member name="results_cur" type="U32"/>
526     <member name="results_max" type="U32"/>
527     <member name="unknown2" type="U32"/>
528     <member name="params_cur" type="U32"/>
529     <member name="params_max" type="U32"/>
530     <member name="bytes_in" type="U64"/>
531     <member name="packets_in" type="U64"/>
532     <member name="bytes_out" type="U64"/>
533 pcg 1.4 <member name="packets_out" type="U64"/>
534 pcg 1.1 </message>
535    
536     <message type="0016" name="idle_warn" recv="yes">
537     idle warning, autologout soon (10 minutes...)
538     </message>
539    
540     <message type="001b" name="timewarning_default" recv="yes">
541     WILD guess
542 pcg 1.3 <member name="channel" type="U16"/>
543     <member name="time" type="U16"/>
544 pcg 1.1 </message>
545    
546     <message type="001c" name="idle_err" recv="yes">
547     autologout
548     </message>
549    
550     <message type="001d" name="ping" recv="yes">
551     </message>
552    
553     <message type="0021" name="userpic" recv="yes">
554 pcg 1.3 <member name="name" type="username"/>
555 pcg 1.1 Reply to pic_req, contains an image in jpeg format.
556     <member name="data" type="DATA"/>
557     </message>
558    
559     <message type="0100" name="gnotice" recv="yes">
560     global notice, sent to everybody
561     <member name="notice" type="STRING"/>
562     </message>
563    
564    
565     <message type="0310" name="priv_room" recv="yes">
566     "permission denied" when joining a room
567     <member name="name" type="STRING"/>
568     </message>
569    
570     <message type="0318" name="upd_rooms" recv="yes">
571     <member name="rooms" type="room" array="yes"/>
572     </message>
573    
574     <message type="041c" name="upd_game2" recv="yes">
575 pcg 1.3 <member name="channel_junk" type="U16"/>
576 pcg 1.1 <member name="game" type="game"/>
577     </message>
578    
579     <message type="0202" name="upd_user" recv="yes">
580     # loc 0" type="chat(?) loc 1 => gameinfo?, loc 2 => game result (more data)
581 pcg 1.3 <member name="location" type="U32"/>
582 pcg 1.1 <member name="user" type="user"/>
583 pcg 1.3 <member name="lotsofinfo" type="DATA" guard-member="location" guard-cond="== 2"/>
584 pcg 1.1 </message>
585    
586     <h3>Room messages</h3>
587    
588     <p>Not all room messages are for rooms only, and rooms need to parse
589     not only these messages. Orthogonality, what for?</p>
590    
591     <message type="4300" name="join_room" recv="yes">
592 pcg 1.3 <member name="channel" type="U16"/>
593 pcg 1.1 <member name="users" type="user" array="yes"/>
594     </message>
595    
596     <message type="4301" name="msg_room" recv="yes">
597 pcg 1.3 <member name="channel" type="U16"/>
598     <member name="name" type="username"/>
599 pcg 1.1 <member name="message" type="STRING"/>
600     </message>
601    
602     <message type="4302" name="part_room" recv="yes">
603 pcg 1.3 <member name="channel" type="U16"/>
604 pcg 1.1 <member name="user" type="user"/>
605     </message>
606    
607     <message type="4303" name="del_room" recv="yes">
608 pcg 1.3 <member name="channel" type="U16"/>
609 pcg 1.1
610     </message>
611    
612     <message type="4304" name="upd_games" recv="yes">
613 pcg 1.3 <member name="channel" type="U16"/>
614 pcg 1.1 <member name="games" type="game" array="yes"/>
615     </message>
616    
617     <message type="4319" name="desc_room" recv="yes">
618 pcg 1.3 <member name="channel" type="U16"/>
619     <member name="owner" type="username"/>
620 pcg 1.1 <member name="description" type="STRING"/>
621     </message>
622    
623    
624     <message type="0411" name="chal_defaults" recv="yes">
625 pcg 1.3 <member name="channel" type="U16"/>
626 pcg 1.1 <member name="defaults" type="challenge_defaults"/>
627     </message>
628    
629     <h3>Game messages</h3>
630    
631     <message type="4400" name="upd_chal" recv="yes">
632     Unclear.
633 pcg 1.3 <member name="channel" type="U16"/>
634 pcg 1.1 <member name="challenge" type="challenge"/>
635     </message>
636    
637     <message type="4401" name="upd_game" recv="yes">
638 pcg 1.3 <member name="channel" type="U16"/>
639 pcg 1.1 <member name="game" type="game"/>
640     </message>
641    
642     <message type="4402" name="del_game" recv="yes">
643 pcg 1.3 <member name="channel" type="U16"/>
644 pcg 1.1 </message>
645    
646     <message type="4403" name="upd_observers" recv="yes">
647 pcg 1.3 <member name="channel" type="U16"/>
648 pcg 1.1 <member name="users" type="user" array="yes"/>
649     </message>
650    
651     <message type="4404" name="del_observer" recv="yes">
652 pcg 1.3 <member name="channel" type="U16"/>
653     <member name="name" type="username"/>
654 pcg 1.1 </message>
655    
656     <message type="4405" name="set_tree" recv="yes">
657 pcg 1.3 <member name="channel" type="U16"/>
658 pcg 1.1 <member name="tree" type="TREE"/>
659     </message>
660    
661     <message type="4406" name="upd_tree" recv="yes">
662 pcg 1.3 <member name="channel" type="U16"/>
663 pcg 1.1 <member name="tree" type="TREE"/>
664     </message>
665    
666     <message type="4407" name="set_node" recv="yes">
667 pcg 1.3 <member name="channel" type="U16"/>
668     <member name="node" type="U32"/>
669 pcg 1.1 </message>
670    
671     <message type="4409" name="superko" recv="yes">
672     Superko-warning.
673 pcg 1.3 <member name="channel" type="U16"/>
674 pcg 1.1 </message>
675    
676     <message type="440b" name="final_result" recv="yes">
677 pcg 1.3 <member name="channel" type="U16"/>
678 pcg 1.1 <member name="blackscore" type="score"/>
679     <member name="whitescore" type="score"/>
680     </message>
681    
682     <message type="440e" name="req_undo" recv="yes">
683 pcg 1.3 <member name="channel" type="U16"/>
684 pcg 1.1
685     </message>
686    
687     <message type="4410" name="resign_game" recv="yes">
688 pcg 1.3 <member name="channel" type="U16"/>
689     <member name="player" type="U8"/>
690 pcg 1.1 </message>
691    
692     <message type="441a" name="set_teacher" recv="yes">
693 pcg 1.3 <member name="channel" type="U16"/>
694     <member name="name" type="username"/>
695 pcg 1.1 </message>
696    
697     <message type="441d" name="owner_left" recv="yes">
698     Unclear.
699 pcg 1.3 <member name="channel" type="U16"/>
700 pcg 1.1 </message>
701    
702     <message type="441e" name="teacher_left" recv="yes">
703     Unclear.
704 pcg 1.3 <member name="channel" type="U16"/>
705 pcg 1.1 </message>
706    
707     <message type="4422" name="unknown4422" recv="yes">
708     change teacher? something to do with editing?
709 pcg 1.3 <member name="channel" type="U16"/>
710     <member name="name1" type="username"/>
711     <member name="name2" type="username"/>
712 pcg 1.1 </message>
713    
714     <message type="4433" name="req_result" recv="yes">
715     Unclear.
716 pcg 1.3 <member name="channel" type="U16"/>
717 pcg 1.1 # # recv_result(?)
718     </message>
719    
720     <message type="4434" name="unknown4434" recv="yes">
721 pcg 1.3 <member name="channel" type="U16"/>
722     <member name="b1" type="U8"/>
723 pcg 1.1 ?? !demonstration game??
724     </message>
725    
726     </body>
727     </html>
728