, , .
, . :
pm.addIQProvider("retrieve", "urn:xmpp:archive", new ChatIQProvider());
:
pm.addIQProvider("chat", "urn:xmpp:archive", new ChatIQProvider());
IQ, , "retrieve" "chat".
, , IQ android smack api.
, .
:
ListIQProvider:
public class ListIQProvider implements IQProvider {
public ListIQProvider()
{
}
@Override
public IQ parseIQ(XmlPullParser parser) throws Exception
{
ListIQ iq = new ListIQ();
ListIQ.Set set = new Set();
boolean done = false;
String with = "", start = "";
while (!done)
{
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG)
{
if (parser.getName().equals("chat"))
{
with = parser.getAttributeValue("", "with");
start = parser.getAttributeValue("", "start");
iq.addChat(new Chat(with, start));
}
else if (parser.getName().equals("first"))
{
int index = parseInt(parser.getAttributeValue("", "index"));
set.setIndexAtt(index);
int first = parseInt(parser.nextText());
set.setFirst(first);
}
else if (parser.getName().equals("last"))
{
int last = parseInt(parser.nextText());
set.setLast(last);
}
else if (parser.getName().equals("count"))
{
int count = parseInt(parser.nextText());
set.setCount(count);
}
}
else if (eventType == XmlPullParser.END_TAG)
{
if (parser.getName().equals("list"))
{
iq.setSet(set);
done = true;
}
}
}
return iq;
}
private int parseInt(String integer)
{
return Integer.parseInt((integer != null ? integer : "0"));
}
}
ListIQ:
public class ListIQ extends IQ {
private List<Chat> chats;
private Set set;
public ListIQ()
{
this.chats = new ArrayList<ListIQ.Chat>();
}
public Set getSet()
{
return set;
}
public void setSet(Set set)
{
this.set = set;
}
public void addChat(Chat chat)
{
chats.add(chat);
}
public List<Chat> getChats()
{
return chats;
}
@Override
public String getChildElementXML()
{
StringBuilder builder = new StringBuilder("<list xmlns=\"urn:xmpp:archive\">");
for (Chat chat : chats)
{
builder.append(chat.toXml());
}
builder.append(set.toXml());
builder.append("</list>");
return builder.toString();
}
public static class Chat {
private String with;
private String start;
public Chat()
{
}
public Chat(String with, String start)
{
this.with = with;
this.start = start;
}
public String getWith()
{
return with;
}
public void setWith(String with)
{
this.with = with;
}
public String getStart()
{
return start;
}
public void setStart(String start)
{
this.start = start;
}
public String toXml()
{
StringBuilder builder = new StringBuilder("<chat with=\"");
builder.append(with).append("\"");
builder.append(" start=\"");
builder.append(start);
builder.append("\"/>");
return builder.toString();
}
}
public static class Set {
private int last;
private int count;
private int indexAtt;
private int first;
public Set()
{
}
public int getLast()
{
return last;
}
public void setLast(int last)
{
this.last = last;
}
public int getCount()
{
return count;
}
public void setCount(int count)
{
this.count = count;
}
public int getIndexAtt()
{
return indexAtt;
}
public void setIndexAtt(int indexAtt)
{
this.indexAtt = indexAtt;
}
public int getFirst()
{
return first;
}
public void setFirst(int first)
{
this.first = first;
}
public String toXml()
{
StringBuilder builder = new StringBuilder("<set xmlns=\"http://jabber.org/protocol/rsm\">");
builder.append("<first index=\"").append(indexAtt).append("\">").append(first).append("</first>");
builder.append("<last>").append(last).append("</last>");
builder.append("<count>").append(count).append("</count>");
builder.append("</set>");
return builder.toString();
}
}
}
, ServiceProviders.Register_Providers(ProviderManager.getInstance()); Xmpp Connection.
ServiceProviders:
public class ServiceProviders
{
public static void Register_Providers(ProviderManager pm)
{
Log.e("PROVIDER", "START");
pm.addIQProvider("query", "jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider());
try
{
pm.addIQProvider("query", "jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time"));
}
catch (ClassNotFoundException e)
{
Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Time");
}
pm.addExtensionProvider("x", "jabber:x:roster", new RosterExchangeProvider());
pm.addExtensionProvider("x", "jabber:x:event", new MessageEventProvider());
pm.addExtensionProvider("active", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("composing", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("paused", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("inactive", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("gone", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider());
pm.addExtensionProvider("x", "jabber:x:conference", new GroupChatInvitation.Provider());
pm.addIQProvider("query", "http://jabber.org/protocol/disco#items", new DiscoverItemsProvider());
pm.addIQProvider("query", "http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());
pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user", new MUCUserProvider());
pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin", new MUCAdminProvider());
pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner", new MUCOwnerProvider());
pm.addExtensionProvider("x", "jabber:x:delay", new DelayInformationProvider());
try
{
pm.addIQProvider("query", "jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version"));
}
catch (ClassNotFoundException e)
{
}
pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
pm.addIQProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider());
pm.addExtensionProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider());
pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());
pm.addIQProvider("sharedgroup", "http://www.jivesoftware.org/protocol/sharedgroup", new SharedGroupsInfo.Provider());
pm.addExtensionProvider("addresses", "http://jabber.org/protocol/address", new MultipleAddressesProvider());
pm.addIQProvider("si", "http://jabber.org/protocol/si", new StreamInitiationProvider());
pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
pm.addIQProvider("command", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider());
pm.addExtensionProvider("malformed-action", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.MalformedActionError());
pm.addExtensionProvider("bad-locale", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadLocaleError());
pm.addExtensionProvider("bad-payload", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadPayloadError());
pm.addExtensionProvider("bad-sessionid", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadSessionIDError());
pm.addExtensionProvider("session-expired", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.SessionExpiredError());
pm.addIQProvider("query", "http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());
pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
pm.addIQProvider("list", "urn:xmpp:archive", new ListIQProvider());
pm.addIQProvider("chat", "urn:xmpp:archive", new ChatIQProvider());
}
}
@HirenPatel
Openfire.
Xmpp- , ,
pm.addIQProvider("list", "urn:xmpp:archive", new ListIQProvider());
pm.addIQProvider("chat", "urn:xmpp:archive", new ChatIQProvider());
IQ, :
final IQ iq = new IQ()
{
@Override public String getChildElementXML()
{
return "<retrieve xmlns='urn:xmpp:archive' with='test@customOpenfire.com'><set xmlns='http://jabber.org/protocol/rsm'><max xmlns='http://jabber.org/protocol/rsm'>30</max></set> </retrieve>";
}
};
iq.setType(IQ.Type.GET);
iq.setPacketID("987654321");
xmppConnection.sendPacket(iq);