Я использую smack-android: 4.1.4 для подключения к серверу xmpp и использую этот код для подключения к многопользовательскому чату на этом сервере:
MultiUserChatManager mucManager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat muc = mucManager.getMultiUserChat(roomName);
muc.join(nickName,password,discussionHistory,timeout);
В этой комнате, если я владелец, я могу выгнать или забанить пользователя, чтобы забанить пользователя:
muc.banUser(userJID, reason);
и я могу получить список забаненных пользователей в этой комнате:
List<Affiliate> bannedList = muc.getOutcasts();
ВОПРОС 1: как разблокировать пользователя из предыдущего списка? проблема в том, что я не смог найти ни одной функции, например:
//muc.unbanUser(String userJID); // there's nothing close to this
Я прочитал всю документацию, но ни к чему не пришел, так что же мне здесь не хватает?
Я могу получить джид любого забаненного пользователя через список изгоев:
String jid = outcast.getJid(); // where outcast is of type Affiliate
но нет функции использовать этот jid для разбана пользователя.
Вопрос 2: этот вопрос относится к комнатам, а не к проблеме с запрещенным списком, в некоторых комнатах я получаю следующее исключение:
PacketParserUtils? Failed to parse extension packet in Presence packet. Attributes: [email protected]/someUserNickName id=null
org.jivesoftware.smack.SmackException: Caps elment with missing attributes. Attributes: hash=null version=1.0.0.84 node=http://www.google.com/xmpp/client/caps
at org.jivesoftware.smackx.caps.provider.CapsExtensionProvider.parse(CapsExtensionProvider.java:54)
at org.jivesoftware.smackx.caps.provider.CapsExtensionProvider.parse(CapsExtensionProvider.java:28)
at org.jivesoftware.smack.provider.Provider.parse(Provider.java:35)
at org.jivesoftware.smack.util.PacketParserUtils.parseExtensionElement(PacketParserUtils.java:929)
at org.jivesoftware.smack.util.PacketParserUtils.addExtensionElement(PacketParserUtils.java:1060)
at org.jivesoftware.smack.util.PacketParserUtils.parsePresence(PacketParserUtils.java:583)
at org.jivesoftware.smack.util.PacketParserUtils.parseStanza(PacketParserUtils.java:155)
at org.jivesoftware.smack.AbstractXMPPConnection.parseAndProcessStanza(AbstractXMPPConnection.java:956)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$500(XMPPTCPConnection.java:140)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:989)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:944)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:959)
at java.lang.Thread.run(Thread.java:856)
и это относится к некоторому коду внутри классов библиотеки smack, так что это не какое-то неперехваченное исключение внутри моего кода,
в чем причина этого исключения? и нет ли способа обрабатывать такие непроанализированные данные?
Я использую ParsingExceptionCallback в другой части своего приложения:
connection.setParsingExceptionCallback( parsingExceptionCallback );
но эта функция не вызывается для этого случая, есть ли аналогичные функции для класса MultiUserChat?