Stringify WebRTC candidate/sdp payloads

This commit is contained in:
Noah 2023-02-24 17:42:38 -08:00
parent ac55fc2c50
commit 4397006186
2 changed files with 17 additions and 6 deletions

View File

@ -20,8 +20,8 @@ type Message struct {
OpenSecret string `json:"openSecret,omitempty"` OpenSecret string `json:"openSecret,omitempty"`
// Parameters sent on WebRTC signaling messages. // Parameters sent on WebRTC signaling messages.
Candidate map[string]interface{} `json:"candidate,omitempty"` // candidate Candidate string `json:"candidate,omitempty"` // candidate
Description map[string]interface{} `json:"description,omitempty"` // sdp Description string `json:"description,omitempty"` // sdp
} }
const ( const (

View File

@ -545,7 +545,7 @@ const app = Vue.createApp({
this.ws.conn.send(JSON.stringify({ this.ws.conn.send(JSON.stringify({
action: "candidate", action: "candidate",
username: username, username: username,
candidate: event.candidate, candidate: JSON.stringify(event.candidate),
})); }));
} }
}; };
@ -609,7 +609,7 @@ const app = Vue.createApp({
this.ws.conn.send(JSON.stringify({ this.ws.conn.send(JSON.stringify({
action: "sdp", action: "sdp",
username: username, username: username,
description: pc.localDescription, description: JSON.stringify(pc.localDescription),
})); }));
}, },
console.error, console.error,
@ -624,10 +624,16 @@ const app = Vue.createApp({
} }
let pc = this.WebRTC.pc[msg.username].connecting; let pc = this.WebRTC.pc[msg.username].connecting;
// XX: WebRTC candidate/SDP messages JSON stringify their inner payload so that the
// Go back-end server won't re-order their json keys (Safari on Mac OS is very sensitive
// to the keys being re-ordered during the handshake, in ways that NO OTHER BROWSER cares
// about at all). Re-parse the JSON stringified object here.
let candidate = JSON.parse(msg.candidate);
// Add the new ICE candidate. // Add the new ICE candidate.
pc.addIceCandidate( pc.addIceCandidate(
new RTCIceCandidate( new RTCIceCandidate(
msg.candidate, candidate,
() => { }, () => { },
console.error, console.error,
) )
@ -638,7 +644,12 @@ const app = Vue.createApp({
return; return;
} }
let pc = this.WebRTC.pc[msg.username].connecting; let pc = this.WebRTC.pc[msg.username].connecting;
let message = msg.description;
// XX: WebRTC candidate/SDP messages JSON stringify their inner payload so that the
// Go back-end server won't re-order their json keys (Safari on Mac OS is very sensitive
// to the keys being re-ordered during the handshake, in ways that NO OTHER BROWSER cares
// about at all). Re-parse the JSON stringified object here.
let message = JSON.parse(msg.description);
// Add the new ICE candidate. // Add the new ICE candidate.
// this.ChatClient(`Received a Remote Description from ${msg.username}: ${JSON.stringify(msg.description)}.`); // this.ChatClient(`Received a Remote Description from ${msg.username}: ${JSON.stringify(msg.description)}.`);