Jabber Transports (MSN, Yahoo, ICQ etc)

Posted by chris on Fri 28 Apr 2006 at 09:17

We've previously seen how to install the Jabber cross-platform, and open, chat server. Sadly - some people insist on using the closed source IM clients. What should we do?

There are three normal options:

  1. Install lots of clients
  2. Install a multiprotocol client
  3. Get jabber to understand the other protocols

Option one will work - but I find having lots of clients open is confusing. Option 2 is one solution (gaim, bitlbee, trillian on windows etc) which works quite well. However - if you want to stay within the jabber world then option 3 is the one to go for.

Given that the jabber server is installed (see this article if not) then you want to install the transports.

Installation

aptitude search jabber
will show you what is available. I'm going to go through jabber-msn (MSN), jabber-jit (ICQ) and jabber-yahoo (Yahoo).

Let's install them:

aptitude install jabber-jit jabber-msn jabber-yahoo

Now - we need to configure and enable them.

Hostnames

For the transports to work - you need to set hostnames - and - if you are running the server non-locally then you need to have resolvable hostnames.

I chose the following scheme:

jabber.mydomain.tld
msn.jabber.mydomain.tld
conf.msn.jabber.mydomain.tld
icq.jabber.mydomain.tld
yahoo.jabber.mydomain.tld

All of these are CNAMES to the same machine. I am not sure if they require to have different hostnames - but the examples seem to suggest this.

Configuration

You need to configure so that the jabber server knows about the transports and also so that the transports will announce themselves to the jabber client.

In the debian package config /etc/jabber/jabber.xml find the section.

Here we add the browse config (these are taken from the /usr/share/doc/jabber-*/README.Debian files - the only change was the hostname in each case).

        
       <service type="yahoo" jid="yahoo.jabber.mydomain.tld" name="Yahoo! Transport">
          <ns>jabber:iq:gateway</ns>
          <ns>jabber:iq:register</ns>
        </service>

        <service type="msn" jid="msn.jabber.mydomain.tld" name="MSN Link">
           <ns>jabber:iq:gateway</ns>
           <ns>jabber:iq:register</ns>
         </service>

         <service type="icq" jid="icq.jabber.mydomain.tld" name="ICQ Link">
           <ns>jabber:iq:gateway</ns>
           <ns>jabber:iq:register</ns>
           <ns>jabber:iq:search</ns>
         </service>
         

Next we need to add the actual services - add the following new service sections (again taken from /usr/share/doc)

 
 <service id="msn">
   <host>msn.jabber.mydomain.tld</host>
   <host>conf.msn.jabber.mydomain.tld</host>
   <accept>
     <ip>your_ip</ip>
     <port>5557</port>
     <secret>asecret</secret>    
     <timeout>30</timeout>  
   </accept>
 </service>
  <service id="yahoo.jabber.mydomain.tld">
    <accept>                             
      <ip>your_ip</ip>
      <port>9001</port>
      <secret>asecret</secret>
    </accept>
  </service>

  <service id="icq">
    <host>icq.jabber.mydomain.tld</host>
    <host>sms.icq.jabber.mydomain.tld</host>
    <accept>
      <ip>your_ip</ip>
      <port>5555</port>
      <secret>asecret</secret> 
      <timeout>30</timeout>
    </accept>
  </service>
  

Finally we need to edit the transport config files (/etc/jabber/jabber-*.xml). Here you need to make sure that the following is done:

Enabling

In /etc/default/ you will find jabber-* files. The value ENABLED must be changed from 0 to 1

Using

Given that you have a jabber account on the jabber server we can now add buddies via the transports.

You need to use your jabber client to run services discovery on the server. That should show the transports that are available (amongst any other allowed services).

Choose a transport and then register. You can then fill out your account details for that chat system.

It should then find any buddies (most of these IMs have server stored buddy lists) - but - when manually adding buddies the syntax is:

ICQ user has an ID of UIN: UIN@icq.jabber.mydomain.tld
MSN: user has an ID of user@host.tld: user%host.tld@msn.jabber.mydomain.tld
Yahoo: user has an ID of YahooID: YahooID@yahoo.jabber.mydomain.tld


This article can be found online at the Debian Administration website at the following bookmarkable URL:

This article is copyright 2006 chris - please ask for permission to republish or translate.