mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
Inject API version into signaling API calls
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
f0eb3fec37
commit
cf23a3d87d
@ -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())
|
||||
|
@ -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) {
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user