Openfire 3.8.1 Avatar using Pubsub (XEP-0084) not working after upgrade

Hi All,

I’m new to the XMPP devel scene.

Background:

We are adding chat functionality to our website and would like to have avatars. We are using XEP-0084 to publish an avatar.

We managed to get this to work on Openfire 3.7.1.

Issue:

After we upgraded to 3.8.1 avatar publishing stopped working. It does not publish the avatar and no errors are thrown.

I can see it creates entries in ofPubsubNode but not in ofPubsubItem.

The iq messages that I send to publish are as follows:

Publish avatar data:

<pubsub xmlns="[http://jabber.org/protocol/pubsub](http://jabber.org/protocol/pubsub)">

    <publish node="urn:xmpp:avatar:data">

        <item id="27446B47E92CEDDF16CFD5324DE1C3EC472333DD">

            <data xmlns="urn:xmpp:avatar:data">iVBORw0KGgoAAAANSUhEUgAAAGQAAABLCAIAAAA...(The base64 encoded image)</data>

        </item>

    </publish>

</pubsub>

Publish avatar metadata:

<pubsub xmlns="[http://jabber.org/protocol/pubsub](http://jabber.org/protocol/pubsub)">

    <publish node="urn:xmpp:avatar:metadata">

        <item id="27446B47E92CEDDF16CFD5324DE1C3EC472333DD">

            <metadata xmlns="urn:xmpp:avatar:metadata">

                <info bytes="19408" id="27446B47E92CEDDF16CFD5324DE1C3EC472333DD" type="image/png" />

            </metadata>

        </item>

    </publish>

</pubsub>

*Note: If an avatar already exists subscribers can request it and they do get the data. *

Any help will be greatly appreciated.

Regards,

Antony

Found the solution:

I send the below IQ before I publich the avarar data nad metadata:

If no avatar exists:

<pubsub xmlns="[http://jabber.org/protocol/pubsub](http://jabber.org/protocol/pubsub)">
                <value>[http://jabber.org/protocol/pubsub#node_config](http://jabber.org/protocol/pubsub#node_config)</value>

1

1

If updating an avatar:

<pubsub xmlns="[http://jabber.org/protocol/pubsub#owner](http://jabber.org/protocol/pubsub#owner)">
                <value>[http://jabber.org/protocol/pubsub#node_config](http://jabber.org/protocol/pubsub#node_config)</value>

1

1

Hi, im new here, im running server 3.8 and spark 2.6.3.

is there any way to get animated avatars to work on spark?

Did you need to configure openfire to get avatars working with xep-0084?

How does do you get the avatars in to openfire? Do users upload them with their client or are you fetching them from ad/LDAP?

No extra Openfire configuration required.

In our solution the client will need to upload the avatar.

Hi,

I running into the same issue. This is still present int 3.9.3 while I havent’t tried your ‘solution’ yet I’m wondering a) how did you come up with that solution b) where is that documented? Neither the PEP nor the PEP Avatar (XEP 0084) XEP states that one has to ‘configure’ those nodes before. In fact PEP is specifically about auto creation (and I guess auto configuration) of nodes (Please proof me wrong on that with links to XEPs)

I’m successful at publishing avatars with just the two IQ stanzes your are mentioning in your first post on ejabberd and prosody servers. Why is openfire behaving differently and why has this behaviour changed between 3.7 and 3.8?

Can we maybe get a comment from a openfire dev on that? And maybe create a bug report?

I’ve seen this misbehavior too recently. I’ve debugged Openfire and now know the cause.

The problem is that Openfire does only return persistent pubsub items, when a user requests items. But avatars / PEP usually don’t persist, but only store the last item in memory.

If the user then requests the avatar it gets an empty list.

Tracked in OF-837

Hello Antony

Hope you doing well

i was looking at your post , I am a rookie on XMPP and Smack

And was looking if you can guide me on how you implemented the XEP-0084?

I want to implement it using smack 4.1

Thanks

Jeet

This issue has been fixed for Openfire 3.10.0. Nonetheless you probably want to configure the avatar node as persistent prior to publishing.

Unfortunately Openfire does not support XEP-0222 (publish-options), in order to set the node persistent in one request together with the publishing.