From 3269c7ca453e446378cb53d4be6be245f99c9fcf Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sat, 14 Jan 2023 19:32:36 +0000 Subject: [PATCH] Use tf_ssb_connection_rpc_send_json everywhere I can. Less code, and fixes some leaks. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4122 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- src/ssb.js.c | 28 --------------------- src/ssb.rpc.c | 65 +++++++++++-------------------------------------- src/ssb.tests.c | 12 +++------ 3 files changed, 17 insertions(+), 88 deletions(-) diff --git a/src/ssb.js.c b/src/ssb.js.c index 901d6acf..b1d9eb04 100644 --- a/src/ssb.js.c +++ b/src/ssb.js.c @@ -709,33 +709,6 @@ static JSValue _tf_ssb_createTunnel(JSContext* context, JSValueConst this_val, i return JS_UNDEFINED; } -static JSValue _tf_ssb_connectionSendJson(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) -{ - tf_ssb_t* ssb = JS_GetOpaque(this_val, _tf_ssb_classId); - const char* connection_id = JS_ToCString(context, argv[0]); - tf_ssb_connection_t* connection = tf_ssb_connection_get(ssb, connection_id); - - JSValue message_val = JS_JSONStringify(context, argv[1], JS_NULL, JS_NULL); - size_t size; - const char* message = JS_ToCStringLen(context, &size, message_val); - - uint32_t request_number = tf_ssb_connection_next_request_number(connection); - - tf_ssb_connection_rpc_send( - connection, - k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, - request_number, - (const uint8_t*)message, - size, - NULL, - NULL, - NULL); - JS_FreeCString(context, connection_id); - JS_FreeCString(context, message); - JS_FreeValue(context, message_val); - return JS_NewInt32(context, request_number); -} - static JSValue _tf_ssb_followingDeep(JSContext* context, JSValueConst this_val, int argc, JSValueConst* argv) { int depth = 2; @@ -807,7 +780,6 @@ void tf_ssb_register(JSContext* context, tf_ssb_t* ssb) JS_SetPropertyStr(context, object, "messageContentGet", JS_NewCFunction(context, _tf_ssb_messageContentGet, "messageContentGet", 1)); JS_SetPropertyStr(context, object, "connections", JS_NewCFunction(context, _tf_ssb_connections, "connections", 0)); JS_SetPropertyStr(context, object, "getConnection", JS_NewCFunction(context, _tf_ssb_getConnection, "getConnection", 1)); - JS_SetPropertyStr(context, object, "connectionSendJson", JS_NewCFunction(context, _tf_ssb_connectionSendJson, "connectionSendJson", 2)); JS_SetPropertyStr(context, object, "closeConnection", JS_NewCFunction(context, _tf_ssb_closeConnection, "closeConnection", 1)); JS_SetPropertyStr(context, object, "sqlStream", JS_NewCFunction(context, _tf_ssb_sqlStream, "sqlStream", 3)); JS_SetPropertyStr(context, object, "storeMessage", JS_NewCFunction(context, _tf_ssb_storeMessage, "storeMessage", 1)); diff --git a/src/ssb.rpc.c b/src/ssb.rpc.c index 05a25714..97398e42 100644 --- a/src/ssb.rpc.c +++ b/src/ssb.rpc.c @@ -120,12 +120,7 @@ static void _tf_ssb_rpc_blob_wants_added_callback(tf_ssb_t* ssb, const char* id, JSContext* context = tf_ssb_get_context(ssb); JSValue message = JS_NewObject(context); JS_SetPropertyStr(context, message, id, JS_NewInt64(context, -1)); - JSValue json = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t size = 0; - const char* message_str = JS_ToCStringLen(context, &size, json); - tf_ssb_connection_rpc_send(connection, k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, -blob_wants->request_number, (const uint8_t*)message_str, size, NULL, NULL, NULL); - JS_FreeCString(context, message_str); - JS_FreeValue(context, json); + tf_ssb_connection_rpc_send_json(connection, k_ssb_rpc_flag_stream, -blob_wants->request_number, message, NULL, NULL, NULL); JS_FreeValue(context, message); } @@ -145,12 +140,7 @@ static void _tf_ssb_rpc_request_more_blobs(tf_ssb_connection_t* connection) const char* blob = (const char*)sqlite3_column_text(statement, 0); JSValue message = JS_NewObject(context); JS_SetPropertyStr(context, message, blob, JS_NewInt32(context, -1)); - JSValue json = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t size = 0; - const char* message_str = JS_ToCStringLen(context, &size, json); - tf_ssb_connection_rpc_send(connection, k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, -blob_wants->request_number, (const uint8_t*)message_str, size, NULL, NULL, NULL); - JS_FreeCString(context, message_str); - JS_FreeValue(context, json); + tf_ssb_connection_rpc_send_json(connection, k_ssb_rpc_flag_stream, -blob_wants->request_number, message, NULL, NULL, NULL); JS_FreeValue(context, message); snprintf(blob_wants->last_id, sizeof(blob_wants->last_id), "%s", blob); blob_wants->wants_sent++; @@ -280,22 +270,16 @@ static void _tf_ssb_rpc_tunnel_connect(tf_ssb_connection_t* connection, uint8_t JS_SetPropertyUint32(context, arg_array, 0, arg_obj); JS_SetPropertyStr(context, message, "args", arg_array); JS_SetPropertyStr(context, message, "type", JS_NewString(context, "duplex")); - JSValue message_val = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t size; - const char* message_str = JS_ToCStringLen(context, &size, message_val); - tf_ssb_connection_rpc_send( + tf_ssb_connection_rpc_send_json( target_connection, - k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, + k_ssb_rpc_flag_stream, tunnel_request_number, - (const uint8_t*)message_str, - size, + message, NULL, NULL, NULL); - JS_FreeCString(context, message_str); - tunnel_t* data0 = tf_malloc(sizeof(tunnel_t)); *data0 = (tunnel_t) { @@ -308,11 +292,9 @@ static void _tf_ssb_rpc_tunnel_connect(tf_ssb_connection_t* connection, uint8_t .connection = connection, .request_number = -request_number, }; - printf("MAKE TUNNEL %p %p\n", connection, target_connection); tf_ssb_connection_add_request(connection, -request_number, _tf_ssb_rpc_tunnel_callback, _tf_ssb_rpc_tunnel_cleanup, data0, target_connection); tf_ssb_connection_add_request(target_connection, tunnel_request_number, _tf_ssb_rpc_tunnel_callback, _tf_ssb_rpc_tunnel_cleanup, data1, connection); - JS_FreeValue(context, message_val); JS_FreeValue(context, message); JS_FreeCString(context, portal_str); } @@ -486,21 +468,16 @@ static void _tf_ssb_rpc_connection_blobs_get(tf_ssb_connection_t* connection, co JSValue args = JS_NewArray(context); JS_SetPropertyUint32(context, args, 0, JS_NewString(context, blob_id)); JS_SetPropertyStr(context, message, "args", args); - JSValue message_val = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t message_size; - const char* message_str = JS_ToCStringLen(context, &message_size, message_val); - tf_ssb_connection_rpc_send( + tf_ssb_connection_rpc_send_json( connection, - k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, + k_ssb_rpc_flag_stream, tf_ssb_connection_next_request_number(connection), - (const uint8_t*)message_str, - message_size, + message, _tf_ssb_rpc_connection_blobs_get_callback, _tf_ssb_rpc_connection_blobs_get_cleanup, get); - JS_FreeCString(context, message_str); JS_FreeValue(context, message); } @@ -551,42 +528,28 @@ static void _tf_ssb_rpc_connection_blobs_createWants_callback(tf_ssb_connection_ { JSValue message = JS_NewObject(context); JS_SetPropertyStr(context, message, blob_id, JS_NewInt64(context, blob_size)); - JSValue message_val = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t message_size; - const char* message_str = JS_ToCStringLen(context, &message_size, message_val); - - tf_ssb_connection_rpc_send( + tf_ssb_connection_rpc_send_json( connection, - k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, + k_ssb_rpc_flag_stream, -blob_wants->request_number, - (const uint8_t*)message_str, - message_size, + message, NULL, NULL, NULL); - - JS_FreeCString(context, message_str); JS_FreeValue(context, message); } else if (size == -1LL) { JSValue message = JS_NewObject(context); JS_SetPropertyStr(context, message, blob_id, JS_NewInt64(context, -2)); - JSValue message_val = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t message_size; - const char* message_str = JS_ToCStringLen(context, &message_size, message_val); - - tf_ssb_connection_rpc_send( + tf_ssb_connection_rpc_send_json( connection, - k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, + k_ssb_rpc_flag_stream, -blob_wants->request_number, - (const uint8_t*)message_str, - message_size, + message, NULL, NULL, NULL); - - JS_FreeCString(context, message_str); JS_FreeValue(context, message); } } diff --git a/src/ssb.tests.c b/src/ssb.tests.c index 28d7db0b..ec4c3e02 100644 --- a/src/ssb.tests.c +++ b/src/ssb.tests.c @@ -411,20 +411,14 @@ void tf_ssb_test_rooms(const tf_test_options_t* options) JS_SetPropertyStr(context, message, "args", args); JS_SetPropertyStr(context, message, "type", JS_NewString(context, "duplex")); - JSValue message_json = JS_JSONStringify(context, message, JS_NULL, JS_NULL); - size_t size; - const char* raw = JS_ToCStringLen(context, &size, message_json); - tf_ssb_connection_rpc_send( + tf_ssb_connection_rpc_send_json( connections[0], - k_ssb_rpc_flag_json | k_ssb_rpc_flag_stream, + k_ssb_rpc_flag_stream, tunnel_request_number, - (const uint8_t*)raw, - size, + message, NULL, NULL, NULL); - JS_FreeCString(context, raw); - JS_FreeValue(context, message_json); JS_FreeValue(context, message); tf_ssb_connection_t* tun0 = tf_ssb_connection_tunnel_create(ssb1, id0, tunnel_request_number, id2);