diff --git a/source/gameanalytics/Http/GAHttpCurl.cpp b/source/gameanalytics/Http/GAHttpCurl.cpp index 3fbe530..dc960bd 100644 --- a/source/gameanalytics/Http/GAHttpCurl.cpp +++ b/source/gameanalytics/Http/GAHttpCurl.cpp @@ -7,6 +7,8 @@ #include #include +#include + namespace gameanalytics { size_t writefunc(void *ptr, size_t size, size_t nmemb, GAHttpClient::Response *s) @@ -39,39 +41,39 @@ namespace gameanalytics GAHttpClient::Response GAHttpClientCurl::sendRequest(std::string const& url, std::string const& auth, std::vector const& payloadData, bool useGzip, void* userData) { - CURL* curl = curl_easy_init(); + std::unique_ptr curl(curl_easy_init(), &curl_easy_cleanup); if (!curl) { return {}; } - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYPEER, 0L); GAHttpClient::Response response = {}; - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); + curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, writefunc); + curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &response); - createRequest(curl, url, auth, payloadData, useGzip); + std::unique_ptr header( + createRequest(curl.get(), url, auth, payloadData, useGzip), &curl_slist_free_all); - CURLcode res = curl_easy_perform(curl); + CURLcode res = curl_easy_perform(curl.get()); if (res != CURLE_OK) { logging::GALogger::d("CURL request failed: %s", curl_easy_strerror(res)); return {}; } - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response.code); - curl_easy_cleanup(curl); + curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &response.code); return response; } - void GAHttpClientCurl::createRequest(CURL *curl, std::string const& url, std::string const& auth, const std::vector& payloadData, bool gzip) + curl_slist* GAHttpClientCurl::createRequest(CURL *curl, std::string const& url, std::string const& auth, const std::vector& payloadData, bool gzip) { if(!curl) { - return; + return nullptr; } curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); @@ -90,8 +92,9 @@ namespace gameanalytics curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payloadData.data()); - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, payloadData.size()); + + return header; } } diff --git a/source/gameanalytics/Http/GAHttpCurl.h b/source/gameanalytics/Http/GAHttpCurl.h index eccba71..9fd39b4 100644 --- a/source/gameanalytics/Http/GAHttpCurl.h +++ b/source/gameanalytics/Http/GAHttpCurl.h @@ -37,7 +37,7 @@ namespace gameanalytics private: - void createRequest(CURL *curl, std::string const& url, std::string const& auth, const std::vector& payloadData, bool gzip); + curl_slist* createRequest(CURL *curl, std::string const& url, std::string const& auth, const std::vector& payloadData, bool gzip); }; } diff --git a/source/gameanalytics/Platform/GALinux.cpp b/source/gameanalytics/Platform/GALinux.cpp index 4862b49..8558f25 100644 --- a/source/gameanalytics/Platform/GALinux.cpp +++ b/source/gameanalytics/Platform/GALinux.cpp @@ -252,35 +252,36 @@ std::string gameanalytics::GAPlatformLinux::getConnectionType() return connection; } + int sock = socket(AF_INET, SOCK_STREAM, 0); + current = list; while(current) { - int sock = -1; - if (!current->ifa_addr || current->ifa_addr->sa_family != AF_PACKET) + if (!current->ifa_addr || current->ifa_addr->sa_family != AF_PACKET) { - struct iwreq req = {}; - strncpy(req.ifr_name, current->ifa_name, IFNAMSIZ); - - int sock = socket(AF_INET, SOCK_STREAM, 0); - if (sock == -1) + if (sock == -1) { connection = CONNECTION_LAN; } else { - if (ioctl(sock, SIOCGIWNAME, &req) != -1) + struct iwreq req = {}; + strncpy(req.ifr_name, current->ifa_name, IFNAMSIZ); + + if (ioctl(sock, SIOCGIWNAME, &req) != -1) { connection = CONNECTION_WIFI; + break; } } } - if(sock != -1) - close(sock); - current = current->ifa_next; } + if(sock != -1) + close(sock); + freeifaddrs(list); return connection; }