client_config_t* client_config = NULL;
+typedef struct {
+ CURL* curl;
+ CURLU* url_handler;
+ char* url;
+ struct curl_slist* headers;
+ CURLcode result;
+ char* errbuf;
+} curl_param_t;
+
char* _kds_s2000w_client_strdup(const char* str)
{
size_t length = strlen(str) + 1;
return errbuf;
}
+ curl_param_t* _kds_s2000w_client_param_init()
+ {
+ curl_param_t* param = malloc(sizeof(curl_param_t));
+
+ param->curl = curl_easy_init();
+ param->url_handler = curl_url();
+ param->url = NULL;
+ param->headers = NULL;
+ param->result = 0;
+ param->errbuf = _kds_s2000w_client_errbuf_init();
+
+ _kds_s2000w_client_set_verbose(param->curl);
+
+ return param;
+ }
+
+ void _kds_s2000w_client_param_free(curl_param_t* param)
+ {
+ curl_easy_cleanup(param->curl);
+ param->curl = NULL;
+ curl_url_cleanup(param->url_handler);
+ param->url_handler = NULL;
+ free(param->url);
+ param->url = NULL;
+ curl_easy_cleanup(param->headers);
+ param->headers = NULL;
+ free(param->errbuf);
+ param->errbuf = NULL;
+ }
+
void kds_s2000w_client_init(client_config_t* config)
{
kds_s2000w_debug_printf(ALL, "kds_s2000w_client_init");
{
kds_s2000w_debug_printf(ALL, "kds_s2000w_client_open_session");
- CURL* curl = curl_easy_init();
- char* url = NULL;
- CURLU* url_handler = curl_url();
- curl_url_set(url_handler, CURLUPART_URL, client_config->scanner_url, 0);
- curl_url_set(url_handler, CURLUPART_PATH, SESSION_PATH, 0);
- curl_url_get(url_handler, CURLUPART_URL, &url, 0);
- curl_easy_setopt(curl, CURLOPT_URL, url);
+ curl_param_t* param = _kds_s2000w_client_param_init();
- struct curl_slist* headers = NULL;
- headers = curl_slist_append(headers, CONTENT_TYPE_HEADER);
- headers = curl_slist_append(headers, ACCEPT_JSON_HEADER);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
+ curl_url_set(param->url_handler, CURLUPART_URL, client_config->scanner_url, 0);
+ curl_url_set(param->url_handler, CURLUPART_PATH, SESSION_PATH, 0);
+ 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 = malloc(sizeof(char) * MAX_STR_BUFFER_LENGTH);
if (body == NULL) {
- curl_easy_cleanup(curl);
- curl = NULL;
- curl_url_cleanup(url_handler);
- url_handler = NULL;
- curl_slist_free_all(headers);
- headers = NULL;
- curl_free(url);
- url = NULL;
+ _kds_s2000w_client_param_free(param);
+ param = NULL;
return 1;
}
memset(body, 0, MAX_STR_BUFFER_LENGTH);
sprintf(body, "{\"OCPUserName\": \"%s\"}", client_config->username);
- curl_easy_setopt(curl, CURLOPT_POST, 1L);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);
- _kds_s2000w_client_set_ssl_verification_off(curl);
-
- char* errbuf = _kds_s2000w_client_errbuf_init();
- 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);
- _kds_s2000w_client_set_verbose(curl);
- CURLcode result = curl_easy_perform(curl);
+ curl_easy_setopt(param->curl, CURLOPT_POST, 1L);
+ curl_easy_setopt(param->curl, CURLOPT_POSTFIELDS, body);
+ _kds_s2000w_client_set_ssl_verification_off(param->curl);
+
+ 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);
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp->code);
+ curl_easy_getinfo(param->curl, CURLINFO_RESPONSE_CODE, &resp->code);
- _kds_s2000w_client_print_error_status(curl);
- _kds_s2000w_client_print_error_result(result, errbuf);
+ _kds_s2000w_client_print_error_status(param->curl);
+ _kds_s2000w_client_print_error_result(result, param->errbuf);
- curl_url_cleanup(url_handler);
- url_handler = NULL;
- curl_slist_free_all(headers);
- headers = NULL;
- curl_easy_cleanup(curl);
- curl = NULL;
- free(body);
- body = NULL;
- curl_free(url);
- url = NULL;
- free(errbuf);
- errbuf = NULL;
+ _kds_s2000w_client_param_free(param);
+ param = NULL;
return result;
}