Привет, у меня проблема с openfire и smack. У меня есть бот jabber, разработанный с использованием smack и openfire. Когда любой пользователь добавляет бота, у него есть свой контакт, то в конце всего процесса статус подписки таблицы ofRoster (openfire) устанавливается на «от». Желаемый результат этого процесса — «оба».
вот мой код обработки нового добавления соединения,
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;
}
});
журнал пользователей, добавляющих контакт. используя пиджин
(18:32:22) jabber: jabber_roster_add_buddy(): Adding [email protected]
(18:32:22) jabber: jabber_roster_update([email protected]): [Source: local blist]: groups: Buddies
(18:32:22) jabber: Sending (ssl) ([email protected]/pidgin): <iq type='set' id='purple8dde9bec'><query xmlns='jabber:iq:roster'><item jid='[email protected]' name=''><group>Buddies</group></item></query></iq>
(18:32:22) jabber: Sending (ssl) ([email protected]/pidgin): <presence to='[email protected]' type='subscribe'/>
(18:32:22) jabber: Recv (ssl)(231): <iq type="set" id="88-4977" to="[email protected]/pidgin"><query xmlns="jabber:iq:roster"><item jid="[email protected]" name="" subscription="none"><group>Buddies</group></item></query></iq>
(18:32:22) jabber: Sending (ssl) ([email protected]/pidgin): <iq type='result' id='88-4977'/>
(18:32:22) jabber: Recv (ssl)(89): <iq type="result" id="purple8dde9bec" to="[email protected]/pidgin"/>
(18:32:22) jabber: Unhandled IQ with id purple8dde9bec
(18:32:23) jabber: Recv (ssl)(248): <iq type="set" id="963-4978" to="[email protected]/pidgin"><query xmlns="jabber:iq:roster"><item jid="[email protected]" name="" ask="subscribe" subscription="none"><group>Buddies</group></item></query></iq>
(18:32:23) jabber: Sending (ssl) ([email protected]/pidgin): <iq type='result' id='963-4978'/>
(18:32:23) jabber: Recv (ssl)(247): <iq type="set" id="445-4981" to="[email protected]/pidgin"><query xmlns="jabber:iq:roster"><item jid="[email protected]" name=" Ask a Doctor Now" subscription="to"><group>Buddies</group></item></query></iq>
(18:32:23) jabber: Sending (ssl) ([email protected]/pidgin): <iq type='result' id='445-4981'/>
(18:32:23) jabber: Recv (ssl)(164): <presence id="ERM59-6" to="[email protected]" type="subscribed" from="[email protected]"><priority>24</priority></presence>
(18:32:23) jabber: Recv (ssl)(283): <presence id="ERM59-5" from="[email protected]/smoke" to="[email protected]/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 [email protected] (XMPP)
лог бота (включен smack debug)
послал
<presence id="ERM59-6" to="[email protected]" type="subscribed"><priority>24</priority></presence>
получено
<presence to="[email protected]" type="subscribe" from="[email protected]"/>
<iq type="set" id="612-4980" to="[email protected]/smoke"><query xmlns="jabber:iq:roster"><item jid="[email protected]" subscription="from"/></query></iq>
истолкованный
<presence to="[email protected]" from="[email protected]" type="subscribe"></presence>
<iq id="612-4980" to="[email protected]/smoke" type="set"><query xmlns="jabber:iq:roster"><item jid="[email protected]" subscription="from"></item></query></iq>