Skip to content

Commit 5f8aef4

Browse files
mhdawsonMoLow
authored andcommittedJul 6, 2023
quic: address recent coverity warning
Address coverity warning about uninitialized value Signed-off-by: Michael Dawson <mdawson@devrus.com> PR-URL: #47753 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent b34eaf3 commit 5f8aef4

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
 

‎src/quic/data.h

+140
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#pragma once
2+
3+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4+
#if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
5+
6+
#include <env.h>
7+
#include <memory_tracker.h>
8+
#include <nghttp3/nghttp3.h>
9+
#include <ngtcp2/ngtcp2.h>
10+
#include <node_internals.h>
11+
#include <node_sockaddr.h>
12+
#include <v8.h>
13+
14+
namespace node {
15+
namespace quic {
16+
17+
struct Path final : public ngtcp2_path {
18+
Path(const SocketAddress& local, const SocketAddress& remote);
19+
};
20+
21+
struct PathStorage final : public ngtcp2_path_storage {
22+
PathStorage();
23+
operator ngtcp2_path();
24+
};
25+
26+
class Store final : public MemoryRetainer {
27+
public:
28+
Store() = default;
29+
30+
Store(std::shared_ptr<v8::BackingStore> store,
31+
size_t length,
32+
size_t offset = 0);
33+
Store(std::unique_ptr<v8::BackingStore> store,
34+
size_t length,
35+
size_t offset = 0);
36+
37+
enum class Option {
38+
NONE,
39+
DETACH,
40+
};
41+
42+
Store(v8::Local<v8::ArrayBuffer> buffer, Option option = Option::NONE);
43+
Store(v8::Local<v8::ArrayBufferView> view, Option option = Option::NONE);
44+
45+
v8::Local<v8::Uint8Array> ToUint8Array(Environment* env) const;
46+
47+
operator uv_buf_t() const;
48+
operator ngtcp2_vec() const;
49+
operator nghttp3_vec() const;
50+
operator bool() const;
51+
size_t length() const;
52+
53+
void MemoryInfo(MemoryTracker* tracker) const override;
54+
SET_MEMORY_INFO_NAME(Store)
55+
SET_SELF_SIZE(Store)
56+
57+
private:
58+
template <typename T, typename t>
59+
T convert() const;
60+
std::shared_ptr<v8::BackingStore> store_;
61+
size_t length_ = 0;
62+
size_t offset_ = 0;
63+
};
64+
65+
class QuicError final : public MemoryRetainer {
66+
public:
67+
using error_code = uint64_t;
68+
69+
static constexpr error_code QUIC_NO_ERROR = NGTCP2_NO_ERROR;
70+
static constexpr error_code QUIC_APP_NO_ERROR = 65280;
71+
72+
enum class Type {
73+
TRANSPORT = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT,
74+
APPLICATION = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION,
75+
VERSION_NEGOTIATION =
76+
NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_VERSION_NEGOTIATION,
77+
IDLE_CLOSE = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_IDLE_CLOSE,
78+
};
79+
80+
static constexpr error_code QUIC_ERROR_TYPE_TRANSPORT =
81+
NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT;
82+
static constexpr error_code QUIC_ERROR_TYPE_APPLICATION =
83+
NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION;
84+
85+
explicit QuicError(const std::string_view reason = "");
86+
explicit QuicError(const ngtcp2_connection_close_error* ptr);
87+
explicit QuicError(const ngtcp2_connection_close_error& error);
88+
89+
Type type() const;
90+
error_code code() const;
91+
const std::string_view reason() const;
92+
uint64_t frame_type() const;
93+
94+
operator const ngtcp2_connection_close_error&() const;
95+
operator const ngtcp2_connection_close_error*() const;
96+
97+
// Returns false if the QuicError uses a no_error code with type
98+
// transport or application.
99+
operator bool() const;
100+
101+
bool operator==(const QuicError& other) const;
102+
bool operator!=(const QuicError& other) const;
103+
104+
void MemoryInfo(MemoryTracker* tracker) const override;
105+
SET_MEMORY_INFO_NAME(QuicError)
106+
SET_SELF_SIZE(QuicError)
107+
108+
std::string ToString() const;
109+
v8::MaybeLocal<v8::Value> ToV8Value(Environment* env) const;
110+
111+
static QuicError ForTransport(error_code code,
112+
const std::string_view reason = "");
113+
static QuicError ForApplication(error_code code,
114+
const std::string_view reason = "");
115+
static QuicError ForVersionNegotiation(const std::string_view reason = "");
116+
static QuicError ForIdleClose(const std::string_view reason = "");
117+
static QuicError ForNgtcp2Error(int code, const std::string_view reason = "");
118+
static QuicError ForTlsAlert(int code, const std::string_view reason = "");
119+
120+
static QuicError FromConnectionClose(ngtcp2_conn* session);
121+
122+
static QuicError TRANSPORT_NO_ERROR;
123+
static QuicError APPLICATION_NO_ERROR;
124+
static QuicError VERSION_NEGOTIATION;
125+
static QuicError IDLE_CLOSE;
126+
static QuicError INTERNAL_ERROR;
127+
128+
private:
129+
const uint8_t* reason_c_str() const;
130+
131+
std::string reason_;
132+
ngtcp2_connection_close_error error_ = ngtcp2_connection_close_error();
133+
const ngtcp2_connection_close_error* ptr_ = nullptr;
134+
};
135+
136+
} // namespace quic
137+
} // namespace node
138+
139+
#endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
140+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

0 commit comments

Comments
 (0)
Please sign in to comment.