Jabberd-Icq

From YobiWiki
Jump to navigation Jump to search

2 solutions possibles:

  • Utiliser JabberdAim qui supporte également le protocole ICQ
  • Utiliser JIT qui est un transport dédié ICQ et plus complet
    JIT features:
    • Message sending/receiving
    • SMS messages sending/receiving
    • URL messages sending/receiving
    • Web Pager messages receiving
    • Status Changes
    • Auto-import of ICQ server based contact lists
    • Users vcards and server vcard
    • Searching for ICQ users
    • Web aware

C'est cette seconde possibilité qui est décrite ci-après:
http://jit.jabberstudio.org/

JIT est composé du transport ICQ proprement dit et d'un serveur jabber WPJabber qui se connectera au serveur principal par TCP.

cd jabberd/jabber-1.4.2a
wget http://www.jabberstudio.org/files/jit/jit-1.1.6.tar.gz
tar -xzvf jit-1.1.6.tar.gz

Par défaut JIT démarrera une douzaine de threads.
Pour un petit serveur, c'est beaucoup!
Editer jit-1.1.6/jabberd/jabberd.h et réduire MTQ_THREADS de 10 à 2 par exemple:

 /* default waiting threads */
  #ifndef MTQ_THREADS
  # define MTQ_THREADS 2
  #endif

Le format de fichiers log de WPJabber n'est pas le même que celui de jabberd, nous allons changer cela.
Editer jit-1.1.6/jabberd/wplog.c

-  sprintf(buf,"%s_%s.log",wplogp->file,date);
+  sprintf(buf,"%s",wplogp->file);

Editer jit-1.1.6/jabberd/base/base_file.c

-  sprintf(buf,"%s_%s.log",bf->filename,date);
+  sprintf(buf,"%s",bf->filename);

Nous pouvons enfin compiler le transport et son serveur

cd jit-1.1.6
./configure
make
mkdir /var/lib/jabber/icq2
cp jit/jit.so jabberd/jabberd /var/lib/jabber/icq2

Ajouter dans /etc/jabber/jabber.xml, section <browse>:

       <service type="icq" jid="icq2.reseaucitoyen.be" name="Passerelle JIT vers ICQ">
         <ns>jabber:iq:gateway</ns>
         <ns>jabber:iq:register</ns>
         <ns>jabber:iq:search</ns>
       </service>

Ajouter dans /etc/jabber/jabber.xml, dans la liste des <service>:

 <service id="linker-icq_jit">
   <host>icq2.reseaucitoyen.be</host>
   <host>sms.icq.localhost</host>
   <accept>
     <ip>127.0.0.1</ip>
     <port>5226</port>
     <secret>icqkey</secret>
   </accept>
 </service>

Créer /etc/jabber/transport-icq_jit.xml: <jabber>

 <log id='elogger'>
   <host/>
   <logtype/>
   <format>%d: [%t] (%h): %s</format>
   <file>/var/log/jabber/icq_jit-error.log</file>
 </log>

 <log id='rlogger'>
   <host/>
   <logtype>record</logtype>
   <format>%d %h %s</format>
   <file>/var/log/jabber/icq_jit-record.log</file>
 </log>


 <service id="icq2.reseaucitoyen.be">

   <host>sms.icq.localhost</host>

   <icqtrans xmlns="jabber:config:icqtrans">
     <sms>
       <host>sms.icq.localhost</host>
       <show>away</show>
       <status></status>
     </sms>

     <instructions>Entrez votre login ICQ (UIN) et password.</instructions>

     <search>Chercher d'autres utilisateurs ICQ</search>

     <vCard>
       <FN>Passerelle JIT vers ICQ</FN>
       <DESC>Ce service fournit une passerelle pour communiquer avec le reseau ICQ</DESC>
       <URL>http://jit.jabberstudio.org</URL>
     </vCard>

     <prime>3907</prime>

     <chat/>

     <web/>


     <own_roster/>


     <user_count_file>/var/log/jabber/session_count.log</user_count_file>

     <session_check>5</session_check>

     <reconnects>5</reconnects>

     <session_timeout>18000</session_timeout>

     <charset>windows-1252</charset>

     <server>
        <host port="5190">205.188.179.233</host>
        <host port="5190">64.12.200.89</host>
     </server>

   </icqtrans>

   <load>
     <icqtrans>/var/lib/jabber/icq2/jit.so</icqtrans>
   </load>

 </service>

 <service id="linker-icq_jit">
   <uplink/>
   <connect>
     <ip>127.0.0.1</ip>
     <port>5226</port>
     <secret>icqkey</secret>
   </connect>
 </service>

</jabber>

Créer /etc/init.d/jabber-icq:

