]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
start scan with memory stream
authorBastian Dehn <hhaalo@arcor.de>
Tue, 21 May 2024 18:18:24 +0000 (20:18 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 21 May 2024 18:20:02 +0000 (20:20 +0200)
src/kds_s2000w_client.c

index baf83f5d270e81f3ed50d35335f5f09b743caf50..e7375d1f2883bddb96aa9863949be83b791f067a 100644 (file)
@@ -259,7 +259,10 @@ int kds_s2000w_client_start_scan(int64_t sessionid, response* response)
        char* url = NULL;
        struct curl_slist* headers = NULL;
        CURLcode result = 0;
-               char header_str[80];
+       char header_str[80];
+       FILE* stream = NULL;
+       char* buffer = NULL;
+       size_t* sizeloc = NULL;
 
        curl = curl_easy_init();
        if(!curl)
@@ -277,8 +280,10 @@ int kds_s2000w_client_start_scan(int64_t sessionid, response* response)
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_POST, 1L);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
-       curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _kds_s2000w_client_callback);
-       curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*) response);
+       buffer = malloc(sizeof(char));
+       sizeloc = malloc(sizeof(size_t));
+       stream = open_memstream(&buffer, sizeloc);
+       curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
        result = curl_easy_perform(curl);
@@ -288,12 +293,20 @@ int kds_s2000w_client_start_scan(int64_t sessionid, response* response)
        if (result != CURLE_OK)
                fprintf(stderr, "ERROR: curl_easy_perform: %s\n", curl_easy_strerror(result));
 
+       fflush(stream);
+       _kds_s2000w_client_stream_to_response(stream, response, sizeloc);
+       fclose(stream);
+
        curl_url_cleanup(url_handler);
        url_handler = NULL;
        curl_free(url);
        url = NULL;
        curl_easy_cleanup(curl);
        curl = NULL;
+       free(buffer);
+       buffer = NULL;
+       free(sizeloc);
+       sizeloc = NULL;
 
        return result;
 }