program_config* config = NULL;
char* errbuf = NULL;
+size_t _kds_s2000w_client_write_callback(char* ptr, size_t size, size_t nmemb, void* data)
+{
+ response* resp = (response*) data;
+
+ resp->data = realloc(resp->data, resp->size + size * nmemb + 1);
+ char* respdata = (char*) resp->data;
+ memcpy(&respdata[resp->size], ptr, size * nmemb);
+ resp->size += size * nmemb;
+
+ return size * nmemb;
+}
+
+void _kds_s2000w_client_add_null_terminate_to_response(response* resp)
+{
+ resp->size++;
+ resp->data = realloc(resp->data, resp->size);
+ char* responsedata = (char*) resp->data;
+ responsedata[resp->size - 1] = '\0';
+}
+
void _kds_s2000w_client_print_error_status(CURL* curl)
{
struct curl_header* header = NULL;
kds_s2000w_debug_printf(ERROR, curl_easy_strerror(result));
}
-void _kds_s2000w_client_stream_to_response(char* mem, response* resp, size_t* size)
-{
- kds_s2000w_debug_printf(ALL, "kds_s2000w_client_stream_to_response");
-
- size_t incl_null_term = *size + 1;
- resp->data = malloc(sizeof(char) * incl_null_term);
- resp->size = incl_null_term;
- memcpy(resp->data, mem, incl_null_term);
-}
-
void _kds_s2000w_client_set_ssl_verification_off(CURL* curl)
{
if (config->ssl_verify)
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, 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\"}", config->username);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
body = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
return result;
}
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
return result;
}
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
free(header_str);
header_str = NULL;
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
free(header_str);
header_str = NULL;
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0L);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
free(header_str);
header_str = NULL;
headers = curl_slist_append(headers, ACCEPT_IMAGE_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
free(url_path);
url_path = NULL;
free(header_str);
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
free(url_path);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
free(header_str);
header_str = NULL;
headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- char** mem = malloc(sizeof(char*));
- size_t* sizeloc = malloc(sizeof(size_t));
- FILE* stream = open_memstream(mem, sizeloc);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, stream);
-
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
_kds_s2000w_client_set_ssl_verification_off(curl);
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);
CURLcode result = curl_easy_perform(curl);
+ _kds_s2000w_client_add_null_terminate_to_response(resp);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
_kds_s2000w_client_print_error_status(curl);
_kds_s2000w_client_print_error_result(result);
- fclose(stream);
- stream = NULL;
- _kds_s2000w_client_stream_to_response(*mem, resp, sizeloc);
-
curl_url_cleanup(url_handler);
url_handler = NULL;
curl_slist_free_all(headers);
headers = NULL;
curl_free(url);
url = NULL;
- free(*mem);
- *mem = NULL;
- free(mem);
- mem = NULL;
- free(sizeloc);
- sizeloc = NULL;
free(header_str);
header_str = NULL;