State of the IM Gateway Plugin Address

Hi folk! My available time to spend in the IM Gateway plugin has been in a state of flux lately and I can finally tell you all why! As of this morning I am officially working for Jive Software. Over this past month or so I have been unable to devote a lot of time to the plugin as I transitioned out of my former job. However as of now, the plugin is part of my job! You all can expect to see faster paced development on this plugin as well as see an increase in my involvement in Openfire itself! I’m quite excited about the move and am pleased to be able to dive back into my work here!

That said, I wanted to discuss the current state of the IM Gateway plugin. There are a number of pending bug fixes for 1.1.3a (in the form of the not-yet- released 1.1.4). Parallel to that, I am working on 1.2.0 which will require the soon-to-be-coming Openfire 3.4.0 and be released alongside it. The 1.1 series (and earlier) will not work with Openfire 3.4.0+ nor will 1.2.0 work with anything less than 3.4.0. Due to internal API changes in Openfire, I can not release a version of the plugin that works with both.

So what’s coming in 1.2.0? Most notably, buddy icons! AIM/ICQ buddy icons are already mostly working. MSN may make it into 1.2.0. I suspect XMPP/GTalk won’t be hard. Yahoo most likely will not make it into 1.2.0. None-the-less, the framework will be there and ready for when OpenYMSG supports icons!

How about 1.1.4? Well feature-wise, the 1.1.* series is mostly frozen. I will be aiming to perform a number of bug fixes to it (and port them over to 1.2.0 or visa versa) and hopefully put that out in the near future. I suspect that 1.2.0 will make it out before 1.1.4, as odd as that may sound. =)

Stay tuned! And as always, thanks to all of you for your bug reports, working with me to resolve issues, feature suggestions, etc!

That’s great news for the Openfire community!

Congrats and lots of fun with the other Jive guys

I’ve just installed Openfire 3.4.0 with IM Gateway 1.2.0. It appears that only GTalk buddies icons are working. I’m not seeing anything for MSN, ICQ, AIM or Yahoo contacts.

Is there particular log information I can send through to help debug?

