diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java b/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java index 13bb5f2f7..9f2a90f85 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java @@ -298,7 +298,8 @@ public class PeerConnectionWrapper { } DataChannel statusDataChannel = dataChannels.get("status"); - if (statusDataChannel == null || statusDataChannel.state() != DataChannel.State.OPEN) { + if (statusDataChannel == null || statusDataChannel.state() != DataChannel.State.OPEN || + !pendingDataChannelMessages.isEmpty()) { Log.d(TAG, "Queuing data channel message (" + dataChannelMessage + ") " + sessionId); pendingDataChannelMessages.add(dataChannelMessage); @@ -306,6 +307,10 @@ public class PeerConnectionWrapper { return; } + sendWithoutQueuing(statusDataChannel, dataChannelMessage); + } + + private void sendWithoutQueuing(DataChannel statusDataChannel, DataChannelMessage dataChannelMessage) { try { Log.d(TAG, "Sending data channel message (" + dataChannelMessage + ") " + sessionId); @@ -423,7 +428,7 @@ public class PeerConnectionWrapper { if (dataChannel.state() == DataChannel.State.OPEN && "status".equals(dataChannelLabel)) { for (DataChannelMessage dataChannelMessage : pendingDataChannelMessages) { - send(dataChannelMessage); + sendWithoutQueuing(dataChannel, dataChannelMessage); } pendingDataChannelMessages.clear(); } diff --git a/app/src/test/java/com/nextcloud/talk/webrtc/PeerConnectionWrapperTest.kt b/app/src/test/java/com/nextcloud/talk/webrtc/PeerConnectionWrapperTest.kt index f4f7e6443..b6dd40962 100644 --- a/app/src/test/java/com/nextcloud/talk/webrtc/PeerConnectionWrapperTest.kt +++ b/app/src/test/java/com/nextcloud/talk/webrtc/PeerConnectionWrapperTest.kt @@ -23,6 +23,7 @@ import org.mockito.Mockito.atLeast import org.mockito.Mockito.atMostOnce import org.mockito.Mockito.doAnswer import org.mockito.Mockito.doNothing +import org.mockito.Mockito.inOrder import org.mockito.Mockito.never import org.mockito.invocation.InvocationOnMock import org.mockito.stubbing.Answer @@ -288,8 +289,10 @@ class PeerConnectionWrapperTest { throw exceptionOnStateChange!! } + val inOrder = inOrder(mockedStatusDataChannel) + for (j in 1..dataChannelMessageCount) { - Mockito.verify(mockedStatusDataChannel).send( + inOrder.verify(mockedStatusDataChannel).send( argThat(MatchesDataChannelMessage(DataChannelMessage("the-message-type-$j"))) ) }