diff --git a/core/src/dap_common.c b/core/src/dap_common.c index 9ae95ccfad2245e06acbff5797090ff2d8e9ff92..3e2563e0e8d4f67f8f4d12f3f3cf58dd97d8aeaa 100755 --- a/core/src/dap_common.c +++ b/core/src/dap_common.c @@ -196,16 +196,16 @@ static void print_it_stderr(unsigned a_off, const char *a_fmt, va_list va) { vfprintf(s_print_param, a_fmt, va); } - +*/ #if ANDROID #include <android/log.h> static void print_it_alog (unsigned a_off, const char *a_fmt, va_list va) { - __android_log_vprint(ANDROID_LOG_INFO, s_print_param, a_fmt, va); + __android_log_vprint(ANDROID_LOG_INFO, "CellframeNodeNative", a_fmt, va); } -#endif*/ +#endif void dap_log_set_external_output(LOGGER_EXTERNAL_OUTPUT output, void *param) { @@ -230,10 +230,9 @@ void dap_log_set_external_output(LOGGER_EXTERNAL_OUTPUT output, void *param) s_print_callback = print_it_none; break; #ifdef ANDROID - /*case LOGGER_OUTPUT_ALOG: + case LOGGER_OUTPUT_ALOG: s_print_callback = print_it_alog; - s_print_param = param; - break;*/ + break; #endif default: diff --git a/net/app-cli/dap_app_cli.c b/net/app-cli/dap_app_cli.c index 34866b20ac0210f3a541531f701c40a10a5531c2..c7619ed096f8b3244231dbb0e6d565dbcd1d8f33 100644 --- a/net/app-cli/dap_app_cli.c +++ b/net/app-cli/dap_app_cli.c @@ -34,10 +34,10 @@ #include "dap_app_cli.h" #include "dap_app_cli_net.h" #include "dap_app_cli_shell.h" - -#ifdef DAP_OS_ANDROID #include "dap_json_rpc_params.h" #include "dap_json_rpc_request.h" + +#ifdef DAP_OS_ANDROID #include <android/log.h> #include <jni.h> static dap_config_t *cli_config; @@ -154,6 +154,28 @@ static int shell_reader_loop() return 0; } + +char *dap_cli_exec(int argc, char **argv) { + + dap_app_cli_cmd_state_t cmd = { + .cmd_name = (char*)argv[0], + .cmd_param_count = argc - 2, + .cmd_param = argc - 2 > 0 ? (char**)(argv + 1) : NULL + }; + + char *l_cmd_str = dap_app_cli_form_command(&cmd); + dap_json_rpc_params_t *params = dap_json_rpc_params_create(); + dap_json_rpc_params_add_data(params, l_cmd_str, TYPE_PARAM_STRING); + DAP_DELETE(l_cmd_str); + dap_json_rpc_request_t *a_request = dap_json_rpc_request_creation(cmd.cmd_name, params, 0); + char *req_str = dap_json_rpc_request_to_json_string(a_request), + *res = dap_cli_cmd_exec(req_str); + dap_json_rpc_request_free(a_request); + return res; + + +} + #ifdef DAP_OS_ANDROID JNIEXPORT jstring JNICALL Java_com_CellframeWallet_Node_cellframeNodeCliMain(JNIEnv *javaEnv, jobject __unused jobj, jobjectArray argvStr) { diff --git a/net/app-cli/dap_app_cli_net.c b/net/app-cli/dap_app_cli_net.c index 5a043205e20c407a3c895479db1ae255972e391a..a23593c6cc7ef51a61da78e5983555c63d9da26e 100644 --- a/net/app-cli/dap_app_cli_net.c +++ b/net/app-cli/dap_app_cli_net.c @@ -121,9 +121,7 @@ dap_app_cli_connect_param_t dap_app_cli_connect() if (l_addr) { l_addrs[0] = NULL; dap_config_get_item_str_path_array_free(l_addrs, &l_array_count); -#ifdef DAP_OS_WINDOWS - printf("Unix socket-based server is not yet implemented, consider localhost usage\n"); // TODO - return ~0; +#if defined(DAP_OS_WINDOWS) || defined(DAP_OS_ANDROID) #else if ( -1 == (l_socket = socket(AF_UNIX, SOCK_STREAM, 0)) ) { printf ("socket() error %d", errno); diff --git a/net/app-cli/include/dap_app_cli.h b/net/app-cli/include/dap_app_cli.h index d6749b8690e8f293cb7836a31d60929e366ea7bc..722c53454d8f6eb98854b75a9eaa4cd6da622410 100644 --- a/net/app-cli/include/dap_app_cli.h +++ b/net/app-cli/include/dap_app_cli.h @@ -42,6 +42,8 @@ typedef struct dap_app_cli_cmd_state { extern "C" { #endif int dap_app_cli_main(const char *a_app_name, int argc, const char **argv); +char *dap_cli_exec(int argc, char **argv); + #ifdef __cplusplus } #endif diff --git a/net/server/notify_server/include/dap_notify_srv.h b/net/server/notify_server/include/dap_notify_srv.h index 43904e1882300fbd6d44fb8320425c11187b49b5..7041fac8d1d63ff57820990f5150203bae328498 100644 --- a/net/server/notify_server/include/dap_notify_srv.h +++ b/net/server/notify_server/include/dap_notify_srv.h @@ -31,4 +31,7 @@ DAP_PRINTF_ATTR(2, 3) int dap_notify_server_send_f_inter(uint32_t a_worker_id, c int dap_notify_server_send_mt(const char * a_data); DAP_PRINTF_ATTR(1, 2) int dap_notify_server_send_f_mt(const char *a_format, ...); +typedef bool (*dap_notify_data_user_callback_t)(const char *data); +void dap_notify_data_set_user_callback(dap_notify_data_user_callback_t callback); + void dap_notify_srv_set_callback_new(dap_events_socket_callback_t); \ No newline at end of file diff --git a/net/server/notify_server/src/dap_notify_srv.c b/net/server/notify_server/src/dap_notify_srv.c index 6f305a9ae671d9579e0fa750d5c36ee05410a45b..b894b2216091e941607f339312eece1a67544c7b 100644 --- a/net/server/notify_server/src/dap_notify_srv.c +++ b/net/server/notify_server/src/dap_notify_srv.c @@ -48,9 +48,15 @@ pthread_rwlock_t s_notify_server_clients_mutex = PTHREAD_RWLOCK_INITIALIZER; static void s_notify_server_callback_queue(dap_events_socket_t * a_es, void * a_arg); static void s_notify_server_callback_new(dap_events_socket_t * a_es, void * a_arg); static void s_notify_server_callback_delete(dap_events_socket_t * a_es, void * a_arg); - +static dap_notify_data_user_callback_t s_notify_data_user_callback = NULL; dap_events_socket_callback_t s_notify_server_callback_new_ex = NULL; +void dap_notify_data_set_user_callback(dap_notify_data_user_callback_t callback) +{ + s_notify_data_user_callback = callback; +} + + void dap_notify_srv_set_callback_new(dap_events_socket_callback_t a_cb) { s_notify_server_callback_new_ex = a_cb; } @@ -144,6 +150,7 @@ int dap_notify_server_send_f_inter(uint32_t a_worker_id, const char * a_format,. */ int dap_notify_server_send_mt(const char *a_data) { + if (s_notify_data_user_callback) s_notify_data_user_callback(a_data); if(!s_notify_server_queue) // If not initialized - nothing to notify return 0; return dap_events_socket_queue_ptr_send(s_notify_server_queue, dap_strdup(a_data)); @@ -157,8 +164,9 @@ int dap_notify_server_send_mt(const char *a_data) */ int dap_notify_server_send_f_mt(const char *a_format, ...) { - if(!s_notify_server_queue) // If not initialized - nothing to notify + if (!s_notify_data_user_callback && s_notify_server_queue) return 0; + va_list ap, ap_copy; va_start(ap, a_format); va_copy(ap_copy, ap); @@ -178,6 +186,13 @@ int dap_notify_server_send_f_mt(const char *a_format, ...) } vsprintf(l_str, a_format, ap_copy); va_end(ap_copy); + + if (s_notify_data_user_callback) s_notify_data_user_callback(l_str); + + + if(!s_notify_server_queue) // If not initialized - nothing to notify + return 0; + int l_ret = dap_events_socket_queue_ptr_send(s_notify_server_queue, l_str); DAP_DELETE(l_str); return l_ret;