Topic: Migration d'une application vers Jabber

Bonjour,

je suis l'un des concepteur du tout récent logiciel Transfert (disponible sur http://transfert.tuxfamily.org) qui est un logiciel d'échange de fichiers entre contacts connus en direct (elle propose également le chat mais la n'est pas son but premier). Voila l'application fonctionne pas mal mais elle repose sur un protocole perso qui est moins puissant que jabber (évidemment) et toutes les évolutions que nous voulons faire sont supportées par Jabber. Donc nous voulons migrer l'application sur XMPP via l'API smack (en Java) et nous avons plusieurs question à ce propos (théorique).

1/ Je ne comprends pas comment fonctionne les échanges de fichiers en peer-to-peer, comment connait-t'on le port a utiliser? doit-on utiliser Jingle? (Je ne parle pas bien sur de l'échange par proxy mais d'un échange de fichier sans passer par le serveur)

2/ Comment étendre le protocole pour demander au serveur d'effectuer des taches spécifiques? Je pense a un message qui aurait une réponse faconnée par le serveur via un plugin spécifique.

3/ Comment fonctionne les connexions anonymes, tout est purgé a la déconnexion ou il est impossible de faire un roster?

Le but étant de faire un client jabber orienté échange de fichier, qui aiderais à configurer son réseau pour que les échanges soient plus rapides.

Merci

Re: Migration d'une application vers Jabber

1) c'est le bordel, tu as un certain nombre de méthodes, comme détaillé ici : http://wiki.jabberfr.org/Transfert_de_fichier
on trouve des transferts en direct, et d'autres via le flux jabber . La méthode via jingle existe aussi, mais elle est assez peu implementé.
Tout est détaillé sur http://www.xmpp.org/extensions/

2) ça dépend du serveur, mais je miserais sur les commandes adhoc ( http://www.xmpp.org/extensions/xep-0050.html ), et un plugin coté serveur

3) tu appelles quoi, connection anonyme ?

3 (edited by Yoann 16-07-2008 11:23:55)

Re: Migration d'une application vers Jabber

Merci pour tes réponses!

1/ J'ai trouvé des infos  sur http://www.xmpp.org/extensions/xep-0065 … arr-direct:

Direct connection is the simpler case. In this situation, the StreamHost is the Initiator (StreamHost/Initiator), which means that the Initiator knows the network address of the StreamHost and knows when to activate the bytestream. The process for establishing bytestreams in this case is as follows:

   1.Initiator sends IQ-set to Target specifying the full JID and network address of StreamHost/Initiator as well as the StreamID (SID) of the proposed bytestream.
   2. Target opens a TCP socket to the specified network address.
   3. Target requests connection via SOCKS5, with the DST.ADDR and DST.PORT parameters set to the values defined below.
   4.StreamHost/Initiator sends acknowledgement of successful connection to Target via SOCKS5.
   5.Target sends IQ-result to Initiator, preserving the 'id' of the initial IQ-set.
   6.StreamHost/Initiator activates the bytestream.
   7. Initiator and Target may begin using the bytestream.

Si j'ai bien compris Initiator envoie un fichier à Target, il doit donc lui indiquer son adresse et son port (le StreamHost, qui peut aussi être un proxy). Donc si on est d'accord, Initiator doit en premier lieu envoyer un message à Target de ce type:

<iq type='set'
    from='initiator@example.com/foo'
    to='target@example.org/bar'
    id='initiate'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='mySID'
     mode='tcp'>
    <streamhost
        jid='initiator@example.com/foo'
        host='192.168.4.1'
        port='5086'/>
    <streamhost
        jid='streamhostproxy.example.net'
        host='24.24.24.1'
        zeroconf='_jabber.bytestreams'/>
  </query>
</iq>

Je voudrais avoir confirmation que c'est bien '192.168.4.1' son interface réseau et '24.24.24.1' son proxy (je suis content je comprends mieux et je ne vais pas devoir utiliser jingle!), autre détails peut-on faire plusieurs transferts simultanés sur le même port?

2/ Le serveur sera probablement OpenFire, en fait je désire lui demander mon ip publique ou si mon port est accessible. Je regarde ces commandes ad-hoc

3/ OpenFire me propose d'accepter les connexions anonymes (sans enregistrement de compte) ça ne doit pas être standard et je vais surement me tourner vers eux pour avoir la réponse.  Je pense qu'il attribue un id pour la session, il faut tester mais je n'ai pas de client anonyme smile

Merci j'ai hâte d'implémenter tout ca! big_smile

Re: Migration d'une application vers Jabber

pour le 3, c'est pour les salons de discussions, typiquement muckl utilise ça. Et ejabberd implémente ça aussi.

5 (edited by Yoann 17-07-2008 16:37:23)

Re: Migration d'une application vers Jabber

En fait j'ai compris pour le 1. En fait l'envoyeur est serveur sur son port, le destinataire se connecte dessus et s'identifie selon SOCKS5 (cf. http://www.xmpp.org/extensions/xep-0065 … -establish) et du coup on sait qui est qui et on peux créer des sockets tranquille smile J'avais pas saisi ça

Ce point est clair, pour le second il faut tester, mais il n'y a rien de standard pour demander des infos au serveur comme l'adresse ip publique?

Pour le 3 je ne pense pas que ce soit que ca. Voila ce qui est dit sur le serveur dans la section "Registration & Login":

Anonymous Login

You can choose to enable or disable anonymous user login. If it is enabled, anyone can connect to the server and create a new session. If it is disabled only users who have accounts will be able to connect.
o    Enabled - Anyone may login to the server.
o    Disabled - Only registered users may login.