#! /bin/sh
#
# jabber init script to start jabber daemon
#
#  Created from Bernd Eckenfels <ecki@lina.inka.de>
#
#  Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#  Modified for Debian GNU/Linux
#  by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Version: @(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl
#
# This file was automatically customized by dh-make on Sun, 21 May:31:20 +0200

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/var/lib/jabber/icq2/jabberd
NAME=jabber-icq
DESC=jabber-icq
CONF=/etc/jabber/transport-icq_jit.xml
PID=/var/run/jabber/jabber-icq.pid
CMDLINE=""

test -f $DAEMON -a -f $CONF || exit 0

# set some parameters like JABBER_HOSTNAME
if test -x /etc/jabber/jabber.cfg; then
 . /etc/jabber/jabber.cfg
fi

if [ x"$JABBER_HOSTNAME" != x"" ]; then
 CMDLINE="$CMDLINE -h $JABBER_HOSTNAME"
fi
if [ x"$JABBER_SPOOL" != x"" ]; then
 CMDLINE="$CMDLINE -s $JABBER_SPOOL"
fi
if [ x"$CONF" != x"" ]; then
 CMDLINE="$CMDLINE -c $CONF"
fi
if [ x"$CMDLINE" != x"" ]; then
 CMDLINE="-- $CMDLINE"
fi

set -e

case "$1" in
  start)
 echo -n "Starting $DESC: "
 cd /usr/lib/jabber/
 start-stop-daemon -b -c daemon --start --quiet --pidfile $PID --startas $DAEMON $CMDLINE || echo -n  "<Failed> "
 echo "$NAME."
 ;;
  stop)
 echo -n "Stopping $DESC: "
 start-stop-daemon --stop --quiet --pidfile $PID || echo -n "<Failed> "
 echo "$NAME."
 ;;
  reload)
 echo "Reloading $DESC configuration files."
 start-stop-daemon --stop --signal 1 --quiet \
  --pidfile $PID --exec $DAEMON
  ;;
  restart|force-reload)
 #
 # If the "reload" option is implemented, move the "force-reload"
 # option to the "reload" entry above. If not, "force-reload" is
 # just the same as "restart".
 #
 echo -n "Restarting $DESC: "
 $0 stop
 sleep 1
 $0 start
 ;;
  *)
 N=/etc/init.d/$NAME
 # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
 echo "Usage: $N {start|stop|restart|force-reload}" >&2
 exit 1
 ;;
esac

exit 0
update-rc.d jabber-icq defaults 21 19

Ajouter également à /etc/init.d/jabber:

case "$1" in
  start)
        echo -n "Starting $DESC: "
        cd /usr/lib/jabber/
        start-stop-daemon -b -c daemon --start --quiet --exec $DAEMON $CMDLINE || echo -n "<Failed>
        echo "$NAME."
+       echo "Don't forget to start also jabber-icq"
        ;;
  stop)
+       /etc/init.d/jabber-icq stop
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --exec $DAEMON || echo -n "<Failed> "
        echo "$NAME."
        ;;

Cela est fait tel que:

/etc/init.d/jabber start -> lance le jabberd principal
/etc/init.d/jabber-icq start -> lance le service ICQ (JIT)
/etc/init.d/jabber-icq stop -> arrete le service ICQ (JIT)
/etc/init.d/jabber stop -> arrete le jabberd principal ET le service ICQ

Migration

Migration du transport [Jabberd-Aim] vers JID

Comment transférer automatiquement les données d'un utilisateur de l'ancien transport AIM/ICQ qui souhaite migrer vers JIT?

Il faut importer des éléments de

  • /var/lib/jabber/icq.reseaucitoyen.be/phil%jabber.reseaucitoyen.be.xml

vers

  • /var/lib/jabber/icq2.reseaucitoyen.be/phil%jabber.reseaucitoyen.be.xml

L'ancien fichier XML est de la forme:

<xdb>
 <aimtrans xdbns='aimtrans:data'>
   <logon id='2686595' pass='xxxxx'/>
 </aimtrans>
 <aimtrans xdbns='aimtrans:roster'>
   <buddies>
     <item name='2665887'/>
     ...
   </buddies>
 </aimtrans>
</xdb>

tandis que le nouveau est de la forme:

<xdb>
 <query xmlns='jabber:iq:register' xdbns='jabber:iq:register'>
   <username>2686595</username>
   <password>xxxxx</password>
 </query>
 <query xmlns='jabber:iq:roster' xdbns='jabber:iq:roster'>
   <item jid='2665887'/>
   ...
 </query>
</xdb>

Si on crée le fichier il faut veiller à conserver le mode 600 et l'owner daemon:daemon
Remarque: pour éditer plus facilement les fichiers XML on peut les parser avec gawk '{gsub(/</,"\n<");print}'

Ensuite il faut migrer les entrées correspondantes dans /var/lib/jabber/jabber.reseaucitoyen.be/phil.xml

<item jid='2665887@icq.reseaucitoyen.be' name='dorian' subscription='both'>
->
<item jid='2665887@icq2.reseaucitoyen.be' name='dorian' subscription='both'>