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