ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
networking.cpp File Reference

Go to the source code of this file.

Data Structures

class  ClientSessionBinding

Functions

QuicControlResult network_quic_output (crypto_context_t *context)
QuicPacketResult network_quic_packet (crypto_context_t *context, bool seal, unsigned flow, unsigned delivery, PeerBytes packet)
 EMSCRIPTEN_BINDINGS (ascii_chat_network)

Function Documentation

◆ EMSCRIPTEN_BINDINGS()

EMSCRIPTEN_BINDINGS ( ascii_chat_network )

Definition at line 127 of file networking.cpp.

127 {
128 emscripten::function("initClient", &init_client);
129 emscripten::class_<ClientSessionBinding>("ClientSessionBinding")
130 .constructor<OptionsPatch>()
131 .function("valid", &ClientSessionBinding::valid)
132 .function("error", &ClientSessionBinding::error);
133
134 emscripten::function("client_cleanup", &client_cleanup);
135 emscripten::function("client_generate_keypair", &client_generate_keypair);
136 emscripten::function("client_get_connection_state", &client_get_connection_state);
137 emscripten::function("client_resolve_crypto_policy", &client_resolve_crypto_policy);
138 emscripten::function("client_handshake_begin", +[]() { return static_cast<int>(client_handshake_begin()); });
139 emscripten::function(
140 "client_acds_handshake_begin", +[](uint8_t mode) { return static_cast<int>(client_acds_handshake_begin(mode)); });
141 emscripten::function(
142 "network_error_action",
143 +[](int code) { return static_cast<int>(network_error_action(static_cast<asciichat_error_t>(code))); });
144 emscripten::function("setServerAddress", &set_server_address);
145 emscripten::function("clientPublicKey", &client_public_key);
146
147 emscripten::register_type<QuicControlResult>("QuicControlResult",
148 "{ code: number; flow: number; packet: Uint8Array | null }");
149 emscripten::register_type<QuicPacketResult>("QuicPacketResult",
150 "{ code: number; sequence: bigint; packet: Uint8Array }");
151 emscripten::function("clientQuicInit", &client_quic_init);
152 emscripten::function("clientQuicTick", &client_quic_tick);
153 emscripten::function("clientQuicEpoch", &client_quic_epoch);
154 emscripten::function("clientQuicOutput", &client_quic_output);
155 emscripten::function("clientQuicPacket", &client_quic_packet);
156}
unsigned char uint8_t
Definition common.h:60
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
network_error_action_t network_error_action(asciichat_error_t code)
int client_resolve_crypto_policy(bool secure, int encryption)
void client_cleanup(void)
int client_get_connection_state(void)
int client_generate_keypair(void)
asciichat_error_t client_acds_handshake_begin(uint8_t mode)
asciichat_error_t client_handshake_begin(void)

References client_acds_handshake_begin(), client_cleanup(), client_generate_keypair(), client_get_connection_state(), client_handshake_begin(), client_resolve_crypto_policy(), ClientSessionBinding::error(), network_error_action(), and ClientSessionBinding::valid().

◆ network_quic_output()

QuicControlResult network_quic_output ( crypto_context_t * context)

Definition at line 61 of file networking.cpp.

61 {
62 uint8_t data[256];
63 size_t length = 0;
64 uint32_t flow = 0;
65 const int code = browser_security_output(context, data, sizeof(data), &length, &flow);
66 emscripten::val result = emscripten::val::object();
67 result.set("code", code);
68 result.set("flow", flow);
69 result.set("packet", length ? binding_copy_output(data, length) : emscripten::val::null());
70 return QuicControlResult(result);
71}
emscripten::val binding_copy_output(const void *data, size_t length)
Definition byte_arrays.h:18
unsigned int uint32_t
Definition common.h:62
asciichat_error_t browser_security_output(crypto_context_t *ctx, uint8_t *output, size_t capacity, size_t *length, uint32_t *channel)

References binding_copy_output(), and browser_security_output().

Referenced by PeerCryptoBinding::takeQuicOutput().

◆ network_quic_packet()

QuicPacketResult network_quic_packet ( crypto_context_t * context,
bool seal,
unsigned flow,
unsigned delivery,
PeerBytes packet )

Definition at line 73 of file networking.cpp.

74 {
75 auto input_data = binding_copy_input(packet);
76 std::vector<uint8_t> output(input_data.size() + (seal ? 94 : 0));
77 size_t length = 0;
78 uint64_t sequence = 0;
79 int code = browser_security_packet(context, seal, flow, delivery, input_data.data(), input_data.size(), output.data(),
80 output.size(), &length, &sequence);
81 emscripten::val result = emscripten::val::object();
82 result.set("code", code);
83 result.set("packet", binding_copy_output(output.data(), length));
84 result.set("sequence", emscripten::val::global("BigInt")(std::to_string(sequence)));
85 if (!input_data.empty())
86 sodium_memzero(input_data.data(), input_data.size());
87 if (!output.empty())
88 sodium_memzero(output.data(), output.size());
89 return QuicPacketResult(result);
90}
std::vector< uint8_t > binding_copy_input(emscripten::val bytes)
Definition byte_arrays.h:6
unsigned long long uint64_t
Definition common.h:63
asciichat_error_t browser_security_packet(crypto_context_t *ctx, bool seal, uint32_t channel, uint32_t delivery, const uint8_t *packet, size_t length, uint8_t *output, size_t capacity, size_t *out_length, uint64_t *sequence)

References binding_copy_input(), binding_copy_output(), and browser_security_packet().

Referenced by PeerCryptoBinding::quicPacket().