XMPP spec states that the #admin schema should be used for affiliation changes (http://xmpp.org/extensions/xep-0045.html#schemas-admin).
Unfortunately to this date, Openfire does not match spec and requires the #owner schema (http://community.igniterealtime.org/message/205331).
Please comment on that post and see if we can get Openfire to update their incorrect schema support.
However, because of this I’ve updated Room. Now, if granting privileges fails on the first attempt using the #admin schema, we try again using the #owner schema.
Because IQ’s support error callbacks, the error handlers in the response callbacks were never called. I’ve also added proper error and response callbacks to all IQ calls in Room.
I added an AFFILIATION_CHANGE_COMPLETE event to RoomEvent that gets dispatched when an affiliation grant or revoke is complete.
USER_KICKED and USER_BANNED events are now dispatched after updating the room roster (like USER_DEPARTURE) instead of before.
It was incorrect to receive a USER_KICKED or USER_BANNED event and still see the user in the roster.
CONFIGURE_ROOM and CONFIGURE_ROOM_COMPLETE event strings changed from configureForm and configureFormComplete to configureRoom and configureRoomComplete respectively.