ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/doc/protocol.xml
(Generate patch)

Comparing kgsueme/doc/protocol.xml (file contents):
Revision 1.27 by pcg, Sun Jul 20 01:29:20 2003 UTC vs.
Revision 1.28 by pcg, Sun Jul 20 15:01:24 2003 UTC

20 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21--> 21-->
22</head> 22</head>
23<body> 23<body>
24 24
25<h1>$Revision: 1.27 $</h1> 25<h1>$Revision: 1.28 $</h1>
26 26
27<h1>KGS Protocol Description</h1> 27<h1>KGS Protocol Description</h1>
28 28
29 <p>This XML document describes the KGS protocol. It is also used 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 30 to automatically generate the perl parser for all the messages and
99 stream (<a href="http://rfc1950.x42.com/">rfc1950</a> and <a 99 stream (<a href="http://rfc1950.x42.com/">rfc1950</a> and <a
100 href="http://rfc1950.x42.com/">rfc1951</a>).</p> 100 href="http://rfc1950.x42.com/">rfc1951</a>).</p>
101 101
102 <p>All messages have the same header:</p> 102 <p>All messages have the same header:</p>
103 103
104 <struct name="message_header" send="yes" recv="yes"> 104 <struct name="message_header">
105 <member name="_unknown" type="U16"/> 105 <member name="_unknown" type="U16"/>
106 <member name="length" type="U16"/> 106 <member name="length" type="U16"/>
107 107
108 <p>The length is the length of the full message including the header.</p> 108 <p>The length is the length of the full message including the header.</p>
109 109
241 241
242<h2>Structs used in send messages</h2> 242<h2>Structs used in send messages</h2>
243 243
244<h2>Send messages</h2> 244<h2>Send messages</h2>
245 245
246 <message type="0000" name="login" send="yes"> 246 <message type="0000" name="login" dir="send">
247 247
248 <p>Sent to login, usually the first message sent. The password needs to be set when the 248 <p>Sent to login, usually the first message sent. The password needs to be set when the
249 guest flag is true. 249 guest flag is true.
250 Possible replies: <ref reply="login"/>. Followed by: <ref reply="timewarning_default"/> <ref reply="chal_defaults"/> 250 Possible replies: <ref reply="login"/>. Followed by: <ref reply="timewarning_default"/> <ref reply="chal_defaults"/>
251 </p> 251 </p>
262 The "default" is the java vm version, not exactly he client version. However, 262 The "default" is the java vm version, not exactly he client version. However,
263 you should always send a text like "Jonathan's C client bersion 0.6" or somesuch, 263 you should always send a text like "Jonathan's C client bersion 0.6" or somesuch,
264 so the server can, if necessary, block broken clients or client versions. 264 so the server can, if necessary, block broken clients or client versions.
265 </message> 265 </message>
266 266
267 <message type="0007" name="req_userinfo" send="yes"> 267 <message type="0007" name="req_userinfo" dir="send">
268 <p>Request info about a certain user. Possible reply: <ref reply="userinfo"/></p> 268 <p>Request info about a certain user. Possible reply: <ref reply="userinfo"/></p>
269 <member name="name" type="username"/> 269 <member name="name" type="username"/>
270 </message> 270 </message>
271 271
272 <message type="0007" name="update_userinfo" send="yes"> 272 <message type="0007" name="update_userinfo" dir="send">
273 <p>Update user info. Message structure is very similar 273 <p>Update user info. Message structure is very similar
274 to <ref ref="userinfo"/>.</p> 274 to <ref ref="userinfo"/>.</p>
275 <member name="setpass" type="flag"/> 275 <member name="setpass" type="flag"/>
276 Should the password be updated? 276 Should the password be updated?
277 <member name="password" type="password" default="0"/> 277 <member name="password" type="password" default="0"/>
281 <member name="homepage" type="url"/> 281 <member name="homepage" type="url"/>
282 <member name="_unused" type="U64" default="0"/> 282 <member name="_unused" type="U64" default="0"/>
283 <member name="_unused" type="U64" default="0"/> 283 <member name="_unused" type="U64" default="0"/>
284 </message> 284 </message>
285 285
286 <message type="0014" name="req_stats" send="yes"> 286 <message type="0014" name="req_stats" dir="send">
287 <p>Request server statistics. Replied with <ref reply="stats"/></p> 287 <p>Request server statistics. Replied with <ref reply="stats"/></p>
288 </message> 288 </message>
289 289
290 <message type="001d" name="ping" send="yes"> 290 <message type="001d" name="ping" dir="send">
291 <p>Wild guess, I send it in <ref ref="idle_warn"/>.</p> 291 <p>Wild guess, I send it in <ref ref="idle_warn"/>.</p>
292 </message> 292 </message>
293 293
294 <message type="001e" name="req_usergraph" send="yes"> 294 <message type="001e" name="req_usergraph" dir="send">
295 <p>Request user graph data, replied with <ref reply="usergraph"/>.</p> 295 <p>Request user graph data, replied with <ref reply="usergraph"/>.</p>
296 <member name="name" type="username"/> 296 <member name="name" type="username"/>
297 </message> 297 </message>
298 298
299 <message type="001f" name="fetch_memos" send="yes"> 299 <message type="001f" name="fetch_memos" dir="send">
300 <p>Unclear. Fetch all outstanding memos? Replied with <ref reply="memo"/></p> 300 <p>Unclear. Fetch all outstanding memos? Replied with <ref reply="memo"/></p>
301 </message> 301 </message>
302 302
303 <message type="0021" name="req_pic" send="yes"> 303 <message type="0021" name="req_pic" dir="send">
304 <p>Request a user picture from the server. Results in a <ref reply="userpic"/> 304 <p>Request a user picture from the server. Results in a <ref reply="userpic"/>
305 or a timeout.</p> 305 or a timeout.</p>
306 <member name="name" type="username"/> 306 <member name="name" type="username"/>
307 </message> 307 </message>
308 308
309 <message type="0021" name="upload_pic" send="yes"> 309 <message type="0021" name="upload_pic" dir="send">
310 Same code as pic_req, but with an additional data section that 310 Same code as pic_req, but with an additional data section that
311 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels. 311 must contain a JPEG image that is &lt;=7KB. It must have 141×200 pixels.
312 <member name="name" type="username"/> 312 <member name="name" type="username"/>
313 <member name="data" type="DATA"/> 313 <member name="data" type="DATA"/>
314 </message> 314 </message>
315 315
316 <message type="0100" name="gnotice" send="yes"> 316 <message type="0100" name="gnotice" dir="send">
317 <p>Send a global message. Maybe. Never tried, for obvious reasons :/. Results 317 <p>Send a global message. Maybe. Never tried, for obvious reasons :/. Results
318 in a <ref reply="gnotice"/> sent to all users.</p> 318 in a <ref reply="gnotice"/> sent to all users.</p>
319 <member name="notice" type="STRING"/> 319 <member name="notice" type="STRING"/>
320 </message> 320 </message>
321 321
322 <message type="0318" name="list_rooms" send="yes"> 322 <message type="0318" name="list_rooms" dir="send">
323 <p>List the rooms in a specific group/category. Results in a <ref reply="upd_rooms"/> message.</p> 323 <p>List the rooms in a specific group/category. Results in a <ref reply="upd_rooms"/> message.</p>
324 <member name="group" type="U8"/> 324 <member name="group" type="U8"/>
325 </message> 325 </message>
326 326
327 <message type="031a" name="new_room" send="yes"> 327 <message type="031a" name="new_room" dir="send">
328 Create a new room. Not verified. 328 Create a new room. Not verified.
329 <member name="name" type="username"/> 329 <member name="name" type="username"/>
330 <member name="i1" type="U32" default="0"/> 330 <member name="i1" type="U32" default="0"/>
331 <member name="b1" type="U8" default="0"/> 331 <member name="b1" type="U8" default="0"/>
332 <member name="b2" type="U8" default="255"/> 332 <member name="b2" type="U8" default="255"/>
336 <member name="description" type="STRING"/> 336 <member name="description" type="STRING"/>
337 <member name="flags" type="U8"/> 337 <member name="flags" type="U8"/>
338 0x10 .. private room etc.. see code 338 0x10 .. private room etc.. see code
339 </message> 339 </message>
340 340
341 <message type="0413" name="req_game_record" send="yes"> 341 <message type="0413" name="req_game_record" dir="send">
342 <p>Requests part of the users game record to be sent. Results in a <ref reply="game_record"/> or maybe a timeout.</p> 342 <p>Requests part of the users game record to be sent. Results in a <ref reply="game_record"/> or maybe a timeout.</p>
343 <member name="name" type="username"/> 343 <member name="name" type="username"/>
344 <member name="timestamp" type="timestamp"/> 344 <member name="timestamp" type="timestamp"/>
345 If zero, start at the newest games, else only send games 345 If zero, start at the newest games, else only send games
346 before the given timestap. 346 before the given timestap.
347 </message> 347 </message>
348 348
349 <message type="4300" name="join_room" send="yes"> 349 <message type="4300" name="join_room" dir="send">
350 <p>Joins the given room. <ref reply="join_room"/> messages for yourself 350 <p>Joins the given room. <ref reply="join_room"/> messages for yourself
351 and all users in that room, as well as the initial gamelist, are 351 and all users in that room, as well as the initial gamelist, are
352 send if the room exists. If not, timeout...</p> 352 send if the room exists. If not, timeout...</p>
353 <member name="channel" type="U16"/> 353 <member name="channel" type="U16"/>
354 <member name="user" type="user"/> 354 <member name="user" type="user"/>
355 </message> 355 </message>
356 356
357 <message type="4301" name="msg_room" send="yes"> 357 <message type="4301" name="msg_room" dir="send">
358 Send a message to the room. 358 Send a message to the room.
359 <member name="channel" type="U16"/> 359 <member name="channel" type="U16"/>
360 <member name="name" type="username"/> 360 <member name="name" type="username"/>
361 Must be the login-name of the user. 361 Must be the login-name of the user.
362 <member name="message" type="STRING"/> 362 <member name="message" type="STRING"/>
363 </message> 363 </message>
364 364
365 <message type="4302" name="part_room" send="yes"> 365 <message type="4302" name="part_room" dir="send">
366 Remove yourself (or maybe others as admin) from a room. 366 Remove yourself (or maybe others as admin) from a room.
367 <member name="channel" type="U16"/> 367 <member name="channel" type="U16"/>
368 <member name="name" type="username"/> 368 <member name="name" type="username"/>
369 </message> 369 </message>
370 370
371 <message type="4305" name="new_game" send="yes"> 371 <message type="4305" name="new_game" dir="send">
372 Unclear. Start a new game. 372 Unclear. Start a new game.
373 <member name="channel" type="U16"/> 373 <member name="channel" type="U16"/>
374 <member name="id" type="U16"/> 374 <member name="id" type="U16"/>
375 <member name="gametype" type="U32"/> 375 <member name="gametype" type="U32"/>
376 <member name="rules" type="rules"/> 376 <member name="rules" type="rules"/>
377 <member name="notes" type="STRING"/> 377 <member name="notes" type="STRING"/>
378 </message> 378 </message>
379 379
380 <message type="430b" name="req_games" send="yes"> 380 <message type="430b" name="req_games" dir="send">
381 Request to update room game list (send this once per minute to get 381 Request to update room game list (send this once per minute to get
382 updated). Results in upd_games messages. 382 updated). Results in upd_games messages.
383 <member name="channel" type="U16"/> 383 <member name="channel" type="U16"/>
384 </message> 384 </message>
385 385
386 <message type="4319" name="req_desc" send="yes"> 386 <message type="4319" name="req_desc" dir="send">
387 Request room description. 387 Request room description.
388 <member name="channel" type="U16"/> 388 <member name="channel" type="U16"/>
389 </message> 389 </message>
390 390
391 <message type="4400" name="send_chal" send="yes"> 391 <message type="4400" name="send_chal" dir="send">
392 Unclear. 392 Unclear.
393 <member name="channel" type="U16"/> 393 <member name="channel" type="U16"/>
394 <member name="black" type="username"/> 394 <member name="black" type="username"/>
395 <member name="white" type="username"/> 395 <member name="white" type="username"/>
396 More following... TREE or challenge. 396 More following... TREE or challenge.
397 </message> 397 </message>
398 398
399 <message type="4403" name="join_game" send="yes"> 399 <message type="4403" name="join_game" dir="send">
400 Join a game. See join_room. 400 Join a game. See join_room.
401 <member name="channel" type="U16"/> 401 <member name="channel" type="U16"/>
402 <member name="user" type="user"/> 402 <member name="user" type="user"/>
403 </message> 403 </message>
404 404
405 <message type="4404" name="part_game" send="yes"> 405 <message type="4404" name="part_game" dir="send">
406 Leave (or kick as admin?) a certain user from a game. 406 Leave (or kick as admin?) a certain user from a game.
407 <member name="channel" type="U16"/> 407 <member name="channel" type="U16"/>
408 <member name="name" type="username"/> 408 <member name="name" type="username"/>
409 </message> 409 </message>
410 410
411 <message type="4405" name="set_tree" send="yes"> 411 <message type="4406" name="upd_tree" dir="send">
412 Upload a partial game tree to the server. This is used 412 Upload a partial game tree to the server. This is used to send moves
413 to send moves and even in-game comments to the server. For the comments, 413 and even in-game comments to the server. For the comments, the
414 the server prepends the username and rank. 414 server prepends the username and rank.
415
415 <member name="channel" type="U16"/> 416 <member name="channel" type="U16"/>
416 <member name="tree" type="TREE"/> 417 <member name="tree" type="TREE"/>
417 </message> 418 </message>
418 419
419 <message type="4408" name="get_tree" send="yes"> 420 <message type="4408" name="get_tree" dir="send">
420 Request the game tree starting at a given node. This is used 421 Request the game tree starting at a given node. This is used
421 when the server only sends a partial tree (with end code "more"). 422 when the server only sends a partial tree (with end code "more").
422 <member name="channel" type="U16"/> 423 <member name="channel" type="U16"/>
423 <member name="node" type="U32"/> 424 <member name="node" type="U32"/>
424 </message> 425 </message>
425 426
426 <message type="440c" name="claim_win" send="yes"> 427 <message type="440c" name="claim_win" dir="send">
427 Unclear. 428 Unclear.
428 <member name="channel" type="U16"/> 429 <member name="channel" type="U16"/>
429 <member name="_byte" type="U8 "/> 430 <member name="_byte" type="U8 "/>
430 Player colour maybe? Unclear. 431 Player colour maybe? Unclear.
431 </message> 432 </message>
432 433
433 <message type="440d" name="add_time" send="yes"> 434 <message type="440d" name="add_time" dir="send">
434 Not checked. 435 Not checked.
435 436
436 <member name="channel" type="U16"/> 437 <member name="channel" type="U16"/>
437 <member name="time" type="U32"/> 438 <member name="time" type="U32"/>
438 <member name="player" type="U8"/> 439 <member name="player" type="U8"/>
439 </message> 440 </message>
440 441
441 <message type="440f" name="grant_undo" send="yes"> 442 <message type="440f" name="grant_undo" dir="send">
442 Can be send after a req_undo message was received to grant the undo. 443 Can be send after a req_undo message was received to grant the undo.
443 <member name="channel" type="U16"/> 444 <member name="channel" type="U16"/>
444 </message> 445 </message>
445 446
446 <message type="4410" name="resign_game" send="yes"> 447 <message type="4410" name="resign_game" dir="send">
447 Resign the game. 448 Resign the game.
448 <member name="channel" type="U16"/> 449 <member name="channel" type="U16"/>
449 <member name="player" type="U8"/> 450 <member name="player" type="U8"/>
450 </message> 451 </message>
451 452
452 <message type="441a" name="set_teacher" send="yes"> 453 <message type="441a" name="set_teacher" dir="send">
453 Change the teacher to somebody else (or possibly yourself == take it). 454 Change the teacher to somebody else (or possibly yourself == take it).
454 <member name="channel" type="U16"/> 455 <member name="channel" type="U16"/>
455 <member name="name" type="username"/> 456 <member name="name" type="username"/>
456 </message> 457 </message>
457 458
458 <message type="4422" name="add_user" send="yes"> 459 <message type="4422" name="add_user" dir="send">
459 Unclear. Maybe allow users to talk? No idea, really. 460 Unclear. Maybe allow users to talk? No idea, really.
460 461
461 <member name="channel" type="U16"/> 462 <member name="channel" type="U16"/>
462 <member name="othername" type="username"/> 463 <member name="othername" type="username"/>
463 <member name="name" type="username"/>; # gives user access to the game (to what? ;) 464 <member name="name" type="username"/>; # gives user access to the game (to what? ;)
464 </message> 465 </message>
465 466
466 <message type="4423" name="set_privacy" send="yes"> 467 <message type="4423" name="set_privacy" dir="send">
467 Probably sets the "quiet" flag. Not checked. 468 Probably sets the "quiet" flag. Not checked.
468 <member name="channel" type="U16"/> 469 <member name="channel" type="U16"/>
469 <member name="private" type="U8"/> 470 <member name="private" type="U8"/>
470 </message> 471 </message>
471 472
472 <message type="4429" name="reject_chal" send="yes"> 473 <message type="4429" name="reject_chal" dir="send">
473 Reject a challenge from a given user. Not checked. 474 Reject a challenge from a given user. Not checked.
474 475
475 <member name="channel" type="U16"/> 476 <member name="channel" type="U16"/>
476 <member name="name" type="username"/> 477 <member name="name" type="username"/>
477 </message> 478 </message>
478 479
479 <message type="4433" name="req_result" send="yes"> 480 <message type="4433" name="req_result" dir="send">
480 I forgot. 481 I forgot.
481 482
482 <member name="channel" type="U16"/> 483 <member name="channel" type="U16"/>
483 </message> 484 </message>
484 485
581 0x80 inprogress 582 0x80 inprogress
582 </struct> 583 </struct>
583 584
584<h2>Receive messages</h2> 585<h2>Receive messages</h2>
585 586
586 <message type="0001" name="login" recv="yes"> 587 <message type="0001" name="login" dir="recv">
587 <member name="result" type="CONSTANT" default='"login ok"'/> 588 <member name="result" type="CONSTANT" default='"login ok"'/>
588 <member name="success" type="CONSTANT" default="1"/> 589 <member name="success" type="CONSTANT" default="1"/>
589 </message> 590 </message>
590 591
591 <message type="0002" name="login" recv="yes"> 592 <message type="0002" name="login" dir="recv">
592 <member name="result" type="CONSTANT" default='"guest login ok"'/> 593 <member name="result" type="CONSTANT" default='"guest login ok"'/>
593 <member name="success" type="CONSTANT" default="1"/> 594 <member name="success" type="CONSTANT" default="1"/>
594 </message> 595 </message>
595 596
596 <message type="0003" name="login" recv="yes"> 597 <message type="0003" name="login" dir="recv">
597 <member name="result" type="CONSTANT" default='"login error 3"'/> 598 <member name="result" type="CONSTANT" default='"login error 3"'/>
598 ** maybe more following? ** 599 ** maybe more following? **
599 </message> 600 </message>
600 601
601 <message type="0004" name="login" recv="yes"> 602 <message type="0004" name="login" dir="recv">
602 <member name="result" type="CONSTANT" default='"wrong password"'/> 603 <member name="result" type="CONSTANT" default='"wrong password"'/>
603 ** maybe more following? ** 604 ** maybe more following? **
604 </message> 605 </message>
605 606
606 <message type="0005" name="login" recv="yes"> 607 <message type="0005" name="login" dir="recv">
607 <member name="result" type="CONSTANT" default='"user unknown"'/> 608 <member name="result" type="CONSTANT" default='"user unknown"'/>
608 ** maybe more following? ** 609 ** maybe more following? **
609 </message> 610 </message>
610 611
611 <message type="0006" name="login" recv="yes"> 612 <message type="0006" name="login" dir="recv">
612 <member name="result" type="CONSTANT" default='"user exists"'/> 613 <member name="result" type="CONSTANT" default='"user exists"'/>
613 ** maybe more following? ** 614 ** maybe more following? **
614 </message> 615 </message>
615 616
616 <message type="0008" name="userinfo" recv="yes"> 617 <message type="0008" name="userinfo" dir="recv">
617 User info. 618 User info.
618 <member name="user" type="user"/> 619 <member name="user" type="user"/>
619 <member name="_unused" type="U64"/> 620 <member name="_unused" type="U64"/>
620 <member name="realname" type="realname"/> 621 <member name="realname" type="realname"/>
621 <member name="email" type="email"/> 622 <member name="email" type="email"/>
626 <member name="lastlogin" type="timestamp"/> 627 <member name="lastlogin" type="timestamp"/>
627 When the user logged in for the last time. 628 When the user logged in for the last time.
628 <!-- maybe more? --> 629 <!-- maybe more? -->
629 </message> 630 </message>
630 631
631 <message type="0018" name="login" recv="yes"> 632 <message type="0018" name="login" dir="recv">
632 <member name="result" type="CONSTANT" default='"login error 18"'/> 633 <member name="result" type="CONSTANT" default='"login error 18"'/>
633 ** maybe more following? ** 634 ** maybe more following? **
634 </message> 635 </message>
635 636
636 <message type="0022" name="login" recv="yes"> 637 <message type="0022" name="login" dir="recv">
637 I was blocked sooo many times for developing this client that it was 638 I was blocked sooo many times for developing this client that it was
638 easy to figure out. The KGS admins sure need no extra nazi training 639 easy to figure out. The KGS admins sure need no extra nazi training
639 :( 640 :(
640 <member name="reason" type="STRING"/> 641 <member name="reason" type="STRING"/>
641 <member name="result" type="CONSTANT" default='"user or ip blocked"'/> 642 <member name="result" type="CONSTANT" default='"user or ip blocked"'/>
642 </message> 643 </message>
643 644
644 <message type="0013" name="msg_chat" recv="yes"> 645 <message type="0013" name="msg_chat" dir="recv">
645 <member name="user1" type="username"/> 646 <member name="user1" type="username"/>
646 <member name="user2" type="username"/> 647 <member name="user2" type="username"/>
647 <member name="message" type="STRING"/> 648 <member name="message" type="STRING"/>
648 </message> 649 </message>
649 650
650 <message type="0015" name="stats" recv="yes"> 651 <message type="0015" name="stats" dir="recv">
651 <member name="ver_major" type="U16"/> 652 <member name="ver_major" type="U16"/>
652 <member name="ver_minor" type="U16"/> 653 <member name="ver_minor" type="U16"/>
653 <member name="ver_micro" type="U16"/> 654 <member name="ver_micro" type="U16"/>
654 <member name="boot_time" type="timestamp"/> 655 <member name="boot_time" type="timestamp"/>
655 <member name="users_cur" type="U32"/> 656 <member name="users_cur" type="U32"/>
674 <member name="packets_in" type="U64"/> 675 <member name="packets_in" type="U64"/>
675 <member name="bytes_out" type="U64"/> 676 <member name="bytes_out" type="U64"/>
676 <member name="packets_out" type="U64"/> 677 <member name="packets_out" type="U64"/>
677 </message> 678 </message>
678 679
679 <message type="0016" name="idle_warn" recv="yes"> 680 <message type="0016" name="idle_warn" dir="recv">
680 idle warning, autologout soon (10 minutes...) 681 idle warning, autologout soon (10 minutes...)
681 </message> 682 </message>
682 683
683 <message type="001b" name="timewarning_default" recv="yes"> 684 <message type="001b" name="timewarning_default" dir="recv">
684 WILD guess 685 WILD guess
685 <member name="channel" type="U16"/> 686 <member name="channel" type="U16"/>
686 <member name="time" type="U16"/> 687 <member name="time" type="U16"/>
687 </message> 688 </message>
688 689
689 <message type="001c" name="idle_err" recv="yes"> 690 <message type="001c" name="idle_err" dir="recv">
690 autologout 691 autologout
691 </message> 692 </message>
692 693
693 <message type="001d" name="ping" recv="yes"> 694 <message type="001d" name="ping" dir="recv">
694 Sent by the server regularly, but not answering them 695 Sent by the server regularly, but not answering them
695 isn't valid. Strange form of keepalive? 696 isn't valid. Strange form of keepalive?
696 </message> 697 </message>
697 698
698 <message type="001e" name="usergraph" recv="yes"> 699 <message type="001e" name="usergraph" dir="recv">
699 User graph data. 700 User graph data.
700 <member name="data" type="I16" array="yes"/> 701 <member name="data" type="I16" array="yes"/>
701 If empty, no graph is available. The unit seems to 702 If empty, no graph is available. The unit seems to
702 be centi-kyu, with 1 dan == 0, 2 dan == 100, 1 kyu == -100. 703 be centi-kyu, with 1 dan == 0, 2 dan == 100, 1 kyu == -100.
703 There is probably one entry per day, the newest one last. 704 There is probably one entry per day, the newest one last.
704 </message> 705 </message>
705 706
706 <message type="001f" name="memo" recv="yes"> 707 <message type="001f" name="memo" dir="recv">
707 Unclear. "Leave Message"? 708 Unclear. "Leave Message"?
708 6 strings following. 709 6 strings following.
709 <member name="s1" type="STRING"/> 710 <member name="s1" type="STRING"/>
710 <member name="s2" type="STRING"/> 711 <member name="s2" type="STRING"/>
711 <member name="s3" type="STRING"/> 712 <member name="s3" type="STRING"/>
712 <member name="s4" type="STRING"/> 713 <member name="s4" type="STRING"/>
713 <member name="s5" type="STRING"/> 714 <member name="s5" type="STRING"/>
714 <member name="s6" type="STRING"/> 715 <member name="s6" type="STRING"/>
715 </message> 716 </message>
716 717
717 <message type="0021" name="userpic" recv="yes"> 718 <message type="0021" name="userpic" dir="recv">
718 <member name="name" type="username"/> 719 <member name="name" type="username"/>
719 Reply to pic_req, contains an image in jpeg format. 720 Reply to pic_req, contains an image in jpeg format.
720 <member name="data" type="DATA"/> 721 <member name="data" type="DATA"/>
721 </message> 722 </message>
722 723
723 <message type="0100" name="gnotice" recv="yes"> 724 <message type="0100" name="gnotice" dir="recv">
724 global notice, sent to everybody 725 global notice, sent to everybody
725 <member name="notice" type="STRING"/> 726 <member name="notice" type="STRING"/>
726 </message> 727 </message>
727 728
728 <message type="0202" name="upd_user" recv="yes"> 729 <message type="0202" name="upd_user" dir="recv">
729 # maybe soe notify? Totally unclear. 730 # maybe soe notify? Totally unclear.
730 # loc 0" type="chat(?) loc 1 => gameinfo?, loc 2 => game result (more data) 731 # loc 0" type="chat(?) loc 1 => gameinfo?, loc 2 => game result (more data)
731 <member name="location" type="U32"/> 732 <member name="location" type="U32"/>
732 <member name="user" type="user"/> 733 <member name="user" type="user"/>
733 <member name="lotsofinfo" type="DATA" guard-member="location" guard-cond="== 2"/> 734 <member name="lotsofinfo" type="DATA" guard-member="location" guard-cond="== 2"/>
734 </message> 735 </message>
735 736
736 <message type="0310" name="priv_room" recv="yes"> 737 <message type="0310" name="priv_room" dir="recv">
737 "permission denied" when joining a room 738 "permission denied" when joining a room
738 <member name="name" type="STRING"/> 739 <member name="name" type="STRING"/>
739 </message> 740 </message>
740 741
741 <message type="0318" name="upd_rooms" recv="yes"> 742 <message type="0318" name="upd_rooms" dir="recv">
742 <member name="rooms" type="room" array="yes"/> 743 <member name="rooms" type="room" array="yes"/>
743 </message> 744 </message>
744 745
745 <message type="0411" name="chal_defaults" recv="yes"> 746 <message type="0411" name="chal_defaults" dir="recv">
746 <member name="channel" type="U16"/> 747 <member name="channel" type="U16"/>
747 <member name="defaults" type="challenge_defaults"/> 748 <member name="defaults" type="challenge_defaults"/>
748 </message> 749 </message>
749 750
750 <message type="0412" name="rej_game" send="yes"> 751 <message type="0412" name="rej_game" dir="send">
751 Unable to create challenge. The channel might be optional. 752 Unable to create challenge. The channel might be optional.
752 <member name="channel" type="U16"/> 753 <member name="channel" type="U16"/>
753 </message> 754 </message>
754 755
755 <message type="0414" name="game_record" recv="yes"> 756 <message type="0414" name="game_record" dir="recv">
756 The users game record. 757 The users game record.
757 <member name="name" type="username"/> 758 <member name="name" type="username"/>
758 <member name="more" type="flag"/> 759 <member name="more" type="flag"/>
759 Wether more games are available (must be requested manually) 760 Wether more games are available (must be requested manually)
760 <member name="games" type="game_record" array="yes"/> 761 <member name="games" type="game_record" array="yes"/>
761 </message> 762 </message>
762 763
763 <message type="041c" name="upd_game2" recv="yes"> 764 <message type="041c" name="upd_game2" dir="recv">
764 Unclear. 765 Unclear.
765 <member name="channel_junk" type="U16"/> 766 <member name="channel_junk" type="U16"/>
766 <member name="game" type="game"/> 767 <member name="game" type="game"/>
767 </message> 768 </message>
768 769
769<h3>Room messages</h3> 770<h3>Room messages</h3>
770 771
771 <p>Not all room messages are for rooms only, and rooms need to parse 772 <p>Not all room messages are for rooms only, and rooms need to parse
772 not only these messages. Orthogonality, what for?</p> 773 not only these messages. Orthogonality, what for?</p>
773 774
774 <message type="4300" name="join_room" recv="yes"> 775 <message type="4300" name="join_room" dir="recv">
775 <member name="channel" type="U16"/> 776 <member name="channel" type="U16"/>
776 <member name="users" type="user" array="yes"/> 777 <member name="users" type="user" array="yes"/>
777 </message> 778 </message>
778 779
779 <message type="4301" name="msg_room" recv="yes"> 780 <message type="4301" name="msg_room" dir="recv">
780 <member name="channel" type="U16"/> 781 <member name="channel" type="U16"/>
781 <member name="name" type="username"/> 782 <member name="name" type="username"/>
782 <member name="message" type="STRING"/> 783 <member name="message" type="STRING"/>
783 </message> 784 </message>
784 785
785 <message type="4302" name="part_room" recv="yes"> 786 <message type="4302" name="part_room" dir="recv">
786 <member name="channel" type="U16"/> 787 <member name="channel" type="U16"/>
787 <member name="user" type="user"/> 788 <member name="user" type="user"/>
788 </message> 789 </message>
789 790
790 <message type="4303" name="del_room" recv="yes"> 791 <message type="4303" name="del_room" dir="recv">
791 <member name="channel" type="U16"/> 792 <member name="channel" type="U16"/>
792 </message> 793 </message>
793 794
794 <message type="4304" name="upd_games" recv="yes"> 795 <message type="4304" name="upd_games" dir="recv">
795 <member name="channel" type="U16"/> 796 <member name="channel" type="U16"/>
796 <member name="games" type="game" array="yes"/> 797 <member name="games" type="game" array="yes"/>
797 </message> 798 </message>
798 799
799 <message type="4319" name="desc_room" recv="yes"> 800 <message type="4319" name="desc_room" dir="recv">
800 <member name="channel" type="U16"/> 801 <member name="channel" type="U16"/>
801 <member name="owner" type="username"/> 802 <member name="owner" type="username"/>
802 <member name="description" type="STRING"/> 803 <member name="description" type="STRING"/>
803 </message> 804 </message>
805
804<h3>Game messages</h3> 806<h3>Game messages</h3>
805 807
806 <message type="4400" name="upd_chal" recv="yes"> 808 <message type="4400" name="upd_chal" dir="recv">
807 Unclear. 809 Unclear.
808 <member name="channel" type="U16"/> 810 <member name="channel" type="U16"/>
809 <member name="challenge" type="challenge"/> 811 <member name="challenge" type="challenge"/>
810 </message> 812 </message>
811 813
812 <message type="4401" name="upd_game" recv="yes"> 814 <message type="4401" name="upd_game" dir="recv">
813 <member name="channel" type="U16"/> 815 <member name="channel" type="U16"/>
814 <member name="game" type="game"/> 816 <member name="game" type="game"/>
815 </message> 817 </message>
816 818
817 <message type="4402" name="del_game" recv="yes"> 819 <message type="4402" name="del_game" dir="recv">
818 <member name="channel" type="U16"/> 820 <member name="channel" type="U16"/>
819 </message> 821 </message>
820 822
821 <message type="4403" name="upd_observers" recv="yes"> 823 <message type="4403" name="upd_observers" dir="recv">
822 <member name="channel" type="U16"/> 824 <member name="channel" type="U16"/>
823 <member name="users" type="user" array="yes"/> 825 <member name="users" type="user" array="yes"/>
824 </message> 826 </message>
825 827
826 <message type="4404" name="del_observer" recv="yes"> 828 <message type="4404" name="del_observer" dir="recv">
827 <member name="channel" type="U16"/>
828 <member name="name" type="username"/> 829 <member name="channel" type="U16"/>
830 <member name="name" type="username"/>
829 </message> 831 </message>
830 832
831 <message type="4405" name="set_tree" recv="yes"> 833 <message type="4405" name="set_tree" dir="recv">
832 <member name="channel" type="U16"/> 834 <member name="channel" type="U16"/>
833 <member name="tree" type="TREE"/> 835 <member name="tree" type="TREE"/>
834 </message> 836 </message>
835 837
836 <message type="4406" name="upd_tree" recv="yes"> 838 <message type="4406" name="upd_tree" dir="recv">
837 <member name="channel" type="U16"/> 839 <member name="channel" type="U16"/>
838 <member name="tree" type="TREE"/> 840 <member name="tree" type="TREE"/>
839 </message> 841 </message>
840 842
841 <message type="4409" name="superko" recv="yes"> 843 <message type="4409" name="superko" dir="recv">
842 Superko-warning. 844 Superko-warning.
843 <member name="channel" type="U16"/> 845 <member name="channel" type="U16"/>
844 </message> 846 </message>
845 847
846 <message type="440b" name="final_result" recv="yes"> 848 <message type="440b" name="final_result" dir="recv">
847 <member name="channel" type="U16"/> 849 <member name="channel" type="U16"/>
848 <member name="blackscore" type="scorevalues"/> 850 <member name="blackscore" type="scorevalues"/>
849 <member name="whitescore" type="scorevalues"/> 851 <member name="whitescore" type="scorevalues"/>
850 </message> 852 </message>
851 853
852 <message type="440e" name="req_undo" recv="yes"> 854 <message type="440e" name="req_undo" dir="recv">
853 <member name="channel" type="U16"/> 855 <member name="channel" type="U16"/>
854 856
855 </message> 857 </message>
856 858
857 <message type="4410" name="resign_game" recv="yes"> 859 <message type="4410" name="resign_game" dir="recv">
858 <member name="channel" type="U16"/> 860 <member name="channel" type="U16"/>
859 <member name="player" type="U8"/> 861 <member name="player" type="U8"/>
860 </message> 862 </message>
861 863
862 <message type="441a" name="set_teacher" recv="yes"> 864 <message type="441a" name="set_teacher" dir="recv">
863 <member name="channel" type="U16"/>
864 <member name="name" type="username"/> 865 <member name="channel" type="U16"/>
866 <member name="name" type="username"/>
865 </message> 867 </message>
866 868
867 <message type="441d" name="owner_left" recv="yes"> 869 <message type="441d" name="owner_left" dir="recv">
868 Unclear. 870 Unclear.
869 <member name="channel" type="U16"/> 871 <member name="channel" type="U16"/>
870 </message> 872 </message>
871 873
872 <message type="441e" name="teacher_left" recv="yes"> 874 <message type="441e" name="teacher_left" dir="recv">
873 Unclear. 875 Unclear.
874 <member name="channel" type="U16"/> 876 <member name="channel" type="U16"/>
875 </message> 877 </message>
876 878
877 <message type="4422" name="unknown4422" recv="yes"> 879 <message type="4422" name="unknown4422" dir="recv">
878 change teacher? something to do with editing? 880 change teacher? something to do with editing?
879 <member name="channel" type="U16"/> 881 <member name="channel" type="U16"/>
880 <member name="name1" type="username"/> 882 <member name="name1" type="username"/>
881 <member name="name2" type="username"/> 883 <member name="name2" type="username"/>
882 </message> 884 </message>
883 885
884 <message type="4428" name="add_tree" recv="yes"> 886 <message type="4428" name="add_tree" dir="recv">
885 <p>See <ref ref="set_tree"/>. In addition, flags the tree as being 887 <p>See <ref ref="set_tree"/>. In addition, flags the tree as being
886 uploaded completely.</p> 888 uploaded completely.</p>
887 <member name="channel" type="U16"/> 889 <member name="channel" type="U16"/>
888 <member name="tree" type="TREE"/> 890 <member name="tree" type="TREE"/>
889 </message> 891 </message>
890 892
891 <message type="4433" name="req_result" recv="yes"> 893 <message type="4433" name="req_result" dir="recv">
892 Unclear. 894 Unclear.
893 <member name="channel" type="U16"/> 895 <member name="channel" type="U16"/>
894 # # recv_result(?) 896 # # recv_result(?)
895 </message> 897 </message>
896 898
897 <message type="4434" name="unknown4434" recv="yes"> 899 <message type="4434" name="unknown4434" dir="recv">
898 <member name="channel" type="U16"/> 900 <member name="channel" type="U16"/>
899 <member name="b1" type="U8"/> 901 <member name="b1" type="U8"/>
900 ?? !demonstration game?? 902 ?? !demonstration game??
901 </message> 903 </message>
902 904

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines