[asterisk-bugs] [JIRA] (ASTERISK-23510) JABBER_STATUS fails with improper code 7 for unavailable clients

Anthony Critelli (JIRA) noreply at issues.asterisk.org
Thu Mar 20 23:25:18 CDT 2014


Anthony Critelli created ASTERISK-23510:
-------------------------------------------

             Summary: JABBER_STATUS fails with improper code 7 for unavailable clients
                 Key: ASTERISK-23510
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-23510
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
    Affects Versions: 11.8.1
         Environment: CentOS 6.5/AsteriskNOW 32-bit
            Reporter: Anthony Critelli


According to JABBER_STATUS documentation, a call to this function should return a value of 6 when a user is unavailable. Instead, it is returning 7. There are two scenarios to consider, both described in detail below. Relevant documentation is here: https://wiki.asterisk.org/wiki/display/AST/Function_JABBER_STATUS?src=search

THe first scenario is when JABBER_STATUS is called using only the bare jid (username at domain). According to documentation, this should work. However, this always fails with a return of 7.

Asterisk clearly receives presence data (debug output from xmpp set debug on):


<--- XMPP received from 'ejabberd' --->
<presence from='tony2012 at 10.1.4.13/Desktop' to='asterisk at 10.1.4.13/asterisk-xmpp'><show>away</show><c xmlns='http://jabber.org/protocol/caps' node='http://pidgin.im/' hash='sha-1' ver='I22W7CegORwdbnu0ZiQwGpxr0Go='/><x xmlns='vcard-temp:x:update'><photo/></x></presence>
<------------->

However, a call to JABBER_STATUS fails:

[Mar 21 00:08:21] NOTICE[24015][C-00000000]: res_xmpp.c:1631 acf_jabberstatus_read: Resource (null) of buddy tony2012 at 10.1.4.13 was not found.
    -- Executing [1004 at HomeSets:2] Set("SIP/TonyRoom-00000000", "JSTATUS=7") in new stack

The user does appear in the buddy list:

localhost*CLI> xmpp show buddies
XMPP buddy lists
Client: ejabberd
        Buddy:  tony2012 at 10.1.4.13
                Resource: Desktop
                        node: http://pidgin.im/
                        version: I22W7CegORwdbnu0ZiQwGpxr0Go=
                        Google Talk capable: no
                        Jingle capable: yes


Additionally, sending a message via JabberSend works fine.

Relevant extensions.conf snippet (just a test extension 1004 to send a test message and check status):

        exten => 1004, 1, JabberSend(ejabberd,tony2012 at 10.1.4.13,Test)
                same => n, Set(JSTATUS=${JABBER_STATUS(ejabberd,tony2012 at 10.1.4.13)})

xmpp.conf:

[root at localhost asterisk]# cat xmpp.conf
[general]
        autoregister=yes
        autoprune=no

[ejabberd]
        type=client
        serverhost=10.1.4.13
        username=asterisk at 10.1.4.13
        secret=**********
        priority=2
        port=5222
        usetls=no
        usesasl=yes
        status=available
        statusmessage="It's Asterisk!"
        timeout=5

The behavior observed above is consistent across all jabber client states (away, available, offline, etc.)


The second scenario arises when JABBER_STATUS is called with a full jid. This will work for all values except 6 (unavailable). When a client goes unavailable, a call to JABBER_STATUS will return 7.

Asterisk clearly receives presence data (debug output from xmpp set debug on):

<--- XMPP received from 'ejabberd' --->
<presence from='tony2012 at 10.1.4.13/Desktop' to='asterisk at 10.1.4.13/asterisk-xmpp'><show>dnd</show><c xmlns='http://jabber.org/protocol/caps' node='http://pidgin.im/' hash='sha-1' ver='1RsmhQD7CXz0TuytinljsuOTrVU='/><x xmlns='vcard-temp:x:update'><photo/></x></presence>
<------------->

And a call to JABBER_STATUS works for values other than unavailable (shown below with DND, a correct value of 5 is reported):

    -- Executing [1004 at HomeSets:2] Set("SIP/TonyRoom-00000000", "JSTATUS=5") in new stack


However, this will NOT work when the client goes unavailable, as articulated below.

Asterisk clearly receives presence data (debug output from xmpp set debug on):

<--- XMPP received from 'ejabberd' --->
<presence from='tony2012 at 10.1.4.13/Desktop' to='asterisk at 10.1.4.13/asterisk-xmpp' type='unavailable'/>
<------------->

However, a call to JABBER_STATUS fails with code 7:

[Mar 21 00:18:03] NOTICE[24214][C-00000001]: res_xmpp.c:1631 acf_jabberstatus_read: Resource Desktop of buddy tony2012 at 10.1.4.13 was not found.
    -- Executing [1004 at HomeSets:2] Set("SIP/TonyRoom-00000001", "JSTATUS=7") in new stack

XMPP show buddies output is far less interesting, presumably because there is no longer a resource:

localhost*CLI> xmpp show buddies
XMPP buddy lists
Client: ejabberd
        Buddy:  tony2012 at 10.1.4.13


Relevant extensions.conf snippet:

        exten => 1004, 1, JabberSend(ejabberd,tony2012 at 10.1.4.13,Test)
                same => n, Set(JSTATUS=${JABBER_STATUS(ejabberd,tony2012 at 10.1.4.13/Desktop)})

xmpp.conf contents are THE SAME as those from the previous scenario.


Based on these data, there are two questions:

1. Why does a call to JABBER_STATUS always fail when only the bare jid is used, even though documentation explicity states that a bare jid can be used?
2. Why does a call to JABBER_STATUS fail with code 7 when a client goes unavailable, even though Asterisk clearly receives the presence data.

This has been tested across two different clients, namely Pidgin on Windows and Adium on Mac. However, this would seem to not matter, since xmpp debug shows Asterisk receiving the proper presence notifications.

Asterisk version is 11.8.1 on CentOS 6.5, originally obtained as an AsteriskNOW distro.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list