From 1278277d464ae0bfb5168a8624e24576def83ec4 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 9 May 2016 18:21:10 -0400 Subject: [PATCH] Use a new curl easy instance per request --- http.cpp | 2 -- libgamestream/http.c | 30 ++++++++++++++---------------- libgamestream/http.h | 1 - 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/http.cpp b/http.cpp index 5fa7711..00be1b4 100644 --- a/http.cpp +++ b/http.cpp @@ -86,8 +86,6 @@ void MoonlightInstance::NvHTTPInit(int32_t callbackId, pp::VarArray args) LoadCert(_cert.c_str(), _key.c_str()); g_UniqueId = strdup(_uniqueId.c_str()); - http_init(); - pp::VarDictionary ret; ret.Set("callbackId", pp::Var(callbackId)); ret.Set("type", pp::Var("resolve")); diff --git a/libgamestream/http.c b/libgamestream/http.c index f078446..aa8f8d2 100644 --- a/libgamestream/http.c +++ b/libgamestream/http.c @@ -27,8 +27,6 @@ #include #include -static CURL *curl; - extern X509 *g_Cert; extern EVP_PKEY *g_PrivateKey; @@ -61,7 +59,10 @@ static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm) return CURLE_OK; } -int http_init() { +int http_request(char* url, PHTTP_DATA data) { + int ret; + CURL *curl; + curl = curl_easy_init(); if (!curl) return GS_FAILED; @@ -75,19 +76,16 @@ int http_init() { curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _write_curl); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function); - - return GS_OK; -} - -int http_request(char* url, PHTTP_DATA data) { curl_easy_setopt(curl, CURLOPT_WRITEDATA, data); curl_easy_setopt(curl, CURLOPT_URL, url); if (data->size > 0) { free(data->memory); data->memory = malloc(1); - if(data->memory == NULL) - return GS_OUT_OF_MEMORY; + if(data->memory == NULL) { + ret = GS_OUT_OF_MEMORY; + goto cleanup; + } data->size = 0; } @@ -95,16 +93,16 @@ int http_request(char* url, PHTTP_DATA data) { CURLcode res = curl_easy_perform(curl); if(res != CURLE_OK) { - return GS_FAILED; + ret = GS_FAILED; } else if (data->memory == NULL) { - return GS_OUT_OF_MEMORY; + ret = GS_OUT_OF_MEMORY; + } else { + ret = GS_OK; } - return GS_OK; -} - -void http_cleanup() { +cleanup: curl_easy_cleanup(curl); + return ret; } PHTTP_DATA http_create_data() { diff --git a/libgamestream/http.h b/libgamestream/http.h index 30df371..5baa16d 100644 --- a/libgamestream/http.h +++ b/libgamestream/http.h @@ -30,7 +30,6 @@ typedef struct _HTTP_DATA { size_t size; } HTTP_DATA, *PHTTP_DATA; -int http_init(); PHTTP_DATA http_create_data(); int http_request(char* url, PHTTP_DATA data); void http_free_data(PHTTP_DATA data);