summary refs log tree commit diff
path: root/webrtc/src/events/Connection.ts
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-09-16 12:54:02 +1000
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-09-16 13:19:33 +1000
commit493c21968b2758fe987e63a7b7750427c726068d (patch)
tree0fe5e7d17f99374fdfb4bb1b13c310b959a9c393 /webrtc/src/events/Connection.ts
parentPerhaps a message create perf test? (diff)
downloadserver-493c21968b2758fe987e63a7b7750427c726068d.tar.xz
Probably broken merge from webrtc
Diffstat (limited to '')
-rw-r--r--webrtc/src/events/Connection.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/webrtc/src/events/Connection.ts b/webrtc/src/events/Connection.ts
new file mode 100644

index 00000000..bf228d64 --- /dev/null +++ b/webrtc/src/events/Connection.ts
@@ -0,0 +1,60 @@ +import { CLOSECODES, Send, setHeartbeat, WebSocket } from "@fosscord/gateway"; +import { IncomingMessage } from "http"; +import { URL } from "url"; +import WS from "ws"; +import { VoiceOPCodes } from "../util"; +import { onClose } from "./Close"; +import { onMessage } from "./Message"; +var erlpack: any; +try { + erlpack = require("@yukikaze-bot/erlpack"); +} catch (error) {} + +// TODO: check rate limit +// TODO: specify rate limit in config +// TODO: check msg max size + +export async function Connection(this: WS.Server, socket: WebSocket, request: IncomingMessage) { + try { + socket.on("close", onClose.bind(socket)); + socket.on("message", onMessage.bind(socket)); + console.log("[WebRTC] new connection", request.url); + + if (process.env.WS_LOGEVENTS) { + [ + "close", + "error", + "upgrade", + //"message", + "open", + "ping", + "pong", + "unexpected-response" + ].forEach((x) => { + socket.on(x, (y) => console.log("[WebRTC]", x, y)); + }); + } + + const { searchParams } = new URL(`http://localhost${request.url}`); + + socket.encoding = "json"; + socket.version = Number(searchParams.get("v")) || 5; + if (socket.version < 3) return socket.close(CLOSECODES.Unknown_error, "invalid version"); + + setHeartbeat(socket); + + socket.readyTimeout = setTimeout(() => { + return socket.close(CLOSECODES.Session_timed_out); + }, 1000 * 30); + + await Send(socket, { + op: VoiceOPCodes.HELLO, + d: { + heartbeat_interval: 1000 * 30 + } + }); + } catch (error) { + console.error("[WebRTC]", error); + return socket.close(CLOSECODES.Unknown_error); + } +} \ No newline at end of file