diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java
index 8f47fea94..845311738 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java
@@ -249,7 +249,7 @@ public class JingleUtil {
JingleContent.Creator contentCreator, String contentName) {
Jingle.Builder jb = Jingle.getBuilder();
jb.setAction(JingleAction.session_terminate)
- .setSessionId(sessionId);
+ .setSessionId(sessionId).setReason(JingleReason.Reason.cancel);
JingleContent.Builder cb = JingleContent.getBuilder();
cb.setCreator(contentCreator).setName(contentName);
@@ -497,8 +497,16 @@ public class JingleUtil {
connection.sendStanza(createErrorOutOfOrder(request));
}
+ /**
+ * XEP-0166 Ex. 16
+ * @param request
+ * @return
+ */
public IQ createErrorMalformedRequest(Jingle request) {
- return IQ.createErrorResponse(request, XMPPError.Condition.bad_request);
+ XMPPError.Builder error = XMPPError.getBuilder();
+ error.setType(XMPPError.Type.CANCEL);
+ error.setCondition(XMPPError.Condition.bad_request);
+ return IQ.createErrorResponse(request, error);
}
public void sendErrorMalformedRequest(Jingle request)
diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleUtilTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleUtilTest.java
index cf126f7b4..458b8bfeb 100644
--- a/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleUtilTest.java
+++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleUtilTest.java
@@ -28,6 +28,7 @@ import org.jivesoftware.smack.test.util.SmackTestSuite;
import org.jivesoftware.smack.test.util.TestUtils;
import org.jivesoftware.smackx.jingle.element.Jingle;
import org.jivesoftware.smackx.jingle.element.JingleAction;
+import org.jivesoftware.smackx.jingle.element.JingleContent;
import org.jivesoftware.smackx.jingle.element.JingleReason;
import org.jivesoftware.smackx.jingle.provider.JingleProvider;
@@ -54,8 +55,8 @@ public class JingleUtilTest extends SmackTestSuite {
connection = new DummyConnection(
DummyConnection.getDummyConfigurationBuilder()
- .setUsernameAndPassword("romeo@montague.lit",
- "iluvJulibabe13").build());
+ .setUsernameAndPassword("romeo@montague.lit",
+ "iluvJulibabe13").build());
JingleManager jm = JingleManager.getInstanceFor(connection);
jutil = new JingleUtil(connection);
romeo = connection.getUser().asFullJidOrThrow();
@@ -75,12 +76,12 @@ public class JingleUtilTest extends SmackTestSuite {
Jingle terminate = jutil.createSessionTerminateDecline(juliet, "thisismadness");
String jingleXML =
"" +
- "" +
+ "action='session-terminate' " +
+ "sid='thisismadness'>" +
+ "" +
"" +
- "" +
- "";
+ "" +
+ "";
String xml = getIQXML(romeo, juliet, terminate.getStanzaId(), jingleXML);
assertXMLEqual(xml, terminate.toXML().toString());
Jingle jingle = new JingleProvider().parse(TestUtils.getParser(jingleXML));
@@ -94,12 +95,12 @@ public class JingleUtilTest extends SmackTestSuite {
Jingle success = jutil.createSessionTerminateSuccess(juliet, "thisissparta");
String jingleXML =
"" +
- "" +
+ "action='session-terminate' " +
+ "sid='thisissparta'>" +
+ "" +
"" +
- "" +
- "";
+ "" +
+ "";
String xml = getIQXML(romeo, juliet, success.getStanzaId(), jingleXML);
assertXMLEqual(xml, success.toXML().toString());
Jingle jingle = new JingleProvider().parse(TestUtils.getParser(jingleXML));
@@ -221,10 +222,55 @@ public class JingleUtilTest extends SmackTestSuite {
assertEquals(JingleAction.session_info, jingle.getAction());
}
+ @Test
+ public void createSessionTerminateContentCancelTest() throws Exception {
+ Jingle cancel = jutil.createSessionTerminateContentCancel(juliet, "thisismumbo#5", JingleContent.Creator.initiator, "content123");
+ String jingleXML =
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "";
+ String xml = getIQXML(romeo, juliet, cancel.getStanzaId(), jingleXML);
+ assertXMLEqual(xml, cancel.toXML().toString());
+ Jingle jingle = new JingleProvider().parse(TestUtils.getParser(jingleXML));
+ assertNotNull(jingle);
+ assertEquals(JingleAction.session_terminate, jingle.getAction());
+ assertEquals(JingleReason.Reason.cancel, jingle.getReason().asEnum());
+ assertEquals("thisismumbo#5", jingle.getSid());
+ JingleContent content = jingle.getContents().get(0);
+ assertNotNull(content);
+ assertEquals("content123", content.getName());
+ assertEquals(JingleContent.Creator.initiator, content.getCreator());
+ }
+
+ @Test
+ public void createErrorMalformedRequestTest() throws Exception {
+ Jingle j = defaultJingle(romeo, "error123");
+ IQ error = jutil.createErrorMalformedRequest(j);
+ String xml =
+ "" +
+ "" +
+ "" +
+ "" +
+ "";
+ assertXMLEqual(xml, error.toXML().toString());
+ }
+
private String getIQXML(FullJid from, FullJid to, String stanzaId, String jingleXML) {
- return
- "" +
- jingleXML +
+ return "" +
+ jingleXML +
"";
}
+
+ private Jingle defaultJingle(FullJid recipient, String sessionId) {
+ return jutil.createSessionPing(recipient, sessionId);
+ }
}