]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
restructur code blocks client
authorBastian Dehn <hhaalo@arcor.de>
Tue, 31 Dec 2024 14:04:10 +0000 (15:04 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 31 Dec 2024 14:07:32 +0000 (15:07 +0100)
src/kds_s2000w_client.c

index a336e33302d4f95892b38b6bd45503c89caf43ef..8720359f459184e6da06a4b5bf36b7a53db5ec86 100644 (file)
@@ -7,7 +7,15 @@
 #include "kds_s2000w_client.h"
 #include "kds_s2000w_debug.h"
 
+#define MAX_STR_BUFFER_LENGTH  80
 #define X_STATUS_HEADER "x-status"
+#define SESSION_PATH "/api/session"
+#define STATUS_PATH "/api/session/status"
+#define STARTSCAN_PATH "/api/session/startscan"
+#define STOPSCAN_PATH "/api/session/stopscan"
+#define IMAGE_PATH "api/session/image"
+#define CAPABILITIES_PATH "/api/scanner/capabilities?V2"
+#define CONFIGURATION_PATH "/api/session/configuration"
 
 CURL* curl = NULL;
 
@@ -47,6 +55,14 @@ void _kds_s2000w_client_stream_to_response(FILE* stream, response* resp, size_t*
        resp->size = *size;
 }
 
+void _kds_s2000w_client_print_error_result(CURLcode result)
+{
+       if (result == CURLE_OK)
+               return;
+
+       fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+}
+
 response* kds_s2000w_client_response_init()
 {
        debug_printf(ALL, "kds_s2000w_client_response_init");
@@ -80,6 +96,7 @@ void kds_s2000w_client_init()
 {
        debug_printf(ALL, "kds_s2000w_client_init");
 
+       _kds_s2000w_client_load_config();
        curl = curl_easy_init();
 }
 
@@ -95,33 +112,36 @@ int kds_s2000w_client_open_session(response* response)
 {
        debug_printf(ALL, "kds_s2000w_client_open_session");
 
-       _kds_s2000w_client_load_config();
        curl_easy_reset(curl);
 
-       char* url = NULL;
-       char body[50] = {0};
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
-       CURLcode result = curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session", 0);
+       curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
+       curl_url_set(url_handler, CURLUPART_PATH, SESSION_PATH, 0);
        curl_url_get(url_handler, CURLUPART_URL, &url, 0);
-       sprintf(body, "{\"OCPUserName\": \"%s\"}", p_config.username);
-
        curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_POST, 1L);
-       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       char* body = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(body, 0, MAX_STR_BUFFER_LENGTH);
+       sprintf(body, "{\"OCPUserName\": \"%s\"}", p_config.username);
+       curl_easy_setopt(curl, CURLOPT_POST, 1L);
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
-       result = curl_easy_perform(curl);
+
+       CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -129,6 +149,8 @@ int kds_s2000w_client_open_session(response* response)
 
        curl_url_cleanup(url_handler);
        url_handler = NULL;
+       free(body);
+       body = NULL;
        curl_free(url);
        url = NULL;
        free(buffer);
@@ -143,28 +165,29 @@ void kds_s2000w_client_close_session(int64_t sessionid)
 {
        debug_printf(ALL, "kds_s2000w_client_close_session");
 
-       struct curl_slist* headers = NULL;
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session", 0);
-       char* url = NULL;
+       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);
 
+       struct curl_slist* headers = NULL;
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
+
+       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_print_error_result(result);
 
        curl_url_cleanup(url_handler);
        url_handler = NULL;
@@ -172,6 +195,8 @@ void kds_s2000w_client_close_session(int64_t sessionid)
        url = NULL;
        curl_slist_free_all(headers);
        headers = NULL;
+       free(header_str);
+       header_str = NULL;
 }
 
 int kds_s2000w_client_status_session(int64_t sessionid, response* response)
@@ -181,34 +206,36 @@ int kds_s2000w_client_status_session(int64_t sessionid, response* response)
        join_thread();
        wait_seconds(&p_config.heartbeat);
 
-       struct curl_slist* headers = NULL;
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session/status", 0);
-       char* url = NULL;
+       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);
 
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
+       struct curl_slist* headers = NULL;
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -222,6 +249,8 @@ int kds_s2000w_client_status_session(int64_t sessionid, response* response)
        buffer = NULL;
        free(sizeloc);
        sizeloc = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
@@ -230,35 +259,37 @@ int kds_s2000w_client_start_scan(int64_t sessionid, response* response)
 {
        debug_printf(ALL, "kds_s2000w_client_start_scan");
 
-       char* url = NULL;
-       struct curl_slist* headers = NULL;
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session/startscan", 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);
 
+       struct curl_slist* headers = NULL;
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_POST, 1L);
-       curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_POST, 1L);
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -272,6 +303,8 @@ int kds_s2000w_client_start_scan(int64_t sessionid, response* response)
        buffer = NULL;
        free(sizeloc);
        sizeloc = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