The previous gateway may not have uninstalled correctly, especially considering the API changes. You may need to remove the gateway.jar and gateway directory, shut down openfire, restart openfire, and then reinstall the new gateway plugin. (or at least that’s typically what causes this =( )

I’ve just done that and still no joy.

Hrm. Ok, couple of things to try.

Go info your server sessions screen in the admin console and make sure that you don’t see active sessions for the JIDs that the various transports you are having problems with. If you see them, close all of them, and reload the plugin.

Beyond that, probably make sure debug logs are enabled, clear them, reload the plugin, and send me the debug logs. (daniel.henninger@jivesoftware.com) I’ll take a look and see if I can see what’s going on!

Ok - my apologies.

The icons are working, but only in Adium (for me). iChat 4.0 will not display them.

Hrm. I wonder what iteration of the avatar protocol ichat supports? There have been three. (sigh) We support the most common one at present. There’s also the deprecated IQ based avatars (not even listed on xmpp.org/extensions anymore unless you dig around), and the new “user avatars” which as far as I know isn’t adopted by much of anything yet. vcard based avatars is what we support. Anyone have any idea what ichat 4.0 supports? (is 4.0 the one for leopard? lol don’t know)

… and qualifying that further - in iChat 4.0 the Gtalk avatars do work, not the other gateways (Yahoo, AIM, ICQ and MSN).

Spark 2.5.8b1 - no ICQ icons.

Openfire platform - Linux (Fedora 6), jdk 1.6.0p3.

Some log information:

Error:

java.sql.SQLException: Type Conversion not supported

at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setParameter(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setString(Unknown Source)at org.jivesoftware.openfire.gateway.avatars.Avatar.insertIntoDb(Avatar.java:226)< span class=“hilite”>at org.jivesoftware.openfire.gateway.avatars.Avatar.<init>(Avatar.java:109)< span class=“hilite”>at org.jivesoftware.openfire.gateway.protocols.oscar.BasicFlapConnection$1.handleR esponse(BasicFlapConnection.java:209)

at net.kano.joscar.snac.SnacRequest.gotResponse(SnacRequest.java:344)

at net.kano.joscar.snac.ClientSnacProcessor.continueHandling(ClientSnacProcessor.j ava:727)

at net.kano.joscar.snac.AbstractSnacProcessor.processPacket(AbstractSnacProcessor. java:447)

at net.kano.joscar.snac.AbstractSnacProcessor.access$100(AbstractSnacProcessor.jav a:134)

at net.kano.joscar.snac.AbstractSnacProcessor$1.handlePacket(AbstractSnacProcessor .java:208)

at net.kano.joscar.flap.AbstractFlapProcessor.processPacketSynchronously(AbstractF lapProcessor.java:231)

at

net.kano.joscar.flap.AsynchronousFlapProcessor$BackgroundPacketPr ocessor.tryProcessingPackets(AsynchronousFlapProcessor.java:75)

at net.kano.joscar.flap.AsynchronousFlapProcessor$BackgroundPacketProcessor.run(As ynchronousFlapProcessor.java:63)

at java.lang.Thread.run(Thread.java:619)2007.11.02 19:32:03

org.jivesoftware.openfire.gateway.util.Log4JToOpenfireAppender.append(Log4JToOpe nfireAppender.java:49)

Avatar: SQL exception while inserting avatar:

java.sql.SQLException: Type Conversion not supported

at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setParameter(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setString(Unknown Source)at org.jivesoftware.openfire.gateway.avatars.Avatar.insertIntoDb(Avatar.java:226)< span class=“hilite”>at org.jivesoftware.openfire.gateway.avatars.Avatar.<init>(Avatar.java:109)< span class=“hilite”>at org.jivesoftware.openfire.gateway.protocols.oscar.BasicFlapConnection$1.handleR esponse(BasicFlapConnection.java:209)

at net.kano.joscar.snac.SnacRequest.gotResponse(SnacRequest.java:344)

at net.kano.joscar.snac.ClientSnacProcessor.continueHandling(ClientSnacProcessor.j ava:727)

at net.kano.joscar.snac.AbstractSnacProcessor.processPacket(AbstractSnacProcessor. java:447)

at net.kano.joscar.snac.AbstractSnacProcessor.access$100(AbstractSnacProcessor.jav a:134)

at net.kano.joscar.snac.AbstractSnacProcessor$1.handlePacket(AbstractSnacProcessor .java:208)

at net.kano.joscar.flap.AbstractFlapProcessor.processPacketSynchronously(AbstractF lapProcessor.java:231)

at

net.kano.joscar.flap.AsynchronousFlapProcessor$BackgroundPacketPr ocessor.tryProcessingPackets(AsynchronousFlapProcessor.java:75)

at net.kano.joscar.flap.AsynchronousFlapProcessor$BackgroundPacketProcessor.run(As ynchronousFlapProcessor.java:63)

at java.lang.Thread.run(Thread.java:619)2007.11.02 19:39:40

org.jivesoftware.openfire.gateway.util.Log4JToOpenfireAppender.append(Log4JToOpe nfireAppender.java:49)

Avatar: SQL exception while inserting avatar:

java.sql.SQLException: Type Conversion not supported

at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setParameter(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setString(Unknown Source)at org.jivesoftware.openfire.gateway.avatars.Avatar.insertIntoDb(Avatar.java:226)< span class=“hilite”>at org.jivesoftware.openfire.gateway.avatars.Avatar.<init>(Avatar.java:109)< span class=“hilite”>at org.jivesoftware.openfire.gateway.protocols.oscar.BasicFlapConnection$1.handleR esponse(BasicFlapConnection.java:209)

at net.kano.joscar.snac.SnacRequest.gotResponse(SnacRequest.java:344)

at net.kano.joscar.snac.ClientSnacProcessor.continueHandling(ClientSnacProcessor.j ava:727)

at net.kano.joscar.snac.AbstractSnacProcessor.processPacket(AbstractSnacProcessor. java:447)

at net.kano.joscar.snac.AbstractSnacProcessor.access$100(AbstractSnacProcessor.jav a:134)

at net.kano.joscar.snac.AbstractSnacProcessor$1.handlePacket(AbstractSnacProcessor .java:208)

at net.kano.joscar.flap.AbstractFlapProcessor.processPacketSynchronously(AbstractF lapProcessor.java:231)

at

net.kano.joscar.flap.AsynchronousFlapProcessor$BackgroundPacketPr ocessor.tryProcessingPackets(AsynchronousFlapProcessor.java:75)

at net.kano.joscar.flap.AsynchronousFlapProcessor$BackgroundPacketProcessor.run(As ynchronousFlapProcessor.java:63)

at java.lang.Thread.run(Thread.java:619)

Had removed (manual, from plugins dir) all plugins before upgrade (3.3.3->3.4.1), upgraded then insert new plugins.

Had some trouble with upgrade - sql error at the middle of setup without ldapvcardavatar plugin so leave it installed.

All other looks like work good.

Interesting. I wonder what’s up with the icons that’s causing that? I don’t suppose you have more debug logs enabled/from around when that was happening do you?

GTalk avatars work but others don’t? That sure doesn’t make a lot of sense! lol They all go through the same process. =) The only thing I can think of there is if it’s a matter of gif vs jpg vs png vs whatever.

In general it’s a production system, but I’ll try.

2007.11.05 15:41:45

OSCAR bos snac packet received: SnacPacketEvent:

snacProcessor=ClientSnacProcessor: lastreqid=14, requests: 14,

paused=false, snacPacket=SnacPacket type 0x3/0xb: 183 bytes

(id=2922967353), snacCommand=BuddyStatusCmd: userinfo=UserInfo for

309615157: flags=0x51 (MASK_FREE \

MASK_UNCONFIRMED \

0x40), ICQ

status=, memberSince=Sat May 20 17:20:13 EEST 2006, sessLenAim=345min,

onSince=Mon Nov 05 09:59:55 EET 2007, extraInfos=[ExtraInfoBlock:

type=0x1 (TYPE_ICONHASH), extraData=<ExtraInfoData: flags=0x1

(FLAG_HASH_PRESENT), data=1a 03 a5 4b 64 84 c3 3d 2c 6c bd 03 ad 9e a3

41>], extraTlvs=[TLV: type=0xc, length=37, ascii value="�������� �

��������������������������": 00 00 00 00 00 00 00 00 04 00 09 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00,

TLV: type=0xa, length=4, ascii value=“����”, uint value=0: 00 00 00 00,

TLV: type=0x8, length=2, ascii value="

",

ushort value=2566: 0a 06], longcaps: [] - FlapPacketEvent:

flapProcessor=FlapProcessor: seqNum=SeqNum: min=0, max=65535,

last(current)=17, flapCommand=SnacFlapCmd: packet=SnacPacket type

0x3/0xb: 183 bytes (id=2922967353), flapPacket=FlapPacket (channel=2,

seq=55781)2007.11.05 15:41:45

OSCAR snac packet received: SnacPacketEvent:

snacProcessor=ClientSnacProcessor: lastreqid=14, requests: 14,

paused=false, snacPacket=SnacPacket type 0x3/0xb: 183 bytes

(id=2922967353), snacCommand=BuddyStatusCmd: userinfo=UserInfo for

309615157: flags=0x51 (MASK_FREE \

MASK_UNCONFIRMED \

0x40), ICQ

status=, memberSince=Sat May 20 17:20:13 EEST 2006, sessLenAim=345min,

onSince=Mon Nov 05 09:59:55 EET 2007, extraInfos=[ExtraInfoBlock:

type=0x1 (TYPE_ICONHASH), extraData=<ExtraInfoData: flags=0x1

(FLAG_HASH_PRESENT), data=1a 03 a5 4b 64 84 c3 3d 2c 6c bd 03 ad 9e a3

41>], extraTlvs=[TLV: type=0xc, length=37, ascii value="�������� �

��������������������������": 00 00 00 00 00 00 00 00 04 00 09 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00,

TLV: type=0xa, length=4, ascii value=“����”, uint value=0: 00 00 00 00,

TLV: type=0x8, length=2, ascii value="

",

ushort value=2566: 0a 06], longcaps: [] - FlapPacketEvent:

flapProcessor=FlapProcessor: seqNum=SeqNum: min=0, max=65535,

last(current)=17, flapCommand=SnacFlapCmd: packet=SnacPacket type

0x3/0xb: 183 bytes (id=2922967353), flapPacket=FlapPacket (channel=2,

seq=55781)2007.11.05 15:41:45

Handling request SnacRequest for IconRequest for 309615157 (code=1):

iconInfo=<ExtraInfoData: flags=0x1 (FLAG_HASH_PRESENT), data=1a 03

a5 4b 64 84 c3 3d 2c 6c bd 03 ad 9e a3 41>: listeners:

,

responses: null2007.11.05 15:41:45 Updating status for 2007.11.05 15:41:51

OSCAR bos snac packet received: SnacPacketEvent:

snacProcessor=ClientSnacProcessor: lastreqid=14, requests: 14,

paused=false, snacPacket=SnacPacket type 0x3/0xb: 225 bytes

(id=2922972064), snacCommand=BuddyStatusCmd: userinfo=UserInfo for

342156246: flags=0x50 (MASK_FREE \

0x40), ICQ status=, memberSince=Mon

Jan 10 19:11:38 EET 2005, sessLenAim=440min, onSince=Mon Nov 05

08:24:31 EET 2007, extraInfos=[ExtraInfoBlock: type=0x1

(TYPE_ICONHASH), extraData=<ExtraInfoData: flags=0x1

(FLAG_HASH_PRESENT), data=d7 43 f4 d8 a4 38 15 1a 23 50 d9 25 df 54 03

17>], extraTlvs=[TLV: type=0xc, length=37, ascii

value=“�������� � ����������� � ���� ��� ��”: 00 00 00 00 00 00 00 00

04 00 0b 00 00 00 00 00 00 00 00 00 00 00 03 08 00 03 00 00 00 00 0e 00

00 00 0f 00 00, TLV: type=0xa, length=4, ascii value=“����”, uint

value=0: 00 00 00 00, TLV: type=0x29, length=4, ascii value=“G b”,

uint value=1192625506: 47 16 05 62, TLV: type=0x26, length=4, ascii

value=“G b”, uint value=1192625506: 47 16 05 62], longcaps: [] -

FlapPacketEvent: flapProcessor=FlapProcessor: seqNum=SeqNum: min=0,

max=65535, last(current)=17, flapCommand=SnacFlapCmd: packet=SnacPacket

type 0x3/0xb: 225 bytes (id=2922972064), flapPacket=FlapPacket

(channel=2, seq=55782)2007.11.05 15:41:51

OSCAR snac packet received: SnacPacketEvent:

snacProcessor=ClientSnacProcessor: lastreqid=14, requests: 14,

paused=false, snacPacket=SnacPacket type 0x3/0xb: 225 bytes

(id=2922972064), snacCommand=BuddyStatusCmd: userinfo=UserInfo for

342156246: flags=0x50 (MASK_FREE \

0x40), ICQ status=, memberSince=Mon

Jan 10 19:11:38 EET 2005, sessLenAim=440min, onSince=Mon Nov 05

08:24:31 EET 2007, extraInfos=[ExtraInfoBlock: type=0x1

(TYPE_ICONHASH), extraData=<ExtraInfoData: flags=0x1

(FLAG_HASH_PRESENT), data=d7 43 f4 d8 a4 38 15 1a 23 50 d9 25 df 54 03

17>], extraTlvs=[TLV: type=0xc, length=37, ascii

value=“�������� � ����������� � ���� ��� ��”: 00 00 00 00 00 00 00 00

04 00 0b 00 00 00 00 00 00 00 00 00 00 00 03 08 00 03 00 00 00 00 0e 00

00 00 0f 00 00, TLV: type=0xa, length=4, ascii value=“����”, uint

value=0: 00 00 00 00, TLV: type=0x29, length=4, ascii value=“G b”,

uint value=1192625506: 47 16 05 62, TLV: type=0x26, length=4, ascii

value=“G b”, uint value=1192625506: 47 16 05 62], longcaps: [] -

FlapPacketEvent: flapProcessor=FlapProcessor: seqNum=SeqNum: min=0,

max=65535, last(current)=17, flapCommand=SnacFlapCmd: packet=SnacPacket

type 0x3/0xb: 225 bytes (id=2922972064), flapPacket=FlapPacket

(channel=2, seq=55782)2007.11.05 15:41:51

Handling request SnacRequest for IconRequest for 342156246 (code=1):

iconInfo=<ExtraInfoData: flags=0x1 (FLAG_HASH_PRESENT), data=d7 43

f4 d8 a4 38 15 1a 23 50 d9 25 df 54 03 17>: listeners:

,

responses: null2007.11.05 15:41:51 Updating status for 2007.11.05 15:41:51

OSCAR bos snac packet received: SnacPacketEvent:

snacProcessor=ClientSnacProcessor: lastreqid=34, requests: 10,

paused=false, snacPacket=SnacPacket type 0x3/0xb: 225 bytes

(id=2915061819), snacCommand=BuddyStatusCmd: userinfo=UserInfo for

342156246: flags=0x50 (MASK_FREE \

0x40), ICQ status=, memberSince=Mon

Jan 10 19:11:38 EET 2005, sessLenAim=440min, onSince=Mon Nov 05

08:24:31 EET 2007, extraInfos=[ExtraInfoBlock: type=0x1

(TYPE_ICONHASH), extraData=<ExtraInfoData: flags=0x1

(FLAG_HASH_PRESENT), data=d7 43 f4 d8 a4 38 15 1a 23 50 d9 25 df 54 03

17>], extraTlvs=[TLV: type=0xc, length=37, ascii

value=“�������� � ����������� � ���� ��� ��”: 00 00 00 00 00 00 00 00

04 00 0b 00 00 00 00 00 00 00 00 00 00 00 03 08 00 03 00 00 00 00 0e 00

00 00 0f 00 00, TLV: type=0xa, length=4, ascii value=“����”, uint

value=0: 00 00 00 00, TLV: type=0x29, length=4, ascii value=“G b”,

uint value=1192625506: 47 16 05 62, TLV: type=0x26, length=4, ascii

value=“G b”, uint value=1192625506: 47 16 05 62], longcaps: [] -

FlapPacketEvent: flapProcessor=FlapProcessor: seqNum=SeqNum: min=0,

max=65535, last(current)=70, flapCommand=SnacFlapCmd: packet=SnacPacket

type 0x3/0xb: 225 bytes (id=2915061819), flapPacket=FlapPacket

(channel=2, seq=34982)2007.11.05 15:41:51

OSCAR snac packet received: SnacPacketEvent:

snacProcessor=ClientSnacProcessor: lastreqid=34, requests: 10,

paused=false, snacPacket=SnacPacket type 0x3/0xb: 225 bytes

(id=2915061819), snacCommand=BuddyStatusCmd: userinfo=UserInfo for

342156246: flags=0x50 (MASK_FREE \

0x40), ICQ status=, memberSince=Mon

Jan 10 19:11:38 EET 2005, sessLenAim=440min, onSince=Mon Nov 05

08:24:31 EET 2007, extraInfos=[ExtraInfoBlock: type=0x1

(TYPE_ICONHASH), extraData=<ExtraInfoData: flags=0x1

(FLAG_HASH_PRESENT), data=d7 43 f4 d8 a4 38 15 1a 23 50 d9 25 df 54 03

17>], extraTlvs=[TLV: type=0xc, length=37, ascii

value=“�������� � ����������� � ���� ��� ��”: 00 00 00 00 00 00 00 00

04 00 0b 00 00 00 00 00 00 00 00 00 00 00 03 08 00 03 00 00 00 00 0e 00

00 00 0f 00 00, TLV: type=0xa, length=4, ascii value=“����”, uint

value=0: 00 00 00 00, TLV: type=0x29, length=4, ascii value=“G b”,

uint value=1192625506: 47 16 05 62, TLV: type=0x26, length=4, ascii

value=“G b”, uint value=1192625506: 47 16 05 62], longcaps: [] -

FlapPacketEvent: flapProcessor=FlapProcessor: seqNum=SeqNum: min=0,

max=65535, last(current)=70, flapCommand=SnacFlapCmd: packet=SnacPacket

type 0x3/0xb: 225 bytes (id=2915061819), flapPacket=FlapPacket

(channel=2, seq=34982)2007.11.05 15:41:51

Handling request SnacRequest for IconRequest for 342156246 (code=1):

iconInfo=<ExtraInfoData: flags=0x1 (FLAG_HASH_PRESENT), data=d7 43

f4 d8 a4 38 15 1a 23 50 d9 25 df 54 03 17>: listeners:

,

responses: null2007.11.05 15:41:51 Updating status for

May be something in this debug part will help…

Same issue for me too - type conversation and no viewable MSN avatars:

2007.11.05 16:12:54 [org.jivesoftware.openfire.gateway.util.Log4JToOpenfireAppender.append(Log4JToO penfireAppender.java:49)

] Avatar: SQL exception while inserting avatar:

java.sql.SQLException: Type Conversion not supported

at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setParameter(Unknown Source)

at org.hsqldb.jdbc.jdbcPreparedStatement.setString(Unknown Source)

at org.jivesoftware.openfire.gateway.avatars.Avatar.insertIntoDb(Avatar.java:226)

at org.jivesoftware.openfire.gateway.avatars.Avatar.<init>(Avatar.java:109)

at org.jivesoftware.openfire.gateway.protocols.msn.MSNListener$1.notifyMsnObjectRe trieval(MSNListener.java:240)

at net.sf.jml.message.p2p.DisplayPictureRetrieveWorker.notifyFinalization(DisplayP ictureRetrieveWorker.java:172)

at net.sf.jml.message.p2p.DisplayPictureRetrieveWorker.p2pMessageReceived(DisplayP ictureRetrieveWorker.java:680)

at net.sf.jml.impl.AbstractMessenger.fireP2PMessageReceived(AbstractMessenger.java :374)

at net.sf.jml.message.p2p.MsnP2PMessage.messageReceived(MsnP2PMessage.java:131)

at net.sf.jml.message.IncomingMimeMessage.messageReceived(IncomingMimeMessage.java :56)

at net.sf.jml.protocol.MsnSession$1.messageReceived(MsnSession.java:105)

at net.sf.cindy.impl.AbstractSession$6.doRun(AbstractSession.java:341)

at net.sf.cindy.impl.AbstractSession$DispatchObject.run(AbstractSession.java:395)

at net.sf.cindy.impl.SimpleDispatcher.dispatch(SimpleDispatcher.java:35)

at net.sf.cindy.impl.AbstractSession.dispatch(AbstractSession.java:249)

at net.sf.cindy.impl.AbstractSession.dispatchMessageReceived(AbstractSession.java: 335)

at net.sf.cindy.impl.StreamChannelSession.recognizeMessageAndDispatch(StreamChanne lSession.java:77)

at net.sf.cindy.impl.StreamChannelSession.readFromChannel(StreamChannelSession.jav a:53)

at net.sf.cindy.impl.ChannelSession.onReadable(ChannelSession.java:212)

at net.sf.cindy.impl.ChannelSession.onEvent(ChannelSession.java:134)

at net.sf.cindy.impl.SocketSession.onEvent(SocketSession.java:119)

at net.sf.cindy.impl.SimpleEventGenerator.processKey(SimpleEventGenerator.java:212 )

at net.sf.cindy.impl.SimpleEventGenerator.run(SimpleEventGenerator.java:192)

at net.sf.cindy.impl.SimpleEventGenerator.access$000(SimpleEventGenerator.java:54)

at net.sf.cindy.impl.SimpleEventGenerator$1.run(SimpleEventGenerator.java:115)