mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-27 00:32:07 +01:00
Moved resource binding parsing as a core IQ packet. SMACK-124
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@3492 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
parent
74ca03f5b3
commit
5247fce7ca
3 changed files with 28 additions and 36 deletions
|
@ -121,13 +121,6 @@
|
||||||
<className>org.jivesoftware.smackx.packet.OfflineMessageInfo$Provider</className>
|
<className>org.jivesoftware.smackx.packet.OfflineMessageInfo$Provider</className>
|
||||||
</extensionProvider>
|
</extensionProvider>
|
||||||
|
|
||||||
<!-- Resource Binding -->
|
|
||||||
<iqProvider>
|
|
||||||
<elementName>bind</elementName>
|
|
||||||
<namespace>urn:ietf:params:xml:ns:xmpp-bind</namespace>
|
|
||||||
<className>org.jivesoftware.smack.packet.Bind$Provider</className>
|
|
||||||
</iqProvider>
|
|
||||||
|
|
||||||
<!-- Last Activity -->
|
<!-- Last Activity -->
|
||||||
<iqProvider>
|
<iqProvider>
|
||||||
<elementName>query</elementName>
|
<elementName>query</elementName>
|
||||||
|
|
|
@ -29,8 +29,8 @@ import org.xmlpull.mxp1.MXParser;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listens for XML traffic from the XMPP server and parses it into packet objects.
|
* Listens for XML traffic from the XMPP server and parses it into packet objects.
|
||||||
|
@ -585,6 +585,10 @@ class PacketReader {
|
||||||
else if (elementName.equals("query") && namespace.equals("jabber:iq:register")) {
|
else if (elementName.equals("query") && namespace.equals("jabber:iq:register")) {
|
||||||
iqPacket = parseRegistration(parser);
|
iqPacket = parseRegistration(parser);
|
||||||
}
|
}
|
||||||
|
else if (elementName.equals("bind") &&
|
||||||
|
namespace.equals("urn:ietf:params:xml:ns:xmpp-bind")) {
|
||||||
|
iqPacket = parseResourceBinding(parser);
|
||||||
|
}
|
||||||
// Otherwise, see if there is a registered provider for
|
// Otherwise, see if there is a registered provider for
|
||||||
// this element name and namespace.
|
// this element name and namespace.
|
||||||
else {
|
else {
|
||||||
|
@ -756,6 +760,29 @@ class PacketReader {
|
||||||
return registration;
|
return registration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Bind parseResourceBinding(XmlPullParser parser) throws IOException,
|
||||||
|
XmlPullParserException {
|
||||||
|
Bind bind = new Bind();
|
||||||
|
boolean done = false;
|
||||||
|
while (!done) {
|
||||||
|
int eventType = parser.next();
|
||||||
|
if (eventType == XmlPullParser.START_TAG) {
|
||||||
|
if (parser.getName().equals("resource")) {
|
||||||
|
bind.setResource(parser.nextText());
|
||||||
|
}
|
||||||
|
else if (parser.getName().equals("jid")) {
|
||||||
|
bind.setJid(parser.nextText());
|
||||||
|
}
|
||||||
|
} else if (eventType == XmlPullParser.END_TAG) {
|
||||||
|
if (parser.getName().equals("bind")) {
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bind;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wrapper class to associate a packet collector with a listener.
|
* A wrapper class to associate a packet collector with a listener.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,9 +20,6 @@
|
||||||
|
|
||||||
package org.jivesoftware.smack.packet;
|
package org.jivesoftware.smack.packet;
|
||||||
|
|
||||||
import org.jivesoftware.smack.provider.IQProvider;
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* IQ packet used by Smack to bind a resource and to obtain the jid assigned by the server.
|
* IQ packet used by Smack to bind a resource and to obtain the jid assigned by the server.
|
||||||
* There are two ways to bind a resource. One is simply sending an empty Bind packet where the
|
* There are two ways to bind a resource. One is simply sending an empty Bind packet where the
|
||||||
|
@ -71,29 +68,4 @@ public class Bind extends IQ {
|
||||||
buf.append("</bind>");
|
buf.append("</bind>");
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Provider implements IQProvider {
|
|
||||||
|
|
||||||
public IQ parseIQ(XmlPullParser parser) throws Exception {
|
|
||||||
Bind bind = new Bind();
|
|
||||||
boolean done = false;
|
|
||||||
while (!done) {
|
|
||||||
int eventType = parser.next();
|
|
||||||
if (eventType == XmlPullParser.START_TAG) {
|
|
||||||
if (parser.getName().equals("resource")) {
|
|
||||||
bind.setResource(parser.nextText());
|
|
||||||
}
|
|
||||||
else if (parser.getName().equals("jid")) {
|
|
||||||
bind.setJid(parser.nextText());
|
|
||||||
}
|
|
||||||
} else if (eventType == XmlPullParser.END_TAG) {
|
|
||||||
if (parser.getName().equals("bind")) {
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return bind;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue