jingle rtp: improve logging and error reporting

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/parser/AbstractParser.java               | 2 
src/main/java/eu/siacs/conversations/parser/MessageParser.java                | 3 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java | 4 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleRtpConnection.java     | 8 
4 files changed, 9 insertions(+), 8 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/parser/AbstractParser.java 🔗

@@ -126,7 +126,7 @@ public abstract class AbstractParser {
 		return user;
 	}
 
-	public static String extractErrorMessage(Element packet) {
+	public static String extractErrorMessage(final Element packet) {
 		final Element error = packet.findChild("error");
 		if (error != null && error.getChildren().size() > 0) {
 			final List<String> errorNames = orderedElementNames(error.getChildren());

src/main/java/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -327,7 +327,8 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
                 }
                 if (id.startsWith(JingleRtpConnection.JINGLE_MESSAGE_PROCEED_ID_PREFIX)) {
                     final String sessionId = id.substring(JingleRtpConnection.JINGLE_MESSAGE_PROCEED_ID_PREFIX.length());
-                    mXmppConnectionService.getJingleConnectionManager().failProceed(account, from, sessionId);
+                    final String message = extractErrorMessage(packet);
+                    mXmppConnectionService.getJingleConnectionManager().failProceed(account, from, sessionId, message);
                     return true;
                 }
                 mXmppConnectionService.markMessage(account,

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

@@ -908,12 +908,12 @@ public class JingleConnectionManager extends AbstractConnectionManager {
         }
     }
 
-    public void failProceed(Account account, final Jid with, String sessionId) {
+    public void failProceed(Account account, final Jid with, final String sessionId, final String message) {
         final AbstractJingleConnection.Id id =
                 AbstractJingleConnection.Id.of(account, with, sessionId);
         final AbstractJingleConnection existingJingleConnection = connections.get(id);
         if (existingJingleConnection instanceof JingleRtpConnection) {
-            ((JingleRtpConnection) existingJingleConnection).deliverFailedProceed();
+            ((JingleRtpConnection) existingJingleConnection).deliverFailedProceed(message);
         }
     }
 

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

@@ -797,7 +797,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
         } catch (final WebRTCWrapper.InitializationException e) {
             Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": unable to initialize WebRTC");
             webRTCWrapper.close();
-            sendSessionTerminate(Reason.FAILED_APPLICATION);
+            sendSessionTerminate(Reason.FAILED_APPLICATION, e.getMessage());
             return;
         }
         final org.webrtc.SessionDescription sdp =
@@ -928,10 +928,10 @@ public class JingleRtpConnection extends AbstractJingleConnection
         }
     }
 
-    void deliverFailedProceed() {
+    void deliverFailedProceed(final String message) {
         Log.d(
                 Config.LOGTAG,
-                id.account.getJid().asBareJid() + ": receive message error for proceed message");
+                id.account.getJid().asBareJid() + ": receive message error for proceed message ("+Strings.nullToEmpty(message)+")");
         if (transition(State.TERMINATED_CONNECTIVITY_ERROR)) {
             webRTCWrapper.close();
             Log.d(
@@ -1270,7 +1270,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
         webRTCWrapper.close();
         final Reason reason = Reason.ofThrowable(throwable);
         if (isInState(targetState)) {
-            sendSessionTerminate(reason);
+            sendSessionTerminate(reason, throwable.getMessage());
         } else {
             sendRetract(reason);
         }