Merge pull request #1251 from nextcloud/bugfix/noid/use-the-stun-urls-array

Use the stun urls array
This commit is contained in:
Andy Scherzinger 2021-05-20 12:32:33 +02:00 committed by GitHub
commit b2c53d5385
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 139 additions and 114 deletions

View File

@ -445,12 +445,12 @@ public class CallController extends BaseController {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RoomsOverall>() { .subscribe(new Observer<RoomsOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
// unused atm
} }
@Override @Override
public void onNext(RoomsOverall roomsOverall) { public void onNext(@io.reactivex.annotations.NonNull RoomsOverall roomsOverall) {
for (Conversation conversation : roomsOverall.getOcs().getData()) { for (Conversation conversation : roomsOverall.getOcs().getData()) {
if (roomId.equals(conversation.getRoomId())) { if (roomId.equals(conversation.getRoomId())) {
roomToken = conversation.getToken(); roomToken = conversation.getToken();
@ -462,13 +462,13 @@ public class CallController extends BaseController {
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
// unused atm
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} }
@ -500,7 +500,6 @@ public class CallController extends BaseController {
pipVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT); pipVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
pipVideoView.setOnTouchListener(new SelfVideoTouchListener()); pipVideoView.setOnTouchListener(new SelfVideoTouchListener());
} }
gridView.setOnTouchListener(new View.OnTouchListener() { gridView.setOnTouchListener(new View.OnTouchListener() {
@ -942,17 +941,16 @@ public class CallController extends BaseController {
} }
} }
if (isConnectionEstablished()) { if (isConnectionEstablished() && magicPeerConnectionWrapperList != null) {
if (!hasMCU) { if (!hasMCU) {
for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) { for (MagicPeerConnectionWrapper magicPeerConnectionWrapper : magicPeerConnectionWrapperList) {
magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message)); magicPeerConnectionWrapper.sendChannelData(new DataChannelMessage(message));
} }
} else { } else {
for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) { for (MagicPeerConnectionWrapper magicPeerConnectionWrapper : magicPeerConnectionWrapperList) {
if (magicPeerConnectionWrapperList.get(i).getSessionId().equals(webSocketClient.getSessionId())) { if (magicPeerConnectionWrapper.getSessionId().equals(webSocketClient.getSessionId())) {
magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message)); magicPeerConnectionWrapper.sendChannelData(new DataChannelMessage(message));
break; break;
} }
} }
} }
@ -1095,7 +1093,7 @@ public class CallController extends BaseController {
} }
private void fetchSignalingSettings() { private void fetchSignalingSettings() {
int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {ApiUtils.APIv3, 2, 1});
ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(apiVersion, baseUrl)) ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(apiVersion, baseUrl))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@ -1103,13 +1101,12 @@ public class CallController extends BaseController {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<SignalingSettingsOverall>() { .subscribe(new Observer<SignalingSettingsOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
// unused atm
} }
@Override @Override
public void onNext(SignalingSettingsOverall signalingSettingsOverall) { public void onNext(@io.reactivex.annotations.NonNull SignalingSettingsOverall signalingSettingsOverall) {
IceServer iceServer;
if (signalingSettingsOverall != null && signalingSettingsOverall.getOcs() != null && if (signalingSettingsOverall != null && signalingSettingsOverall.getOcs() != null &&
signalingSettingsOverall.getOcs().getSettings() != null) { signalingSettingsOverall.getOcs().getSettings() != null) {
@ -1143,30 +1140,34 @@ public class CallController extends BaseController {
} }
if (signalingSettingsOverall.getOcs().getSettings().getStunServers() != null) { if (signalingSettingsOverall.getOcs().getSettings().getStunServers() != null) {
for (int i = 0; i < signalingSettingsOverall.getOcs().getSettings().getStunServers().size(); List<IceServer> stunServers =
i++) { signalingSettingsOverall.getOcs().getSettings().getStunServers();
iceServer = signalingSettingsOverall.getOcs().getSettings().getStunServers().get(i); if (apiVersion == ApiUtils.APIv3) {
if (TextUtils.isEmpty(iceServer.getUsername()) || TextUtils.isEmpty(iceServer for (IceServer stunServer : stunServers) {
.getCredential())) { if (stunServer.getUrls() != null) {
iceServers.add(new PeerConnection.IceServer(iceServer.getUrl())); for (String url : stunServer.getUrls()) {
} else { iceServers.add(new PeerConnection.IceServer(url));
iceServers.add(new PeerConnection.IceServer(iceServer.getUrl(), }
iceServer.getUsername(), iceServer.getCredential())); }
}
} else {
if (signalingSettingsOverall.getOcs().getSettings().getStunServers() != null) {
for (IceServer stunServer : stunServers) {
iceServers.add(new PeerConnection.IceServer(stunServer.getUrl()));
}
} }
} }
} }
if (signalingSettingsOverall.getOcs().getSettings().getTurnServers() != null) { if (signalingSettingsOverall.getOcs().getSettings().getTurnServers() != null) {
for (int i = 0; i < signalingSettingsOverall.getOcs().getSettings().getTurnServers().size(); List<IceServer> turnServers =
i++) { signalingSettingsOverall.getOcs().getSettings().getTurnServers();
iceServer = signalingSettingsOverall.getOcs().getSettings().getTurnServers().get(i); for (IceServer turnServer : turnServers) {
for (int j = 0; j < iceServer.getUrls().size(); j++) { if (turnServer.getUrls() != null) {
if (TextUtils.isEmpty(iceServer.getUsername()) || TextUtils.isEmpty(iceServer for (String url : turnServer.getUrls()) {
.getCredential())) { iceServers.add(new PeerConnection.IceServer(
iceServers.add(new PeerConnection.IceServer(iceServer.getUrls().get(j))); url, turnServer.getUsername(), turnServer.getCredential()
} else { ));
iceServers.add(new PeerConnection.IceServer(iceServer.getUrls().get(j),
iceServer.getUsername(), iceServer.getCredential()));
} }
} }
} }
@ -1177,13 +1178,13 @@ public class CallController extends BaseController {
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
Log.e(TAG, e.getMessage(), e); Log.e(TAG, e.getMessage(), e);
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} }
@ -1195,12 +1196,12 @@ public class CallController extends BaseController {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<CapabilitiesOverall>() { .subscribe(new Observer<CapabilitiesOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
// unused atm
} }
@Override @Override
public void onNext(CapabilitiesOverall capabilitiesOverall) { public void onNext(@io.reactivex.annotations.NonNull CapabilitiesOverall capabilitiesOverall) {
// FIXME check for compatible Call API version // FIXME check for compatible Call API version
if (hasExternalSignalingServer) { if (hasExternalSignalingServer) {
setupAndInitiateWebSocketsConnection(); setupAndInitiateWebSocketsConnection();
@ -1210,13 +1211,13 @@ public class CallController extends BaseController {
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
// unused atm
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} }
@ -1234,12 +1235,12 @@ public class CallController extends BaseController {
.retry(3) .retry(3)
.subscribe(new Observer<RoomOverall>() { .subscribe(new Observer<RoomOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
// unused atm
} }
@Override @Override
public void onNext(RoomOverall roomOverall) { public void onNext(@io.reactivex.annotations.NonNull RoomOverall roomOverall) {
callSession = roomOverall.getOcs().getData().getSessionId(); callSession = roomOverall.getOcs().getData().getSessionId();
ApplicationWideCurrentRoomHolder.getInstance().setSession(callSession); ApplicationWideCurrentRoomHolder.getInstance().setSession(callSession);
ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(roomId); ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(roomId);
@ -1249,13 +1250,13 @@ public class CallController extends BaseController {
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
// unused atm
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} else { } else {
@ -1288,26 +1289,31 @@ public class CallController extends BaseController {
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<GenericOverall>() { .subscribe(new Observer<GenericOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
// unused atm
} }
@Override @Override
public void onNext(GenericOverall genericOverall) { public void onNext(@io.reactivex.annotations.NonNull GenericOverall genericOverall) {
if (!currentCallStatus.equals(CallStatus.LEAVING)) { if (!currentCallStatus.equals(CallStatus.LEAVING)) {
setCallState(CallStatus.JOINED); setCallState(CallStatus.JOINED);
ApplicationWideCurrentRoomHolder.getInstance().setInCall(true); ApplicationWideCurrentRoomHolder.getInstance().setInCall(true);
if (!TextUtils.isEmpty(roomToken)) { if (!TextUtils.isEmpty(roomToken)) {
NotificationUtils.INSTANCE.cancelExistingNotificationsForRoom(getApplicationContext(), conversationUser, roomToken); NotificationUtils.INSTANCE.cancelExistingNotificationsForRoom(getApplicationContext(),
conversationUser,
roomToken);
} }
if (!hasExternalSignalingServer) { if (!hasExternalSignalingServer) {
int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser,
new int[] {ApiUtils.APIv3, 2, 1});
ncApi.pullSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, ncApi.pullSignalingMessages(credentials,
baseUrl, roomToken)) ApiUtils.getUrlForSignaling(apiVersion,
baseUrl,
roomToken))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.repeatWhen(observable -> observable) .repeatWhen(observable -> observable)
@ -1315,26 +1321,19 @@ public class CallController extends BaseController {
.retry(3, observable -> isConnectionEstablished()) .retry(3, observable -> isConnectionEstablished())
.subscribe(new Observer<SignalingOverall>() { .subscribe(new Observer<SignalingOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
signalingDisposable = d; signalingDisposable = d;
} }
@Override @Override
public void onNext(SignalingOverall signalingOverall) { public void onNext(
if (signalingOverall.getOcs().getSignalings() != null) { @io.reactivex.annotations.NonNull
for (int i = 0; i < signalingOverall.getOcs().getSignalings().size(); i++) { SignalingOverall signalingOverall) {
try { receivedSignalingMessages(signalingOverall.getOcs().getSignalings());
receivedSignalingMessage(signalingOverall.getOcs().getSignalings().get(i));
} catch (IOException e) {
Log.e(TAG, "Failed to process received signaling" +
" message");
}
}
}
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
dispose(signalingDisposable); dispose(signalingDisposable);
} }
@ -1343,19 +1342,18 @@ public class CallController extends BaseController {
dispose(signalingDisposable); dispose(signalingDisposable);
} }
}); });
} }
} }
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
// unused atm
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} }
@ -1397,7 +1395,6 @@ public class CallController extends BaseController {
} else { } else {
initiateCall(); initiateCall();
} }
} else {
} }
break; break;
case "roomJoined": case "roomJoined":
@ -1409,14 +1406,19 @@ public class CallController extends BaseController {
break; break;
case "participantsUpdate": case "participantsUpdate":
if (webSocketCommunicationEvent.getHashMap().get("roomToken").equals(roomToken)) { if (webSocketCommunicationEvent.getHashMap().get("roomToken").equals(roomToken)) {
processUsersInRoom((List<HashMap<String, Object>>) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId")))); processUsersInRoom(
(List<HashMap<String, Object>>) webSocketClient
.getJobWithId(
Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
} }
break; break;
case "signalingMessage": case "signalingMessage":
processMessage((NCSignalingMessage) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId")))); processMessage((NCSignalingMessage) webSocketClient.getJobWithId(
Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
break; break;
case "peerReadyForRequestingOffer": case "peerReadyForRequestingOffer":
webSocketClient.requestOfferForSessionIdWithType(webSocketCommunicationEvent.getHashMap().get("sessionId"), "video"); webSocketClient.requestOfferForSessionIdWithType(
webSocketCommunicationEvent.getHashMap().get("sessionId"), "video");
break; break;
} }
} }
@ -1437,6 +1439,18 @@ public class CallController extends BaseController {
} }
} }
private void receivedSignalingMessages(@Nullable List<Signaling> signalingList) {
if (signalingList != null) {
for (Signaling signaling : signalingList) {
try {
receivedSignalingMessage(signaling);
} catch (IOException e) {
Log.e(TAG, "Failed to process received signaling message", e);
}
}
}
}
private void receivedSignalingMessage(Signaling signaling) throws IOException { private void receivedSignalingMessage(Signaling signaling) throws IOException {
String messageType = signaling.getType(); String messageType = signaling.getType();
@ -2000,7 +2014,7 @@ public class CallController extends BaseController {
String stringToSend = stringBuilder.toString(); String stringToSend = stringBuilder.toString();
strings.add(stringToSend); strings.add(stringToSend);
int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {2, 1}); int apiVersion = ApiUtils.getSignalingApiVersion(conversationUser, new int[] {ApiUtils.APIv3, 2, 1});
ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, roomToken), ncApi.sendSignalingMessages(credentials, ApiUtils.getUrlForSignaling(apiVersion, baseUrl, roomToken),
strings.toString()) strings.toString())
@ -2008,31 +2022,23 @@ public class CallController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribe(new Observer<SignalingOverall>() { .subscribe(new Observer<SignalingOverall>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
// unused atm
} }
@Override @Override
public void onNext(SignalingOverall signalingOverall) { public void onNext(@io.reactivex.annotations.NonNull SignalingOverall signalingOverall) {
if (signalingOverall.getOcs().getSignalings() != null) { receivedSignalingMessages(signalingOverall.getOcs().getSignalings());
for (int i = 0; i < signalingOverall.getOcs().getSignalings().size(); i++) {
try {
receivedSignalingMessage(signalingOverall.getOcs().getSignalings().get(i));
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
}
} }
@Override @Override
public void onError(Throwable e) { public void onError(@io.reactivex.annotations.NonNull Throwable e) {
Log.e(TAG, "", e); Log.e(TAG, "", e);
} }
@Override @Override
public void onComplete() { public void onComplete() {
// unused atm
} }
}); });
} else { } else {

View File

@ -385,8 +385,11 @@ public class CallNotificationController extends BaseController {
avatarImageView.setVisibility(View.VISIBLE); avatarImageView.setVisibility(View.VISIBLE);
ImageRequest imageRequest = ImageRequest imageRequest =
DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(userBeingCalled.getBaseUrl(), DisplayUtils.getImageRequestForUrl(
currentConversation.getName(), R.dimen.avatar_size_very_big), null); ApiUtils.getUrlForAvatarWithName(userBeingCalled.getBaseUrl(),
currentConversation.getName(),
R.dimen.avatar_size_very_big),
null);
ImagePipeline imagePipeline = Fresco.getImagePipeline(); ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, null); DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, null);
@ -399,11 +402,12 @@ public class CallNotificationController extends BaseController {
true); true);
if (getResources() != null) { if (getResources() != null) {
incomingTextRelativeLayout.setBackground(getResources().getDrawable(R.drawable incomingTextRelativeLayout.setBackground(
.incoming_gradient)); getResources().getDrawable(R.drawable.incoming_gradient));
} }
if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 || AvatarStatusCodeHolder.getInstance().getStatusCode() == 0) { if (AvatarStatusCodeHolder.getInstance().getStatusCode() == 200 ||
AvatarStatusCodeHolder.getInstance().getStatusCode() == 0) {
if (getActivity() != null) { if (getActivity() != null) {
Bitmap backgroundBitmap = bitmap.copy(bitmap.getConfig(), true); Bitmap backgroundBitmap = bitmap.copy(bitmap.getConfig(), true);
new BlurPostProcessor(5, getActivity()).process(backgroundBitmap); new BlurPostProcessor(5, getActivity()).process(backgroundBitmap);
@ -425,6 +429,7 @@ public class CallNotificationController extends BaseController {
@Override @Override
protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
// unused atm
} }
}, UiThreadImmediateExecutorService.getInstance()); }, UiThreadImmediateExecutorService.getInstance());
@ -467,10 +472,11 @@ public class CallNotificationController extends BaseController {
} }
private void dispose() { private void dispose() {
Disposable disposable; if (disposablesList != null) {
for (int i = 0; i < disposablesList.size(); i++) { for (Disposable disposable : disposablesList) {
if (!(disposable = disposablesList.get(i)).isDisposed()) { if (!disposable.isDisposed()) {
disposable.dispose(); disposable.dispose();
}
} }
} }
} }
@ -486,7 +492,8 @@ public class CallNotificationController extends BaseController {
"/raw/librem_by_feandesign_call"); "/raw/librem_by_feandesign_call");
} else { } else {
try { try {
RingtoneSettings ringtoneSettings = LoganSquare.parse(callRingtonePreferenceString, RingtoneSettings.class); RingtoneSettings ringtoneSettings = LoganSquare.parse(
callRingtonePreferenceString, RingtoneSettings.class);
ringtoneUri = ringtoneSettings.getRingtoneUri(); ringtoneUri = ringtoneSettings.getRingtoneUri();
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Failed to parse ringtone settings"); Log.e(TAG, "Failed to parse ringtone settings");
@ -501,8 +508,11 @@ public class CallNotificationController extends BaseController {
mediaPlayer.setDataSource(getActivity(), ringtoneUri); mediaPlayer.setDataSource(getActivity(), ringtoneUri);
mediaPlayer.setLooping(true); mediaPlayer.setLooping(true);
AudioAttributes audioAttributes = new AudioAttributes.Builder().setContentType(AudioAttributes AudioAttributes audioAttributes = new AudioAttributes
.CONTENT_TYPE_SONIFICATION).setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build(); .Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build();
mediaPlayer.setAudioAttributes(audioAttributes); mediaPlayer.setAudioAttributes(audioAttributes);
mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start()); mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start());

View File

@ -565,7 +565,7 @@ public class OperationsMenuController extends BaseController {
ApiUtils.getConversationApiVersion(currentUser, new int[] {ApiUtils.APIv4, 1}); ApiUtils.getConversationApiVersion(currentUser, new int[] {ApiUtils.APIv4, 1});
ApiUtils.getCallApiVersion(currentUser, new int[] {ApiUtils.APIv4, 1}); ApiUtils.getCallApiVersion(currentUser, new int[] {ApiUtils.APIv4, 1});
ApiUtils.getChatApiVersion(currentUser, new int[] {1}); ApiUtils.getChatApiVersion(currentUser, new int[] {1});
ApiUtils.getSignalingApiVersion(currentUser, new int[] {2, 1}); ApiUtils.getSignalingApiVersion(currentUser, new int[] {ApiUtils.APIv3, 2, 1});
} }
private void inviteUsersToAConversation() { private void inviteUsersToAConversation() {

View File

@ -90,7 +90,7 @@ public class SignalingSettingsWorker extends Worker {
userEntity = userEntityList.get(i); userEntity = userEntityList.get(i);
UserEntity finalUserEntity = userEntity; UserEntity finalUserEntity = userEntity;
int apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {2, 1}); int apiVersion = ApiUtils.getSignalingApiVersion(finalUserEntity, new int[] {ApiUtils.APIv3, 2, 1});
ncApi.getSignalingSettings(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()), ncApi.getSignalingSettings(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()),
ApiUtils.getUrlForSignalingSettings(apiVersion, userEntity.getBaseUrl())) ApiUtils.getUrlForSignalingSettings(apiVersion, userEntity.getBaseUrl()))

View File

@ -27,6 +27,7 @@ import java.util.List;
@JsonObject @JsonObject
public class IceServer { public class IceServer {
@Deprecated
@JsonField(name = "url") @JsonField(name = "url")
String url; String url;
@ -39,6 +40,7 @@ public class IceServer {
@JsonField(name = "credential") @JsonField(name = "credential")
String credential; String credential;
@Deprecated
public String getUrl() { public String getUrl() {
return this.url; return this.url;
} }

View File

@ -146,12 +146,19 @@ public class ApiUtils {
public static int getSignalingApiVersion(UserEntity capabilities, int[] versions) throws NoSupportedApiException { public static int getSignalingApiVersion(UserEntity capabilities, int[] versions) throws NoSupportedApiException {
for (int version : versions) { for (int version : versions) {
if (version == 2 && capabilities.hasSpreedFeatureCapability("sip-support")) { if (capabilities.hasSpreedFeatureCapability("signaling-v" + version)) {
return version; return version;
} }
if (version == 1) { if (version == 2 &&
// Has no capability, we just assume it is always there for now. capabilities.hasSpreedFeatureCapability("sip-support") &&
!capabilities.hasSpreedFeatureCapability("signaling-v3")) {
return version;
}
if (version == 1 &&
!capabilities.hasSpreedFeatureCapability("signaling-v3")) {
// Has no capability, we just assume it is always there when there is no v3 or later
return version; return version;
} }
} }

View File

@ -101,7 +101,7 @@ public class WebSocketConnectionHelper {
} }
HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) {
int apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {2, 1}); int apiVersion = ApiUtils.getSignalingApiVersion(userEntity, new int[] {ApiUtils.APIv3, 2, 1});
HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage();
helloOverallWebSocketMessage.setType("hello"); helloOverallWebSocketMessage.setType("hello");

View File

@ -1 +1 @@
465 458