diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java index d49aa96e0..36459494f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -1104,7 +1104,14 @@ public class CallController extends BaseController { } private void fetchSignalingSettings() { - ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(baseUrl)) + Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(apiVersion, baseUrl)) .subscribeOn(Schedulers.io()) .retry(3) .observeOn(AndroidSchedulers.mainThread()) @@ -1369,7 +1376,15 @@ public class CallController extends BaseController { } if (!hasExternalSignalingServer) { - ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(baseUrl, urlToken)) + Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, + baseUrl, urlToken)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .repeatWhen(observable -> observable) @@ -2086,7 +2101,14 @@ public class CallController extends BaseController { urlToken = roomToken; } - ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(baseUrl, urlToken), + Integer apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return; + } + + ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, urlToken), strings.toString()) .retry(3) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java index 7bf50c724..a4a1be146 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java @@ -81,8 +81,16 @@ public class SignalingSettingsWorker extends Worker { for (int i = 0; i < userEntityList.size(); i++) { userEntity = userEntityList.get(i); UserEntity finalUserEntity = userEntity; + + Integer apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + continue; + } + ncApi.getSignalingSettings(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()), - ApiUtils.getUrlForSignalingSettings(userEntity.getBaseUrl())) + ApiUtils.getUrlForSignalingSettings(apiVersion, userEntity.getBaseUrl())) .blockingSubscribe(new Observer() { @Override public void onSubscribe(Disposable d) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index 6e45d34b1..5846b7fd7 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -140,6 +140,20 @@ public class ApiUtils { return null; } + public static Integer getSignalingApiVersion(UserEntity capabilities, int[] versions) { + for (int version : versions) { + if (version == 2 && capabilities.hasSpreedFeatureCapability("sip-support")) { + return version; + } + + if (version == 1) { + // Has no capability, we just assume it is always there for now. + return version; + } + } + return null; + } + protected static String getUrlForApi(int version, String baseUrl) { return baseUrl + spreedApiBase + version; } @@ -200,6 +214,22 @@ public class ApiUtils { return getUrlForApi(version, baseUrl) + "/call/" + token; } + public static String getUrlForSignaling(int version, String baseUrl) { + return getUrlForApi(version, baseUrl) + "/signaling"; + } + + public static String getUrlForSignalingBackend(int version, String baseUrl) { + return getUrlForSignaling(version, baseUrl) + "/backend"; + } + + public static String getUrlForSignalingSettings(int version, String baseUrl) { + return getUrlForSignaling(version, baseUrl) + "/settings"; + } + + public static String getUrlForSignaling(int version, String baseUrl, String token) { + return getUrlForSignaling(version, baseUrl) + "/" + token; + } + public static RetrofitBucket getRetrofitBucketForCreateRoom(int version, String baseUrl, String roomType, @Nullable String invite, @Nullable String conversationName) { @@ -260,32 +290,11 @@ public class ApiUtils { return baseUrl + ocsApiVersion + spreedApiVersion + "/chat/" + token; } - public static String getUrlForExternalServerAuthBackend(String baseUrl) { - // FIXME Introduce API version - return getUrlForSignaling(baseUrl, null) + "/backend"; - } - public static String getUrlForMentionSuggestions(String baseUrl, String token) { // FIXME Introduce API version return getUrlForChat(baseUrl, token) + "/mentions"; } - public static String getUrlForSignaling(String baseUrl, @Nullable String token) { - // FIXME Introduce API version - String signalingUrl = baseUrl + ocsApiVersion + spreedApiVersion + "/signaling"; - if (token == null) { - return signalingUrl; - } else { - return signalingUrl + "/" + token; - } - } - - public static String getUrlForSignalingSettings(String baseUrl) { - // FIXME Introduce API version - return getUrlForSignaling(baseUrl, null) + "/settings"; - } - - public static String getUrlForUserProfile(String baseUrl) { return baseUrl + ocsApiVersion + "/cloud/user"; } 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 40f8d0ee7..b26deab5e 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -20,6 +20,9 @@ package com.nextcloud.talk.webrtc; +import android.annotation.SuppressLint; +import android.util.Log; + import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.UserEntity; @@ -34,6 +37,8 @@ import java.util.Map; @AutoInjector(NextcloudTalkApplication.class) public class WebSocketConnectionHelper { + private static final String TAG = "WebSocketConnectionHelper"; + private static Map magicWebSocketInstanceMap = new HashMap<>(); @Inject @@ -87,13 +92,21 @@ public class WebSocketConnectionHelper { } } + @SuppressLint("LongLogTag") HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { + Integer apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {2, 1}); + + if (apiVersion == null) { + Log.e(TAG, "No supported API version found", new Exception("No supported API version found")); + return null; + } + HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); helloOverallWebSocketMessage.setType("hello"); HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage(); helloWebSocketMessage.setVersion("1.0"); AuthWebSocketMessage authWebSocketMessage = new AuthWebSocketMessage(); - authWebSocketMessage.setUrl(ApiUtils.getUrlForExternalServerAuthBackend(userEntity.getBaseUrl())); + authWebSocketMessage.setUrl(ApiUtils.getUrlForSignalingBackend(apiVersion, userEntity.getBaseUrl())); AuthParametersWebSocketMessage authParametersWebSocketMessage = new AuthParametersWebSocketMessage(); authParametersWebSocketMessage.setTicket(ticket); authParametersWebSocketMessage.setUserid(userEntity.getUserId());