Xmpp Openfire:将联系人订阅状态设置为';从';而不是';两者';

Xmpp Openfire:将联系人订阅状态设置为';从';而不是';两者';,xmpp,openfire,smack,Xmpp,Openfire,Smack,嗨,我正面临一个关于openfire和smack的问题。我有一个使用smack和openfire开发的jabber机器人。 当任何用户添加bot时,都有他/她的联系人,然后在整个过程结束时,ofRoster(openfire)表的订阅状态设置为“from”。 这一过程的预期结果是“两者皆有” 这是我处理新添加连接的代码 xmppConnection.getConnection().getRoster().setSubscriptionMode(Roster.SubscriptionMode.ma

嗨,我正面临一个关于openfire和smack的问题。我有一个使用smack和openfire开发的jabber机器人。 当任何用户添加bot时,都有他/她的联系人,然后在整个过程结束时,ofRoster(openfire)表的订阅状态设置为“from”。 这一过程的预期结果是“两者皆有”

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

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;
        }
    });
添加ConContact的用户日志。用洋泾浜

(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) 
(18:32:22)叽叽喳喳:叽叽喳喳的花名册添加好友():添加testdoctor@answers.exampledomain.com
(18:32:22)叽叽喳喳:叽叽喳喳(testdoctor@answers.exampledomain.com):[来源:本地blist]:组:伙伴
(18:32:22)jabber:发送(ssl)(testuser2@answers.exampledomain.com/洋泾浜):朋友们
(18:32:22)jabber:发送(ssl)(testuser2@answers.exampledomain.com/洋泾浜语):
(18:32:22)叽叽喳喳:Recv(ssl)(231):朋友们
(18:32:22)jabber:发送(ssl)(testuser2@answers.exampledomain.com/洋泾浜语):
(18:32:22)jabber:Recv(ssl)(89):
(18:32:22)叽叽喳喳:未经处理的智商,id为purple8dde9bec
(18:32:23)叽叽喳喳:Recv(ssl)(248):朋友们
(18:32:23)jabber:发送(ssl)(testuser2@answers.exampledomain.com/洋泾浜语):
(18:32:23)叽叽喳喳:Recv(ssl)(247):朋友们
(18:32:23)jabber:发送(ssl)(testuser2@answers.exampledomain.com/洋泾浜语):
(18:32:23)jabber:Recv(ssl)(164):24
(18:32:23)jabber:Recv(ssl)(283):141名医生在线!键入您的问题&;现在就得到答案。要了解更多信息,请键入“帮助”并点击ENTER24
(18:32:23)blist:更新的好友状态testdoctor@answers.exampledomain.com(XMPP)
bot日志(已启用smack调试)

发送

24
收到

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

您需要发送自己的
,然后该用户将需要回复,就像您一样,使用


.

我们可以在花名册中添加联系人而不在xmpp中发送和接收订阅请求吗?我使用github代码
    <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>