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/webcore/WebSocket.h | 165 ++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 src/bun.js/bindings/webcore/WebSocket.h (limited to 'src/bun.js/bindings/webcore/WebSocket.h') diff --git a/src/bun.js/bindings/webcore/WebSocket.h b/src/bun.js/bindings/webcore/WebSocket.h new file mode 100644 index 000000000..03c0d7709 --- /dev/null +++ b/src/bun.js/bindings/webcore/WebSocket.h @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "ContextDestructionObserver.h" +#include "EventTarget.h" +#include "ExceptionOr.h" +#include +#include +#include + +namespace uWS { +template +struct WebSocket; +} + +namespace JSC { +class ArrayBuffer; +class ArrayBufferView; +} + +namespace WebCore { + +// class Blob; +class WebSocket final : public RefCounted, public EventTargetWithInlineData, public ContextDestructionObserver { + WTF_MAKE_ISO_ALLOCATED(WebSocket); + +public: + static ASCIILiteral subprotocolSeparator(); + + static ExceptionOr> create(ScriptExecutionContext&, const String& url); + static ExceptionOr> create(ScriptExecutionContext&, const String& url, const String& protocol); + static ExceptionOr> create(ScriptExecutionContext&, const String& url, const Vector& protocols); + ~WebSocket(); + + enum State { + CONNECTING = 0, + OPEN = 1, + CLOSING = 2, + CLOSED = 3, + + }; + + ExceptionOr connect(const String& url); + ExceptionOr connect(const String& url, const String& protocol); + ExceptionOr connect(const String& url, const Vector& protocols); + + ExceptionOr send(const String& message); + ExceptionOr send(JSC::ArrayBuffer&); + ExceptionOr send(JSC::ArrayBufferView&); + // ExceptionOr send(Blob&); + + ExceptionOr close(std::optional code, const String& reason); + + const URL& url() const; + State readyState() const; + unsigned bufferedAmount() const; + + String protocol() const; + String extensions() const; + + String binaryType() const; + ExceptionOr setBinaryType(const String&); + + ScriptExecutionContext* scriptExecutionContext() const final; + + using RefCounted::deref; + using RefCounted::ref; + void didConnect(); + void didClose(unsigned unhandledBufferedAmount, unsigned short code, const String& reason); + void didConnect(us_socket_t* socket, char* bufferedData, size_t bufferedDataSize); + void didFailWithErrorCode(int32_t code); + + void didReceiveMessage(String&& message); + void didReceiveData(const char* data, size_t length); + void didReceiveBinaryData(Vector&&); + +private: + typedef union AnyWebSocket { + WebSocketClient* client; + WebSocketClientTLS* clientSSL; + uWS::WebSocket* server; + uWS::WebSocket* serverSSL; + } AnyWebSocket; + enum ConnectedWebSocketKind { + None, + Client, + ClientSSL, + Server, + ServerSSL + }; + + explicit WebSocket(ScriptExecutionContext&); + explicit WebSocket(ScriptExecutionContext&, const String& url); + + void dispatchErrorEventIfNeeded(); + + // void contextDestroyed() final; + // void suspend(ReasonForSuspension) final; + // void resume() final; + // void stop() final; + // const char* activeDOMObjectName() const final; + + EventTargetInterface eventTargetInterface() const final; + + void refEventTarget() final { ref(); } + void derefEventTarget() final { deref(); } + + void didReceiveMessageError(WTF::StringImpl::StaticStringImpl* reason); + void didUpdateBufferedAmount(unsigned bufferedAmount); + void didStartClosingHandshake(); + + void sendWebSocketString(const String& message); + void sendWebSocketData(const char* data, size_t length); + + void failAsynchronously(); + + enum class BinaryType { Blob, + ArrayBuffer }; + + State m_state { CONNECTING }; + URL m_url; + unsigned m_bufferedAmount { 0 }; + unsigned m_bufferedAmountAfterClose { 0 }; + BinaryType m_binaryType { BinaryType::ArrayBuffer }; + String m_subprotocol; + String m_extensions; + void* m_upgradeClient { nullptr }; + bool m_isSecure { false }; + AnyWebSocket m_connectedWebSocket { nullptr }; + ConnectedWebSocketKind m_connectedWebSocketKind { ConnectedWebSocketKind::None }; + + bool m_dispatchedErrorEvent { false }; + // RefPtr> m_pendingActivity; +}; + +} // namespace WebCore -- cgit v1.2.3 arred/cleanup-error'>jarred/cleanup-error Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2022-06-22Disable modules in the linkerGravatar Jarred Sumner 1-0/+6
2022-06-22this assertion isn't good enoughGravatar Jarred Sumner 1-1/+1
2022-06-22Disable modules constently for bun in`bun bun`Gravatar Jarred Sumner 1-0/+16
2022-06-22Fix bug with exceptions inside EventTargetGravatar Jarred Sumner 11-137/+413
2022-06-22Add a way to schedule microtasks from C++Gravatar Jarred Sumner 5-35/+77
2022-06-22Update javascript.zigGravatar Jarred Sumner 1-13/+152
2022-06-22Clean up perf hooks a littleGravatar Jarred Sumner 1-9/+21
2022-06-22use JSValue for `bun test`Gravatar Jarred Sumner 1-13/+19