I just verified the code of the subscription plugin and the problem is in the plugin. The plugin is overriding the entire presence handling on the server. This creates several problems where the one you are reporting is just one. I’'m now fixing the plugin and the new version will be available with Openfire 3.3.0 to be released this week.
No problem. There is a difference now in how the plugin will work. In the old version when userA added userB to his roster no matter userB’'s presence the subscription was accepted. In the new version the presence subscription will be accepted when userB comes online. If he is online then it will be automatically accepted. Otherwise the server will store the subscription request and accept it when the user comes online. This happens since now the plugin is intercepting outgoing packets before they are actually processed. By intercepting outgoing packets we are giving the server the chance to update rosters based on subscription requests.
I’'ve seen a related problem with 3.3.0, using the latest subscription plugin.
Here is the behaviour I am seeing:
User A is online, User B is offline.
A sends a presence subscribe request to B. B is added to A’'s roster list.
A then sends a presence unsubscribe request to B - but B has not logged in yet to have the subscribe auto-accepted The unsubscribe is ignored, and B is not marked as ask=“unsubscribe” from A’'s roster list.
I have tried having A send a Roster “remove” IQ request, but that wipes out subscriptions in both directions.
Is there a way for A to cancel the subscription request, without affecting B’'s subscribed roster list?