Введение

Протокол мгновенных сообщений и информации о присутствии OSCAR (Open System for Communication in Realtime) — это проприетарный протокол мгновенных сообщений и информации о присутствии, разработанный AOL. Он использовался в системах мгновенных сообщений AOL AIM и ICQ. Несмотря на название, спецификации протокола остаются закрытыми. AOL приложила значительные усилия, чтобы не допустить создания конкурентами (в частности, Microsoft, XMPP и Cerulean Studios) совместимых клиентов для своих собственных систем обмена сообщениями. В 2002 году AOL заключила контракт с Apple, Inc., предоставив им право использовать OSCAR (а также собственные кодовые библиотеки AOL) в приложении iChat. Это позволило пользователям iChat напрямую взаимодействовать с пользователями ICQ и AIM. Соглашение также позволило пользователям сервиса Apple Mac входить в сеть AIM, используя свои адреса электронной почты Mac. (Эта возможность была перенесена и на сервис Apple MobileMe.) При этом значительная часть протокола была реконструирована и реализована рядом сторонних клиентов. Протокол OSCAR может использоваться независимо от сети AOL. Фактически, AOL развивает общую концепцию OSCAR, добавляя системы списков контактов и иконок на стороне сервера, а также функции для передачи файлов с использованием Bonjour. 6 марта 2006 года AOL выпустила SDK AIM и запустила веб-сайт для разработчиков, позволяя им создавать плагины для AIM Triton и собственные клиенты, подключающиеся через протокол OSCAR. Однако на тот момент информация о самом протоколе не была опубликована. 5 марта 2008 года AOL опубликовала части документации по протоколу OSCAR. Кроме того, Google предоставила возможность входа в сеть AIM через клиент Google Talk, встроенный в Gmail.

Структура пакета

Все пакеты, передаваемые по OSCAR, инкапсулируются одним и тем же способом. Все 16-битные целые числа, передаваемые по сети, являются беззнаковыми и имеют порядок байтов big endian (см. Порядок байтов). То же самое относится и к 32-битным целым числам, а также к 8-битным целым числам (или байтам).

Заголовок FLAP

Каждый пакет помещается в специальный контейнер протокола Frame Layer Protocol (FLAP). Он несет информацию о размере пакета, канале и его порядковом номере в последовательности. Смещение (шестнадцатеричное) Тип поля/Размер (в байтах) Примечания00FLAP IDbyte/1Всегда содержит 2A. Это признак начала пакета.01Channelbyte/11 = вход в систему, 2 = уровень SNAC, 3 = ошибка, 4 = отключение02Номер в последовательностиint16/2Увеличивается на 1 при каждой отправке пакета. Возвращается к 0 после FFFF.04Размер данныхint16/2Размер не включает заголовок FLAP.

Данные SNAC

Почти каждый пакет, отправляемый по каналу 2, содержит SNAC (простая сетевая атомная коммуникация). В каждом пакете всегда содержится либо один, либо ноль таких SNAC, поэтому они не содержат (и не нуждаются в) указании длины.

Смещение (шестнадцатеричное) | Тип поля/Размер (в байтах) | Примечания
---|---|---
00 | Foodgroup | int16/2 | Общий тип пакета
02 | Type | int16/2 | Конкретный тип пакета
04 | Flags | int16/2 |
06 | Request ID | int32/4 | Идентификатор запроса, может быть случайным, но клиенты не должны отправлять его с установленным старшим битом.

Реализация

Язык программирования ClibpurpleGnomeICUC#NOscar C++QOscar (Qt) C# 2.0OscarLib Goretro aim сервер aim oscar сервер JavaJoscarInstant Messenger Lib daim Objective CLibOrangeOCamlmlOscar PythonTwistedWords PerlNet::OSCAR PHPWebIcqPro