%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/src/quic/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/src/quic/data.h |
#pragma once #include <string> #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC #include <env.h> #include <memory_tracker.h> #include <nghttp3/nghttp3.h> #include <ngtcp2/ngtcp2.h> #include <node_internals.h> #include <node_sockaddr.h> #include <v8.h> namespace node { namespace quic { struct Path final : public ngtcp2_path { Path(const SocketAddress& local, const SocketAddress& remote); inline operator ngtcp2_path*() { return this; } std::string ToString() const; }; struct PathStorage final : public ngtcp2_path_storage { PathStorage(); operator ngtcp2_path(); }; class Store final : public MemoryRetainer { public: Store() = default; Store(std::shared_ptr<v8::BackingStore> store, size_t length, size_t offset = 0); Store(std::unique_ptr<v8::BackingStore> store, size_t length, size_t offset = 0); enum class Option { NONE, DETACH, }; Store(v8::Local<v8::ArrayBuffer> buffer, Option option = Option::NONE); Store(v8::Local<v8::ArrayBufferView> view, Option option = Option::NONE); v8::Local<v8::Uint8Array> ToUint8Array(Environment* env) const; operator uv_buf_t() const; operator ngtcp2_vec() const; operator nghttp3_vec() const; operator bool() const; size_t length() const; void MemoryInfo(MemoryTracker* tracker) const override; SET_MEMORY_INFO_NAME(Store) SET_SELF_SIZE(Store) private: template <typename T, typename t> T convert() const; std::shared_ptr<v8::BackingStore> store_; size_t length_ = 0; size_t offset_ = 0; }; class QuicError final : public MemoryRetainer { public: using error_code = uint64_t; static constexpr error_code QUIC_NO_ERROR = NGTCP2_NO_ERROR; static constexpr error_code QUIC_APP_NO_ERROR = 65280; enum class Type { TRANSPORT = NGTCP2_CCERR_TYPE_TRANSPORT, APPLICATION = NGTCP2_CCERR_TYPE_APPLICATION, VERSION_NEGOTIATION = NGTCP2_CCERR_TYPE_VERSION_NEGOTIATION, IDLE_CLOSE = NGTCP2_CCERR_TYPE_IDLE_CLOSE, }; static constexpr error_code QUIC_ERROR_TYPE_TRANSPORT = NGTCP2_CCERR_TYPE_TRANSPORT; static constexpr error_code QUIC_ERROR_TYPE_APPLICATION = NGTCP2_CCERR_TYPE_APPLICATION; explicit QuicError(const std::string_view reason = ""); explicit QuicError(const ngtcp2_ccerr* ptr); explicit QuicError(const ngtcp2_ccerr& error); Type type() const; error_code code() const; const std::string_view reason() const; uint64_t frame_type() const; operator const ngtcp2_ccerr&() const; operator const ngtcp2_ccerr*() const; // Returns false if the QuicError uses a no_error code with type // transport or application. operator bool() const; bool operator==(const QuicError& other) const; bool operator!=(const QuicError& other) const; void MemoryInfo(MemoryTracker* tracker) const override; SET_MEMORY_INFO_NAME(QuicError) SET_SELF_SIZE(QuicError) std::string ToString() const; v8::MaybeLocal<v8::Value> ToV8Value(Environment* env) const; static QuicError ForTransport(error_code code, const std::string_view reason = ""); static QuicError ForApplication(error_code code, const std::string_view reason = ""); static QuicError ForVersionNegotiation(const std::string_view reason = ""); static QuicError ForIdleClose(const std::string_view reason = ""); static QuicError ForNgtcp2Error(int code, const std::string_view reason = ""); static QuicError ForTlsAlert(int code, const std::string_view reason = ""); static QuicError FromConnectionClose(ngtcp2_conn* session); static QuicError TRANSPORT_NO_ERROR; static QuicError APPLICATION_NO_ERROR; static QuicError VERSION_NEGOTIATION; static QuicError IDLE_CLOSE; static QuicError INTERNAL_ERROR; private: const uint8_t* reason_c_str() const; std::string reason_; ngtcp2_ccerr error_; const ngtcp2_ccerr* ptr_ = nullptr; }; } // namespace quic } // namespace node #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS