ID
Origin
Name
Foodgroup
Service
Status
Version
0x0004, 0x0007
Host
ICBM__CHANNEL_MSG_TOCLIENT
Unspecified
BOS
Active
1.25
This is the ICBM__CHANNEL_MSG_TOHOST after it has been reformatted by the host and sent to the destination client.
Foodgroup
uint16 (word)
00 04
Subgroup
uint16 (word)
00 07
Flags
uint16 (word)
00 00
Request ID
uint32 (dword)
00 00 00 00
SNAC Data
Name
Type
Notes
cookie
ICBM Cookie
Opaque data generated by conversation initiator and used to link up the conversation and errors
channel
uint16 (word)
[Class: ICBM__CHANNELS ] Channel the message is on
info
OSERVICE__USERINFO
Information about the sender of the message
icbmTlvs
TLV
[Class: ICBM__TAGS ] Actual message
From Aleksandr Shutko: SNAC(04,07) message for client from server
SNAC(04,07)
ICBM__CHANNEL_MSG_TOCLIENT
You'll receive this snac when another client send you a message thru server.
Within the ICBM (Inter-Client Basic Message) types, a channel is defined.
Each channel represents a different kind of message.
Channel 1 is used for simple 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 4 is used for various ICQ messages. Examples are normal messages,
URLs, and old-style authorization.
This snac contain one fixed part (sender uin, channel, msg-id cookie, sender
info) and channel-dependend tlv-chain with message data.
See also additional information about online
userinfo block.
00 04
word
SNAC family
00 07
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
sender warning level
00 04
word
number of TLVs in fixed part
00 01
word
TLV.Type(0x01) - user class
00 02
word
TLV.Length
00 06
word
TLV.Type(0x06) - user status
00 04
word
TLV.Length
00 0F
word
TLV.Type(0x0F) - online time
00 04
word
TLV.Length
xx xx xx xx
dword
client online time
00 03
word
TLV.Type(0x03) - account creation time
00 04
word
TLV.Length
xx xx xx xx
dword
user account creation time
xx xx
word
TLV.Type(0xXX) - icbm data
xx xx
word
TLV.Length
xx xx
word
TLV.Type(0xXX) - icbm data
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)
Examples
Channel 1 Example
From Aleksandr Shutko: SNAC(04,07)/CH1 channel1 message from server for client
SNAC(04,07)/CH1
ICBM__CHANNEL_MSG_TOCLIENT/CH1
This is the message from server that was sent by another client. It contain
two parts: fixed part (sender uin, msg-id cookie, channel, sender info) and
message data part. See also additional information
about online userinfo block.
00 04
word
SNAC family
00 07
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
00 01
word
message channel
xx
byte
screenname string length
xx ..
string
screenname string
xx xx
word
sender warning level
00 04
word
number of TLVs in fixed part
00 01
word
TLV.Type(0x01) - user class
00 02
word
TLV.Length
00 06
word
TLV.Type(0x06) - user status
00 04
word
TLV.Length
00 0f
word
TLV.Type(0x0f) - user idle time
00 04
word
TLV.Length
xx xx xx xx
dword
client idle time
00 03
word
TLV.Type(0x03) - account creation time
00 04
word
TLV.Length
xx xx xx xx
dword
user account creation time
00 04
word
TLV.Type(0x04) - automated response flag
00 00
word
TLV.Length
empty (this TLV appears in automated responses like away messages)
00 02
word
TLV.Type(0x02) - message data
xx xx
word
TLV.Length
05
byte
fragment identifier (array of required capabilities)
01
byte
fragment version
xx xx
word
TLV.Length
xx ..
array
byte array of required capabilities (1 - text)
01
byte
fragment identifier (message text)
01
byte
fragment version
xx xx
word
TLV.Length
00 00
word
Message charset number
ff ff
word
Message charset subset
xx ..
string (ascii)
Message text string
Example SNAC dumps with flap header:
2a 02 ae e3 00 66 00 04 00 07 00 00 9a b3 8d eb *....f..........
3e bc 91 9e 4a ba ef c9 00 01 07 31 30 30 30 30 >...J......10000
30 30 00 00 00 04 00 01 00 02 00 50 00 06 00 04 00.........P....
00 01 00 00 00 0f 00 04 00 00 04 66 00 03 00 04 ...........f....
00 00 00 00 00 02 00 24 05 01 00 01 00 01 01 00 .......$........
1b 00 00 00 00 74 65 73 74 20 70 6c 61 69 6e 2d .....test plain-
74 65 78 74 20 6d 65 73 73 61 67 65 text message
Channel 2 Example
From Aleksandr Shutko: SNAC(04,07)/CH2 channel 2 message from server for client
SNAC(04,07)/CH2
ICBM__CHANNEL_MSG_TOCLIENT/CH2
This is the message from server that was sent by another client. It contain
two parts: fixed part (sender uin, msg-id cookie, channel, sender info) and
message data part. See also additional information
about online userinfo block.
00 04
word
SNAC family
00 07
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
00 02
word
message channel
xx
byte
screenname string length
xx ..
string
screenname string
xx xx
word
sender warning level
xx xx
word
number of TLVs in fixed part
00 01
word
TLV.Type(0x01) - user class
00 02
word
TLV.Length
00 06
word
TLV.Type(0x06) - user status
00 04
word
TLV.Length
00 0F
word
TLV.Type(0x0F) - online time
00 04
word
TLV.Length
xx xx xx xx
dword
client online time
00 03
word
TLV.Type(0x03) - account creation time
00 04
word
TLV.Length
xx xx xx xx
dword
user account creation time
00 05
word
TLV.Type(0x05) - rendezvous message data
xx xx
word
TLV.Length
xx xx
word
message type (0 - request, 1 - cancel, 2 - accept)
xx xx xx xx xx xx xx xx
qword
msg-id cookie (same as above)
xx .. xx
guid
capability (determines format
of message data in "extention data" below)
00 04
word
TLV.Type(0x04) - external ip
xx xx
word
TLV.Length
xx xx xx xx
dword
external ip
00 05
word
TLV.Type(0x05) - listening port
xx xx
word
TLV.Length
xx xx
word
listening port
00 0A
word
TLV.Type(0x0A) - unknown
xx xx
word
TLV.Length
xx xx
word
unknown (usually 1)
00 0B
word
TLV.Type(0x0B) - unknown
xx xx
word
TLV.Length
00 0F
word
TLV.Type(0x0F) - unknown
00 00
word
TLV.Length
27 11
word
TLV.Type(0x2711) - extention data
xx xx
word
TLV.Length
Following contents is capability-specific.
Data format description for capability
{09461349-4C7F-11D1-8222-444553540000}
xx xx
word (LE)
length of following data
xx xx
word (LE)
protocol version
xx .. xx
guid (LE)
plugin or zero bytes
xx xx
word
unknown
xx xx xx xx
dword (LE)
client capabilities flags
xx
byte
unknown
xx xx
word (LE)
seems to be a downcounter
xx xx
word (LE)
length of following data
xx xx
word (LE)
seems to be a downcounter as in first chunk above
xx ..
unknown, usually zeros
if plugin field in first chunk above is zero, here is
message , overwise here is
plugin-specific data.
Example SNAC dumps with flap header:
2A 02 08 2C 01 9D 00 04 00 07 00 00 90 2F 30 11 *..,.???......???/0.
70 95 A0 00 26 1F 00 00 00 02 07 31 32 33 34 35 p??????.&......12345
36 37 00 00 00 04 00 01 00 02 00 50 00 06 00 04 67.........P....
20 12 00 00 00 0F 00 04 00 00 06 F3 00 03 00 04 ..........???....
40 5A 93 78 00 05 01 5B 00 00 70 95 A0 00 26 1F @Z???x...[..p??????.&.
00 00 09 46 13 49 4C 7F 11 D1 82 22 44 45 53 54 ...F.IL?.T???"DEST
00 00 00 0A 00 02 00 01 00 0F 00 00 27 11 01 33 ............'..3
1B 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 03 00 00 00 00 E3 FF 0E 00 E3 ...........???..???
FF 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 ???...............
00 21 00 CC 00 7B 5C 72 74 66 31 5C 61 6E 73 69 .!.???.{\rtf1\ansi
5C 61 6E 73 69 63 70 67 31 32 35 31 5C 64 65 66 \ansicpg1251\def
66 30 5C 64 65 66 6C 61 6E 67 31 30 34 39 7B 5C f0\deflang1049{\
66 6F 6E 74 74 62 6C 7B 5C 66 30 5C 66 6E 69 6C fonttbl{\f0\fnil
5C 66 63 68 61 72 73 65 74 32 30 34 7B 5C 2A 5C \fcharset204{\*\
66 6E 61 6D 65 20 4D 53 20 53 61 6E 73 20 53 65 fname MS Sans Se
72 69 66 3B 7D 4D 53 20 53 68 65 6C 6C 20 44 6C rif;}MS Shell Dl
67 3B 7D 7D 0D 0A 7B 5C 63 6F 6C 6F 72 74 62 6C g;}}..{\colortbl
20 3B 5C 72 65 64 30 5C 67 72 65 65 6E 30 5C 62 ;\red0\green0\b
6C 75 65 30 3B 7D 0D 0A 5C 76 69 65 77 6B 69 6E lue0;}..\viewkin
64 34 5C 75 63 31 5C 70 61 72 64 5C 63 66 31 5C d4\uc1\pard\cf1\
66 30 5C 66 73 32 30 3C 23 23 69 63 71 69 6D 61 f0\fs20<##icqima
67 65 30 30 30 38 3E 5C 70 61 72 0D 0A 7D 0D 0A ge0008>\par..}..
00 00 00 00 00 FF FF FF 00 26 00 00 00 7B 39 37 .....?????????.&...{97
42 31 32 37 35 31 2D 32 34 33 43 2D 34 33 33 34 B12751-243C-4334
2D 41 44 32 32 2D 44 36 41 42 46 37 33 46 31 34 -AD22-D6ABF73F14
39 32 7D 92}
Channel 4 Example
From Aleksandr Shutko: SNAC(04,07) message for client from server
SNAC(04,07)
ICBM__CHANNEL_MSG_TOCLIENT/CH4
You'll receive this snac when another client send you a message on channel 4
thru server. ICQ clients use this snac to send messages to an old/offline/invisible
clients if message type != 1 or message flags != 0 (for example plain-text
multi-recipient message to an offline client) but this doesn't mean that you
will never receive usual channel 4 plain-text message. See also
additional information about online userinfo
block.
00 04
word
SNAC family
00 07
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
sender warning level
00 04
word
number of TLVs in fixed part
00 01
word
TLV.Type(0x01) - user class
00 02
word
TLV.Length
00 06
word
TLV.Type(0x06) - user status
00 04
word
TLV.Length
00 0f
word
TLV.Type(0x0f) - user idle time
00 04
word
TLV.Length
xx xx xx xx
dword
client idle time
00 03
word
TLV.Type(0x03) - account creation time
00 04
word
TLV.Length
xx xx xx xx
dword
user account creation time
00 05
word
TLV.Type(0x05) - message data
xx xx
word
TLV.Length
xx xx xx xx
dword (LE)
Sender uin
xx
byte
Message type
xx
byte
Message flags
xx xx
word (LE)
Message string length
xx .. 00
string (asciiz)
Message string
Example SNAC dumps with flap header:
2a 02 ae e2 00 6a 00 04 00 07 00 00 9a b3 8d eb *....j..........
3e bc 8e 0a 59 65 b9 56 00 04 07 31 30 30 30 30 >...Ye.V...10000
30 30 00 00 00 04 00 01 00 02 00 50 00 06 00 04 00.........P....
00 01 00 00 00 0f 00 04 00 00 00 d2 00 03 00 04 ................
00 00 00 00 00 05 00 28 40 42 0f 00 04 00 20 00 .......(@B.... .
55 72 6c 20 64 65 73 63 72 69 70 74 69 6f 6e fe Url description.
68 74 74 70 3a 2f 2f 74 65 73 74 2e 75 72 6c 00 http://test.url.
ICBM SNACs
SNAC List
Expand
Subgroup
Origin
Name
0x0001
Any
ICBM__ERR
This is the error SNAC for the ICBM foodgroup.
0x0002
Client
ICBM__ADD_PARAMETERS
This SNAC is typically sent prior to sending the OSERVICE__CLIENT_ONLINE so that the host is properly initialized with the clients' preferences.
0x0003
Client
ICBM__DEL_PARAMETERS
These are the delete all parameters for a given channel.
0x0004
Client
ICBM__PARAMETER_QUERY
This SNAC requests ICBM parameters from the host.
0x0005
Host
ICBM__PARAMETER_REPLY
This SNAC is sent by the host in response to a ICBM__PARAMETER_QUERY.
0x0006
Client
ICBM__CHANNEL_MSG_TOHOST
This is the basic inter-client message after which the group was named (Inter-Client Basic Messages).
0x0007
Host
ICBM__CHANNEL_MSG_TOCLIENT
This is the ICBM__CHANNEL_MSG_TOHOST after it has been reformatted by the host and sent to the destination client.
0x0008
Client
ICBM__EVIL_REQUEST
This requests that the specified user is sent an EVIL notification.
0x0009
Host
ICBM__EVIL_REPLY
The reply tells the requester, the sender of an ICBM__EVIL_REQUEST SNAC, how much EVIL, if any, was applied to the recipient.
0x000A
Host
ICBM__MISSED_CALLS
When the host is unable to send one or more messages to the client, the host sends this SNAC to the client to let it know that it missed some messages ("calls").
0x000B
Any
ICBM__CLIENT_ERR
This error notice is one of the few SNACs that can be sent to the host and received by a client.
0x000C
Host
ICBM__HOST_ACK
This SNAC is sent by the host upon receipt of any ICBM__CHANNEL_MSG_TOHOST which includes the optional ICBM__TLV_TAGS_REQUEST_HOST_ACK TLV.
0x000D
NCD
ICBM__SIN_STORED
This is not currently documented. Want to contribute ?
0x000E
NCD
ICBM__SIN_LIST_QUERY
This is not currently documented. Want to contribute ?
0x000F
NCD
ICBM__SIN_LIST_REPLY
This is not currently documented. Want to contribute ?
0x0010
Client
ICBM__SIN_RETRIEVE
This requests ICBM__CHANNEL_MSG_TOCLIENT messages be generated for each of the stored ICBMs. Any message retrieved is deleted.
0x0011
NCD
ICBM__SIN_DELETE
This is not currently documented. Want to contribute ?
0x0012
NCD
ICBM__NOTIFY_REQUEST
This is not currently documented. Want to contribute ?
0x0013
NCD
ICBM__NOTIFY_REPLY
This is not currently documented. Want to contribute ?
0x0014
Any
ICBM__CLIENT_EVENT
This SNAC is sent as a control message, sent by a client to inform the recipient of an event, or by the host informing of an event.
0x0017
Host
ICBM__SIN_REPLY
The host successfully processed the request to retrieve all the offline messages.