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
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.
|
|