Actionscript 3, Socket et erreur “sandbox violation”

Adobe avec sa mise à jour du player Flash en version 9.0.124.0 vient de me faire subir un coup de “Stress”, utilisant les Sockets pour des applis “Desktop” sous Flash, qu’elle fut ma surprise lorsque j’ai voulu porter celles-ci en version “Online”.

Mon débugueur AS3 me sort la classique erreur des Sockets “Error #2048: Security sandbox violation“, malgré la présence sur le serveur qui me fournit les infos, d’un fichier de régulation, le fameux crossdomain.xml, qui jusqu’aux versions précédentes du player Flash ne me posait aucun problème, à moins que j’ai “zappé” une étape, qu’elle est donc cette nouvelle “fantaisie” de la part d’Adobe ?..

Après consultation de la raison de cette mise à jour, on apprends que c’est pour des raisons de sécurités, bon OK si c’est pour la sécurité … mais je fais quoi avec mes Sockets qui ne fonctionne plus ? (la prochaine fois je prendrais plus de temps pour lire les flux RSS d’Adobe, lol … )

On apprends donc que les fichiers crossdomain.xml ne suffisent plus pour autoriser les Sockets Flash à communiquer avec d’autres serveurs, les fameuses “Socket Policy file” ne sont plus accessible via des serveurs HTTP mais via des serveurs TCP (la nuance est subtil …), il nous faut donc implémenter un nouveau service TCP fournissant sur le port 843, un serveur de type “socket policy file server”.

Ce type de service n’est pas des plus compliqué à développer dans des languages de type Java, Python, Perl ou PHP, le plus compliqué à mon sens c’est leur mise en place sur les gros serveurs à cause des audits de sécurité et validation des services d”hébergement, ceux qui ont la chance d’administrer leur propres serveurs ne devrait pas avoir de mal à déployer ce type de service.

J’ai donc rapidement implémenter ce service sur un serveur de développement grâce aux exemples de l’article pré-cité et j’ai eu le plaisir de retrouver mes Sockets fonctionnels …

A savoir plusieurs choses, par défault le player Flash va chercher la “Socket Policy file” sur le port appellé et le port 843, par exemple si votre Socket se connecte sur le port 8080, le player va chercher par défaut sur le 8080 puis sur le 843, si au bout des 3 secondes de delay le player n’as pas la réponse souhaitée, il déclenche un événement de type “SecurityErrorEvent” qui provoque l’erreur :

#Error #2048: Security sandbox violation

On à toujours la possibilité de définir un port manuellement dans le code source pour définir un port spécifique ou pour des serveurs ayant un temps de réponse assez long, en utilisant l’instruction suivante avant l’appel du Socket :

loadPolicyFile("xmlsocket://monsiteamoi.com:8081");
mySocket = new Socket();

Voilà si mon retour d’expérience peut servir à d’autres c’est avec plaisir …

Ajouter un commentaire