Формат clients.bin - kryukov/jimm-multi GitHub Wiki
int - 4х байтовое число в LE формате (число 0х1234 в памяти выглядит как 0х12 0х34)
word - 2х байтовое число
utf8 - 2х байтовая длина строки и сама строка в кодировке utf8
byte - 1 байт
cap - (byte длины капса, word смещение в сегменте гуидов)
[Секция кода]
[Секция гуидов]
[Секция FP]
[Список клиентов]
[Секция маскировок]
[int-длина]
[Определения клиентов]
Каждое определение начинается с байта длины.
За ним идет байт с флагами, которые характеризуют данные, которые записаны после байта.
- 7 - protocol (protocol(2b))
- 0 - caps count (capsCount(1b))
- 1 - fp0 (fpIndex(1b))
- 2 - fp1 (fpIndex(1b))
- 3 - fp2 (fpIndex(1b))
- 4 - caps (count(1b) (length(1b) where(2b))+)
- 5 - !caps (count(1b) (length(1b) where(2b))+)
- 6 - Version (type(1b=0) ...
Друг за другом, в зависимости от включённых флагов, пишутся следующие данные:
- Если задан бит 7 следующий word c версией
- Если задан бит 0 следующий byte количеством капсов
- Если задан бит 1 следующий byte индекс fp #0
- Если задан бит 2 следующий byte индекс fp #1
- Если задан бит 3 следующий byte индекс fp #2
- Если задан бит 4 далее byte с числом капсов и список cap
- Если задан бит 5 далее byte с числом не содержащихся капсов и список cap
- Если задан бит 6 далее byte с типом и зависящий от типа формат версии.
0 - GUID string (cap) (offset length)(1b))
1 - GUID bytes (cap) (offset length)(1b))
2 - GUID Miranda (cap) (offset=0 length=0)) - для Миранды Jimm сам извлекает информацию о версии
3 - FP bytes (fpIndex(1b))
4 - FP string (fpIndex(1b))
5 - FP int (fpIndex(1b))
- (offset length) - упакованные в byte смещение и длина строки с версией (0xF0 - смещение и 0x0F - длина).
[int-длина]
[byte-данные]
Секция гуидов предназначена для записи так называемых GUIDs (или CAPs в QIP Infium). Поскольку в секции кода они идентифицируются по положению и длине, то капсы могут налезать друг на друга в случае частичного совпадения.
[byte-количество]
[int-FPs]
Секция FP служит для записи так называемых FPs (или DCInfo в QIP Infium).
[byte-количество]
[utf8-строки]
[byte-номера иконок]
Этот список служит для записи названий клиентов и номера соответствующей иконки.
[byte-номер маскировки по умолчанию]
[byte-число маскировок]
[данные с маскировками]
Данные с маскировками:
[byte-длина данных с маскировкой]
[word-версия протокола]
[3xbyte-индексы FPs]
[друг за другом word-позиции GUIDs]