{
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;
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;
}
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)
_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;
}
{
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;
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);
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);