]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change header set into init
authorBastian Dehn <hhaalo@arcor.de>
Wed, 15 Oct 2025 06:56:31 +0000 (08:56 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 15 Oct 2025 06:56:31 +0000 (08:56 +0200)
src/kds_s2000w_client.c

index d4ce51318a98b5f975037f59777b037650d385bc..b8252c62965f99e2bd24e4e36984b19bfbea72dd 100644 (file)
@@ -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, &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 = _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);