Научете повече за протокола на агента
Хабре вече писа за това как работи агентът Mail.Ru. В момента няма официална документация за протокола в публичното пространство, така че трябва да проучите устройството емпирично. В тази статия ще разгледам изпращането на форматирани текстови съобщения и създаването и изпращането на съобщения до конференция.
Няколко думи за протокола
Съобщенията се изпращат в пакети с определен формат. Първите 44 байта са заглавката, която изглежда така:
Числата тук се предават в UL формат, който изглежда като 16 байта, записани отдясно наляво. Така че числото 10 ще изглежда като 00 00 00 0A. Така че ще опаковаме в UL:
Текстът се предава във формат LPS - низове със зададена дължина (дължината се дава под формата на UL). Ще го опаковаме така:
Също така трябва да опаковаме низове в LPS в други кодировки:
Текстови съобщения с форматиране
Да видим как изглеждат съобщенията. Полето msg в заглавката трябва да бъде попълнено с константата 0x1008, в противен случай пакетът на съобщението е както следва:
Последната част от пакета е частта за форматиране на текста на съобщението. Ако не се нуждаем от форматиране, rtf_part трябва да е интервал. В този случай агентът на Mail.Ru, до който ще бъде изпратено това съобщение, ще използва шрифтовете, инсталирани по подразбиране в агента на получателя.
Ако искаме да изпратим форматирано съобщение, тогава последната част на пакета трябва да бъде LPSZ(rtf_part), където:
Последният термин е цветът на фона, когато се получи съобщение, прозорецът за чат ще промени цвета изцяло. rtf за писане на "qwerty" изглежда така:
Виждате, че първата буква е написана с един шрифт, а останалите с друг. Не мога да обясня това поведение, но генерираният rtfАгентът на Mail.Ru, който успях да получа, изглеждаше така. rtf файловете, които нямат това свойство, остават валидни. Други параметри (език, шрифтова таблица, български език) влияят върху валидността на rtf.
Остава да се отбележи, че ако rtf-частта на съобщението не е празна, тя ще дойде в съобщението. Ако е посочена текстовата част на съобщението (тялото), тогава ще видим този текст в изскачащия прозорец на агента на Mail.Ru.
Конференции
Ако за да започнете чат с друг контакт, трябва само да изпратите съобщение, то за да започнете чат в конференция, трябва да направите няколко клякания.
Създайте конференция
Всяка конференция има свое уникално име, което изглежда като [email protected], което получаваме от сървъра в отговор на това съобщение:
В отговор на това съобщение идва съобщение от сървъра със същия номер в заглавката и ID. След като получите отговор от сървъра, можете да изпращате съобщения до конференцията.
Изпращане на съобщения до конференция
За да изпратите съобщение до конференция, трябва да изпратите два пакета. Първият пакет не носи семантичен товар, той е подготвителен:
И сега директно съобщението:
Изглежда като нормално съобщение с получателя на ID на конференцията.
Напускане на конференцията
Не беше възможно да се разбере как да се получи абсолютният номер на конференцията, но експериментално беше установено, че чатът не се идентифицира от него. Следователно можете да посочите всяко разумно число, например 42.
Проучването ми далеч не е завършено, така че всякакви корекции и допълнения са добре дошли.