AFAIK external components should be able to probe the presence of any registered user. However when I try to do this from an externa component I get a forbidden error like this one:
I think I’'ve found the problem here, in the handleProbe method of PresenceManagerImpl:
Roster roster = rosterManager.getRoster(username);
RosterItem item = roster.getRosterItem(packet.getFrom());
if (item.getSubStatus() == RosterItem.SUB_FROM
item.getSubStatus() == RosterItem.SUB_BOTH) {
probePresence(packet.getFrom(), packet.getTo());
}
else {
PacketError.Condition error = PacketError.Condition.not_authorized;
if ((item.getSubStatus() == RosterItem.SUB_NONE &&
item.getRecvStatus() != RosterItem.RECV_SUBSCRIBE)
(item.getSubStatus() == RosterItem.SUB_TO &&
item.getRecvStatus() != RosterItem.RECV_SUBSCRIBE)) {
error = PacketError.Condition.forbidden;
}
Presence presenceToSend = new Presence();
presenceToSend.setError(error);
presenceToSend.setTo(packet.getFrom());
presenceToSend.setFrom(packet.getTo());
deliverer.deliver(presenceToSend);
}
Accordingly to this code only users in the roster are allowed to probe presence, instead also components should be able too