From ed30412ddfadc982babd1447fa100e6cff9293fc Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 15 Oct 2025 08:31:11 +0200 Subject: [PATCH] change open session with param struct --- src/kds_s2000w_client.c | 107 +++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 44 deletions(-) diff --git a/src/kds_s2000w_client.c b/src/kds_s2000w_client.c index 14b6423..52cd30e 100644 --- a/src/kds_s2000w_client.c +++ b/src/kds_s2000w_client.c @@ -26,6 +26,15 @@ client_config_t* client_config = NULL; +typedef struct { + CURL* curl; + CURLU* url_handler; + char* url; + struct curl_slist* headers; + CURLcode result; + char* errbuf; +} curl_param_t; + char* _kds_s2000w_client_strdup(const char* str) { size_t length = strlen(str) + 1; @@ -111,6 +120,36 @@ char* _kds_s2000w_client_errbuf_init() return errbuf; } + curl_param_t* _kds_s2000w_client_param_init() + { + curl_param_t* param = malloc(sizeof(curl_param_t)); + + param->curl = curl_easy_init(); + param->url_handler = curl_url(); + param->url = NULL; + param->headers = NULL; + param->result = 0; + param->errbuf = _kds_s2000w_client_errbuf_init(); + + _kds_s2000w_client_set_verbose(param->curl); + + return param; + } + + void _kds_s2000w_client_param_free(curl_param_t* param) + { + curl_easy_cleanup(param->curl); + param->curl = NULL; + curl_url_cleanup(param->url_handler); + param->url_handler = NULL; + free(param->url); + param->url = NULL; + curl_easy_cleanup(param->headers); + param->headers = NULL; + free(param->errbuf); + param->errbuf = NULL; + } + void kds_s2000w_client_init(client_config_t* config) { kds_s2000w_debug_printf(ALL, "kds_s2000w_client_init"); @@ -168,62 +207,42 @@ uint8_t kds_s2000w_client_open_session(response* resp) { kds_s2000w_debug_printf(ALL, "kds_s2000w_client_open_session"); - CURL* curl = curl_easy_init(); - 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_PATH, SESSION_PATH, 0); - curl_url_get(url_handler, CURLUPART_URL, &url, 0); - curl_easy_setopt(curl, CURLOPT_URL, url); + curl_param_t* param = _kds_s2000w_client_param_init(); - struct curl_slist* headers = NULL; - headers = curl_slist_append(headers, CONTENT_TYPE_HEADER); - headers = curl_slist_append(headers, ACCEPT_JSON_HEADER); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + curl_url_set(param->url_handler, CURLUPART_URL, client_config->scanner_url, 0); + curl_url_set(param->url_handler, CURLUPART_PATH, SESSION_PATH, 0); + curl_url_get(param->url_handler, CURLUPART_URL, ¶m->url, 0); + curl_easy_setopt(param->curl, CURLOPT_URL, param->url); + + param->headers = curl_slist_append(param->headers, CONTENT_TYPE_HEADER); + param->headers = curl_slist_append(param->headers, ACCEPT_JSON_HEADER); + curl_easy_setopt(param->curl, CURLOPT_HTTPHEADER, param->headers); char* body = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH); if (body == NULL) { - curl_easy_cleanup(curl); - curl = NULL; - curl_url_cleanup(url_handler); - url_handler = NULL; - curl_slist_free_all(headers); - headers = NULL; - curl_free(url); - url = NULL; + _kds_s2000w_client_param_free(param); + param = NULL; return 1; } memset(body, 0, MAX_STR_BUFFER_LENGTH); 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); - - char* errbuf = _kds_s2000w_client_errbuf_init(); - curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp); - _kds_s2000w_client_set_verbose(curl); - CURLcode result = curl_easy_perform(curl); + curl_easy_setopt(param->curl, CURLOPT_POST, 1L); + curl_easy_setopt(param->curl, CURLOPT_POSTFIELDS, body); + _kds_s2000w_client_set_ssl_verification_off(param->curl); + + curl_easy_setopt(param->curl, CURLOPT_ERRORBUFFER, param->errbuf); + curl_easy_setopt(param->curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); + curl_easy_setopt(param->curl, CURLOPT_WRITEDATA, resp); + CURLcode result = curl_easy_perform(param->curl); _kds_s2000w_client_add_null_terminate_to_response(resp); - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code); + curl_easy_getinfo(param->curl, CURLINFO_RESPONSE_CODE, &resp->code); - _kds_s2000w_client_print_error_status(curl); - _kds_s2000w_client_print_error_result(result, errbuf); + _kds_s2000w_client_print_error_status(param->curl); + _kds_s2000w_client_print_error_result(result, param->errbuf); - curl_url_cleanup(url_handler); - url_handler = NULL; - curl_slist_free_all(headers); - headers = NULL; - curl_easy_cleanup(curl); - curl = NULL; - free(body); - body = NULL; - curl_free(url); - url = NULL; - free(errbuf); - errbuf = NULL; + _kds_s2000w_client_param_free(param); + param = NULL; return result; } -- 2.47.3