From 7410a4144246fc94e1ca6b026639b8d84bb9dacb Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 15 Oct 2025 08:56:31 +0200 Subject: [PATCH] change header set into init --- src/kds_s2000w_client.c | 59 ++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/kds_s2000w_client.c b/src/kds_s2000w_client.c index d4ce513..b8252c6 100644 --- a/src/kds_s2000w_client.c +++ b/src/kds_s2000w_client.c @@ -60,7 +60,14 @@ size_t _kds_s2000w_client_write_callback(const char* ptr, size_t size, size_t nm { response* resp = (response*) data; - resp->data = realloc(resp->data, resp->size + size * nmemb); + char* tmp_resp = realloc(resp->data, resp->size + size * nmemb); + if (tmp_resp == NULL) { + free(resp->data); + resp->data = NULL; + return 0; + } + + resp->data = tmp_resp; char* respdata = (char*) resp->data; memcpy(&respdata[resp->size], ptr, size * nmemb); resp->size += size * nmemb; @@ -71,7 +78,14 @@ size_t _kds_s2000w_client_write_callback(const char* ptr, size_t size, size_t nm void _kds_s2000w_client_add_null_terminate_to_response(response* resp) { resp->size++; - resp->data = realloc(resp->data, resp->size); + char* tmp_resp = realloc(resp->data, resp->size); + if (tmp_resp == NULL) { + free(resp->data); + resp->data = NULL; + return; + } + + resp->data = tmp_resp; char* responsedata = (char*) resp->data; responsedata[resp->size - 1] = 0; } @@ -120,7 +134,30 @@ char* _kds_s2000w_client_errbuf_init() return errbuf; } - curl_param_t* _kds_s2000w_client_param_init() +char* _kds_s2000w_client_get_session_header(uint64_t sessionid) +{ + if (sessionid == 0) + return NULL; + + char* header = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH); + if (header == NULL) { + return NULL; + } + + memset(header, 0, MAX_STR_BUFFER_LENGTH); + sprintf(header, "SessionId: %li", sessionid); + char* tmp_header = realloc(header, sizeof(char*) * (strlen(header) + 1)); + if (tmp_header == NULL) { + free(header); + header = NULL; + return NULL; + } + + header = tmp_header; + return header; +} + + curl_param_t* _kds_s2000w_client_param_init(uint64_t sessionid) { curl_param_t* param = malloc(sizeof(curl_param_t)); if (param == NULL) @@ -135,6 +172,14 @@ char* _kds_s2000w_client_errbuf_init() _kds_s2000w_client_set_verbose(param->curl); _kds_s2000w_client_set_ssl_verification_off(param->curl); + param->headers = curl_slist_append(param->headers, CONTENT_TYPE_HEADER); + param->headers = curl_slist_append(param->headers, ACCEPT_JSON_HEADER); + char* session_header = _kds_s2000w_client_get_session_header(sessionid); + if (session_header != NULL) + param->headers = curl_slist_append(param->headers, session_header); + curl_easy_setopt(param->curl, CURLOPT_HTTPHEADER, param->headers); + curl_easy_setopt(param->curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_write_callback); + curl_easy_setopt(param->curl, CURLOPT_ERRORBUFFER, param->errbuf); return param; } @@ -229,7 +274,7 @@ uint8_t kds_s2000w_client_open_session(response* resp) { kds_s2000w_debug_printf(ALL, "kds_s2000w_client_open_session"); - curl_param_t* param = _kds_s2000w_client_param_init(); + curl_param_t* param = _kds_s2000w_client_param_init(0); if (param == NULL) return 1; @@ -238,10 +283,6 @@ uint8_t kds_s2000w_client_open_session(response* resp) 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 = _kds_s2000w_client_get_username_body(); if (body == NULL) { _kds_s2000w_client_param_free(param); @@ -251,8 +292,6 @@ uint8_t kds_s2000w_client_open_session(response* resp) curl_easy_setopt(param->curl, CURLOPT_POST, 1L); curl_easy_setopt(param->curl, CURLOPT_POSTFIELDS, body); - 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); -- 2.47.3