]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change open session with param struct
authorBastian Dehn <hhaalo@arcor.de>
Wed, 15 Oct 2025 06:31:11 +0000 (08:31 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 15 Oct 2025 06:31:11 +0000 (08:31 +0200)
src/kds_s2000w_client.c

index 14b642329164e9d16ea0ee2e67d6ef0a24d142e8..52cd30e0832af4a7759ba5f034ffd95dfee41ea3 100644 (file)
 
 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, &param->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;
 }