Asynchronous Mailing System Jérôme Clet-Ortega François Broquedis Dave Tapesar Stéphanie Moreaud 12 janvier 2007 1
2 Objectifs Asynchronous Mailing System (AMS) doit permettre de rédiger des mails sur un téléphone Bluetooth, qui seront envoyés par un ordinateur (que l on qualifiera de serveur dans toute la suite) disposant de l application Thunderbird correctement configurée, d une connexion internet active et d un périphérique Bluetooth.
1 IDÉES DE DÉPART, ÉLÉMENTS D ARCHITECTURE 3 1 Idées de départ, éléments d architecture AMS met en jeu la rédaction de messages sur téléphone, des communications Bluetooth permettant de le faire dialoguer avec un serveur, et l émission de ces messages par Thunderbird depuis ce serveur. Etudions la mise en place de ces briques, à différents niveaux. 1.1 Au niveau du téléphone Le middlet développé sur le téléphone doit remplir deux missions principales. D une part, proposer une interface graphique permettant la rédaction et l enregistrement des mails à envoyer plus tard sur le serveur, d autre part s interfacer correctement avec le serveur de façon à lui envoyer les messages sauvegardés via des communications Bluetooth. 1.2 Au niveau du serveur Le serveur a lui aussi deux objectifs. Il doit d abord récupérer la liste des messages à envoyer que le téléphone lui envoie, et donc gérer une connexion Bluetooth, puis faire passer cette liste à une extension Thunderbird développée par nos soins qui les enverra. 1.3 Entre les deux! Au niveau communication, on doit établir une connexion Bluetooth entre le téléphone et le serveur, puis faire transiter une liste de messages à envoyer. 2 Implémentation Cette partie présente les choix d implémentation des différentes briques de bases présentées dans la section précédente. 2.1 Le middlet AMS Le middlet propose une interface graphique pour rédiger des messages et un module de communication pour les envoyer via Bluetooth. 2.1.1 La partie graphique La partie graphique du middlet comprend deux écrans, le premier affichant la liste des messages à envoyer, le deuxième, apparaissant lorsqu on édite un message, permettant d en renseigner les champs destinataire et corps. Ces écrans utilisent les objets List et TextField de la MicroEdition de Java 2. Ils ont été créés à partir des exemples disponibles sur le simulateur de téléphone utilisé en TD. Au niveau interne, un objet Message décrit un message à envoyer, contenant le destinataire et le corps. Un objet MessageArray décrit une liste de messages, et contient donc un tableau de Message. Cet objet a été créé pour remplacer l objet ArrayList, absent de la MicroEdition de Java 2. L édition d un message
2 IMPLÉMENTATION 4 sur l écran d édition du middlet provoque la création d un objet Message, qui sera rajouté au MessageArray, correspondant à la liste des messages à envoyer, lorsque l utilisateur validera l édition du message. On a donc une structure de données qui colle à la représentation graphique des messages, à tout moment. 2.1.2 La partie communication L utilisateur peut choisir d envoyer les messages contenus dans la liste à tout moment. Cette action provoque un appel à la méthode sendmessages du module de communication du middlet appelé AMSCommunicator. Cette méthode permet l envoi d une liste de messages sous forme d un unique String contenant tous les messages à envoyer concaténés, généré par un appel à la méthode tostring de l objet MessageArray. En effet la MicroEdition de Java 2 ne permet pas de sérialiser des objets, il a donc fallu développer notre propre méthode de sérialisation, et un objet MessageArray circulera donc sur le réseau sous forme de String. Pour ce qui est des communications à proprement parler, nous utilisons un objet StreamConnection disponible dans le package Bluetooth de la MicroEdition, pour se connecter au serveur, dont l adresse mac est connue. L objet String représentant la liste des messages est envoyé sous la forme d un tableau d octets. 2.2 Le serveur Le serveur est conçu en deux parties, une partie écrite en Java ayant pour rôle de récupérer les données envoyées par le téléphone, et une partie constituant une extension pour Thunderbird, qui utilise les données reçues pour en extraire les messages et les envoyer aux destinataires. 2.2.1 Le serveur Java de rception des donnes Le serveur Java utilise le package jrfcomm utilisé en TD pour établir une connexion avec le téléphone et récupérer la liste des messages à envoyer. Une fois lancé, il attend une demande de connexion par la méthode listen de l objet Rfcomm. Lorsqu une connexion entrante est établie, on récupère le tableau d octets correspond à l objet String décrivant la liste des messages. Une fois cet objet récupéré, on peut alors reconstruire l objet MessageArray en utilisant un constructeur spécifique. Une fois la liste des messages récupérée et reconstruite, il reste à la rendre disponible à l extension de Thunderbird. Nous avons choisi d enregistrer cette liste dans un fichier XML que viendra consulter l extension XUL. Nous utilisons le package jdom, pour créer un objet XMLMessageArray, capable de sauvegarder le contenu d un MessageArray dans un fichier XML. 2.2.2 L extension XUL pour Thunderbird Notre extension pour Thunderbird, a pour but de récupérer du fichier XML, créé par le serveur Java, les données pour ouvrir les fenêtres de composition cor-
2 IMPLÉMENTATION 5 respondantes (champs A, Sujet, Corps remplis) à chacun des messages précédemment écrits sur le téléphone. Introduction à XUL L écriture d une extension pour Thunderbird combine différents langages : un langage spécifique, XUL (XML-User interface Language) et différents langages de script parmi lesquels le javascript. C est le format XPI (Cross-Platform Installer) qui permet d installer une extension pour Thunderbird (ou tout autres application basée sur XUL) Un fichier XPI est en fait un fichier compressé au format ZIP qui contient un script d installation (install.rdf) à la racine de l archive et un fichier jar contenant l arborescence de l extension. L arborescence install.rdf : Il s agit du manifeste d installation qui contient entre autres un identifiant unique de l extension, l identifiant de l application à laquelle elle est destinée, et plusieurs informations sur l auteur, etc. chrome.manifest : Le fichier permet de spécifier le type de données au sein du paquetage et leur emplacement, pour que l application puisse y accéder. content/ Ce répertoire contient la description de l interface de l extension, ainsi que tous les scripts qui la feront fonctionner. locale Contient les données pour l adaptation linguistique de l utilisateur. On stocke ici tous les textes qui seront affichés dans une fenêtre. De cette façon, un utilisateur peut avoir une configuration pour sa propre langue. skin Ce dossier contient les feuilles de style, images et autres fichiers qui sont liés à l aspect d une fenêtre. Le coeur de l extension Nous décrivons ici les fichiers d interface et les scripts correspondants qui effectuent la recherche du fichier XML, et en traitent les données pour l émission des messages au sein de Thunderbird. overlay.xul et overlay.js Ces fichiers permettent de rajouter un élément dans le menu Outils de Thunderbird. On utilise ainsi la technique des overlay de Mozilla pour redéfinir tout élément en en superposant de nouveaux. Le menu Outils a pour identifiant taskpopup. On ajoute donc l élément <menuitem> ayant pour identifiant bluetooth-ams-blue. Dans overlay.xul, on associe le clic sur cet élément à l exécution d une fonction javascript (definie dans overlay.js) qui ouvre une fenêtre contenant les éléments définis dans le fichier bluetoth-ams.xul décrit ci-dessous. bluetooth-ams.xul et bluetooth-ams.js On ajoute ici deux boutons launch et close. Le premier est associé à l execution de la méthode sendallmessages() qui récupère les données du fichier xml créé par le serveur Java et le deuxième permet simplement de refermer la fenêtre. Au sein du fichier bluetooth-ams.js, on peut voir la définition de la fonction sendallmessages(). Cette méthode charge en mémoire le fichier XML, puis pour chaque message, crée une fenêtre de composition
3 MODE D EMPLOI 6 contenant les différents paramètres (e-mail, sujet et corps). Après lecture du fichier, cette fonction le supprime, pour permettre au serveur de fournir de nouvelles données. On utilise ici les composants XPCOM (système d objets utilisé par Mozilla). Ces composants permettent de réaliser des opérations que l on ne peut effectuer avec Javascript (suppression de fichiers, envoi de messages,...). L appel à un composant se fait en trois tapes : 1. Récupérer un composant. 2. Récupérer la partie du composant qui implémente l interface que l on veut utiliser. 3. Appeler la fonction dont on a besoin. Sur l exemple suivant, on récupére d abord le composant messangercompose, puis l interface nsimsgcomposeservice qui fournit la fonction OpenComposeWindowWithParams(...). var msgcomposeservice = Components.classes ["@mozilla.org/messengercompose;1"].getservice(); msgcomposeservice = msgcomposeservice. QueryInterface(Components.interfaces.nsIMsgComposeService); [...] msgcomposeservice.opencomposewindowwithparams(null, params); L exemple précédent permet ainsi d ouvrir une fenêtre de composition contenant différents champs pouvant être remplis au préalable. 3 Mode d emploi Cette section présente un mode d emploi de notre application, tant au niveau téléphone qu au niveau du serveur. 3.1 Installation Cette partie explique comment installer les différents composants d AMS. 3.1.1 Installation du middlet Pour installer AMS sur le téléphone, il suffit d y envoyer le fichier AMS.jar, et de suivre les instructions d installation. 3.2 Installation du serveur Java Le serveur Java ne nécessite pas d installation particulière. Il suffit de rajouter dans la variable d environnement CLASSPATH les fichiers jrfcomm.jar et jdom.jar situés dans l archive dans le dossier jars/, et dans LD L IBRARY P AT Hlefichierlibjrfcomm.sodispon
4 LISTE NON EXHAUSTIVE D ÉLEMENTS À RAJOUTER 7 3.2.1 Installation de l extension XUL Lancez Thunderbird, cliquez sur Outils, puis sur Extensions. Cliquez ensuite sur Installer, et choisissez le fichier bluetooth-ams.xpi disponible dans le dossier bin/ de l archive. Relancez Thunderbird, ou fermez-le simplement, puisque AMS le lancera automatiquement. 3.3 Utilisation Commencez par lancer le serveur Java côté PC en lançant le fichier serveurams.jar situé dans le dossier bin/ de l archive. Une fois le serveur lancé, lancez l application AMS sur le téléphone. Vous pouvez alors composer jusqu à dix messages (nous avons fixé une limite à dix messages pour s assurer que la liste des messages à envoyer tienne sur un écran, sur la plupart des téléphones), et les envoyer en choisissant Send messages! Le fichier XML généré s affiche sur le log du serveur Java, vous pouvez maintenant patienter (au CREMI, longtemps!) pendant l ouverture automatique de Thunderbird. Une fois Thunderbird lancé, cliquez sur Outils, puis Bluetooth-AMS pour afficher la fenêtre de contrôle de notre extension XUL. Cliquez ensuite sur Launch pour récupérer les messages à envoyer. 4 Liste non exhaustive d élements à rajouter L application AMS a été developpée dans le but de remplir l objectif du projet, à savoir contrôler une application d un serveur avec un téléphone Bluetooth dans le temps qui nous était imparti. Il a donc été nécessaire de mettre entre parenthèses de nombreuses fonctionnalités implémentables, qui en feraient une application réellement utilisable. Nous présentons dans cette section des idées d améliorations pour notre projet. 4.1 Améliorations du middlet Le middlet fourni actuellement avec AMS ne permet que l ajout de message, ou la remise à zéro de la liste (en quittant l application!). On aimerait pouvoir éditer un message déjà dans la liste, ou supprimer les messages sélectionnés. De plus, aucune information n est stockée dans la mémoire (morte) du téléphone, et le fait de quitter l application réinitialise la liste des messages à envoyer. Il faudrait pouvoir sauvegarder cette liste pour un envoi ultérieur. Enfin, la connexion au serveur Java n est actuellement possible que parce l adresse MAC du périphérique Bluetooth du serveur est connue, et codée en dur dans AMSCommunicator. Il faudrait pouvoir créer un service AMS sur le serveur, qui lorsqu il serait découvert par le téléphone provoquerait l échange des adresses MAC. 4.2 Améliorations du serveur Java Le serveur Java actuel attend une connexion (et une seule!), et suppose que cette connexion a pour but d envoyer une liste de messages MessageArray. Il
5 CONCLUSION 8 faudrait déjà pouvoir traiter plusieurs demandes de connexion d affilée, créer et enregistrer un service AMS avec sdptool par exemple, et n accepter que les demandes de connexion relatives à ce service. 4.3 Améliorations de l extension XUL Actuellement, l extension de Thunderbird nécessite l intervention de l utilisateur, à la fois pour lancer la lecture des données dans le fichier xml, mais aussi pour l envoi de chaque message. Il faudrait alors se plonger encore plus dans les sources de Mozilla et chercher plus profondément dans la documentation des composants XPCOM afin de trouver des méthodes directes d envoi de messages avec paramètres, et d automatisation d exécution au démarrage de Thunderbird. On pourrait de plus envisager d intégrer directement le serveur Java dans l extension, afin d en faciliter l emploi pour l utilisateur. L interaction entre l extension et le serveur Java pourrait alors en être modifiée (ne plus utiliser un fichier XML pour l échange de données). 5 Conclusion Avec le recul, entreprendre de développer une extension XUL en si peu de temps alors que nous ne connaissions rien du développement d extensions sur la plateforme Mozilla n était peut-être pas le meilleur choix que l on puisse faire pour s assurer une application fonctionnelle et aboutie à la fin du projet. Cependant autant la génération de fichiers XML en Java avec JDOM que le développement en XUL se sont avérés être intéressants et formateurs, et en cela nous ne regrettons pas ce choix.