Priya (Callee)Signaling ServerNaomi (Caller)Receives the candidate and sends it to Priya's client through the signaling server as a “new-ice-candidate” messagehandleICECandidateEvent()Generate an ICE candidate represented by an SDP stringEvent: icecandidateReceive “new-ice-candidate” message and forward it to Priyaon.message()Message: “new-ice-candidate”Message: “new-ice-candidate”1.Create an RTCIceCandidate object using the SDP provided in the candidate.2.Deliver the candidate to Priya's ICE layer by passing it to RTCPeerConnection.addIceCandidate()handleNewIceCandidateMsg()Receives the candidate and sends it to Naomi's client through the signaling server as a “new-ice-candidate” messagehandleICECandidateEvent()Generate an ICE candidate represented by an SDP stringEvent: icecandidateReceive “new-ice-candidate” message and forward it to Naomion.message()Message: “new-ice-candidate”Message: “new-ice-candidate”1.Create an RTCIceCandidate object using the SDP provided in the candidate.2.Deliver the candidate to Naomi's ICE layer by passing it to RTCPeerConnection.addIceCandidate()handleNewIceCandidateMsg()Web AppWeb BrowserWeb BrowserWeb AppProcess repeats until both ICE layers agree on a candidate.