From 729d445b6885f69dd2c6355f38707bd42851c791 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Wed, 22 Jun 2022 23:21:48 -0700 Subject: change the directory structure --- src/bun.js/bindings/ScriptExecutionContext.cpp | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/bun.js/bindings/ScriptExecutionContext.cpp (limited to 'src/bun.js/bindings/ScriptExecutionContext.cpp') diff --git a/src/bun.js/bindings/ScriptExecutionContext.cpp b/src/bun.js/bindings/ScriptExecutionContext.cpp new file mode 100644 index 000000000..73b8b4c01 --- /dev/null +++ b/src/bun.js/bindings/ScriptExecutionContext.cpp @@ -0,0 +1,81 @@ +#include "root.h" +#include "headers.h" +#include "ScriptExecutionContext.h" + +#include "webcore/WebSocket.h" + +#include + +extern "C" void Bun__startLoop(us_loop_t* loop); + +namespace WebCore { + +template +static void registerHTTPContextForWebSocket(ScriptExecutionContext* script, us_socket_context_t* ctx, us_loop_t* loop) +{ + if constexpr (!isServer) { + if constexpr (SSL) { + Bun__WebSocketHTTPSClient__register(script->jsGlobalObject(), loop, ctx); + } else { + Bun__WebSocketHTTPClient__register(script->jsGlobalObject(), loop, ctx); + } + } else { + RELEASE_ASSERT_NOT_REACHED(); + } +} + +us_socket_context_t* ScriptExecutionContext::webSocketContextSSL() +{ + if (!m_ssl_client_websockets_ctx) { + us_loop_t* loop = (us_loop_t*)uWS::Loop::get(); + us_socket_context_options_t opts; + memset(&opts, 0, sizeof(us_socket_context_options_t)); + this->m_ssl_client_websockets_ctx = us_create_socket_context(1, loop, sizeof(size_t), opts); + void** ptr = reinterpret_cast(us_socket_context_ext(1, m_ssl_client_websockets_ctx)); + *ptr = this; + registerHTTPContextForWebSocket(this, m_ssl_client_websockets_ctx, loop); + } + + return m_ssl_client_websockets_ctx; +} + +us_socket_context_t* ScriptExecutionContext::webSocketContextNoSSL() +{ + if (!m_client_websockets_ctx) { + us_loop_t* loop = (us_loop_t*)uWS::Loop::get(); + us_socket_context_options_t opts; + memset(&opts, 0, sizeof(us_socket_context_options_t)); + this->m_client_websockets_ctx = us_create_socket_context(0, loop, sizeof(size_t), opts); + void** ptr = reinterpret_cast(us_socket_context_ext(0, m_client_websockets_ctx)); + *ptr = this; + registerHTTPContextForWebSocket(this, m_client_websockets_ctx, loop); + } + + return m_client_websockets_ctx; +} + +template +static us_socket_context_t* registerWebSocketClientContext(ScriptExecutionContext* script, us_socket_context_t* parent) +{ + us_loop_t* loop = (us_loop_t*)uWS::Loop::get(); + if constexpr (SSL) { + us_socket_context_t* child = us_create_child_socket_context(1, parent, sizeof(size_t)); + Bun__WebSocketClientTLS__register(script->jsGlobalObject(), loop, child); + return child; + } else { + us_socket_context_t* child = us_create_child_socket_context(0, parent, sizeof(size_t)); + Bun__WebSocketClient__register(script->jsGlobalObject(), loop, child); + return child; + } +} + +us_socket_context_t* ScriptExecutionContext::connectedWebSocketKindClient() +{ + return registerWebSocketClientContext(this, webSocketContextNoSSL()); +} +us_socket_context_t* ScriptExecutionContext::connectedWebSocketKindClientSSL() +{ + return registerWebSocketClientContext(this, webSocketContextSSL()); +} + +} \ No newline at end of file -- cgit v1.2.3