@@ -280,35 +313,37 @@ int kds_s2000w_client_stop_scan(int64_t sessionid, response* response)
 {
        debug_printf(ALL, "kds_s2000w_client_stop_scan");
 
-       struct curl_slist* headers = NULL;
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session/stopscan", 0);
-       char* url = NULL;
+       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);
 
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
+       struct curl_slist* headers = NULL;
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_POST, 1L);
-       curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_POST, 1L);
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -322,6 +357,8 @@ int kds_s2000w_client_stop_scan(int64_t sessionid, response* response)
        buffer = NULL;
        free(sizeloc);
        sizeloc = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
@@ -330,36 +367,39 @@ int kds_s2000w_client_get_image(int64_t sessionid, int img_number, response* res
 {
        debug_printf(ALL, "kds_s2000w_client_get_image");
 
-       struct curl_slist* headers = NULL;
-       char* url = NULL;
-       char url_path[30];
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
-       sprintf(url_path, "api/session/image/%i", img_number);
+       char* url_path = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(url_path, 0, MAX_STR_BUFFER_LENGTH);
+       sprintf(url_path, "%s/%i", IMAGE_PATH, img_number);
        curl_url_set(url_handler, CURLUPART_URL, p_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);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -373,6 +413,10 @@ int kds_s2000w_client_get_image(int64_t sessionid, int img_number, response* res
        buffer = NULL;
        free(sizeloc);
        sizeloc = NULL;
+       free(url_path);
+       url_path = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
@@ -381,36 +425,40 @@ int kds_s2000w_client_delete_image(int64_t sessionid, int img_number, response*
 {
        debug_printf(ALL, "kds_s2000w_client_delete_image");
 
-       char* url = NULL;
        struct curl_slist* headers = NULL;
-       char url_path[30];
-       char header_str[80];
 
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
-       sprintf(url_path, "api/session/image/%i", img_number);
+       char* url_path = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(url_path, 0, MAX_STR_BUFFER_LENGTH);
+       sprintf(url_path, "%s/%i", IMAGE_PATH, img_number);
        curl_url_set(url_handler, CURLUPART_URL, p_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);
 
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -424,6 +472,8 @@ int kds_s2000w_client_delete_image(int64_t sessionid, int img_number, response*
        buffer = NULL;
        free(sizeloc);
        sizeloc = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
@@ -432,29 +482,29 @@ int kds_s2000w_client_get_capabilities(response* response)
 {
        debug_printf(ALL, "kds_s2000w_client_get_capabilities");
 
-       char* url = NULL;
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/scanner/capabilities?V2", 0);
+       curl_url_set(url_handler, CURLUPART_PATH, CAPABILITIES_PATH, 0);
        curl_url_get(url_handler, CURLUPART_URL, &url, 0);
-
        curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -476,34 +526,36 @@ int kds_s2000w_client_get_option(int64_t sessionid, response* response)
 {
        debug_printf(ALL, "kds_s2000w_client_get_option");
 
-       struct curl_slist* headers = NULL;
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session/configuration", 0);
-       char* url = NULL;
+       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);
 
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
+       struct curl_slist* headers = NULL;
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
+
        char* buffer = malloc(sizeof(char));
        size_t* sizeloc = malloc(sizeof(size_t));
        FILE* stream = open_memstream(&buffer, sizeloc);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
+
+       curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        fflush(stream);
        _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
@@ -517,6 +569,8 @@ int kds_s2000w_client_get_option(int64_t sessionid, response* response)
        buffer = NULL;
        free(sizeloc);
        sizeloc = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
@@ -525,37 +579,40 @@ int kds_s2000w_client_set_option(int64_t sessionid, response* response)
 {
        debug_printf(ALL, "kds_s2000w_client_set_option");
 
-       char* url = NULL;
-       struct curl_slist* headers = NULL;
-       char header_str[80];
-
        curl_easy_reset(curl);
 
+       char* url = NULL;
        CURLU* url_handler = curl_url();
        curl_url_set(url_handler, CURLUPART_URL, p_config.scanner_url, 0);
-       curl_url_set(url_handler, CURLUPART_PATH, "/api/session/configuration", 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);
 
+       char* header_str = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
+       memset(header_str, 0, MAX_STR_BUFFER_LENGTH);
+       struct curl_slist* headers = NULL;
        sprintf(header_str, "SessionId: %li", sessionid);
        headers = curl_slist_append(headers, header_str);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
-       curl_easy_setopt(curl, CURLOPT_URL, url);
-       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
+
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, response->data);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, response->size);
+       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
        CURLcode result = curl_easy_perform(curl);
        curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response->code);
-       _kds_s2000w_client_read_error_status(curl, response);
 
-       if (result != CURLE_OK)
-               fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
+       _kds_s2000w_client_read_error_status(curl, response);
+       _kds_s2000w_client_print_error_result(result);
 
        curl_url_cleanup(url_handler);
        url_handler = NULL;
        curl_free(url);
        url = NULL;
+       free(header_str);
+       header_str = NULL;
 
        return result;
 }
\ No newline at end of file