SNAC(04,06)  CLI_SEND_ICBM 

Client use this snac to send message thru server. Within the ICBM (Inter-Client Basic Message) types (family 4), a channel is defined. Each channel represents a different kind of message.

Channel 1 is used for what would commonly be called an "instant message" (plain text messages). Channel 2 is used for complex messages (rtf, utf8) and negotiating "rendezvous". These transactions end in something more complex happening, such as a chat invitation, or a file transfer. Channel 3 is used for chat messages (not in the same family as these channels). Channel 4 is used for various ICQ messages. Examples are normal messages, URLs, and old-style authorization.

This snac contain one fixed part (target uin, channel, msg-id cookie) and channel-dependend tlv-chain.

First dword in msg-id cookies is actually the computer uptime in milliseconds (ie GetTickCount(), at least this is what the ICQ Lite and the other official clients I have tested uses).

 00 04   word   SNAC family
 00 06   word   SNAC subtype
 00 00   word   SNAC flags
 xx xx xx xx   dword   SNAC request-id
   xx xx xx xx
 xx xx xx xx
  qword   msg-id cookie
   xx xx   word   message channel (see table below)
   xx   byte   screenname string length
   xx ..   string   screenname string
 xx xx   word   TLV.Type(0xXX) - icbm info
 xx xx   word   TLV.Length
 ....   ....   ....
  ....  .... ....
 xx xx   word   TLV.Type(0xXX) - icbm info
 xx xx   word   TLV.Length
 ....   ....   ....

 Channel 1    Channel 1 message format (plain-text messages)
 Channel 2    Channel 2 message format (rtf messages, rendezvous)
 Channel 4    Channel 4 message format (typed old-style messages)

  Main | Basic | Login | Snaclist | Sequences | Misc | Changes | Credits | Terms