1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-22 22:32:06 +01:00

Updated support for HTTP over XMPP (XEP-0332)

Updated Base64BinaryChunk packet and provider to support latest
version of specification (0.3):
- added support for new nr attribute.
This commit is contained in:
atsykholyas 2014-08-15 16:27:45 +03:00 committed by Florian Schmaus
parent 397eb88468
commit 880a348ff4
3 changed files with 26 additions and 6 deletions

View file

@ -31,21 +31,25 @@ public class Base64BinaryChunk implements PacketExtension {
public static final String ELEMENT_CHUNK = "chunk"; public static final String ELEMENT_CHUNK = "chunk";
public static final String ATTRIBUTE_STREAM_ID = "streamId"; public static final String ATTRIBUTE_STREAM_ID = "streamId";
public static final String ATTRIBUTE_LAST = "last"; public static final String ATTRIBUTE_LAST = "last";
public static final String ATTRIBUTE_NR = "nr";
private final String streamId; private final String streamId;
private final boolean last; private final boolean last;
private final String text; private final String text;
private final int nr;
/** /**
* Creates the extension. * Creates the extension.
* *
* @param text value of text attribute * @param text value of text attribute
* @param streamId value of streamId attribute * @param streamId value of streamId attribute
* @param nr value of nr attribute
* @param last value of last attribute * @param last value of last attribute
*/ */
public Base64BinaryChunk(String text, String streamId, boolean last) { public Base64BinaryChunk(String text, String streamId, int nr, boolean last) {
this.text = text; this.text = text;
this.streamId = streamId; this.streamId = streamId;
this.nr = nr;
this.last = last; this.last = last;
} }
@ -54,9 +58,10 @@ public class Base64BinaryChunk implements PacketExtension {
* *
* @param text value of text attribute * @param text value of text attribute
* @param streamId value of streamId attribute * @param streamId value of streamId attribute
* @param nr value of nr attribute
*/ */
public Base64BinaryChunk(String text, String streamId) { public Base64BinaryChunk(String text, String streamId, int nr) {
this(text, streamId, false); this(text, streamId, nr, false);
} }
/** /**
@ -86,6 +91,15 @@ public class Base64BinaryChunk implements PacketExtension {
return text; return text;
} }
/**
* Returns nr attribute.
*
* @return nr attribute
*/
public int getNr() {
return nr;
}
@Override @Override
public String getElementName() { public String getElementName() {
return ELEMENT_CHUNK; return ELEMENT_CHUNK;
@ -101,6 +115,8 @@ public class Base64BinaryChunk implements PacketExtension {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("<chunk xmlns='urn:xmpp:http' streamId='"); builder.append("<chunk xmlns='urn:xmpp:http' streamId='");
builder.append(streamId); builder.append(streamId);
builder.append("' nr='");
builder.append(nr);
builder.append("' last='"); builder.append("' last='");
builder.append(Boolean.toString(last)); builder.append(Boolean.toString(last));
builder.append("'>"); builder.append("'>");

View file

@ -38,8 +38,10 @@ public class Base64BinaryChunkProvider implements PacketExtensionProvider {
@Override @Override
public PacketExtension parseExtension(XmlPullParser parser) throws Exception { public PacketExtension parseExtension(XmlPullParser parser) throws Exception {
String streamId = parser.getAttributeValue("", Base64BinaryChunk.ATTRIBUTE_STREAM_ID); String streamId = parser.getAttributeValue("", Base64BinaryChunk.ATTRIBUTE_STREAM_ID);
String nrString = parser.getAttributeValue("", Base64BinaryChunk.ATTRIBUTE_NR);
String lastString = parser.getAttributeValue("", Base64BinaryChunk.ATTRIBUTE_LAST); String lastString = parser.getAttributeValue("", Base64BinaryChunk.ATTRIBUTE_LAST);
boolean last = false; boolean last = false;
int nr = Integer.parseInt(nrString);
if (lastString != null) { if (lastString != null) {
last = Boolean.parseBoolean(lastString); last = Boolean.parseBoolean(lastString);
@ -64,6 +66,6 @@ public class Base64BinaryChunkProvider implements PacketExtensionProvider {
} }
} }
return new Base64BinaryChunk(text, streamId, last); return new Base64BinaryChunk(text, streamId, nr, last);
} }
} }

View file

@ -34,7 +34,7 @@ public class Base64BinaryChunkProviderTest {
@Test @Test
public void isNonLatsChunkParsedCorrectly() throws Exception { public void isNonLatsChunkParsedCorrectly() throws Exception {
String base64Text = "iVBORw0KGgoAAAANSUhEUgAAASwAAAGQCAYAA"; String base64Text = "iVBORw0KGgoAAAANSUhEUgAAASwAAAGQCAYAA";
String string = "<chunk xmlns='urn:xmpp:http' streamId='Stream0001'>" + base64Text + "</chunk>"; String string = "<chunk xmlns='urn:xmpp:http' streamId='Stream0001' nr='0'>" + base64Text + "</chunk>";
Base64BinaryChunkProvider provider = new Base64BinaryChunkProvider(); Base64BinaryChunkProvider provider = new Base64BinaryChunkProvider();
XmlPullParser parser = PacketParserUtils.getParserFor(string); XmlPullParser parser = PacketParserUtils.getParserFor(string);
@ -46,12 +46,13 @@ public class Base64BinaryChunkProviderTest {
assertEquals("Stream0001", chunk.getStreamId()); assertEquals("Stream0001", chunk.getStreamId());
assertFalse(chunk.isLast()); assertFalse(chunk.isLast());
assertEquals(base64Text, chunk.getText()); assertEquals(base64Text, chunk.getText());
assertEquals(0, chunk.getNr());
} }
@Test @Test
public void isLatsChunkParsedCorrectly() throws Exception { public void isLatsChunkParsedCorrectly() throws Exception {
String base64Text = "2uPzi9u+tVWJd+e+y1AAAAABJRU5ErkJggg=="; String base64Text = "2uPzi9u+tVWJd+e+y1AAAAABJRU5ErkJggg==";
String string = "<chunk xmlns='urn:xmpp:http' streamId='Stream0001' last='true'>" + base64Text + "</chunk>"; String string = "<chunk xmlns='urn:xmpp:http' streamId='Stream0001' nr='1' last='true'>" + base64Text + "</chunk>";
Base64BinaryChunkProvider provider = new Base64BinaryChunkProvider(); Base64BinaryChunkProvider provider = new Base64BinaryChunkProvider();
XmlPullParser parser = PacketParserUtils.getParserFor(string); XmlPullParser parser = PacketParserUtils.getParserFor(string);
@ -63,5 +64,6 @@ public class Base64BinaryChunkProviderTest {
assertEquals("Stream0001", chunk.getStreamId()); assertEquals("Stream0001", chunk.getStreamId());
assertTrue(chunk.isLast()); assertTrue(chunk.isLast());
assertEquals(base64Text, chunk.getText()); assertEquals(base64Text, chunk.getText());
assertEquals(1, chunk.getNr());
} }
} }