$Id: PROTOCOL,v 1.1 2005/02/23 16:10:14 bobas Exp $ Vypress Chat protocol description revision 1.0, 2005-01-23 --------------------------------- I've recieved requests for VypressChat protocol specs, so here it is. This is based on information I got from Vasily Krysin (echat) and Konstantin Vyatkin (Vypress Research). Please note that information concerning 1.9.x is incomplete; Vypress Research stopped answering my emails, It look like they don't want to support vyqchat anymore. If you know anything more than below, please contact me, so I could make this manual as complete as possible. Especially RSA usage and bulletin-board support deatils are welcome! I. Vypress Chat 1.5.x protocol ------------------------------ Warning! Information provided below may contain subtle errors (like sender exchanged with reciever). If in doubt, please compare it with vcprotocol.cpp from VyQChat (see VCProtocol::vc_* functions). These mistakes will be corrected in future revisions of this document. Each Vypress Chat packet begins with 'X' and 9 random characters from '0'..'9' range (unique packet ID). Then comes packet type id (single character). For example: X1234567892#Main\0Nick\0text of string\0 ^^ ^^ ^ ^ ^ ^ ^----- 0x00 == string splitter || || | | | |------------------- plain text to display on chat || || | | |--------------------- 0x00 == string splitter || || | |------------------------- nick || || |--------------------------- 0x00 == string splitter || ||-------------------------------- channel || |--------------------------------- 0x32 == type of packet - chat ||------------------------------------------ packet id |------------------------------------------- 0x58 == Vypress Chat ============================================================================== Available packets: ********************************************************************************************** *** Packet from list updater (Who here) '0' + + #0 ^^^ - its a single byte 0x00, showing end of a line ********************************************************************************************** *** Answer to the previous packet ("Im here") '1' + + #0 + + #0 + Status + RemoteActive ^^^^^ status of responder (byte) '0' - Normal '1' - DND '2' - Away '3' - Offline ^^^^^ window state (byte) '0' - active '1' - not active ********************************************************************************************** *** Simple chat string on the channel '2' + + #0 + + #0 + + #0 ********************************************************************************************** *** Nick change '3' + + #0 + + #0 + Gender ^^^^ - gender of the user '0' - male '1' - female ********************************************************************************************** *** Join to channel '4' + + #0 + + #0 + Status + Gender ********************************************************************************************** *** Leave from channel '5' + + #0 + + #0 + Gender ********************************************************************************************** *** Message '6' + + #0 + + #0 + + #0 ********************************************************************************************** *** Multiaddress message 'E' + + #0 + + #0 + + #0 ********************************************************************************************** *** Message ack '7' + Status + + #0 + + #0 + Gender + CurrentAA + #0 ^^^^^^^^^ current autoanswer (may be empty, for ex in Normal mode) ********************************************************************************************** *** Remote execution '8' + + #0 + + #0 + + #0 + + #0 ^^^^^^^^ may be empty ********************************************************************************************** *** Execution ack '9' + + #0 + + #0 + + #0 ********************************************************************************************** *** /ME on the channels 'A' + + #0 + + #0 + + #0 ********************************************************************************************** *** New topic 'B' + + #0 + + ' (' + + ') ' + #0 ********************************************************************************************** *** Current topic (sending to each who join channel) 'C' + + #0 + + #0 + + #0 ********************************************************************************************** *** Change of status 'D' + + #0 + Status + Gender + CurrentAA + #0 ********************************************************************************************** *** INFO request 'F' + + #0 + + #0 ********************************************************************************************** *** INFO request ack 'G' + + #0 + + #0 + + #0 + + #0 + + #0 + + '#' + #0 + CurrentAA + #0 ********************************************************************************************** *** BEEP signal 'H' + '0' + + #0 + + #0 ack 'H' + '1' + + #0 + + #0 + Gender ********************************************************************************************** *** Sound request 'I' + + #0 + + #0 + + #0 ********************************************************************************************** *** Private join to chat 'J' + '0' + + #0 + + #0 + Gender leave chat 'J' + '1' + + #0 + + #0 + Gender Simple string 'J' + '2' + + #0 + + #0 + + #0 "/me" string 'J' + '3' + + #0 + + #0 + + #0 ********************************************************************************************** *** /HERE request 'L' + + #0 + + #0 ********************************************************************************************** *** /HERE ack 'K' + + #0 + + #0 + + #0 + RemoteActive ********************************************************************************************** *** Activity change 'M' + + #0 + RemoteActive ********************************************************************************************** *** Request for channel list 'N' + + #0 ********************************************************************************************** *** Request for channel list ack 'O' + + #0 + + '#' + #0 ********************************************************************************************** *** Ping (not implemented - SeaD) ping 'P' + '0' + + #0 + + #0 +