Openfire:将联系人订阅状态添加为“来自"而不是“两者" [英] Openfire: Add contact subscription status set to 'from' instead of 'both'

查看:106
本文介绍了Openfire:将联系人订阅状态添加为“来自"而不是“两者"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我面临着开火和打sm的问题.我有一个使用smack和openfire开发的jabber机器人. 当任何用户添加bot与他/她的联系人时,然后在整个过程结束时,ofRoster(openfire)表的订阅状态将设置为来自". 此过程的预期结果是两者".

Hi I'm facing an issue with openfire and smack. I have a jabber bot developed using smack and openfire. When any user adds 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'.

这是我处理新添加连接的代码,

here is my code of handling new adding connection,

xmppConnection.getConnection().getRoster().setSubscriptionMode(Roster.SubscriptionMode.manual);
xmppConnection.getConnection().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;
        }
    });

正在添加该约定的用户的日志.使用pidgin

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 &amp; 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) 

bot的日志(启用了错误调试)

log of bot (smack debug enabled)

已发送

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

收到

    <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>

已解释

    <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>

推荐答案

您需要发送自己的<presence type="subscribe" to="testusrer@answers.exampledomain.com"/>,然后该用户将需要像您一样使用<presence type="subscribed"/>进行回复.

You need to send your own <presence type="subscribe" to="testusrer@answers.exampledomain.com"/>, and then that user will need to reply, just as you do, with <presence type="subscribed"/>.

这在XMPP6121中进行了描述.

这篇关于Openfire:将联系人订阅状态添加为“来自"而不是“两者"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