1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include "ScriptExecutionContext.h"
#include <uws/uSockets/src/libusockets.h>
#include <uws/src/Loop.h>
extern "C" void Bun__startLoop(us_loop_t* loop);
namespace WebCore {
template<bool isSSL>
us_socket_context_t* webSocketContext()
{
if constexpr (isSSL) {
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_t));
this->m_ssl_client_websockets_ctx = us_create_socket_context(1, loop, sizeof(*ScriptExecutionContext), opts);
*us_socket_context_ext(m_ssl_client_websockets_ctx) = this;
WebSocketStream::registerHTTPContext(this, m_ssl_client_websockets_ctx, loop);
}
return m_ssl_client_websockets_ctx;
} else {
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_t));
this->m_client_websockets_ctx = us_create_socket_context(0, loop, sizeof(*ScriptExecutionContext), opts);
*us_socket_context_ext(m_client_websockets_ctx) = this;
SecureWebSocketStream::registerHTTPContext(this, m_client_websockets_ctx, loop);
}
return m_client_websockets_ctx;
}
}
template<bool isSSL, bool isServer>
uWS::WebSocketContext<isSSL, isServer, ScriptExecutionContext*>*
{
if constexpr (isSSL) {
if (!m_connected_ssl_client_websockets_ctx) {
// should be the parent
RELEASE_ASSERT(m_ssl_client_websockets_ctx);
m_connected_client_websockets_ctx = SecureWebSocketStream::registerClientContext(this, webSocketContext<isSSL>(), loop);
}
return m_connected_ssl_client_websockets_ctx;
} else {
if (!m_connected_client_websockets_ctx) {
// should be the parent
RELEASE_ASSERT(m_client_websockets_ctx);
m_connected_client_websockets_ctx = WebSocketStream::registerClientContext(this, webSocketContext<isSSL>(), loop);
}
return m_connected_client_websockets_ctx;
}
}
}
|