Add missing statics, and remove the 'tildefriends check' command.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4838 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		
							
								
								
									
										10
									
								
								core/core.js
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								core/core.js
									
									
									
									
									
								
							| @@ -890,16 +890,6 @@ function enableStats(process, enabled) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| function stringResponse(response, data) { | ||||
| 	let bytes = utf8Encode(data); | ||||
| 	response.writeHead(200, { | ||||
| 		"Content-Type": "application/json; charset=utf-8", | ||||
| 		"Content-Length": bytes.byteLength.toString(), | ||||
| 		"Access-Control-Allow-Origin": "*", | ||||
| 	}); | ||||
| 	return response.end(bytes); | ||||
| } | ||||
|  | ||||
| loadSettings().then(function() { | ||||
| 	if (tildefriends.https_port && gGlobalSettings.http_redirect) { | ||||
| 		httpd.set_http_redirect(gGlobalSettings.http_redirect); | ||||
|   | ||||
| @@ -3,25 +3,10 @@ | ||||
| #include "task.h" | ||||
|  | ||||
| #include "ow-crypt.h" | ||||
|  | ||||
| #include "quickjs.h" | ||||
| #include "uv.h" | ||||
|  | ||||
| #include <uv.h> | ||||
|  | ||||
| JSValue _crypt_hashpw(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| JSValue _crypt_gensalt(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
|  | ||||
| void tf_bcrypt_register(JSContext* context) | ||||
| { | ||||
| 	JSValue global = JS_GetGlobalObject(context); | ||||
| 	JSValue bcrypt = JS_NewObject(context); | ||||
| 	JS_SetPropertyStr(context, global, "bCrypt", bcrypt); | ||||
| 	JS_SetPropertyStr(context, bcrypt, "hashpw", JS_NewCFunction(context, _crypt_hashpw, "hashpw", 2)); | ||||
| 	JS_SetPropertyStr(context, bcrypt, "gensalt", JS_NewCFunction(context, _crypt_gensalt, "gensalt", 1)); | ||||
| 	JS_FreeValue(context, global); | ||||
| } | ||||
|  | ||||
| JSValue _crypt_hashpw(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _crypt_hashpw(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	const char* key = JS_ToCString(context, argv[0]); | ||||
| 	const char* salt = JS_ToCString(context, argv[1]); | ||||
| @@ -33,7 +18,7 @@ JSValue _crypt_hashpw(JSContext* context, JSValueConst this_val, int argc, JSVal | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| JSValue _crypt_gensalt(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _crypt_gensalt(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	int length = 0; | ||||
| 	JS_ToInt32(context, &length, argv[0]); | ||||
| @@ -45,3 +30,13 @@ JSValue _crypt_gensalt(JSContext* context, JSValueConst this_val, int argc, JSVa | ||||
| 	JSValue result = JS_NewString(context, salt); | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| void tf_bcrypt_register(JSContext* context) | ||||
| { | ||||
| 	JSValue global = JS_GetGlobalObject(context); | ||||
| 	JSValue bcrypt = JS_NewObject(context); | ||||
| 	JS_SetPropertyStr(context, global, "bCrypt", bcrypt); | ||||
| 	JS_SetPropertyStr(context, bcrypt, "hashpw", JS_NewCFunction(context, _crypt_hashpw, "hashpw", 2)); | ||||
| 	JS_SetPropertyStr(context, bcrypt, "gensalt", JS_NewCFunction(context, _crypt_gensalt, "gensalt", 1)); | ||||
| 	JS_FreeValue(context, global); | ||||
| } | ||||
|   | ||||
| @@ -120,7 +120,7 @@ static JSValue _database_get(JSContext* context, JSValueConst this_val, int argc | ||||
| 	return entry; | ||||
| } | ||||
|  | ||||
| JSValue _database_set(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _database_set(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	database_t* database = JS_GetOpaque(this_val, _database_class_id); | ||||
| 	if (database) | ||||
| @@ -204,7 +204,7 @@ static JSValue _database_exchange(JSContext* context, JSValueConst this_val, int | ||||
| 	return exchanged; | ||||
| } | ||||
|  | ||||
| JSValue _database_remove(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _database_remove(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	database_t* database = JS_GetOpaque(this_val, _database_class_id); | ||||
| 	if (database) | ||||
| @@ -229,7 +229,7 @@ JSValue _database_remove(JSContext* context, JSValueConst this_val, int argc, JS | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _database_get_all(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _database_get_all(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	JSValue array = JS_UNDEFINED; | ||||
| 	database_t* database = JS_GetOpaque(this_val, _database_class_id); | ||||
| @@ -256,7 +256,7 @@ JSValue _database_get_all(JSContext* context, JSValueConst this_val, int argc, J | ||||
| 	return array; | ||||
| } | ||||
|  | ||||
| JSValue _database_get_like(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _database_get_like(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	JSValue result = JS_UNDEFINED; | ||||
| 	database_t* database = JS_GetOpaque(this_val, _database_class_id); | ||||
|   | ||||
| @@ -353,7 +353,7 @@ static JSValue _file_read_file_zip(JSContext* context, JSValueConst this_val, in | ||||
| 	return promise_value; | ||||
| } | ||||
|  | ||||
| JSValue _file_stat(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _file_stat(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	void* task = JS_GetContextOpaque(context); | ||||
| 	const char* path = JS_ToCString(context, argv[0]); | ||||
| @@ -377,7 +377,7 @@ JSValue _file_stat(JSContext* context, JSValueConst this_val, int argc, JSValueC | ||||
| 	return promise_value; | ||||
| } | ||||
|  | ||||
| JSValue _file_stat_zip(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _file_stat_zip(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	void* task = JS_GetContextOpaque(context); | ||||
| 	promiseid_t promise = -1; | ||||
|   | ||||
| @@ -120,13 +120,13 @@ void tf_http_set_trace(tf_http_t* http, tf_trace_t* trace) | ||||
| 	http->trace = trace; | ||||
| } | ||||
|  | ||||
| void _http_allocate_buffer(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) | ||||
| static void _http_allocate_buffer(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) | ||||
| { | ||||
| 	tf_http_connection_t* connection = handle->data; | ||||
| 	*buf = uv_buf_init(connection->incoming, sizeof(connection->incoming)); | ||||
| } | ||||
|  | ||||
| bool _http_find_handler(tf_http_t* http, const char* path, tf_http_callback_t** out_callback, const char** out_trace_name, void** out_user_data) | ||||
| static bool _http_find_handler(tf_http_t* http, const char* path, tf_http_callback_t** out_callback, const char** out_trace_name, void** out_user_data) | ||||
| { | ||||
| 	for (int i = 0; i < http->handlers_count; i++) | ||||
| 	{ | ||||
|   | ||||
							
								
								
									
										53
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								src/main.c
									
									
									
									
									
								
							| @@ -75,7 +75,6 @@ static int _tf_command_import(const char* file, int argc, char* argv[]); | ||||
| static int _tf_command_export(const char* file, int argc, char* argv[]); | ||||
| static int _tf_command_run(const char* file, int argc, char* argv[]); | ||||
| static int _tf_command_sandbox(const char* file, int argc, char* argv[]); | ||||
| static int _tf_command_check(const char* file, int argc, char* argv[]); | ||||
| static int _tf_command_usage(const char* file, int argc, char* argv[]); | ||||
|  | ||||
| typedef struct _command_t { | ||||
| @@ -90,7 +89,6 @@ const command_t k_commands[] = { | ||||
| 	{ "import", _tf_command_import, "Import apps to SSB." }, | ||||
| 	{ "export", _tf_command_export, "Export apps from SSB." }, | ||||
| 	{ "test", _tf_command_test, "Test SSB." }, | ||||
| 	{ "check", _tf_command_check, "Validate messages in the SSB database." }, | ||||
| }; | ||||
|  | ||||
| static int _tf_command_test(const char* file, int argc, char* argv[]) | ||||
| @@ -519,57 +517,6 @@ xopt_help: | ||||
| } | ||||
|  | ||||
| #if !defined(__ANDROID__) | ||||
| static int _tf_command_check(const char* file, int argc, char* argv[]) | ||||
| { | ||||
| 	typedef struct args_t { | ||||
| 		bool help; | ||||
| 	} args_t; | ||||
|  | ||||
| 	xoptOption options[] = { | ||||
| 		{ "help", 'h', offsetof(args_t, help), NULL, XOPT_TYPE_BOOL, NULL, "Shows this help message." }, | ||||
| 		XOPT_NULLOPTION, | ||||
| 	}; | ||||
|  | ||||
| 	args_t args = { 0 }; | ||||
| 	const char** extras = NULL; | ||||
| 	int extra_count = 0; | ||||
| 	const char *err = NULL; | ||||
| 	XOPT_PARSE(file, XOPT_CTX_KEEPFIRST | XOPT_CTX_STRICT, options, &args, argc, (const char**)argv, &extra_count, &extras, &err, stderr, "check [options]", "options:", NULL, 15); | ||||
| 	if (err) | ||||
| 	{ | ||||
| 		fprintf(stderr, "Error: %s\n", err); | ||||
| 		return 2; | ||||
| 	} | ||||
|  | ||||
| 	bool result = true; | ||||
| 	sqlite3* db = NULL; | ||||
| 	sqlite3_open(k_db_path_default, &db); | ||||
| 	if (extra_count) | ||||
| 	{ | ||||
| 		for (int i = 0; i < extra_count; i++) | ||||
| 		{ | ||||
| 			result = result && tf_ssb_db_check(db, extras[i]); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		result = tf_ssb_db_check(db, NULL); | ||||
| 	} | ||||
| 	sqlite3_close(db); | ||||
| 	if (extras) | ||||
| 	{ | ||||
| 		free((void*)extras); | ||||
| 	} | ||||
| 	return result ? EXIT_SUCCESS : EXIT_FAILURE; | ||||
|  | ||||
| xopt_help: | ||||
| 	if (extras) | ||||
| 	{ | ||||
| 		free((void*)extras); | ||||
| 	} | ||||
| 	return 1; | ||||
| } | ||||
|  | ||||
| static int _tf_command_usage(const char* file, int argc, char* argv[]) | ||||
| { | ||||
| 	tf_printf("Usage: %s command [command-options]\n", file); | ||||
|   | ||||
							
								
								
									
										12
									
								
								src/mem.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/mem.c
									
									
									
									
									
								
							| @@ -398,27 +398,27 @@ size_t tf_mem_get_uv_malloc_size() | ||||
| } | ||||
|  | ||||
| #if defined(__OpenBSD__) | ||||
| void* _tf_tls_alloc(size_t size) | ||||
| static void* _tf_tls_alloc(size_t size) | ||||
| #else | ||||
| void* _tf_tls_alloc(size_t size, const char* file, int line) | ||||
| static void* _tf_tls_alloc(size_t size, const char* file, int line) | ||||
| #endif | ||||
| { | ||||
| 	return _tf_alloc(&s_tls_malloc_size, size); | ||||
| } | ||||
|  | ||||
| #if defined(__OpenBSD__) | ||||
| void* _tf_tls_realloc(void* ptr, size_t size) | ||||
| static void* _tf_tls_realloc(void* ptr, size_t size) | ||||
| #else | ||||
| void* _tf_tls_realloc(void* ptr, size_t size, const char* file, int line) | ||||
| static void* _tf_tls_realloc(void* ptr, size_t size, const char* file, int line) | ||||
| #endif | ||||
| { | ||||
| 	return _tf_realloc(&s_tls_malloc_size, ptr, size); | ||||
| } | ||||
|  | ||||
| #if defined(__OpenBSD__) | ||||
| void _tf_tls_free(void* ptr) | ||||
| static void _tf_tls_free(void* ptr) | ||||
| #else | ||||
| void _tf_tls_free(void* ptr, const char* file, int line) | ||||
| static void _tf_tls_free(void* ptr, const char* file, int line) | ||||
| #endif | ||||
| { | ||||
| 	_tf_free(&s_tls_malloc_size, ptr); | ||||
|   | ||||
| @@ -84,22 +84,22 @@ static void _buffer_append(buffer_t* buffer, const void* data, size_t size) | ||||
| 	buffer->size += size; | ||||
| } | ||||
|  | ||||
| void _serialize_writeInt8(buffer_t* buffer, int8_t value) | ||||
| static void _serialize_writeInt8(buffer_t* buffer, int8_t value) | ||||
| { | ||||
| 	_buffer_append(buffer, &value, sizeof(value)); | ||||
| } | ||||
|  | ||||
| void _serialize_writeInt32(buffer_t* buffer, int32_t value) | ||||
| static void _serialize_writeInt32(buffer_t* buffer, int32_t value) | ||||
| { | ||||
| 	_buffer_append(buffer, &value, sizeof(value)); | ||||
| } | ||||
|  | ||||
| void _serialize_writeInt64(buffer_t* buffer, int64_t value) | ||||
| static void _serialize_writeInt64(buffer_t* buffer, int64_t value) | ||||
| { | ||||
| 	_buffer_append(buffer, &value, sizeof(value)); | ||||
| } | ||||
|  | ||||
| void _serialize_writeDouble(buffer_t* buffer, double value) | ||||
| static void _serialize_writeDouble(buffer_t* buffer, double value) | ||||
| { | ||||
| 	_buffer_append(buffer, &value, sizeof(value)); | ||||
| } | ||||
| @@ -119,21 +119,21 @@ static int8_t _serialize_readInt8(const char** buffer, size_t* size) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| int32_t _serialize_readInt32(const char** buffer, size_t* size) | ||||
| static int32_t _serialize_readInt32(const char** buffer, size_t* size) | ||||
| { | ||||
| 	int32_t result = 0; | ||||
| 	_serialize_read(buffer, size, &result, sizeof(result)); | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| int64_t _serialize_readInt64(const char** buffer, size_t* size) | ||||
| static int64_t _serialize_readInt64(const char** buffer, size_t* size) | ||||
| { | ||||
| 	int64_t result = 0; | ||||
| 	_serialize_read(buffer, size, &result, sizeof(result)); | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| double _serialize_readDouble(const char** buffer, size_t* size) | ||||
| static double _serialize_readDouble(const char** buffer, size_t* size) | ||||
| { | ||||
| 	double result = 0; | ||||
| 	_serialize_read(buffer, size, &result, sizeof(result)); | ||||
|   | ||||
| @@ -164,7 +164,7 @@ typedef struct _socket_resolve_data_t { | ||||
| 	promiseid_t promise; | ||||
| } socket_resolve_data_t; | ||||
|  | ||||
| socket_t* _socket_create_internal(JSContext* context) | ||||
| static socket_t* _socket_create_internal(JSContext* context) | ||||
| { | ||||
| 	socket_t* socket = tf_malloc(sizeof(socket_t)); | ||||
| 	memset(socket, 0, sizeof(*socket)); | ||||
| @@ -226,12 +226,12 @@ socket_t* _socket_create_internal(JSContext* context) | ||||
| 	return socket; | ||||
| } | ||||
|  | ||||
| JSValue _socket_create(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_create(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	return _socket_create_internal(context)->_object; | ||||
| } | ||||
|  | ||||
| void _socket_close_internal(socket_t* socket) | ||||
| static void _socket_close_internal(socket_t* socket) | ||||
| { | ||||
| 	_socket_set_handler(socket, &socket->_onRead, JS_UNDEFINED); | ||||
| 	_socket_set_handler(socket, &socket->_onError, JS_UNDEFINED); | ||||
| @@ -271,14 +271,14 @@ void _socket_close_internal(socket_t* socket) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void _socket_finalizer(JSRuntime* runtime, JSValue value) | ||||
| static void _socket_finalizer(JSRuntime* runtime, JSValue value) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(value, _classId); | ||||
| 	socket->_object = JS_UNDEFINED; | ||||
| 	_socket_close_internal(socket); | ||||
| } | ||||
|  | ||||
| void _socket_reportError(socket_t* socket, const char* error) | ||||
| static void _socket_reportError(socket_t* socket, const char* error) | ||||
| { | ||||
| 	JSContext* context = tf_task_get_context(socket->_task); | ||||
| 	JSValue ref = JS_DupValue(context, socket->_object); | ||||
| @@ -299,7 +299,7 @@ void _socket_reportError(socket_t* socket, const char* error) | ||||
| 	JS_FreeValue(context, ref); | ||||
| } | ||||
|  | ||||
| void _socket_reportTlsErrors(socket_t* socket) | ||||
| static void _socket_reportTlsErrors(socket_t* socket) | ||||
| { | ||||
| 	char buffer[4096]; | ||||
| 	while (socket->_tls && tf_tls_session_get_error(socket->_tls, buffer, sizeof(buffer))) | ||||
| @@ -308,7 +308,7 @@ void _socket_reportTlsErrors(socket_t* socket) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| JSValue _socket_startTls(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_startTls(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	if (!socket->_tls) | ||||
| @@ -359,7 +359,7 @@ JSValue _socket_startTls(JSContext* context, JSValueConst this_val, int argc, JS | ||||
| 	} | ||||
| } | ||||
|  | ||||
| JSValue _socket_stopTls(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_stopTls(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	if (socket->_tls) | ||||
| @@ -375,7 +375,7 @@ JSValue _socket_stopTls(JSContext* context, JSValueConst this_val, int argc, JSV | ||||
| 	return JS_NULL; | ||||
| } | ||||
|  | ||||
| bool _socket_processSomeOutgoingTls(socket_t* socket, promiseid_t promise, uv_write_cb callback) | ||||
| static bool _socket_processSomeOutgoingTls(socket_t* socket, promiseid_t promise, uv_write_cb callback) | ||||
| { | ||||
| 	if (!socket->_socket.data) | ||||
| 	{ | ||||
| @@ -416,14 +416,14 @@ bool _socket_processSomeOutgoingTls(socket_t* socket, promiseid_t promise, uv_wr | ||||
| 	return result > 0; | ||||
| } | ||||
|  | ||||
| void _socket_processOutgoingTls(socket_t* socket) | ||||
| static void _socket_processOutgoingTls(socket_t* socket) | ||||
| { | ||||
| 	while (_socket_processSomeOutgoingTls(socket, -1, _socket_onWrite)) | ||||
| 	{ | ||||
| 	} | ||||
| } | ||||
|  | ||||
| JSValue _socket_bind(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_bind(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	const char* node = JS_ToCString(tf_task_get_context(socket->_task), argv[0]); | ||||
| @@ -450,7 +450,7 @@ JSValue _socket_bind(JSContext* context, JSValueConst this_val, int argc, JSValu | ||||
| 	return promise; | ||||
| } | ||||
|  | ||||
| void _socket_onResolvedForBind(uv_getaddrinfo_t* resolver, int status, struct addrinfo* result) | ||||
| static void _socket_onResolvedForBind(uv_getaddrinfo_t* resolver, int status, struct addrinfo* result) | ||||
| { | ||||
| 	socket_resolve_data_t* data = (socket_resolve_data_t*)resolver->data; | ||||
| 	if (status != 0) | ||||
| @@ -486,7 +486,7 @@ void _socket_onResolvedForBind(uv_getaddrinfo_t* resolver, int status, struct ad | ||||
| 	tf_free(data); | ||||
| } | ||||
|  | ||||
| JSValue _socket_connect(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_connect(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	socket->_direction = kConnect; | ||||
| @@ -520,7 +520,7 @@ JSValue _socket_connect(JSContext* context, JSValueConst this_val, int argc, JSV | ||||
| 	return promise; | ||||
| } | ||||
|  | ||||
| void _socket_onResolvedForConnect(uv_getaddrinfo_t* resolver, int status, struct addrinfo* result) | ||||
| static void _socket_onResolvedForConnect(uv_getaddrinfo_t* resolver, int status, struct addrinfo* result) | ||||
| { | ||||
| 	socket_resolve_data_t* data = resolver->data; | ||||
| 	if (status != 0) | ||||
| @@ -549,7 +549,7 @@ void _socket_onResolvedForConnect(uv_getaddrinfo_t* resolver, int status, struct | ||||
| 	tf_free(data); | ||||
| } | ||||
|  | ||||
| void _socket_onConnect(uv_connect_t* request, int status) | ||||
| static void _socket_onConnect(uv_connect_t* request, int status) | ||||
| { | ||||
| 	promiseid_t promise = (intptr_t)request->data; | ||||
| 	if (promise != -1) | ||||
| @@ -571,7 +571,7 @@ void _socket_onConnect(uv_connect_t* request, int status) | ||||
| 	tf_free(request); | ||||
| } | ||||
|  | ||||
| JSValue _socket_listen(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_listen(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	socket->_listening = true; | ||||
| @@ -593,7 +593,7 @@ JSValue _socket_listen(JSContext* context, JSValueConst this_val, int argc, JSVa | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void _socket_onNewConnection(uv_stream_t* server, int status) | ||||
| static void _socket_onNewConnection(uv_stream_t* server, int status) | ||||
| { | ||||
| 	socket_t* socket = server->data; | ||||
| 	JSContext* context = tf_task_get_context(socket->_task); | ||||
| @@ -609,7 +609,7 @@ void _socket_onNewConnection(uv_stream_t* server, int status) | ||||
| 	JS_FreeValue(context, ref); | ||||
| } | ||||
|  | ||||
| JSValue _socket_accept(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_accept(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
|  | ||||
| @@ -639,7 +639,7 @@ JSValue _socket_accept(JSContext* context, JSValueConst this_val, int argc, JSVa | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| JSValue _socket_close(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_close(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	if (socket->_closePromise == -1 && | ||||
| @@ -653,7 +653,7 @@ JSValue _socket_close(JSContext* context, JSValueConst this_val, int argc, JSVal | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _socket_shutdown(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_shutdown(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	promiseid_t promise = -1; | ||||
| @@ -669,7 +669,7 @@ JSValue _socket_shutdown(JSContext* context, JSValueConst this_val, int argc, JS | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| void _socket_shutdownInternal(socket_t* socket, promiseid_t promise) | ||||
| static void _socket_shutdownInternal(socket_t* socket, promiseid_t promise) | ||||
| { | ||||
| 	uv_shutdown_t* request = tf_malloc(sizeof(uv_shutdown_t)); | ||||
| 	memset(request, 0, sizeof(*request)); | ||||
| @@ -684,7 +684,7 @@ void _socket_shutdownInternal(socket_t* socket, promiseid_t promise) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void _socket_processTlsShutdown(socket_t* socket, promiseid_t promise) | ||||
| static void _socket_processTlsShutdown(socket_t* socket, promiseid_t promise) | ||||
| { | ||||
| 	if (!socket->_tls) | ||||
| 	{ | ||||
| @@ -700,7 +700,7 @@ void _socket_processTlsShutdown(socket_t* socket, promiseid_t promise) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void _socket_onTlsShutdown(uv_write_t* request, int status) | ||||
| static void _socket_onTlsShutdown(uv_write_t* request, int status) | ||||
| { | ||||
| 	socket_t* socket = request->handle->data; | ||||
| 	promiseid_t promise = (intptr_t)request->data; | ||||
| @@ -708,14 +708,14 @@ void _socket_onTlsShutdown(uv_write_t* request, int status) | ||||
| 	tf_free(request); | ||||
| } | ||||
|  | ||||
| JSValue _socket_onError(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_onError(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	_socket_set_handler(socket, &socket->_onError, argv[0]); | ||||
| 	return JS_NULL; | ||||
| } | ||||
|  | ||||
| JSValue _socket_read(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_read(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	JSValue ref = JS_DupValue(context, socket->_object); | ||||
| @@ -745,12 +745,12 @@ JSValue _socket_read(JSContext* context, JSValueConst this_val, int argc, JSValu | ||||
| 	return read_result; | ||||
| } | ||||
|  | ||||
| void _socket_allocateBuffer(uv_handle_t* handle, size_t suggestedSize, uv_buf_t* buf) | ||||
| static void _socket_allocateBuffer(uv_handle_t* handle, size_t suggestedSize, uv_buf_t* buf) | ||||
| { | ||||
| 	*buf = uv_buf_init(tf_malloc(suggestedSize), suggestedSize); | ||||
| } | ||||
|  | ||||
| void _socket_onRead(uv_stream_t* stream, ssize_t readSize, const uv_buf_t* buffer) | ||||
| static void _socket_onRead(uv_stream_t* stream, ssize_t readSize, const uv_buf_t* buffer) | ||||
| { | ||||
| 	socket_t* socket = stream->data; | ||||
| 	_socket_resetTimeout(socket); | ||||
| @@ -849,7 +849,7 @@ void _socket_onRead(uv_stream_t* stream, ssize_t readSize, const uv_buf_t* buffe | ||||
| 	JS_FreeValue(context, ref); | ||||
| } | ||||
|  | ||||
| void _socket_notifyDataRead(socket_t* socket, const char* data, size_t length) | ||||
| static void _socket_notifyDataRead(socket_t* socket, const char* data, size_t length) | ||||
| { | ||||
| 	if (data && length > 0) | ||||
| 	{ | ||||
| @@ -870,7 +870,7 @@ void _socket_notifyDataRead(socket_t* socket, const char* data, size_t length) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| int _socket_writeBytes(socket_t* socket, promiseid_t promise, int (*callback)(socket_t* socket, promiseid_t promise, const char*, size_t), JSValue value, int* outLength) | ||||
| static int _socket_writeBytes(socket_t* socket, promiseid_t promise, int (*callback)(socket_t* socket, promiseid_t promise, const char*, size_t), JSValue value, int* outLength) | ||||
| { | ||||
| 	int result = -1; | ||||
| 	size_t length; | ||||
| @@ -910,7 +910,7 @@ int _socket_writeBytes(socket_t* socket, promiseid_t promise, int (*callback)(so | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| int _socket_writeInternal(socket_t* socket, promiseid_t promise, const char* data, size_t length) | ||||
| static int _socket_writeInternal(socket_t* socket, promiseid_t promise, const char* data, size_t length) | ||||
| { | ||||
| 	if (!socket->_socket.data) | ||||
| 	{ | ||||
| @@ -942,7 +942,7 @@ static int _socket_write_tls(socket_t* socket, promiseid_t promise, const char* | ||||
| 	return tf_tls_session_write_plain(socket->_tls, data, size); | ||||
| } | ||||
|  | ||||
| JSValue _socket_write(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_write(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	promiseid_t promise = -1; | ||||
| @@ -989,7 +989,7 @@ JSValue _socket_write(JSContext* context, JSValueConst this_val, int argc, JSVal | ||||
| 	return write_result; | ||||
| } | ||||
|  | ||||
| void _socket_onWrite(uv_write_t* request, int status) | ||||
| static void _socket_onWrite(uv_write_t* request, int status) | ||||
| { | ||||
| 	socket_t* socket = request->handle->data; | ||||
| 	_socket_resumeTimeout(socket); | ||||
| @@ -1014,7 +1014,7 @@ static void _socket_timeout(uv_timer_t* timer) | ||||
| 	_socket_close_internal(socket); | ||||
| } | ||||
|  | ||||
| JSValue _socket_setActivityTimeout(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_setActivityTimeout(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	int64_t timeout = 0; | ||||
| @@ -1028,13 +1028,13 @@ JSValue _socket_setActivityTimeout(JSContext* context, JSValueConst this_val, in | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _socket_isConnected(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_isConnected(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	return socket->_connected ? JS_TRUE : JS_FALSE; | ||||
| } | ||||
|  | ||||
| void _socket_onClose(uv_handle_t* handle) | ||||
| static void _socket_onClose(uv_handle_t* handle) | ||||
| { | ||||
| 	--_open_count; | ||||
| 	socket_t* socket = handle->data; | ||||
| @@ -1056,7 +1056,7 @@ void _socket_onClose(uv_handle_t* handle) | ||||
| 	_socket_close_internal(socket); | ||||
| } | ||||
|  | ||||
| void _socket_onShutdown(uv_shutdown_t* request, int status) | ||||
| static void _socket_onShutdown(uv_shutdown_t* request, int status) | ||||
| { | ||||
| 	socket_t* socket = request->handle->data; | ||||
| 	_socket_resetTimeout(socket); | ||||
| @@ -1074,7 +1074,7 @@ void _socket_onShutdown(uv_shutdown_t* request, int status) | ||||
| 	tf_free(request); | ||||
| } | ||||
|  | ||||
| JSValue _socket_getPeerName(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_getPeerName(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	struct sockaddr_in6 addr; | ||||
| @@ -1100,7 +1100,7 @@ JSValue _socket_getPeerName(JSContext* context, JSValueConst this_val, int argc, | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _socket_getPeerCertificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_getPeerCertificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	if (socket->_tls) | ||||
| @@ -1115,13 +1115,13 @@ JSValue _socket_getPeerCertificate(JSContext* context, JSValueConst this_val, in | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _socket_getNoDelay(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_getNoDelay(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	return JS_NewBool(context, socket->_noDelay); | ||||
| } | ||||
|  | ||||
| JSValue _socket_setNoDelay(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _socket_setNoDelay(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	socket_t* socket = JS_GetOpaque(this_val, _classId); | ||||
| 	int result = JS_ToBool(context, argv[0]); | ||||
| @@ -1130,7 +1130,7 @@ JSValue _socket_setNoDelay(JSContext* context, JSValueConst this_val, int argc, | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _sockets_get(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _sockets_get(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	JSValue array = JS_NewArray(context); | ||||
| 	for (int i = 0; i < _sockets_count; i++) | ||||
|   | ||||
							
								
								
									
										126
									
								
								src/ssb.db.c
									
									
									
									
									
								
							
							
						
						
									
										126
									
								
								src/ssb.db.c
									
									
									
									
									
								
							| @@ -1033,132 +1033,6 @@ JSValue tf_ssb_format_message(JSContext* context, const char* previous, const ch | ||||
| 	return value; | ||||
| } | ||||
|  | ||||
| bool _tf_ssb_update_message_id(sqlite3* db, const char* old_id, const char* new_id) | ||||
| { | ||||
| 	bool success = false; | ||||
| 	sqlite3_stmt* statement = NULL; | ||||
| 	if (sqlite3_prepare(db, "UPDATE messages SET id = ? WHERE id = ?", -1, &statement, NULL) == SQLITE_OK) | ||||
| 	{ | ||||
| 		if (sqlite3_bind_text(statement, 1, new_id, -1, NULL) == SQLITE_OK && | ||||
| 			sqlite3_bind_text(statement, 2, old_id, -1, NULL) == SQLITE_OK) | ||||
| 		{ | ||||
| 			success = sqlite3_step(statement) == SQLITE_DONE; | ||||
| 		} | ||||
| 		sqlite3_finalize(statement); | ||||
| 	} | ||||
| 	return success; | ||||
| } | ||||
|  | ||||
| bool tf_ssb_db_check(sqlite3* db, const char* check_author) | ||||
| { | ||||
| 	JSMallocFunctions funcs = { 0 }; | ||||
| 	tf_get_js_malloc_functions(&funcs); | ||||
| 	JSRuntime* runtime = JS_NewRuntime2(&funcs, NULL); | ||||
| 	JSContext* context = JS_NewContext(runtime); | ||||
|  | ||||
| 	sqlite3_stmt* statement = NULL; | ||||
| 	int result = check_author ? | ||||
| 		sqlite3_prepare(db, "SELECT id, previous, author, sequence, timestamp, hash, content, signature, sequence_before_author FROM messages WHERE author = ? ORDER BY author, sequence", -1, &statement, NULL) : | ||||
| 		sqlite3_prepare(db, "SELECT id, previous, author, sequence, timestamp, hash, content, signature, sequence_before_author FROM messages ORDER BY author, sequence", -1, &statement, NULL); | ||||
| 	if (result == SQLITE_OK) | ||||
| 	{ | ||||
| 		if (check_author) | ||||
| 		{ | ||||
| 			sqlite3_bind_text(statement, 1, check_author, -1, NULL); | ||||
| 		} | ||||
| 		char previous_id[k_id_base64_len]; | ||||
| 		int64_t previous_sequence = -1; | ||||
| 		char previous_author[k_id_base64_len] = { 0 }; | ||||
| 		while (sqlite3_step(statement) == SQLITE_ROW) | ||||
| 		{ | ||||
| 			const char* id = (const char*)sqlite3_column_text(statement, 0); | ||||
| 			const char* previous = (const char*)sqlite3_column_text(statement, 1); | ||||
| 			const char* author = (const char*)sqlite3_column_text(statement, 2); | ||||
| 			int64_t sequence = sqlite3_column_int64(statement, 3); | ||||
| 			double timestamp = sqlite3_column_double(statement, 4); | ||||
| 			const char* hash = (const char*)sqlite3_column_text(statement, 5); | ||||
| 			const char* content = (const char*)sqlite3_column_text(statement, 6); | ||||
| 			const char* signature = (const char*)sqlite3_column_text(statement, 7); | ||||
| 			bool sequence_before_author = sqlite3_column_int(statement, 8); | ||||
| 			JSValue message = tf_ssb_format_message(context, previous, author, sequence, timestamp, hash, content, signature, sequence_before_author); | ||||
| 			char out_signature[512]; | ||||
| 			char actual_id[k_id_base64_len]; | ||||
| 			bool actual_sequence_before_author = false; | ||||
| 			JSValue j = JS_JSONStringify(context, message, JS_NULL, JS_NewInt32(context, 2)); | ||||
| 			const char* jv = JS_ToCString(context, j); | ||||
|  | ||||
| 			bool delete_following = false; | ||||
| 			if (strcmp(author, previous_author)) | ||||
| 			{ | ||||
| 				tf_printf("%s\n", author); | ||||
| 			} | ||||
|  | ||||
| 			if (strcmp(author, previous_author) == 0 && sequence != previous_sequence + 1) | ||||
| 			{ | ||||
| 				tf_printf("Detected gap in messages for %s at sequence = %" PRId64 " => %" PRId64 ".\n", author, previous_sequence, sequence); | ||||
| 				delete_following = true; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				if (tf_ssb_verify_and_strip_signature(context, message, actual_id, sizeof(actual_id), out_signature, sizeof(out_signature), &actual_sequence_before_author)) | ||||
| 				{ | ||||
| 					if (previous && strcmp(previous, previous_id)) | ||||
| 					{ | ||||
| 						tf_printf("%s:%d previous was %s should be %s\n", id, (int)sequence, previous_id, previous); | ||||
| 					} | ||||
| 					if (strcmp(id, actual_id)) | ||||
| 					{ | ||||
| 						if (_tf_ssb_update_message_id(db, id, actual_id)) | ||||
| 						{ | ||||
| 							tf_printf("updated %s to %s\n", id, actual_id); | ||||
| 						} | ||||
| 						else | ||||
| 						{ | ||||
| 							tf_printf("failed to update %s to %s\n", id, actual_id); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					tf_printf("%s sequence=%" PRId64 " unable to verify signature for %s sequence_before_author=%d message=[%.*s]\n", author, sequence, id, sequence_before_author, (int)strlen(jv), jv); | ||||
| 					delete_following = true; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if (delete_following) | ||||
| 			{ | ||||
| 				tf_printf("Deleting author = %s sequence >= %" PRId64 ".\n", author, sequence); | ||||
| 				sqlite3_stmt* delete_statement = NULL; | ||||
| 				if (sqlite3_prepare(db, "DELETE FROM messages WHERE author = ? AND sequence >= ?", -1, &delete_statement, NULL) == SQLITE_OK) | ||||
| 				{ | ||||
| 					if (sqlite3_bind_text(delete_statement, 1, author, -1, NULL) == SQLITE_OK && | ||||
| 						sqlite3_bind_int64(delete_statement, 2, sequence) == SQLITE_OK) | ||||
| 					{ | ||||
| 						if (sqlite3_step(delete_statement) != SQLITE_DONE) | ||||
| 						{ | ||||
| 							tf_printf("Error deleting author = %s sequence >= %" PRId64 ".\n", author, sequence); | ||||
| 						} | ||||
| 					} | ||||
| 					sqlite3_finalize(delete_statement); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			snprintf(previous_author, sizeof(previous_author), "%s", author); | ||||
| 			previous_sequence = sequence; | ||||
|  | ||||
| 			JS_FreeCString(context, jv); | ||||
| 			JS_FreeValue(context, j); | ||||
| 			snprintf(previous_id, sizeof(previous_id), "%s", id); | ||||
| 			JS_FreeValue(context, message); | ||||
| 		} | ||||
| 		sqlite3_finalize(statement); | ||||
| 	} | ||||
|  | ||||
| 	JS_FreeContext(context); | ||||
| 	JS_FreeRuntime(runtime); | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| int tf_ssb_db_identity_get_count_for_user(tf_ssb_t* ssb, const char* user) | ||||
| { | ||||
| 	int count = 0; | ||||
|   | ||||
| @@ -29,7 +29,6 @@ static const int k_sql_async_timeout_ms = 60 * 1000; | ||||
|  | ||||
| static JSClassID _tf_ssb_classId; | ||||
|  | ||||
| void _tf_ssb_on_rpc(tf_ssb_connection_t* connection, uint8_t flags, int32_t request_number, JSValue args, const uint8_t* message, size_t size, void* user_data); | ||||
| static JSValue _tf_ssb_appendMessageWithIdentity(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
|  | ||||
| static JSValue _tf_ssb_createIdentity(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| @@ -413,7 +412,7 @@ typedef struct _blob_store_t | ||||
| 	uint8_t* buffer; | ||||
| } blob_store_t; | ||||
|  | ||||
| void _tf_ssb_blob_store_complete(blob_store_t* store, const char* id) | ||||
| static void _tf_ssb_blob_store_complete(blob_store_t* store, const char* id) | ||||
| { | ||||
| 	JSValue result = JS_UNDEFINED; | ||||
| 	if (id) | ||||
| @@ -437,7 +436,7 @@ void _tf_ssb_blob_store_complete(blob_store_t* store, const char* id) | ||||
| 	tf_free(store); | ||||
| } | ||||
|  | ||||
| void _tf_ssb_blob_store_callback(const char* id, bool is_new, void* user_data) | ||||
| static void _tf_ssb_blob_store_callback(const char* id, bool is_new, void* user_data) | ||||
| { | ||||
| 	blob_store_t* store = user_data; | ||||
| 	_tf_ssb_blob_store_complete(store, id); | ||||
| @@ -975,7 +974,7 @@ typedef struct _message_store_t | ||||
| 	JSValue promise[2]; | ||||
| } message_store_t; | ||||
|  | ||||
| void _tf_ssb_message_store_callback(const char* id, bool verified, bool is_new, void* user_data) | ||||
| static void _tf_ssb_message_store_callback(const char* id, bool verified, bool is_new, void* user_data) | ||||
| { | ||||
| 	message_store_t* store = user_data; | ||||
| 	JSValue result = JS_Call(store->context, id ? store->promise[0] : store->promise[1], JS_UNDEFINED, 0, NULL); | ||||
|   | ||||
| @@ -257,7 +257,7 @@ typedef struct tunnel_t | ||||
| 	int32_t request_number; | ||||
| } tunnel_t; | ||||
|  | ||||
| void _tf_ssb_rpc_tunnel_callback(tf_ssb_connection_t* connection, uint8_t flags, int32_t request_number, JSValue args, const uint8_t* message, size_t size, void* user_data) | ||||
| static void _tf_ssb_rpc_tunnel_callback(tf_ssb_connection_t* connection, uint8_t flags, int32_t request_number, JSValue args, const uint8_t* message, size_t size, void* user_data) | ||||
| { | ||||
| 	tunnel_t* tun = user_data; | ||||
| 	if (flags & k_ssb_rpc_flag_end_error) | ||||
| @@ -271,7 +271,7 @@ void _tf_ssb_rpc_tunnel_callback(tf_ssb_connection_t* connection, uint8_t flags, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void _tf_ssb_rpc_tunnel_cleanup(tf_ssb_t* ssb, void* user_data) | ||||
| static void _tf_ssb_rpc_tunnel_cleanup(tf_ssb_t* ssb, void* user_data) | ||||
| { | ||||
| 	tf_free(user_data); | ||||
| } | ||||
|   | ||||
							
								
								
									
										22
									
								
								src/task.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								src/task.c
									
									
									
									
									
								
							| @@ -192,24 +192,12 @@ static bool _export_record_release(tf_task_t* task, export_record_t** export) | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| static JSValue _tf_task_version(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tf_task_platform(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tf_task_get_parent(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tf_task_exit(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tf_task_getStats(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tf_task_getFile(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tf_task_setTimeout(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
|  | ||||
| static promise_t* _tf_task_find_promise(tf_task_t* task, promiseid_t id); | ||||
| static void _tf_task_sendPromiseResolve(tf_task_t* from, tf_taskstub_t* to, promiseid_t promise, JSValue result); | ||||
| static void _tf_task_sendPromiseReject(tf_task_t* from, tf_taskstub_t* to, promiseid_t promise, JSValue result); | ||||
|  | ||||
| static void _tf_task_sendPromiseExportMessage(tf_task_t* from, tf_taskstub_t* to, tf_task_message_t messageType, promiseid_t promiseId, exportid_t exportId, JSValue result); | ||||
| static JSValue _tf_task_executeSource(tf_task_t* task, const char* source, const char* name); | ||||
| static tf_taskstub_t* _tf_task_get_stub(tf_task_t* task, taskid_t id); | ||||
| static void _tf_task_release_export(tf_taskstub_t* stub, exportid_t exportId); | ||||
| static bool _tf_task_run_jobs(tf_task_t* task); | ||||
| static void _tf_task_run_jobs_idle(uv_idle_t* idle); | ||||
| static void _tf_task_run_jobs_prepare(uv_prepare_t* prepare); | ||||
| static void _timeout_unlink(tf_task_t* task, timeout_t* timeout); | ||||
| static void _timeout_closed(uv_handle_t* handle); | ||||
| @@ -386,7 +374,7 @@ static const char* _task_loadFile(tf_task_t* task, const char* fileName, size_t* | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| JSValue _tf_task_exit(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _tf_task_exit(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_task_t* task = JS_GetContextOpaque(context); | ||||
| 	tf_trace_begin(task->_trace, __func__); | ||||
| @@ -507,7 +495,7 @@ static export_record_t** _task_get_export(tf_task_t* task, exportid_t export_id) | ||||
| 	return it; | ||||
| } | ||||
|  | ||||
| JSValue _task_invokeExport_internal(tf_taskstub_t* from, tf_task_t* to, exportid_t exportId, const char* buffer, size_t size) | ||||
| static JSValue _task_invokeExport_internal(tf_taskstub_t* from, tf_task_t* to, exportid_t exportId, const char* buffer, size_t size) | ||||
| { | ||||
| 	JSValue result = JS_NULL; | ||||
| 	export_record_t** it = _task_get_export(to, exportId); | ||||
| @@ -691,7 +679,7 @@ static void _tf_task_sendPromiseExportMessage(tf_task_t* from, tf_taskstub_t* to | ||||
| 	tf_free(copy); | ||||
| } | ||||
|  | ||||
| JSValue _tf_task_get_parent(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _tf_task_get_parent(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_task_t* task = JS_GetContextOpaque(context); | ||||
| 	return task->_parent ? JS_DupValue(context, tf_taskstub_get_task_object(task->_parent)) : JS_UNDEFINED; | ||||
| @@ -979,7 +967,7 @@ static JSValue _tf_task_getFile(JSContext* context, JSValueConst this_val, int a | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| const char* _tf_task_get_message_type(tf_task_message_t type) | ||||
| static const char* _tf_task_get_message_type(tf_task_message_t type) | ||||
| { | ||||
| 	switch (type) | ||||
| 	{ | ||||
| @@ -1545,7 +1533,7 @@ static void _tf_task_run_jobs_prepare(uv_prepare_t* prepare) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| JSModuleDef* _tf_task_module_loader(JSContext* context, const char* module_name, void* opaque) | ||||
| static JSModuleDef* _tf_task_module_loader(JSContext* context, const char* module_name, void* opaque) | ||||
| { | ||||
| 	tf_task_t* task = opaque; | ||||
| 	JSValue source_value = JS_GetPropertyStr(context, task->_loadedFiles, module_name); | ||||
|   | ||||
| @@ -208,7 +208,7 @@ static JSValue _taskstub_create(JSContext* context, JSValueConst this_val, int a | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| void _taskstub_gc_mark(JSRuntime* rt, JSValueConst value, JS_MarkFunc mark_func) | ||||
| static void _taskstub_gc_mark(JSRuntime* rt, JSValueConst value, JS_MarkFunc mark_func) | ||||
| { | ||||
| 	tf_taskstub_t* stub = JS_GetOpaque(value, _classId); | ||||
| 	if (stub) | ||||
|   | ||||
| @@ -189,7 +189,7 @@ int tf_tls_session_get_peer_certificate(tf_tls_session_t* session, char* buffer, | ||||
| } | ||||
|  | ||||
| #if OPENSSL_VERSION_NUMBER < 0x10100000L | ||||
| bool _tls_session_wildcard_match(const char* pattern, size_t pattern_length, const char* name) | ||||
| static bool _tls_session_wildcard_match(const char* pattern, size_t pattern_length, const char* name) | ||||
| { | ||||
| 	const char* it = pattern; | ||||
| 	while (it - pattern < pattern_length && *name) | ||||
|   | ||||
| @@ -17,14 +17,10 @@ typedef struct _tf_tls_context_t { | ||||
| 	JSValue object; | ||||
| } tf_tls_context_t; | ||||
|  | ||||
| static JSValue _tls_context_set_certificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tls_context_set_private_key(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static JSValue _tls_context_add_trusted_certificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
|  | ||||
| static JSValue _tls_context_create(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv); | ||||
| static void _tls_context_finalizer(JSRuntime *runtime, JSValue value); | ||||
|  | ||||
| JSValue _tls_context_set_certificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _tls_context_set_certificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_tls_context_t* tls = JS_GetOpaque(this_val, _classId); | ||||
| 	const char* value = JS_ToCString(context, argv[0]); | ||||
| @@ -33,7 +29,7 @@ JSValue _tls_context_set_certificate(JSContext* context, JSValueConst this_val, | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _tls_context_set_private_key(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _tls_context_set_private_key(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_tls_context_t* tls = JS_GetOpaque(this_val, _classId); | ||||
| 	const char* value = JS_ToCString(context, argv[0]); | ||||
| @@ -42,7 +38,7 @@ JSValue _tls_context_set_private_key(JSContext* context, JSValueConst this_val, | ||||
| 	return JS_UNDEFINED; | ||||
| } | ||||
|  | ||||
| JSValue _tls_context_add_trusted_certificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _tls_context_add_trusted_certificate(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_tls_context_t* tls = JS_GetOpaque(this_val, _classId); | ||||
| 	const char* value = JS_ToCString(context, argv[0]); | ||||
| @@ -77,7 +73,7 @@ int tf_tls_context_get_count() | ||||
| 	return _count; | ||||
| } | ||||
|  | ||||
| JSValue _tls_context_create(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _tls_context_create(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_tls_context_t* tls = tf_malloc(sizeof(tf_tls_context_t)); | ||||
| 	memset(tls, 0, sizeof(*tls)); | ||||
| @@ -96,7 +92,7 @@ JSValue _tls_context_create(JSContext* context, JSValueConst this_val, int argc, | ||||
| 	return tls->object; | ||||
| } | ||||
|  | ||||
| void _tls_context_finalizer(JSRuntime *runtime, JSValue value) | ||||
| static void _tls_context_finalizer(JSRuntime *runtime, JSValue value) | ||||
| { | ||||
| 	tf_tls_context_t* tls = JS_GetOpaque(value, _classId); | ||||
| 	if (tls->context) | ||||
|   | ||||
| @@ -183,7 +183,7 @@ JSValue tf_util_try_get_typed_array_buffer(JSContext* context, JSValueConst obj, | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| JSValue _util_print(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| static JSValue _util_print(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) | ||||
| { | ||||
| 	tf_task_t* task = JS_GetContextOpaque(context); | ||||
| 	if (task) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user