Add comments and more tests

This commit is contained in:
vanitasvitae 2017-07-11 22:30:41 +02:00
parent ad529be705
commit e11a4ea9c5
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
4 changed files with 250 additions and 2 deletions

View File

@ -59,10 +59,12 @@ public class OutgoingJingleFileOffer extends JingleFileTransferSession {
task.cancel(true); task.cancel(true);
queued.remove(task); queued.remove(task);
} }
break;
default: default:
jutil.sendSessionTerminateCancel(getRemote(), getSessionId());
} }
jutil.sendSessionTerminateCancel(getRemote(), getSessionId());
notifyEndedListeners(JingleReason.Reason.cancel); notifyEndedListeners(JingleReason.Reason.cancel);
} }

View File

@ -42,6 +42,17 @@ public class JingleUtil {
this.connection = connection; this.connection = connection;
} }
/**
* XEP-0166 Example 10.
* @param recipient
* @param sessionId
* @param contentCreator
* @param contentName
* @param contentSenders
* @param description
* @param transport
* @return
*/
public Jingle createSessionInitiate(FullJid recipient, public Jingle createSessionInitiate(FullJid recipient,
String sessionId, String sessionId,
JingleContent.Creator contentCreator, JingleContent.Creator contentCreator,
@ -69,6 +80,16 @@ public class JingleUtil {
return jingle; return jingle;
} }
/**
* XEP-0234 Example 1.
* @param recipient
* @param sessionId
* @param contentCreator
* @param contentName
* @param description
* @param transport
* @return
*/
public Jingle createSessionInitiateFileOffer(FullJid recipient, public Jingle createSessionInitiateFileOffer(FullJid recipient,
String sessionId, String sessionId,
JingleContent.Creator contentCreator, JingleContent.Creator contentCreator,
@ -108,6 +129,17 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResult(); return connection.createStanzaCollectorAndSend(jingle).nextResult();
} }
/**
* XEP-0166 Example 17.
* @param recipient
* @param sessionId
* @param contentCreator
* @param contentName
* @param contentSenders
* @param description
* @param transport
* @return
*/
public Jingle createSessionAccept(FullJid recipient, public Jingle createSessionAccept(FullJid recipient,
String sessionId, String sessionId,
JingleContent.Creator contentCreator, JingleContent.Creator contentCreator,
@ -151,6 +183,13 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResult(); return connection.createStanzaCollectorAndSend(jingle).nextResult();
} }
/**
* XEP-0166 §6.7.
* @param recipient
* @param sessionId
* @param reason
* @return
*/
public Jingle createSessionTerminate(FullJid recipient, String sessionId, JingleReason reason) { public Jingle createSessionTerminate(FullJid recipient, String sessionId, JingleReason reason) {
Jingle.Builder jb = Jingle.getBuilder(); Jingle.Builder jb = Jingle.getBuilder();
jb.setAction(JingleAction.session_terminate) jb.setAction(JingleAction.session_terminate)
@ -184,6 +223,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 21.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateDecline(FullJid recipient, String sessionId) { public Jingle createSessionTerminateDecline(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.decline); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.decline);
} }
@ -196,6 +241,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 19.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateSuccess(FullJid recipient, String sessionId) { public Jingle createSessionTerminateSuccess(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.success); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.success);
} }
@ -208,6 +259,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 20.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateBusy(FullJid recipient, String sessionId) { public Jingle createSessionTerminateBusy(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.busy); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.busy);
} }
@ -220,6 +277,13 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 22.
* @param recipient
* @param sessionId
* @param altSessionId
* @return
*/
public Jingle createSessionTerminateAlternativeSession(FullJid recipient, String sessionId, String altSessionId) { public Jingle createSessionTerminateAlternativeSession(FullJid recipient, String sessionId, String altSessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.AlternativeSession(altSessionId)); return createSessionTerminate(recipient, sessionId, JingleReason.AlternativeSession(altSessionId));
} }
@ -232,6 +296,13 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0234 Example 9.
* Cancel all active transfers of the session.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateCancel(FullJid recipient, String sessionId) { public Jingle createSessionTerminateCancel(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.cancel); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.cancel);
} }
@ -245,6 +316,15 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0234 Example 10.
* Cancel a single transfer.
* @param recipient
* @param sessionId
* @param contentCreator
* @param contentName
* @return
*/
public Jingle createSessionTerminateContentCancel(FullJid recipient, String sessionId, public Jingle createSessionTerminateContentCancel(FullJid recipient, String sessionId,
JingleContent.Creator contentCreator, String contentName) { JingleContent.Creator contentCreator, String contentName) {
Jingle.Builder jb = Jingle.getBuilder(); Jingle.Builder jb = Jingle.getBuilder();
@ -269,6 +349,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 23.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateUnsupportedTransports(FullJid recipient, String sessionId) { public Jingle createSessionTerminateUnsupportedTransports(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.unsupported_transports); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.unsupported_transports);
} }
@ -280,6 +366,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 24.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateFailedTransport(FullJid recipient, String sessionId) { public Jingle createSessionTerminateFailedTransport(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.failed_transport); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.failed_transport);
} }
@ -291,6 +383,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 25.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateUnsupportedApplications(FullJid recipient, String sessionId) { public Jingle createSessionTerminateUnsupportedApplications(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.unsupported_applications); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.unsupported_applications);
} }
@ -302,6 +400,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 26.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateFailedApplication(FullJid recipient, String sessionId) { public Jingle createSessionTerminateFailedApplication(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.failed_application); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.failed_application);
} }
@ -313,6 +417,12 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 27.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionTerminateIncompatibleParameters(FullJid recipient, String sessionId) { public Jingle createSessionTerminateIncompatibleParameters(FullJid recipient, String sessionId) {
return createSessionTerminate(recipient, sessionId, JingleReason.Reason.incompatible_parameters); return createSessionTerminate(recipient, sessionId, JingleReason.Reason.incompatible_parameters);
} }
@ -328,6 +438,12 @@ public class JingleUtil {
return null; //TODO Later return null; //TODO Later
} }
/**
* XEP-0166 Example 32.
* @param recipient
* @param sessionId
* @return
*/
public Jingle createSessionPing(FullJid recipient, String sessionId) { public Jingle createSessionPing(FullJid recipient, String sessionId) {
Jingle.Builder jb = Jingle.getBuilder(); Jingle.Builder jb = Jingle.getBuilder();
jb.setSessionId(sessionId) jb.setSessionId(sessionId)
@ -347,6 +463,11 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 Example 5.
* @param jingle
* @return
*/
public IQ createAck(Jingle jingle) { public IQ createAck(Jingle jingle) {
return IQ.createResultIQ(jingle); return IQ.createResultIQ(jingle);
} }
@ -355,6 +476,16 @@ public class JingleUtil {
connection.sendStanza(createAck(jingle)); connection.sendStanza(createAck(jingle));
} }
/**
* XEP-0260 Example 15.
* @param recipient
* @param initiator
* @param sessionId
* @param contentCreator
* @param contentName
* @param transport
* @return
*/
public Jingle createTransportReplace(FullJid recipient, FullJid initiator, String sessionId, public Jingle createTransportReplace(FullJid recipient, FullJid initiator, String sessionId,
JingleContent.Creator contentCreator, String contentName, JingleContent.Creator contentCreator, String contentName,
JingleContentTransport transport) { JingleContentTransport transport) {
@ -382,6 +513,16 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0260 Example 17.
* @param recipient
* @param initiator
* @param sessionId
* @param contentCreator
* @param contentName
* @param transport
* @return
*/
public Jingle createTransportAccept(FullJid recipient, FullJid initiator, String sessionId, public Jingle createTransportAccept(FullJid recipient, FullJid initiator, String sessionId,
JingleContent.Creator contentCreator, String contentName, JingleContent.Creator contentCreator, String contentName,
JingleContentTransport transport) { JingleContentTransport transport) {
@ -409,6 +550,16 @@ public class JingleUtil {
return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow(); return connection.createStanzaCollectorAndSend(jingle).nextResultOrThrow();
} }
/**
* XEP-0166 §7.2.14.
* @param recipient
* @param initiator
* @param sessionId
* @param contentCreator
* @param contentName
* @param transport
* @return
*/
public Jingle createTransportReject(FullJid recipient, FullJid initiator, String sessionId, public Jingle createTransportReject(FullJid recipient, FullJid initiator, String sessionId,
JingleContent.Creator contentCreator, String contentName, JingleContent.Creator contentCreator, String contentName,
JingleContentTransport transport) { JingleContentTransport transport) {
@ -440,6 +591,11 @@ public class JingleUtil {
* #################################################################################################### * ####################################################################################################
*/ */
/**
* XEP-0166 Example 29.
* @param request request with unknown sessionId.
* @return error stanza.
*/
public IQ createErrorUnknownSession(Jingle request) { public IQ createErrorUnknownSession(Jingle request) {
XMPPError.Builder error = XMPPError.getBuilder(); XMPPError.Builder error = XMPPError.getBuilder();
error.setCondition(XMPPError.Condition.item_not_found) error.setCondition(XMPPError.Condition.item_not_found)
@ -452,8 +608,14 @@ public class JingleUtil {
connection.sendStanza(createErrorUnknownSession(request)); connection.sendStanza(createErrorUnknownSession(request));
} }
/**
* XEP-0166 Example 12.
* @param request request from unknown initiator.
* @return error stanza.
*/
public IQ createErrorUnknownInitiator(Jingle request) { public IQ createErrorUnknownInitiator(Jingle request) {
return IQ.createErrorResponse(request, XMPPError.Condition.service_unavailable); XMPPError.Builder b = XMPPError.getBuilder().setType(XMPPError.Type.CANCEL).setCondition(XMPPError.Condition.service_unavailable);
return IQ.createErrorResponse(request, b);
} }
public void sendErrorUnknownInitiator(Jingle request) public void sendErrorUnknownInitiator(Jingle request)
@ -461,6 +623,11 @@ public class JingleUtil {
connection.sendStanza(createErrorUnknownInitiator(request)); connection.sendStanza(createErrorUnknownInitiator(request));
} }
/**
* XEP-0166 Example 31.
* @param request request with unsupported info.
* @return error stanza.
*/
public IQ createErrorUnsupportedInfo(Jingle request) { public IQ createErrorUnsupportedInfo(Jingle request) {
XMPPError.Builder error = XMPPError.getBuilder(); XMPPError.Builder error = XMPPError.getBuilder();
error.setCondition(XMPPError.Condition.feature_not_implemented) error.setCondition(XMPPError.Condition.feature_not_implemented)
@ -473,6 +640,11 @@ public class JingleUtil {
connection.sendStanza(createErrorUnsupportedInfo(request)); connection.sendStanza(createErrorUnsupportedInfo(request));
} }
/**
* XEP-0166 Example 34.
* @param request tie-breaking request
* @return error stanza
*/
public IQ createErrorTieBreak(Jingle request) { public IQ createErrorTieBreak(Jingle request) {
XMPPError.Builder error = XMPPError.getBuilder(); XMPPError.Builder error = XMPPError.getBuilder();
error.setCondition(XMPPError.Condition.conflict) error.setCondition(XMPPError.Condition.conflict)

View File

@ -92,6 +92,7 @@ public class JingleSessionTest {
assertNotSame(initiatedSimpleSession, respondedSimpleSession); assertNotSame(initiatedSimpleSession, respondedSimpleSession);
assertFalse(initiatedSimpleSession.equals(respondedSimpleSession)); assertFalse(initiatedSimpleSession.equals(respondedSimpleSession));
assertNotSame(initiatedSimpleSession.hashCode(), respondedSimpleSession.hashCode()); assertNotSame(initiatedSimpleSession.hashCode(), respondedSimpleSession.hashCode());
assertFalse(initiatedSimpleSession.equals("Hallo Welt"));
} }
@Test @Test

View File

@ -21,6 +21,8 @@ import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertTrue; import static junit.framework.TestCase.assertTrue;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import java.io.IOException;
import org.jivesoftware.smack.DummyConnection; import org.jivesoftware.smack.DummyConnection;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
@ -37,6 +39,7 @@ import org.junit.Test;
import org.jxmpp.jid.FullJid; import org.jxmpp.jid.FullJid;
import org.jxmpp.jid.impl.JidCreate; import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.stringprep.XmppStringprepException; import org.jxmpp.stringprep.XmppStringprepException;
import org.xml.sax.SAXException;
/** /**
@ -264,6 +267,76 @@ public class JingleUtilTest extends SmackTestSuite {
assertXMLEqual(xml, error.toXML().toString()); assertXMLEqual(xml, error.toXML().toString());
} }
@Test
public void createErrorTieBreakTest() throws IOException, SAXException {
Jingle j = defaultJingle(romeo, "thisistie");
IQ error = jutil.createErrorTieBreak(j);
String xml =
"<iq " +
"to='" + romeo + "' " +
"from='" + romeo + "' " +
"id='" + j.getStanzaId() + "' " +
"type='error'>" +
"<error type='cancel'>" +
"<conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" +
"<tie-break xmlns='urn:xmpp:jingle:errors:1'/>" +
"</error>" +
"</iq>";
assertXMLEqual(xml, error.toXML().toString());
}
@Test
public void createErrorUnknownSessionTest() throws IOException, SAXException {
Jingle j = defaultJingle(romeo, "youknownothingjohnsnow");
IQ error = jutil.createErrorUnknownSession(j);
String xml =
"<iq " +
"to='" + romeo + "' " +
"from='" + romeo + "' " +
"id='" + j.getStanzaId() + "' " +
"type='error'>" +
"<error type='cancel'>" +
"<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" +
"<unknown-session xmlns='urn:xmpp:jingle:errors:1'/>" +
"</error>" +
"</iq>";
assertXMLEqual(xml, error.toXML().toString());
}
@Test
public void createErrorUnknownInitiatorTest() throws IOException, SAXException {
Jingle j = defaultJingle(romeo, "iamyourfather");
IQ error = jutil.createErrorUnknownInitiator(j);
String xml =
"<iq " +
"to='" + romeo + "' " +
"from='" + romeo + "' " +
"id='" + j.getStanzaId() + "' " +
"type='error'>" +
"<error type='cancel'>" +
"<service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" +
"</error>" +
"</iq>";
assertXMLEqual(xml, error.toXML().toString());
}
@Test
public void createErrorOutOfOrderTest() throws IOException, SAXException {
Jingle j = defaultJingle(romeo, "yourfatheriam");
IQ error = jutil.createErrorOutOfOrder(j);
String xml =
"<iq " +
"to='" + romeo + "' " +
"from='" + romeo + "' " +
"id='" + j.getStanzaId() + "' " +
"type='error'>" +
"<error type='cancel'>" +
"<unexpected-result xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" +
"</error>" +
"</iq>";
assertXMLEqual(xml, error.toXML().toString());
}
private String getIQXML(FullJid from, FullJid to, String stanzaId, String jingleXML) { private String getIQXML(FullJid from, FullJid to, String stanzaId, String jingleXML) {
return "<iq from='" + from + "' id='" + stanzaId + "' to='" + to + "' type='set'>" + return "<iq from='" + from + "' id='" + stanzaId + "' to='" + to + "' type='set'>" +
jingleXML + jingleXML +