]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change optimize get image
authorBastian Dehn <hhaalo@arcor.de>
Wed, 15 Oct 2025 07:25:49 +0000 (09:25 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 15 Oct 2025 07:25:49 +0000 (09:25 +0200)
src/kds_s2000w_client.c

index 4c8bdd03b595e9ed2fa1e6a13ffaf81d57c4e0b5..b9b232f7e8c0c534bd7f46ccd4d69d74d34addcd 100644 (file)
@@ -215,6 +215,25 @@ char* _kds_s2000w_client_get_session_header(uint64_t sessionid)
        return body;
  }
 
+  char* _kds_s2000w_client_append_image_number_to_str(uint8_t image_number, const char* path)
+ {
+       char* str_number = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       if (str_number == NULL)
+               return NULL;
+
+       memset(str_number, 0, MAX_STR_BUFFER_LENGTH);
+       sprintf(str_number, "%s/%i", path, image_number);
+       char* tmp_body = realloc(str_number, sizeof(char*) * (strlen(str_number) + 1));
+       if (tmp_body == NULL) {
+               free(str_number);
+               str_number = NULL;
+               return NULL;
+       }
+       
+       str_number = tmp_body;
+       return str_number;
+ }
+
 void kds_s2000w_client_init(const client_config_t* config)
 {
        kds_s2000w_debug_printf(ALL, "kds_s2000w_client_init");
@@ -440,70 +459,27 @@ uint8_t kds_s2000w_client_get_image(int64_t sessionid, uint8_t img_number, respo
 {
        kds_s2000w_debug_printf(ALL, "kds_s2000w_client_get_image");
 
-       CURL* curl = curl_easy_init();
-       char* url = NULL;
-       CURLU* url_handler = curl_url();
-       char* url_path = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
-       if (url_path == NULL) {
-               curl_url_cleanup(url_handler);
-               url_handler = NULL;
-               return 1;
-       }
-
-       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_PATH, url_path, 0);
-       curl_url_get(url_handler, CURLUPART_URL, &url, 0);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-
-       struct curl_slist* headers = NULL;
-       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
-       if (header_str == NULL) {
-               curl_url_cleanup(url_handler);
-               url_handler = NULL;
-               free(url_path);
-               url_path = NULL;
-               curl_free(url);
-               url = NULL;
-               return 1;
-       }
-
-       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
-       sprintf(header_str, "SessionId: %li", sessionid);
-       headers = curl_slist_append(headers, header_str);
-       headers = curl_slist_append(headers, CONTENT_TYPE_HEADER);
-       headers = curl_slist_append(headers, ACCEPT_IMAGE_HEADER);
-       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-
-       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
-       _kds_s2000w_client_set_ssl_verification_off(curl);
+       curl_param_t* param = _kds_s2000w_client_param_init(sessionid);
+       if (param == NULL)
+               return CURLE_OUT_OF_MEMORY;
 
-       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_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
+       char* url_path = _kds_s2000w_client_append_image_number_to_str(img_number, IMAGE_PATH);
+       curl_url_set(param->url_handler, CURLUPART_URL, client_config->scanner_url, 0);
+       curl_url_set(param->url_handler, CURLUPART_PATH, url_path, 0);
+       curl_url_get(param->url_handler, CURLUPART_URL, &param->url, 0);
+       curl_easy_setopt(param->curl, CURLOPT_URL, param->url);
+       curl_easy_setopt(param->curl, CURLOPT_HTTPGET, 1L);
+       curl_easy_setopt(param->curl, CURLOPT_WRITEDATA, resp);
+       CURLcode result = curl_easy_perform(param->curl);
+       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_free(url);
-       url = NULL;
-       curl_easy_cleanup(curl);
-       curl = NULL;
+       _kds_s2000w_client_param_free(param);
+       param = NULL;
        free(url_path);
        url_path = NULL;
-       free(header_str);
-       header_str = NULL;
-       free(errbuf);
-       errbuf = NULL;
 
        return result;
 }