Skip to content

Commit a72a4fe

Browse files
authored
Merge pull request #1113 from webrtcHacks/relayProtocol
chrome/safari: shim RTCIceCandidate.relayProtocol
2 parents 01d2b81 + e50a0af commit a72a4fe

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/js/adapter_factory.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export function adapterFactory({window} = {}, options = {
6565
chromeShim.fixNegotiationNeeded(window, browserDetails);
6666

6767
commonShim.shimRTCIceCandidate(window, browserDetails);
68+
commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);
6869
commonShim.shimConnectionState(window, browserDetails);
6970
commonShim.shimMaxMessageSize(window, browserDetails);
7071
commonShim.shimSendThrowTypeError(window, browserDetails);
@@ -124,6 +125,7 @@ export function adapterFactory({window} = {}, options = {
124125
safariShim.shimAudioContext(window, browserDetails);
125126

126127
commonShim.shimRTCIceCandidate(window, browserDetails);
128+
commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);
127129
commonShim.shimMaxMessageSize(window, browserDetails);
128130
commonShim.shimSendThrowTypeError(window, browserDetails);
129131
commonShim.removeExtmapAllowMixed(window, browserDetails);

src/js/common_shim.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,31 @@ export function shimRTCIceCandidate(window) {
6363
});
6464
}
6565

66+
export function shimRTCIceCandidateRelayProtocol(window) {
67+
if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'relayProtocol' in
68+
window.RTCIceCandidate.prototype)) {
69+
return;
70+
}
71+
72+
// Hook up the augmented candidate in onicecandidate and
73+
// addEventListener('icecandidate', ...)
74+
utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {
75+
if (e.candidate) {
76+
const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);
77+
if (parsedCandidate.type === 'relay') {
78+
// This is a libwebrtc-specific mapping of local type preference
79+
// to relayProtocol.
80+
e.candidate.relayProtocol = {
81+
0: 'tls',
82+
1: 'tcp',
83+
2: 'udp',
84+
}[parsedCandidate.priority >> 24];
85+
}
86+
}
87+
return e;
88+
});
89+
}
90+
6691
export function shimMaxMessageSize(window, browserDetails) {
6792
if (!window.RTCPeerConnection) {
6893
return;

0 commit comments

Comments
 (0)