Inject API version into signaling API calls

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2021-05-04 06:44:06 +02:00
parent f0eb3fec37
commit cf23a3d87d
No known key found for this signature in database
GPG Key ID: 7076EA9751AACDDA
4 changed files with 78 additions and 26 deletions

View File

@ -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())

View File

@ -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<SignalingSettingsOverall>() {
@Override
public void onSubscribe(Disposable d) {

View File

@ -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";
}

View File

@ -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<Long, MagicWebSocketInstance> 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());