From 8f3a3570e9e85d8803ae11522be6f3fec80c950c Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 13 Jul 2023 13:32:43 +0200 Subject: [PATCH 1/6] Add logging for websockets Signed-off-by: Marcel Hibbe --- .../com/nextcloud/talk/activities/CallActivity.java | 2 +- .../java/com/nextcloud/talk/chat/ChatActivity.kt | 2 +- .../talk/jobs/WebsocketConnectionsWorker.java | 12 +++++++++++- .../singletons/ApplicationWideCurrentRoomHolder.java | 5 +++++ .../talk/webrtc/WebSocketConnectionHelper.java | 2 ++ .../com/nextcloud/talk/webrtc/WebSocketInstance.kt | 1 + 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index e56cb7db8..fc402088e 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -1989,7 +1989,7 @@ public class CallActivity extends CallBaseActivity { @Override public void onError(@io.reactivex.annotations.NonNull Throwable e) { - // unused atm + Log.e(TAG, "Error while leaving the call", e); } @Override diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 984abb5bc..b095b92b9 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2216,7 +2216,7 @@ class ChatActivity : Log.d(TAG, "not leaving room (validSessionId is false)") } } else { - Log.e(TAG, "not leaving room...") + Log.d(TAG, "not leaving room...") } if (mentionAutocomplete != null && mentionAutocomplete!!.isPopupShowing) { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java index b980a1783..d500657d1 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java @@ -23,6 +23,7 @@ package com.nextcloud.talk.jobs; import android.annotation.SuppressLint; import android.content.Context; import android.text.TextUtils; +import android.util.Log; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.data.user.model.User; @@ -41,6 +42,8 @@ import autodagger.AutoInjector; @AutoInjector(NextcloudTalkApplication.class) public class WebsocketConnectionsWorker extends Worker { + public static final String TAG = "WebsocketConnectionsWorker"; + @Inject UserManager userManager; @@ -52,6 +55,8 @@ public class WebsocketConnectionsWorker extends Worker { @NonNull @Override public Result doWork() { + Log.d(TAG, "WebsocketConnectionsWorker started "); + NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); List users = userManager.getUsers().blockingGet(); @@ -61,9 +66,14 @@ public class WebsocketConnectionsWorker extends Worker { user.getExternalSignalingServer().getExternalSignalingServer() != null && !TextUtils.isEmpty(user.getExternalSignalingServer().getExternalSignalingServer()) && !TextUtils.isEmpty(user.getExternalSignalingServer().getExternalSignalingTicket())) { + + Log.d(TAG, + "WebsocketConnectionsWorker - getExternalSignalingInstanceForServer for user " + user.getDisplayName()); + webSocketConnectionHelper.getExternalSignalingInstanceForServer( user.getExternalSignalingServer().getExternalSignalingServer(), - user, user.getExternalSignalingServer().getExternalSignalingTicket(), + user, + user.getExternalSignalingServer().getExternalSignalingTicket(), false); } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java index 3383681bc..ae3d34725 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java +++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java @@ -20,9 +20,13 @@ package com.nextcloud.talk.utils.singletons; +import android.util.Log; + import com.nextcloud.talk.data.user.model.User; public class ApplicationWideCurrentRoomHolder { + + public static final String TAG = "ApplicationWideCurrentRoomHolder"; private static final ApplicationWideCurrentRoomHolder holder = new ApplicationWideCurrentRoomHolder(); private String currentRoomId = ""; private String currentRoomToken = ""; @@ -36,6 +40,7 @@ public class ApplicationWideCurrentRoomHolder { } public void clear() { + Log.d(TAG, "ApplicationWideCurrentRoomHolder was cleared"); currentRoomId = ""; userInRoom = new User(); inCall = false; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index 1a49a1ee4..6d4f4e3d1 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -84,12 +84,14 @@ public class WebSocketConnectionHelper { WebSocketInstance webSocketInstance; if (userId != -1 && webSocketInstanceMap.containsKey(user.getId()) && (webSocketInstance = webSocketInstanceMap.get(user.getId())) != null) { + Log.d(TAG, "webSocketInstanceMap already contained webSocketInstance for userId " + user.getId()); return webSocketInstance; } else { if (userId == -1) { deleteExternalSignalingInstanceForUserEntity(userId); } webSocketInstance = new WebSocketInstance(user, generatedURL, webSocketTicket); + Log.d(TAG, "created new webSocketInstance for userId " + user.getId()); webSocketInstanceMap.put(user.getId(), webSocketInstance); return webSocketInstance; } diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt index b50859f7c..5964ba97f 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt @@ -125,6 +125,7 @@ class WebSocketInstance internal constructor( } override fun onOpen(webSocket: WebSocket, response: Response) { + Log.d(TAG, "Open webSocket") internalWebSocket = webSocket sendHello() } From 129606327e5f57c52e65a58ec294104e62606b82 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 13 Jul 2023 14:00:13 +0200 Subject: [PATCH 2/6] set isConnected to false when websocket connection has been released Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/webrtc/WebSocketInstance.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt index 5964ba97f..3911b8209 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt @@ -358,7 +358,12 @@ class WebSocketInstance internal constructor( } override fun onClosing(webSocket: WebSocket, code: Int, reason: String) { - Log.d(TAG, "Closing : $code / $reason") + Log.d(TAG, "onClosing : $code / $reason") + } + + override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { + Log.d(TAG, "onClosed : $code / $reason") + isConnected = false } override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { From d450ae7897658b13521b07b504e32481aba398ac Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 13 Jul 2023 15:03:08 +0200 Subject: [PATCH 3/6] fix error message Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index 3d6e5dc4c..5ab69fb67 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -100,7 +100,7 @@ class ChatViewModel @Inject constructor(private val repository: ChatRepository) } override fun onError(e: Throwable) { - Log.e(TAG, "Error when fetching room") + Log.e(TAG, "Error when joining room") _joinRoomViewState.value = JoinRoomErrorState } From 89aacbae959f910115118662c9482ce9c56e8a05 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 13 Jul 2023 15:03:59 +0200 Subject: [PATCH 4/6] fix typo Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/webrtc/WebSocketInstance.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt index 3911b8209..17b1aabe1 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt @@ -335,16 +335,16 @@ class WebSocketInstance internal constructor( webSocket.send(messagesQueue[i]) } messagesQueue = ArrayList() - val helloHasHap = HashMap() + val helloHashMap = HashMap() if (!TextUtils.isEmpty(oldResumeId)) { - helloHasHap["oldResumeId"] = oldResumeId + helloHashMap["oldResumeId"] = oldResumeId } else { currentRoomToken = "" } if (!TextUtils.isEmpty(currentRoomToken)) { - helloHasHap[Globals.ROOM_TOKEN] = currentRoomToken + helloHashMap[Globals.ROOM_TOKEN] = currentRoomToken } - eventBus!!.post(WebSocketCommunicationEvent("hello", helloHasHap)) + eventBus!!.post(WebSocketCommunicationEvent("hello", helloHashMap)) } private fun sendRoomJoinedEvent() { From b0565f5149497cf247cc7512f50a1a6a34d50588 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 13 Jul 2023 16:00:59 +0200 Subject: [PATCH 5/6] check that session is the same before joining room locally without to send websocket message Signed-off-by: Marcel Hibbe --- .../talk/webrtc/WebSocketInstance.kt | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt index 17b1aabe1..bbd5e428d 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt @@ -84,6 +84,7 @@ class WebSocketInstance internal constructor( private var internalWebSocket: WebSocket? = null private val connectionUrl: String private var currentRoomToken: String? = null + private var currentNormalBackendSession: String? = null private var reconnecting = false private val usersHashMap: HashMap private var messagesQueue: MutableList = ArrayList() @@ -169,6 +170,7 @@ class WebSocketInstance internal constructor( isConnected = false resumeId = "" } + else -> {} } } else { @@ -214,8 +216,10 @@ class WebSocketInstance internal constructor( } signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap) } + Globals.TARGET_PARTICIPANTS -> signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap) + else -> Log.i(TAG, "Received unknown/ignored event target: $target") } @@ -292,10 +296,7 @@ class WebSocketInstance internal constructor( val (_, roomWebSocketMessage) = LoganSquare.parse(text, JoinedRoomOverallWebSocketMessage::class.java) if (roomWebSocketMessage != null) { currentRoomToken = roomWebSocketMessage.roomId - if ( - roomWebSocketMessage.roomPropertiesWebSocketMessage != null && - !TextUtils.isEmpty(currentRoomToken) - ) { + if (roomWebSocketMessage.roomPropertiesWebSocketMessage != null && !TextUtils.isEmpty(currentRoomToken)) { sendRoomJoinedEvent() } } @@ -310,6 +311,7 @@ class WebSocketInstance internal constructor( Log.d(TAG, "WebSocket " + webSocket.hashCode() + " resumeID " + resumeId + " expired") resumeId = "" currentRoomToken = "" + currentNormalBackendSession = "" restartWebSocket() } else if ("hello_expected" == message.code) { restartWebSocket() @@ -340,6 +342,7 @@ class WebSocketInstance internal constructor( helloHashMap["oldResumeId"] = oldResumeId } else { currentRoomToken = "" + currentNormalBackendSession = "" } if (!TextUtils.isEmpty(currentRoomToken)) { helloHashMap[Globals.ROOM_TOKEN] = currentRoomToken @@ -386,9 +389,16 @@ class WebSocketInstance internal constructor( if (!isConnected || reconnecting) { messagesQueue.add(message) } else { - if (roomToken == currentRoomToken) { + if (roomToken == "") { + Log.d(TAG, "sending 'leave room' via websocket") + currentNormalBackendSession = "" + internalWebSocket!!.send(message) + } else if (roomToken == currentRoomToken && normalBackendSession == currentNormalBackendSession) { + Log.d(TAG, "roomToken&session are unchanged. Joining locally without to send websocket message") sendRoomJoinedEvent() } else { + Log.d(TAG, "Sending join room message via websocket") + currentNormalBackendSession = normalBackendSession internalWebSocket!!.send(message) } } From e6a95d71903a16dadcbe16d71f8d6a839136286a Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 13 Jul 2023 16:02:55 +0200 Subject: [PATCH 6/6] fix typo in sessionId Signed-off-by: Marcel Hibbe --- .../talk/models/json/websocket/RoomWebSocketMessage.kt | 2 +- .../com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.kt b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.kt index 17742bad8..a82a0fc51 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.kt @@ -32,7 +32,7 @@ class RoomWebSocketMessage( @JsonField(name = ["roomid"]) var roomId: String? = null, @JsonField(name = ["sessionid"]) - var sessiondId: String? = null, + var sessionId: String? = null, @JsonField(name = ["properties"]) var roomPropertiesWebSocketMessage: RoomPropertiesWebSocketMessage? = null ) : Parcelable { diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index 6d4f4e3d1..43f4ef64a 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -142,7 +142,7 @@ public class WebSocketConnectionHelper { roomOverallWebSocketMessage.setType("room"); RoomWebSocketMessage roomWebSocketMessage = new RoomWebSocketMessage(); roomWebSocketMessage.setRoomId(roomId); - roomWebSocketMessage.setSessiondId(sessionId); + roomWebSocketMessage.setSessionId(sessionId); roomOverallWebSocketMessage.setRoomWebSocketMessage(roomWebSocketMessage); return roomOverallWebSocketMessage; }