diff --git a/src/ssb.c b/src/ssb.c index 6946086d..04bf42d4 100644 --- a/src/ssb.c +++ b/src/ssb.c @@ -375,6 +375,8 @@ static int s_connection_index; static int s_tunnel_index; static void _tf_ssb_add_broadcast(tf_ssb_t* ssb, const tf_ssb_broadcast_t* broadcast, int expires_seconds); +static uint64_t _tf_ssb_callback_pre(tf_ssb_t* ssb); +static void _tf_ssb_callback_post(tf_ssb_t* ssb, void* callback, uint64_t pre); static void _tf_ssb_connection_client_send_hello(tf_ssb_connection_t* connection); static void _tf_ssb_connection_close(tf_ssb_connection_t* connection, const char* reason); static void _tf_ssb_connection_destroy(tf_ssb_connection_t* connection, const char* reason); @@ -679,7 +681,9 @@ static void _tf_ssb_connection_dispatch_scheduled(tf_ssb_connection_t* connectio memmove(connection->scheduled, connection->scheduled + 1, sizeof(tf_ssb_connection_scheduled_t) * (connection->scheduled_count - 1)); connection->scheduled_count--; tf_trace_begin(connection->ssb->trace, "scheduled callback"); + PRE_CALLBACK(connection->ssb, scheduled.callback); scheduled.callback(connection, scheduled.user_data); + POST_CALLBACK(connection->ssb, scheduled.callback); tf_trace_end(connection->ssb->trace); } } @@ -1360,7 +1364,9 @@ static void _tf_ssb_connection_verify_identity(tf_ssb_connection_t* connection, connection->state = k_tf_ssb_state_verified; if (connection->connect_callback) { + PRE_CALLBACK(connection->ssb, connection->connect_callback); connection->connect_callback(connection, NULL, connection->connect_callback_user_data); + POST_CALLBACK(connection->ssb, connection->connect_callback); connection->connect_callback = NULL; connection->connect_callback_user_data = NULL; } @@ -1923,7 +1929,9 @@ static void _tf_ssb_connection_destroy(tf_ssb_connection_t* connection, const ch connection->closing = true; if (connection->connect_callback) { + PRE_CALLBACK(connection->ssb, connection->connect_callback); connection->connect_callback(NULL, reason, connection->connect_callback_user_data); + POST_CALLBACK(connection->ssb, connection->connect_callback); connection->connect_callback = NULL; connection->connect_callback_user_data = NULL; } @@ -3306,7 +3314,9 @@ static void _tf_ssb_notify_broadcasts_changed(tf_ssb_t* ssb) if (node->callback) { tf_trace_begin(ssb->trace, "broadcasts changed"); + PRE_CALLBACK(ssb, node->callback); node->callback(ssb, node->user_data); + POST_CALLBACK(ssb, node->callback); tf_trace_end(ssb->trace); } } @@ -3410,7 +3420,9 @@ void tf_ssb_visit_broadcasts(tf_ssb_t* ssb, if (node->mtime - now < 60) { tf_trace_begin(ssb->trace, "broadcast"); + PRE_CALLBACK(ssb, callback); callback(node->host, &node->addr, node->origin, node->tunnel_connection, node->pub, user_data); + POST_CALLBACK(ssb, callback); tf_trace_end(ssb->trace); } } @@ -3718,7 +3730,9 @@ void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id, JSValue message_ { next = node->next; tf_trace_begin(ssb->trace, "message added callback"); + PRE_CALLBACK(ssb, node->callback); node->callback(ssb, id, node->user_data); + POST_CALLBACK(ssb, node->callback); tf_trace_end(ssb->trace); } @@ -3794,7 +3808,9 @@ void tf_ssb_notify_blob_want_added(tf_ssb_t* ssb, const char* id) { next = node->next; tf_trace_begin(ssb->trace, "blob want added callback"); + PRE_CALLBACK(ssb, node->callback); node->callback(ssb, id, node->user_data); + POST_CALLBACK(ssb, node->callback); tf_trace_end(ssb->trace); } } @@ -4071,7 +4087,9 @@ static void _tf_ssb_connection_after_work_callback(uv_work_t* work, int status) if (data->after_work_callback) { tf_trace_begin(data->connection->ssb->trace, data->after_name); + PRE_CALLBACK(data->connection->ssb, data->after_work_callback); data->after_work_callback(data->connection, status, data->user_data); + POST_CALLBACK(data->connection->ssb, data->after_work_callback); tf_trace_end(data->connection->ssb->trace); } data->connection->ref_count--; @@ -4138,7 +4156,9 @@ static void _tf_ssb_after_work_callback(uv_work_t* work, int status) if (data->after_work_callback) { tf_trace_begin(data->ssb->trace, data->after_name); + PRE_CALLBACK(data->ssb, data->after_work_callback); data->after_work_callback(data->ssb, status, data->user_data); + POST_CALLBACK(data->ssb, data->after_work_callback); tf_trace_end(data->ssb->trace); } tf_ssb_unref(data->ssb); @@ -4277,7 +4297,9 @@ void tf_ssb_set_verbose(tf_ssb_t* ssb, bool verbose) static void _tf_ssb_scheduled_timer(uv_timer_t* handle) { tf_ssb_timer_t* timer = handle->data; + PRE_CALLBACK(timer->ssb, timer->callback); timer->callback(timer->ssb, timer->user_data); + POST_CALLBACK(timer->ssb, timer->callback); uv_close((uv_handle_t*)handle, _tf_ssb_on_timer_close); }