diff --git a/clients/c/cosmopolite-int.h b/clients/c/cosmopolite-int.h index 95b3be5..93f2166 100644 --- a/clients/c/cosmopolite-int.h +++ b/clients/c/cosmopolite-int.h @@ -7,6 +7,7 @@ struct cosmo { char client_id[COSMO_UUID_SIZE]; char instance_id[COSMO_UUID_SIZE]; cosmo_callbacks callbacks; + cosmo_options options; void *passthrough; pthread_mutex_t lock; diff --git a/clients/c/cosmopolite.c b/clients/c/cosmopolite.c index 62061c0..6bf4879 100644 --- a/clients/c/cosmopolite.c +++ b/clients/c/cosmopolite.c @@ -566,7 +566,7 @@ json_t *cosmo_get_last_message(cosmo *instance, json_t *subject) { return ret; } -cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks, void *passthrough) { +cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks, const cosmo_options *options, void *passthrough) { curl_global_init(CURL_GLOBAL_DEFAULT); cosmo *instance = malloc(sizeof(cosmo)); @@ -577,6 +577,11 @@ cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_cal instance->debug = getenv("COSMO_DEBUG"); memcpy(&instance->callbacks, callbacks, sizeof(instance->callbacks)); + if (options) { + memcpy(&instance->options, options, sizeof(instance->options)); + } else { + memset(&instance->options, 0, sizeof(instance->options)); + } instance->passthrough = passthrough; if (client_id) { @@ -597,7 +602,8 @@ cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_cal assert(!curl_easy_setopt(instance->curl, CURLOPT_URL, api_url)); assert(!curl_easy_setopt(instance->curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS)); assert(!curl_easy_setopt(instance->curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS)); - assert(!curl_easy_setopt(instance->curl, CURLOPT_SSL_CIPHER_LIST, "ECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH")); + assert(!curl_easy_setopt(instance->curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2)); + assert(!curl_easy_setopt(instance->curl, CURLOPT_SSL_CIPHER_LIST, "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH")); assert(!curl_easy_setopt(instance->curl, CURLOPT_TIMEOUT_MS, CYCLE_MS)); assert(!curl_easy_setopt(instance->curl, CURLOPT_POST, 1L)); assert(!curl_easy_setopt(instance->curl, CURLOPT_READFUNCTION, cosmo_read_callback)); diff --git a/clients/c/cosmopolite.h b/clients/c/cosmopolite.h index c821785..5945d2a 100644 --- a/clients/c/cosmopolite.h +++ b/clients/c/cosmopolite.h @@ -19,11 +19,14 @@ typedef struct { void (*message)(const json_t *, void *); } cosmo_callbacks; +typedef struct { +} cosmo_options; + typedef struct cosmo cosmo; void cosmo_uuid(char *uuid); -cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks, void *passthrough); +cosmo *cosmo_create(const char *base_url, const char *client_id, const cosmo_callbacks *callbacks, const cosmo_options *options, void *passthrough); void cosmo_shutdown(cosmo *instance); const char *cosmo_current_profile(cosmo *instance); diff --git a/clients/c/test.c b/clients/c/test.c index dbec49e..e7f4060 100644 --- a/clients/c/test.c +++ b/clients/c/test.c @@ -152,7 +152,7 @@ cosmo *create_client(test_state *state) { .message = on_message, }; - cosmo *ret = cosmo_create("https://playground.cosmopolite.org/cosmopolite", NULL, &callbacks, state); + cosmo *ret = cosmo_create("https://playground.cosmopolite.org/cosmopolite", NULL, &callbacks, NULL, state); return ret; }