incude human readable text in some session-terminates

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleFileTransferConnection.java |  2 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java          | 13 
src/main/java/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java         |  9 
3 files changed, 16 insertions(+), 8 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java 🔗

@@ -246,10 +246,10 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
         final SessionDescription sessionDescription;
         try {
             sessionDescription = SessionDescription.of(contentMap);
-        } catch (IllegalArgumentException e) {
+        } catch (final IllegalArgumentException e) {
             Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": unable convert offer from session-accept to SDP", e);
             webRTCWrapper.close();
-            sendSessionTerminate(Reason.FAILED_APPLICATION);
+            sendSessionTerminate(Reason.FAILED_APPLICATION, e.getMessage());
             return;
         }
         org.webrtc.SessionDescription answer = new org.webrtc.SessionDescription(
@@ -276,8 +276,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
         } catch (final IllegalArgumentException e) {
             Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": unable convert offer from session-initiate to SDP", e);
             webRTCWrapper.close();
-            sendSessionTerminate(Reason.FAILED_APPLICATION);
-            ;
+            sendSessionTerminate(Reason.FAILED_APPLICATION, e.getMessage());
             return;
         }
         sendSessionAccept(offer);
@@ -470,10 +469,14 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
     }
 
     private void sendSessionTerminate(final Reason reason) {
+        sendSessionTerminate(reason, null);
+    }
+
+    private void sendSessionTerminate(final Reason reason, final String text) {
         final State target = reasonToState(reason);
         transitionOrThrow(target);
         final JinglePacket jinglePacket = new JinglePacket(JinglePacket.Action.SESSION_TERMINATE, id.sessionId);
-        jinglePacket.setReason(reason);
+        jinglePacket.setReason(reason, text);
         send(jinglePacket);
         Log.d(Config.LOGTAG, jinglePacket.toString());
         jingleConnectionManager.finishConnection(this);

src/main/java/eu/siacs/conversations/xmpp/jingle/stanzas/JinglePacket.java 🔗

@@ -4,6 +4,7 @@ import android.support.annotation.NonNull;
 
 import com.google.common.base.CaseFormat;
 import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
 
 import java.util.Map;
@@ -81,9 +82,13 @@ public class JinglePacket extends IqPacket {
         return Reason.UNKNOWN;
     }
 
-    public void setReason(final Reason reason) {
+    public void setReason(final Reason reason, final String text) {
         final Element jingle = findChild("jingle", Namespace.JINGLE);
-        jingle.addChild("reason").addChild(reason.toString());
+        final Element reasonElement = jingle.addChild("reason");
+        reasonElement.addChild(reason.toString());
+        if (!Strings.isNullOrEmpty(text)) {
+            reasonElement.addChild("text").setContent(text);
+        }
     }
 
     //RECOMMENDED for session-initiate, NOT RECOMMENDED otherwise