spacebar/webrtc/src/opcodes/Identify.ts
Madeline d491bcd8be Discord.js gateway connection when connecting to voice will close 4002 decode error due to not sending self_video field. temp solution: remove it from server.
this commit will probably be reverted later; I'm just trying to see if a proper ( not self signed ) SSL cert on slowcord.maddy.k.vu will fix this SSL error I'm receiving.
2022-02-17 18:54:16 +11:00

88 lines
2.3 KiB
TypeScript

import { WebSocket, CLOSECODES } from "@fosscord/gateway";
import { Payload } from "./index";
import { VoiceOPCodes, Session, User, Guild } from "@fosscord/util";
import { Server } from "../Server";
export interface IdentifyPayload extends Payload {
d: {
server_id: string, //guild id
session_id: string, //gateway session
streams: Array<{
type: string,
rid: string, //number
quality: number,
}>,
token: string, //voice_states token
user_id: string,
video: boolean,
};
}
export async function onIdentify(this: Server, socket: WebSocket, data: IdentifyPayload) {
const session = await Session.findOneOrFail(
{ session_id: data.d.session_id, },
{
where: { user_id: data.d.user_id },
relations: ["user"]
}
);
const user = session.user;
const guild = await Guild.findOneOrFail({ id: data.d.server_id });
if (!guild.members.find(x => x.id === user.id))
return socket.close(CLOSECODES.Invalid_intent);
var transport = await this.mediasoupRouters[0].createWebRtcTransport({
listenIps: [{ ip: "0.0.0.0", announcedIp: "127.0.0.1" }],
enableUdp: true,
enableTcp: true,
preferUdp: true,
});
/*
//discord proper sends:
{
"streams": [
{ "type": "video", "ssrc": 1311885, "rtx_ssrc": 1311886, "rid": "50", "quality": 50, "active": false },
{ "type": "video", "ssrc": 1311887, "rtx_ssrc": 1311888, "rid": "100", "quality": 100, "active": false }
],
"ssrc": 1311884,
"port": 50008,
"modes": [
"aead_aes256_gcm_rtpsize",
"aead_aes256_gcm",
"xsalsa20_poly1305_lite_rtpsize",
"xsalsa20_poly1305_lite",
"xsalsa20_poly1305_suffix",
"xsalsa20_poly1305"
],
"ip": "109.200.214.158",
"experiments": [
"bwe_conservative_link_estimate",
"bwe_remote_locus_client",
"fixed_keyframe_interval"
]
}
*/
socket.send(JSON.stringify({
op: VoiceOPCodes.READY,
d: {
streams: [...data.d.streams.map(x => ({ ...x, rtx_ssrc: 1311886, ssrc: 1311885, active: false, }))],
ssrc: 1,
ip: transport.iceCandidates[0].ip,
port: transport.iceCandidates[0].port,
modes: [
"aead_aes256_gcm_rtpsize",
"aead_aes256_gcm",
"xsalsa20_poly1305_lite_rtpsize",
"xsalsa20_poly1305_lite",
"xsalsa20_poly1305_suffix",
"xsalsa20_poly1305"
],
heartbeat_interval: 1,
experiments: [],
},
}));
}