Refactor WebSocket message interfaces
Changes:
- Replace AccountTextMessage with an extendable ContactMessage interface
- Add accountId parameter to server-side WebSocket callbacks
- Set the accountId for WebRTC messages on server-side for security
- Rename all WebRTC and SDP variables to proper camelCase or PascalCase
GitLab: #147
Change-Id: I125b5431821b03ef4d46b751eb1c13830017ccff
diff --git a/client/src/contexts/CallProvider.tsx b/client/src/contexts/CallProvider.tsx
index 0cc667a..a17e738 100644
--- a/client/src/contexts/CallProvider.tsx
+++ b/client/src/contexts/CallProvider.tsx
@@ -15,16 +15,15 @@
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
-import { AccountTextMessage, WebSocketMessageType } from 'jami-web-common';
-import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
+import { CallAction, WebSocketMessageType } from 'jami-web-common';
+import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
import { Navigate } from 'react-router-dom';
import { useUrlParams } from '../hooks/useUrlParams';
import { CallRouteParams } from '../router';
import { WithChildren } from '../utils/utils';
-import { useAuthContext } from './AuthProvider';
import { ConversationContext } from './ConversationProvider';
-import { WebRTCContext } from './WebRTCProvider';
+import { WebRtcContext } from './WebRtcProvider';
import { WebSocketContext } from './WebSocketProvider';
export type CallRole = 'caller' | 'receiver';
@@ -77,10 +76,9 @@
const {
queryParams: { role: callRole },
} = useUrlParams<CallRouteParams>();
- const { account } = useAuthContext();
const webSocket = useContext(WebSocketContext);
- const { webRTCConnection, remoteStreams, sendWebRTCOffer, isConnected } = useContext(WebRTCContext);
- const { conversation } = useContext(ConversationContext);
+ const { webRtcConnection, remoteStreams, sendWebRtcOffer, isConnected } = useContext(WebRtcContext);
+ const { conversationId, conversation } = useContext(ConversationContext);
const [mediaDevices, setMediaDevices] = useState<Record<MediaDeviceKind, MediaDeviceInfo[]>>(
defaultCallContext.mediaDevices
@@ -135,12 +133,12 @@
}, [setLocalStream]);
useEffect(() => {
- if (localStream && webRTCConnection) {
+ if (localStream && webRtcConnection) {
for (const track of localStream.getTracks()) {
- webRTCConnection.addTrack(track, localStream);
+ webRtcConnection.addTrack(track, localStream);
}
}
- }, [localStream, webRTCConnection]);
+ }, [localStream, webRtcConnection]);
const setAudioStatus = useCallback(
(isOn: boolean) => {
@@ -173,22 +171,22 @@
);
useEffect(() => {
- if (!webSocket || !webRTCConnection) {
+ if (!webSocket || !webRtcConnection) {
return;
}
if (callRole === 'caller' && callStatus === CallStatus.Ringing) {
- const callAcceptListener = (data: AccountTextMessage<undefined>) => {
- console.info('Received event on CallAccept', data);
+ const callAcceptListener = (_data: CallAction) => {
+ console.info('Received event on CallAccept');
setCallStatus(CallStatus.Connecting);
- webRTCConnection
+ webRtcConnection
.createOffer({
offerToReceiveAudio: true,
offerToReceiveVideo: true,
})
- .then((offerSDP) => {
- sendWebRTCOffer(offerSDP);
+ .then((sdp) => {
+ sendWebRtcOffer(sdp);
});
};
@@ -198,7 +196,7 @@
webSocket.unbind(WebSocketMessageType.CallAccept, callAcceptListener);
};
}
- }, [callRole, webSocket, webRTCConnection, sendWebRTCOffer, callStatus]);
+ }, [callRole, webSocket, webRtcConnection, sendWebRtcOffer, callStatus]);
useEffect(() => {
if (callStatus === CallStatus.Connecting && isConnected) {
@@ -212,16 +210,15 @@
throw new Error('Could not accept call');
}
- const callAccept = {
- from: account.getId(),
- to: contactUri,
- message: undefined,
+ const callAccept: CallAction = {
+ contactId: contactUri,
+ conversationId,
};
console.info('Sending CallAccept', callAccept);
webSocket.send(WebSocketMessageType.CallAccept, callAccept);
setCallStatus(CallStatus.Connecting);
- }, [webSocket, account, contactUri]);
+ }, [webSocket, contactUri, conversationId]);
if (!callRole) {
console.error('Call role not defined. Redirecting...');