powered by Jive Software

Add contact subscription status set to 'from' instead of 'both'

Hi I’am facing an issue with openfire and smack. I have a jabber bot developed using smack and openfire as jabber server.

When any user add bot has his/her contact, then in the end of whole process, subscription status of ofRoster(openfire) table is set to ‘from’.

The desired result of this process is ‘both’.

connection.getRoster().setSubscriptionMode(Roster.SubscriptionMode.manual);
connection.addPacketListener(
     new PacketListener() {
          @Override
          public void processPacket(Packet paramPacket) {
               System.out.println("\n\n");
                              if(paramPacket instanceof Presence){
                    Presence presence = (Presence)paramPacket;
                    String email = getEmailIdFromJabberId(presence.getFrom());
                    System.out.println("chat invite status changed by user: : " + email + " calling listner");
                    //if(presence.getType().equals(Presence.Type.subscribed) || presence.getType().equals(Presence.Type.subscribe) ){
                    System.out.println("presence: " + presence.getFrom() + "; type: " + presence.getType() + "; to: " + presence.getTo() + "; " + presence.toXML());
                    Roster roster = xmppConnection.getConnection().getRoster();
                    for(RosterEntry rosterEntry : roster.getEntries()){
                         System.out.println("jid: " + rosterEntry.getUser() + "; type: " + rosterEntry.getType() + "; status: " + rosterEntry.getStatus());
                    }
                    System.out.println("\n\n\n");
                                        if( presence.getType().equals(Presence.Type.subscribe) ){
                         //chatInviteAcceptanceListner.onChatInviteAccept(email);
                                                  Presence newp = new Presence(Presence.Type.subscribed);
                         newp.setMode(Presence.Mode.available);
                         newp.setPriority(24);
                        newp.setTo(presence.getFrom());
                        //presence.addExtension(new AvatarBroadcastExtension(imageHash));
                        xmppConnection.getConnection().sendPacket(newp);
                    } else if(presence.getType().equals(Presence.Type.unsubscribe)){
                         //chatInviteAcceptanceListner.onChatInviteReject(email);
                         Presence newp = new Presence(Presence.Type.unsubscribed);
                         newp.setMode(Presence.Mode.available);
                         newp.setPriority(24);
                        newp.setTo(presence.getFrom());
                        //presence.addExtension(new AvatarBroadcastExtension(imageHash));
                        xmppConnection.getConnection().sendPacket(newp);
                    }
               }
                                        }
     },      new PacketFilter(){
          public boolean accept(Packet packet) {
                              if(packet instanceof Presence){
                    Presence presence = (Presence)packet;                     if(presence.getType().equals(Presence.Type.subscribed)                               || presence.getType().equals(Presence.Type.subscribe)
                              || presence.getType().equals(Presence.Type.unsubscribed)                               || presence.getType().equals(Presence.Type.unsubscribe) ){
                         //System.out.println("packet: " + packet);
                         return true;
                    }
               }                return false;
          }
     });

log of users who is adding the conctact. using pidgin

(18:32:22) jabber: jabber_roster_add_buddy(): Adding testdoctor@answers.exampledomain.com
(18:32:22) jabber: jabber_roster_update(testdoctor@answers.exampledomain.com): [Source: local blist]: groups: Buddies
(18:32:22) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): <iq type='set' id='purple8dde9bec'><query xmlns='jabber:iq:roster'><item jid='testdoctor@answers.exampledomain.com' name=''><group>Buddies</group></item></query></iq>
(18:32:22) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): <presence to='testdoctor@answers.exampledomain.com' type='subscribe'/>
(18:32:22) jabber: Recv (ssl)(231): <iq type="set" id="88-4977" to="testuser2@answers.exampledomain.com/pidgin"><query xmlns="jabber:iq:roster"><item jid="testdoctor@answers.exampledomain.com" name="" subscription="none"><group>Buddies</group></item></query></iq>
(18:32:22) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): <iq type='result' id='88-4977'/>
(18:32:22) jabber: Recv (ssl)(89): <iq type="result" id="purple8dde9bec" to="testuser2@answers.exampledomain.com/pidgin"/>
(18:32:22) jabber: Unhandled IQ with id purple8dde9bec
(18:32:23) jabber: Recv (ssl)(248): <iq type="set" id="963-4978" to="testuser2@answers.exampledomain.com/pidgin"><query xmlns="jabber:iq:roster"><item jid="testdoctor@answers.exampledomain.com" name="" ask="subscribe" subscription="none"><group>Buddies</group></item></query></iq>
(18:32:23) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): <iq type='result' id='963-4978'/>
(18:32:23) jabber: Recv (ssl)(247): <iq type="set" id="445-4981" to="testuser2@answers.exampledomain.com/pidgin"><query xmlns="jabber:iq:roster"><item jid="testdoctor@answers.exampledomain.com" name=" Ask a Doctor Now" subscription="to"><group>Buddies</group></item></query></iq>
(18:32:23) jabber: Sending (ssl) (testuser2@answers.exampledomain.com/pidgin): <iq type='result' id='445-4981'/>
(18:32:23) jabber: Recv (ssl)(164): <presence id="ERM59-6" to="testuser2@answers.exampledomain.com" type="subscribed" from="testdoctor@answers.exampledomain.com"><priority>24</priority></presence>
(18:32:23) jabber: Recv (ssl)(283): <presence id="ERM59-5" from="testdoctor@answers.exampledomain.com/smoke" to="testuser2@answers.exampledomain.com/pidgin"><status>141 Doctors Online! Type your question & get an answer now. To find out more, type "Help" and hit ENTER</status><priority>24</priority></presence>
(18:32:23) blist: Updating buddy status for testdoctor@answers.exampledomain.com (XMPP)

log of bot (smack debug enabled)

sent

<presence id="ERM59-6" to="testuser2@answers.exampledomain.com" type="subscribed"><priority>24</priority></presence>

received

<presence to="testdoctor@answers.exampledomain.com" type="subscribe" from="testuser2@answers.exampledomain.com"/>
<iq type="set" id="612-4980" to="testdoctor@answers.exampledomain.com/smoke"><query xmlns="jabber:iq:roster"><item jid="testuser2@answers.exampledomain.com" subscription="from"/></query></iq>

interpreted

<presence to="testdoctor@answers.exampledomain.com" from="testuser2@answers.exampledomain.com" type="subscribe"></presence>
<iq id="612-4980" to="testdoctor@answers.exampledomain.com/smoke" type="set"><query xmlns="jabber:iq:roster"><item jid="testuser2@answers.exampledomain.com" subscription="from"></item></query></iq>