mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-12-12 14:01:08 +01:00
Rework Smack Provider design
this is the first stop towards fixing "SMACK-65: parsing should look for depth", by providing the initial parsing depth to the provider. Some methods (.e.g parseMessage) now use the depth as abort condition, instead of a unclean String equals check. parseIQ() and parseExtension() where both renamed to parse. This also restricts the Exceptions thrown by the parse method, to just XmlPullParserException, IOException and SmackException (not really a big victory, but nevertheless a slight improvement). StreamFeatureProvider is now gone, we simply use PacketExtensionProvider for stream features.
This commit is contained in:
parent
d04517cd08
commit
6980c8e63d
137 changed files with 1101 additions and 841 deletions
|
|
@ -16,7 +16,6 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.ibb.provider;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.packet.Close;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
|
@ -26,9 +25,10 @@ import org.xmlpull.v1.XmlPullParser;
|
|||
*
|
||||
* @author Henning Staib
|
||||
*/
|
||||
public class CloseIQProvider implements IQProvider {
|
||||
public class CloseIQProvider extends IQProvider<Close> {
|
||||
|
||||
public IQ parseIQ(XmlPullParser parser) throws Exception {
|
||||
@Override
|
||||
public Close parse(XmlPullParser parser, int initialDepth) {
|
||||
String sid = parser.getAttributeValue("", "sid");
|
||||
return new Close(sid);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,13 +16,13 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.ibb.provider;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.PacketExtension;
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smack.provider.PacketExtensionProvider;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.packet.Data;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.packet.DataPacketExtension;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Parses an In-Band Bytestream data packet which can be a packet extension of
|
||||
|
|
@ -30,19 +30,33 @@ import org.xmlpull.v1.XmlPullParser;
|
|||
*
|
||||
* @author Henning Staib
|
||||
*/
|
||||
public class DataPacketProvider implements PacketExtensionProvider, IQProvider {
|
||||
public class DataPacketProvider {
|
||||
|
||||
public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
|
||||
String sessionID = parser.getAttributeValue("", "sid");
|
||||
long seq = Long.parseLong(parser.getAttributeValue("", "seq"));
|
||||
String data = parser.nextText();
|
||||
return new DataPacketExtension(sessionID, seq, data);
|
||||
public static class IQProvider extends org.jivesoftware.smack.provider.IQProvider<Data> {
|
||||
|
||||
private static final PacketExtensionProvider packetExtensionProvider = new PacketExtensionProvider();
|
||||
|
||||
@Override
|
||||
public Data parse(XmlPullParser parser, int initialDepth)
|
||||
throws XmlPullParserException, IOException,
|
||||
SmackException {
|
||||
DataPacketExtension data = packetExtensionProvider.parse(parser);
|
||||
Data iq = new Data(data);
|
||||
return iq;
|
||||
}
|
||||
}
|
||||
|
||||
public IQ parseIQ(XmlPullParser parser) throws Exception {
|
||||
DataPacketExtension data = (DataPacketExtension) parseExtension(parser);
|
||||
IQ iq = new Data(data);
|
||||
return iq;
|
||||
}
|
||||
public static class PacketExtensionProvider extends org.jivesoftware.smack.provider.PacketExtensionProvider<DataPacketExtension> {
|
||||
|
||||
@Override
|
||||
public DataPacketExtension parse(XmlPullParser parser,
|
||||
int initialDepth) throws XmlPullParserException,
|
||||
IOException {
|
||||
String sessionID = parser.getAttributeValue("", "sid");
|
||||
long seq = Long.parseLong(parser.getAttributeValue("", "seq"));
|
||||
String data = parser.nextText();
|
||||
return new DataPacketExtension(sessionID, seq, data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,22 +16,24 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.ibb.provider;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamManager.StanzaType;
|
||||
import org.jivesoftware.smackx.bytestreams.ibb.packet.Open;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Parses an In-Band Bytestream open packet.
|
||||
*
|
||||
* @author Henning Staib
|
||||
*/
|
||||
public class OpenIQProvider implements IQProvider {
|
||||
public class OpenIQProvider extends IQProvider<Open> {
|
||||
|
||||
public IQ parseIQ(XmlPullParser parser) throws Exception {
|
||||
@Override
|
||||
public Open parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException {
|
||||
String sessionID = parser.getAttributeValue("", "sid");
|
||||
int blockSize = Integer.parseInt(parser.getAttributeValue("", "block-size"));
|
||||
|
||||
|
|
@ -44,6 +46,8 @@ public class OpenIQProvider implements IQProvider {
|
|||
stanza = StanzaType.valueOf(stanzaValue.toUpperCase(Locale.US));
|
||||
}
|
||||
|
||||
parser.next();
|
||||
|
||||
return new Open(sessionID, blockSize, stanza);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,19 +16,23 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.bytestreams.socks5.provider;
|
||||
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.jivesoftware.smack.provider.IQProvider;
|
||||
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
/**
|
||||
* Parses a bytestream packet.
|
||||
*
|
||||
* @author Alexander Wenckus
|
||||
*/
|
||||
public class BytestreamsProvider implements IQProvider {
|
||||
public class BytestreamsProvider extends IQProvider<Bytestream> {
|
||||
|
||||
public IQ parseIQ(XmlPullParser parser) throws Exception {
|
||||
@Override
|
||||
public Bytestream parse(XmlPullParser parser, int initialDepth)
|
||||
throws XmlPullParserException, IOException {
|
||||
boolean done = false;
|
||||
|
||||
Bytestream toReturn = new Bytestream();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue