OSCAR (protocole)
# OSCAR (protocole)

OSCAR (acronyme de Open System for CommunicAtion in Realtime) est le protocole le plus important d'AOL pour la messagerie instantanée et l'information de présence. Actuellement, OSCAR est utilisé par les deux principaux systèmes de messagerie instantanée d'AOL : ICQ et AIM.

Malgré son nom, les spécifications du protocole sont propriétaires. AOL a fait de grands efforts pour empêcher ses concurrents (à savoir Microsoft, XMPP et Cerulean Studios (en)) d'implanter des clients compatibles avec leurs systèmes de messagerie instantanée propriétaires. En 2002, AOL a signé un contrat avec Apple lui permettant d'utiliser OSCAR (ainsi que ses bibliothèques logicielles) dans son application iChat. Cela a permis aux utilisateurs d'iChat d'interagir directement avec les utilisateurs d'ICQ et d'AIM. L'accord a également permis aux utilisateurs du service .Mac d'Apple de se connecter au réseau AIM en utilisant leurs adresses électroniques .Mac (cette possibilité a, par la suite, été implantée sur le service MobileMe d'Apple).

En 2009, une grande partie du protocole avait été exposée par rétro-ingénierie et mise en œuvre par un nombre toujours croissant de clients tiers.

Le protocole OSCAR peut être utilisé indépendamment du réseau d'AOL. En fait, AOL étend le concept général de OSCAR, en ajoutant des systèmes de listes et des icônes secondaires de service, ainsi que des fonctionnalités pour les transferts de fichiers (à l'aide d'Apple_Bonjour).

Le 6 mars 2006, AOL a publié le SDK AIM et a lancé un site du développeur, ce qui permet aux développeurs de créer des plug-ins pour AIM et de construire leurs propres clients personnalisés qui se connectent via le protocole OSCAR. Cependant, AOL n'avait pas, à cette date, publié d'information sur le protocole lui-même.

Le 5 mars 2008, AOL a publié des portions de la documentation du protocole OSCAR.

Google offre également la possibilité de se connecter au réseau AIM à travers le client Google Talk intégré dans Gmail.

## Structure de paquet

Tous les paquets envoyés sur OSCAR sont encapsulés de la même manière. Tous les nombres entiers de 16 bits envoyés sur le réseau ne sont pas signés et sont de type big endian (voir endianness). Il en est de même pour les nombres entiers de 32 bits et de 8 bits.

### Entête FLAP

Un conteneur FLAP (Frame Layer Protocol) renferme chaque paquet. Il contient des informations sur la taille du paquet, son canal et son numéro de séquence.

| Offset (hex) | Champ | Type/Taille (en octets) | Remarques |
| - | - | - | - |
| 00 | FLAP ID | byte/1 | Contient toujours 2A. C'est la marque de début de paquet. |
| 01 | Canal | byte/1 | 1 = connexion, 2 = couche SNAC, 3 = erreur, 4 = déconnecter |
| 02 | Numéro de séquence | int16/2 | Incrémenté de 1 chaque fois qu'un paquet est envoyé. Recommence à 0 après FFFF. |
| 04 | Taille de donnée | int16/2 | La taille n'inclut pas l'entête de la FLAP. |

### Donnée SNAC

Dans presque tous les paquets envoyés sur le canal 2, les paquets contiennent un SNAC (Simple Network Atomic Communication). Il y a toujours un ou zéro de ces contenus dans un paquet. Par conséquent, les paquets ne contiennent pas (et n'ont pas besoin) d'un champ de longueur.

| Offset (hex) | Champ | Type/Taille (en octets) | Remarques |
| - | - | - | - |
| 00 | Foodgroup | int16/2 | Le type général du paquet |
| 02 | Type | int16/2 | Le type spécifique de la foodgroup |
| 04 | Flags | int16/2 | |
| 06 | ID de requête | int32/4 | Il peut être aléatoire, mais le bit le plus significatif ne peut être 1. |

## Implémentations

| Langage de Programmation | Implémentations |
| - | - |
| C | libpurple GnomeICU |
| C# | NOscar |
| C++ | « QOscar (Qt) » |
| C# 2.0 | OscarLib |
| Java | joscar Instant Messenger Lib « daim » (consulté le 17 décembre 2013) |
| Objective-C | LibOrange |
| OCaml | mlOscar |
| Python | TwistedWords |
| Perl | Net::OSCAR |
| PHP | WebIcqPro |

## Référence

* ↑ « FLAP - Frame Layer Protocol », AOL Developer Network, AOL, 5 mars 2008 (consulté le 1er novembre 2009)
