From 47148af6d021e646593a9070bbc99ce31b7c3a3a Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Mon, 13 Oct 2025 20:26:20 +0200 Subject: [PATCH] change init config client with config struct --- src/kds_s2000w_client.c | 65 +++++++++++++++++----------------------- src/kds_s2000w_client.h | 9 +++++- src/kds_s2000w_handler.c | 20 ++++++++++--- 3 files changed, 51 insertions(+), 43 deletions(-) diff --git a/src/kds_s2000w_client.c b/src/kds_s2000w_client.c index 671cedb..e00a405 100644 --- a/src/kds_s2000w_client.c +++ b/src/kds_s2000w_client.c @@ -25,15 +25,7 @@ #define CONFIGURATION_PATH "/api/session/configuration" CURL* curl = NULL; - -typedef struct { - char* scanner_url; - char* username; - bool ssl_verify; - uint8_t heartbeat; -} client_config_t; - -client_config_t client_config; +client_config_t* client_config = NULL; char* _kds_s2000w_client_strdup(const char* str) { @@ -103,23 +95,13 @@ void _kds_s2000w_client_print_error_result(const CURLcode result, const char* er void _kds_s2000w_client_set_ssl_verification_off(CURL* curl) { - if (client_config.ssl_verify) + if (client_config->ssl_verify) return; curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); } -void _kds_s2000w_client_set_config(const char* scanner_url, const char* username, bool ssl_verify, uint8_t heartbeat) -{ - kds_s2000w_debug_printf(ALL, "kds_s2000w_client_set_config"); - - client_config.scanner_url = _kds_s2000w_client_strdup(scanner_url); - client_config.username = _kds_s2000w_client_strdup(username); - client_config.ssl_verify = ssl_verify; - client_config.heartbeat = heartbeat; -} - char* _kds_s2000w_client_errbuf_init() { char* errbuf = malloc(sizeof(char) * CURL_ERROR_SIZE); @@ -130,11 +112,16 @@ char* _kds_s2000w_client_errbuf_init() return errbuf; } -void kds_s2000w_client_init(const char* scanner_url, const char* username, bool ssl_verify, uint8_t heartbeat) +void kds_s2000w_client_init(client_config_t* config) { kds_s2000w_debug_printf(ALL, "kds_s2000w_client_init"); - _kds_s2000w_client_set_config(scanner_url, username, ssl_verify, heartbeat); + client_config = malloc(sizeof(client_config_t)); + client_config->scanner_url = _kds_s2000w_client_strdup(config->scanner_url); + client_config->username = _kds_s2000w_client_strdup(config->username); + client_config->ssl_verify = config->ssl_verify; + client_config->heartbeat = config->heartbeat; + curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); } @@ -143,10 +130,12 @@ void kds_s2000w_client_free() { kds_s2000w_debug_printf(ALL, "kds_s2000w_client_free"); - free(client_config.scanner_url); - client_config.scanner_url = NULL; - free(client_config.username); - client_config.username = NULL; + free(client_config->scanner_url); + client_config->scanner_url = NULL; + free(client_config->username); + client_config->username = NULL; + free(client_config); + client_config = NULL; curl_easy_cleanup(curl); curl = NULL; curl_global_cleanup(); @@ -187,7 +176,7 @@ uint8_t kds_s2000w_client_open_session(response* resp) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, SESSION_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -209,7 +198,7 @@ uint8_t kds_s2000w_client_open_session(response* resp) } memset(body, 0, MAX_STR_BUFFER_LENGTH); - sprintf(body, "{\"OCPUserName\": \"%s\"}", client_config.username); + sprintf(body, "{\"OCPUserName\": \"%s\"}", client_config->username); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body); _kds_s2000w_client_set_ssl_verification_off(curl); @@ -248,7 +237,7 @@ void kds_s2000w_client_close_session(int64_t sessionid) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, SESSION_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -300,7 +289,7 @@ uint8_t kds_s2000w_client_get_capabilities(response* resp) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, CAPABILITIES_PATH, 0); curl_url_set(url_handler, CURLUPART_QUERY, CAPABILITIES_VERSION_2, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); @@ -343,13 +332,13 @@ uint8_t kds_s2000w_client_status_session(int64_t sessionid, response* resp) kds_s2000w_debug_printf(ALL, "kds_s2000w_client_status_session"); kds_s2000w_heartbeat_join_thread(); - kds_s2000w_heartbeat_wait_seconds(&client_config.heartbeat); + kds_s2000w_heartbeat_wait_seconds(&client_config->heartbeat); curl_easy_reset(curl); char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, STATUS_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -408,7 +397,7 @@ uint8_t kds_s2000w_client_start_scan(int64_t sessionid) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, STARTSCAN_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -464,7 +453,7 @@ uint8_t kds_s2000w_client_stop_scan(int64_t sessionid) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, STOPSCAN_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -529,7 +518,7 @@ uint8_t kds_s2000w_client_get_image(int64_t sessionid, uint8_t img_number, respo memset(url_path, 0, MAX_STR_BUFFER_LENGTH); sprintf(url_path, "%s/%i", IMAGE_PATH, img_number); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, url_path, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -600,7 +589,7 @@ uint8_t kds_s2000w_client_delete_image(int64_t sessionid, uint8_t img_number) memset(url_path, 0, MAX_STR_BUFFER_LENGTH); sprintf(url_path, "%s/%i", IMAGE_PATH, img_number); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, url_path, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -659,7 +648,7 @@ uint8_t kds_s2000w_client_get_option(int64_t sessionid, response* resp) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, CONFIGURATION_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); @@ -718,7 +707,7 @@ uint8_t kds_s2000w_client_set_option(int64_t sessionid, response* resp) char* url = NULL; CURLU* url_handler = curl_url(); - curl_url_set(url_handler, CURLUPART_URL, client_config.scanner_url, 0); + curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0); curl_url_set(url_handler, CURLUPART_PATH, CONFIGURATION_PATH, 0); curl_url_get(url_handler, CURLUPART_URL, &url, 0); curl_easy_setopt(curl, CURLOPT_URL, url); diff --git a/src/kds_s2000w_client.h b/src/kds_s2000w_client.h index 6a77a12..5972c90 100644 --- a/src/kds_s2000w_client.h +++ b/src/kds_s2000w_client.h @@ -10,7 +10,14 @@ typedef struct { uint64_t code; } response; -void kds_s2000w_client_init(const char* scanner_url, const char* username, bool ssl_verify, uint8_t heartbeat); +typedef struct { + char* scanner_url; + char* username; + bool ssl_verify; + uint8_t heartbeat; +} client_config_t; + +void kds_s2000w_client_init(client_config_t* config); void kds_s2000w_client_free(); response* kds_s2000w_client_response_init(); diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 4c4b686..3a610ae 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -37,6 +37,18 @@ uint32_t _kds_s2000w_handler_find_first_data_byte(const imagedata* image) return byte_count; } +client_config_t* _kds_s2000w_handler_convert_config(program_config* config) +{ + client_config_t* client_config = malloc(sizeof(client_config_t)); + + client_config->scanner_url = config->scanner_url; + client_config->username = config->username; + client_config->ssl_verify = config->ssl_verify; + client_config->heartbeat = config->heartbeat; + + return client_config; +} + void _kds_s2000w_handler_load_config(handler* h) { kds_s2000w_debug_printf(ALL, "kds_s2000w_handler_load_config"); @@ -49,10 +61,8 @@ void _kds_s2000w_handler_load_config(handler* h) if (config == NULL) return; - kds_s2000w_client_init(config->scanner_url, - config->username, - config->ssl_verify, - config->heartbeat); + client_config_t* client_config = _kds_s2000w_handler_convert_config(config); + kds_s2000w_client_init(client_config); kds_s2000w_debug_set_default_log_level(config->log_level); h->profile = config->profile; @@ -60,6 +70,8 @@ void _kds_s2000w_handler_load_config(handler* h) config_stream = NULL; kds_s2000w_config_free(config); config = NULL; + free(client_config); + client_config = NULL; } uint32_t _kds_s2000w_handler_is_color(const handler* h) -- 2.47.3