Add a Doxyfile and preliminary module-level docs.
This commit is contained in:
		@@ -872,3 +872,7 @@ dist-test: dist
 | 
			
		||||
format:
 | 
			
		||||
	@clang-format -i $(wildcard src/*.c src/*.h src/*.m)
 | 
			
		||||
.PHONY: format
 | 
			
		||||
 | 
			
		||||
docs:
 | 
			
		||||
	@doxygen
 | 
			
		||||
.PHONY: docs
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,14 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup bcrypt_js bCrypt
 | 
			
		||||
** Exposes bcrypt to script, where it is used for hashing and verifying
 | 
			
		||||
** passwords.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct JSContext JSContext;
 | 
			
		||||
 | 
			
		||||
void tf_bcrypt_register(JSContext* context);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,17 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup bip39 BIP39
 | 
			
		||||
** Convert between raw bytes and \ref bip39_words.
 | 
			
		||||
** See: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
bool tf_bip39_bytes_to_words(const uint8_t* bytes, size_t bytes_size, char* out_words, size_t words_size);
 | 
			
		||||
bool tf_bip39_words_to_bytes(const char* words, uint8_t* out_bytes, size_t bytes_size);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,15 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup bip39_words BIP39 Word list
 | 
			
		||||
** The word list used by \ref bip39.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	k_bip39_words_count = 2048
 | 
			
		||||
};
 | 
			
		||||
extern const char* k_bip39_words[k_bip39_words_count];
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,13 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup database_js Database Interface
 | 
			
		||||
** Exposes a key-value store interface to script.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct JSContext JSContext;
 | 
			
		||||
 | 
			
		||||
void tf_database_register(JSContext* context);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup file_js File Interface
 | 
			
		||||
** Exposes an operating system file I/O API to script.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <uv.h>
 | 
			
		||||
 | 
			
		||||
typedef struct JSContext JSContext;
 | 
			
		||||
@@ -9,3 +15,5 @@ void tf_file_register(JSContext* context);
 | 
			
		||||
 | 
			
		||||
void tf_file_stat(tf_task_t* task, const char* path, void (*callback)(tf_task_t* task, const char* path, int result, const uv_stat_t* stat, void* user_data), void* user_data);
 | 
			
		||||
void tf_file_read(tf_task_t* task, const char* path, void (*callback)(tf_task_t* task, const char* path, int result, const void* data, void* user_data), void* user_data);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								src/http.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/http.h
									
									
									
									
									
								
							@@ -1,5 +1,16 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup http HTTP Server
 | 
			
		||||
** This is a HTTP server.
 | 
			
		||||
**
 | 
			
		||||
** It can listen on multiple ports.  It supports IPv4
 | 
			
		||||
** and IPv6.  It handles websocket connections.  Requests can be handled
 | 
			
		||||
** immediately or at a later time.  It is very bare bones, and that is a
 | 
			
		||||
** feature.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +46,13 @@ typedef struct _tf_http_request_t
 | 
			
		||||
typedef void(tf_http_callback_t)(tf_http_request_t* request);
 | 
			
		||||
typedef void(tf_http_cleanup_t)(void* user_data);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** Create an HTTP server using the given libuv loop.
 | 
			
		||||
** @param loop A libuv loop to use.
 | 
			
		||||
** @return An HTTP server instance.
 | 
			
		||||
*/
 | 
			
		||||
tf_http_t* tf_http_create(uv_loop_t* loop);
 | 
			
		||||
 | 
			
		||||
void tf_http_set_trace(tf_http_t* http, tf_trace_t* trace);
 | 
			
		||||
int tf_http_listen(tf_http_t* http, int port, tf_tls_context_t* tls, tf_http_cleanup_t* cleanup, void* user_data);
 | 
			
		||||
void tf_http_add_handler(tf_http_t* http, const char* pattern, tf_http_callback_t* callback, tf_http_cleanup_t* cleanup, void* user_data);
 | 
			
		||||
@@ -53,3 +70,5 @@ void tf_http_request_send(tf_http_request_t* request, const void* data, size_t s
 | 
			
		||||
void tf_http_request_websocket_upgrade(tf_http_request_t* request);
 | 
			
		||||
 | 
			
		||||
const char* tf_http_status_text(int status);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,18 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup httpd_js HTTPD Interface
 | 
			
		||||
** Exposes the \ref http server to script and registers a number of built-in
 | 
			
		||||
** endpoints.
 | 
			
		||||
**
 | 
			
		||||
** core/core.js is gradually being moved from JS to C here, at which point this will
 | 
			
		||||
** no longer be a bridge between the two and instead primarily expose the web API.
 | 
			
		||||
**
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
 | 
			
		||||
void tf_httpd_register(JSContext* context);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								src/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
\mainpage Tilde Friends Source Documentation
 | 
			
		||||
@@ -1,5 +1,10 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup log Logging helpers
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if defined(__ANDROID__)
 | 
			
		||||
#include <android/log.h>
 | 
			
		||||
#define tf_printf(...) __android_log_print(ANDROID_LOG_INFO, "tildefriends", __VA_ARGS__)
 | 
			
		||||
@@ -22,3 +27,5 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#define tf_printf printf
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								src/mem.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/mem.h
									
									
									
									
									
								
							@@ -1,5 +1,13 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup mem Memory management
 | 
			
		||||
** tf_malloc() and friends use malloc() behind the scenes but optionally
 | 
			
		||||
** track memory per system (OpenSSL, sqlite, libuv, ...) and store callstacks
 | 
			
		||||
** to help debug leaks.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
@@ -42,3 +50,5 @@ typedef struct _tf_mem_allocation_t
 | 
			
		||||
} tf_mem_allocation_t;
 | 
			
		||||
 | 
			
		||||
tf_mem_allocation_t* tf_mem_summarize_allocations(int* out_count);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup packetstream Packet Stream
 | 
			
		||||
** Primitive helper for sending packets of known size across a pipe.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
typedef struct uv_pipe_s uv_pipe_t;
 | 
			
		||||
@@ -16,3 +22,5 @@ void tf_packetstream_send(tf_packetstream_t* stream, int packet_type, const char
 | 
			
		||||
void tf_packetstream_set_on_receive(tf_packetstream_t* stream, tf_packetstream_onreceive_t* callback, void* user_data);
 | 
			
		||||
void tf_packetstream_close(tf_packetstream_t* stream);
 | 
			
		||||
uv_pipe_t* tf_packetstream_get_pipe(tf_packetstream_t* stream);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,12 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup serialize JS binary serialization
 | 
			
		||||
** Converts JS data to a basic binary format with support for exporting
 | 
			
		||||
** functions so that they can be called across the barrier, too.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_task_t tf_task_t;
 | 
			
		||||
@@ -7,3 +14,5 @@ typedef struct _tf_taskstub_t tf_taskstub_t;
 | 
			
		||||
 | 
			
		||||
void tf_serialize_store(tf_task_t* task, tf_taskstub_t* to, void** out_buffer, size_t* out_size, JSValue value);
 | 
			
		||||
JSValue tf_serialize_load(tf_task_t* task, tf_taskstub_t* from, const char* buffer, size_t size);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,15 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup socket_js Socket Interface
 | 
			
		||||
** Exposes network sockets to script.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
 | 
			
		||||
JSValue tf_socket_register(JSContext* context);
 | 
			
		||||
int tf_socket_get_count();
 | 
			
		||||
int tf_socket_get_open_count();
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,12 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup ssb_connections SSB Connections
 | 
			
		||||
** Primitive tracking for SSB connections, as in we tried to connect to host X
 | 
			
		||||
** Y seconds ago, and it failed.  This needs to be replaced with something better.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_ssb_t tf_ssb_t;
 | 
			
		||||
typedef struct _tf_ssb_connections_t tf_ssb_connections_t;
 | 
			
		||||
 | 
			
		||||
@@ -9,3 +16,5 @@ void tf_ssb_connections_destroy(tf_ssb_connections_t* connections);
 | 
			
		||||
void tf_ssb_connections_store(tf_ssb_connections_t* connections, const char* host, int port, const char* key);
 | 
			
		||||
void tf_ssb_connections_set_attempted(tf_ssb_connections_t* connections, const char* host, int port, const char* key);
 | 
			
		||||
void tf_ssb_connections_set_succeeded(tf_ssb_connections_t* connections, const char* host, int port, const char* key);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,12 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup ssb_db SSB Database
 | 
			
		||||
** This is the main interface to SSB persistence.  Everything about getting and
 | 
			
		||||
** storing messages and blobs goes through here.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "ssb.h"
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
@@ -66,3 +73,5 @@ tf_ssb_db_stored_connection_t* tf_ssb_db_get_stored_connections(tf_ssb_t* ssb, i
 | 
			
		||||
void tf_ssb_db_forget_stored_connection(tf_ssb_t* ssb, const char* address, int port, const char* pubkey);
 | 
			
		||||
 | 
			
		||||
int tf_ssb_sqlite_authorizer(void* user_data, int action_code, const char* arg0, const char* arg1, const char* arg2, const char* arg3);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,15 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup tf_export Tilde Friends Export
 | 
			
		||||
** Support for exporting Tilde Friends apps from the database to disk.
 | 
			
		||||
**
 | 
			
		||||
** I don't know why it has SSB in the name.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_ssb_t tf_ssb_t;
 | 
			
		||||
 | 
			
		||||
void tf_ssb_export(tf_ssb_t* ssb, const char* key);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup ssb SSB
 | 
			
		||||
** Everything about SSB, SHS, and MUXRPC happens here.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
@@ -230,3 +236,5 @@ const char* tf_ssb_get_room_name(tf_ssb_t* ssb);
 | 
			
		||||
void tf_ssb_set_room_name(tf_ssb_t* ssb, const char* room_name);
 | 
			
		||||
 | 
			
		||||
void tf_ssb_schedule_work(tf_ssb_t* ssb, int delay_ms, void (*callback)(tf_ssb_t* ssb, void* user_data), void* user_data);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,16 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup tf_import Tilde Friends Import
 | 
			
		||||
** Support for importing Tilde Friends apps from disk to the database.
 | 
			
		||||
**
 | 
			
		||||
** I don't know why it has SSB in the name.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_ssb_t tf_ssb_t;
 | 
			
		||||
 | 
			
		||||
void tf_ssb_import(tf_ssb_t* ssb, const char* user, const char* path);
 | 
			
		||||
void tf_ssb_import_from_zip(tf_ssb_t* ssb, const char* zip_path, const char* user, const char* path);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,14 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup ssb_js SSB Interface
 | 
			
		||||
** Exposes SSB to JS.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct JSContext JSContext;
 | 
			
		||||
typedef struct _tf_ssb_t tf_ssb_t;
 | 
			
		||||
 | 
			
		||||
void tf_ssb_register(JSContext* context, tf_ssb_t* ssb);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,15 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup ssb_rpc SSB RPC
 | 
			
		||||
** Implementations of all the necessary MUXRPC handlers (createHistoryStream,
 | 
			
		||||
** ebt.replicate, blobs.get, ...).
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_ssb_t tf_ssb_t;
 | 
			
		||||
 | 
			
		||||
void tf_ssb_rpc_register(tf_ssb_t* ssb);
 | 
			
		||||
void tf_ssb_rpc_start_periodic(tf_ssb_t* ssb);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup ssb_tests SSB Tests
 | 
			
		||||
** Tests for SSB functionality.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_test_options_t tf_test_options_t;
 | 
			
		||||
 | 
			
		||||
void tf_ssb_test_id_conversion(const tf_test_options_t* options);
 | 
			
		||||
@@ -8,3 +14,5 @@ void tf_ssb_test_following(const tf_test_options_t* options);
 | 
			
		||||
void tf_ssb_test_rooms(const tf_test_options_t* options);
 | 
			
		||||
void tf_ssb_test_bench(const tf_test_options_t* options);
 | 
			
		||||
void tf_ssb_test_go_ssb_room(const tf_test_options_t* options);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								src/task.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/task.h
									
									
									
									
									
								
							@@ -1,5 +1,14 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup task Task
 | 
			
		||||
** Task is responsible for running JS in C.  It exposes just what is needed for
 | 
			
		||||
** sandboxed or trusted code, helps with communiciation between parent and
 | 
			
		||||
** child processes, including function calls and async operations across the
 | 
			
		||||
** boundaries.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
@@ -80,3 +89,5 @@ bool tf_task_send_error_to_parent(tf_task_t* task, JSValue error);
 | 
			
		||||
char* tf_task_get_disconnections(tf_task_t* task);
 | 
			
		||||
char* tf_task_get_debug(tf_task_t* task);
 | 
			
		||||
char* tf_task_get_hitches(tf_task_t* task);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,12 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup taskstub Task Stub
 | 
			
		||||
** Task Stub is a poorly-named representation of a remote Task that can be
 | 
			
		||||
** exposed to JS.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
#include "uv.h"
 | 
			
		||||
 | 
			
		||||
@@ -18,3 +25,5 @@ tf_task_t* tf_taskstub_get_owner(const tf_taskstub_t* stub);
 | 
			
		||||
tf_taskstub_t* tf_taskstub_create_parent(tf_task_t* task, uv_file file);
 | 
			
		||||
void tf_taskstub_on_error(tf_taskstub_t* stub, JSValue error);
 | 
			
		||||
void tf_taskstub_on_print(tf_taskstub_t* stub, JSValue arguments);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup tests Tests
 | 
			
		||||
** This is the test harness.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_test_options_t
 | 
			
		||||
{
 | 
			
		||||
	const char* exe_path;
 | 
			
		||||
@@ -7,3 +13,5 @@ typedef struct _tf_test_options_t
 | 
			
		||||
} tf_test_options_t;
 | 
			
		||||
 | 
			
		||||
void tf_tests(const tf_test_options_t* options);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup tls TLS
 | 
			
		||||
** A minimal wrapper around OpenSSL.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
@@ -39,3 +45,5 @@ int tf_tls_session_write_plain(tf_tls_session_t* session, const char* buffer, si
 | 
			
		||||
int tf_tls_session_read_encrypted(tf_tls_session_t* session, char* buffer, size_t bytes);
 | 
			
		||||
int tf_tls_session_write_encrypted(tf_tls_session_t* session, const char* buffer, size_t bytes);
 | 
			
		||||
bool tf_tls_session_get_error(tf_tls_session_t* session, char* buffer, size_t bytes);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup tls_js TLS Interface
 | 
			
		||||
** Exposes \ref tls to JS.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
 | 
			
		||||
typedef struct _tf_tls_context_t tf_tls_context_t;
 | 
			
		||||
@@ -7,3 +13,5 @@ typedef struct _tf_tls_context_t tf_tls_context_t;
 | 
			
		||||
JSValue tf_tls_context_register(JSContext* context);
 | 
			
		||||
tf_tls_context_t* tf_tls_context_get(JSValue value);
 | 
			
		||||
int tf_tls_context_get_count();
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								src/trace.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/trace.h
									
									
									
									
									
								
							@@ -1,5 +1,13 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup trace Performance Tracing
 | 
			
		||||
** Generates trace output that is compatible with speedscope.app,
 | 
			
		||||
** chrome://tracing or ui.perfetto.dev for scrutining what each thread is doing
 | 
			
		||||
** for optimization purposes.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
@@ -22,3 +30,5 @@ void tf_trace_set_write_callback(tf_trace_t* trace, tf_trace_write_callback_t* c
 | 
			
		||||
void tf_trace_raw(tf_trace_t* trace, const char* buffer, size_t size);
 | 
			
		||||
 | 
			
		||||
void tf_trace_sqlite(tf_trace_t* trace, sqlite3* sqlite);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
** \defgroup util_js Utilities
 | 
			
		||||
** This is becoming just a dumping ground of small helpers.
 | 
			
		||||
** @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "quickjs.h"
 | 
			
		||||
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
@@ -28,3 +34,5 @@ const char* tf_util_function_to_string(void* function);
 | 
			
		||||
		__typeof__(b) _b = (b); \
 | 
			
		||||
		_a > _b ? _b : _a; \
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user