diff options
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/download.cpp | 56 | ||||
-rw-r--r-- | src/net/download.h | 7 | ||||
-rw-r--r-- | src/net/ea/chatrecv.h | 2 | ||||
-rw-r--r-- | src/net/ea/traderecv.h | 2 | ||||
-rw-r--r-- | src/net/eathena/beingrecv.h | 4 | ||||
-rw-r--r-- | src/net/tmwa/beingrecv.h | 4 | ||||
-rw-r--r-- | src/net/worldinfo.h | 4 |
7 files changed, 69 insertions, 10 deletions
diff --git a/src/net/download.cpp b/src/net/download.cpp index 521c40eb9..973302c67 100644 --- a/src/net/download.cpp +++ b/src/net/download.cpp @@ -70,7 +70,11 @@ Download::Download(void *const ptr, mThread(nullptr), mCurl(nullptr), mHeaders(nullptr), +#if LIBCURL_VERSION_NUM < 0x073800 mFormPost(nullptr), +#else + mMime(nullptr), +#endif // LIBCURL_VERSION_NUM < 0x073800 mError(static_cast<char*>(calloc(CURL_ERROR_SIZE + 1, 1))), mIgnoreError(ignoreError), mUpload(isUpload), @@ -99,11 +103,20 @@ Download::Download(void *const ptr, Download::~Download() { +#if LIBCURL_VERSION_NUM < 0x073800 if (mFormPost != nullptr) { curl_formfree(mFormPost); mFormPost = nullptr; } +#else + if (mMime != nullptr) + { + curl_mime_free(mMime); + mMime = nullptr; + } +#endif // LIBCURL_VERSION_NUM < 0x073800 + if (mHeaders != nullptr) { @@ -256,7 +269,7 @@ int Download::downloadThread(void *ptr) if (d->mUpload) { outFilename = d->mFileName; - prepareForm(&d->mFormPost, outFilename); + prepareForm(d, outFilename); } else { @@ -297,7 +310,11 @@ int Download::downloadThread(void *ptr) { logger->log_r("Uploading: %s", d->mUrl.c_str()); curl_easy_setopt(d->mCurl, CURLOPT_URL, d->mUrl.c_str()); +#if LIBCURL_VERSION_NUM < 0x073800 curl_easy_setopt(d->mCurl, CURLOPT_HTTPPOST, d->mFormPost); +#else + curl_easy_setopt(d->mCurl, CURLOPT_MIMEPOST, d->mMime); +#endif // LIBCURL_VERSION_NUM < 0x073800 curl_easy_setopt(d->mCurl, CURLOPT_WRITEFUNCTION, &Download::writeFunction); mUploadResponse.clear(); @@ -308,6 +325,11 @@ int Download::downloadThread(void *ptr) curl_easy_setopt(d->mCurl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(d->mCurl, CURLOPT_HTTPHEADER, d->mHeaders); + // ignore SSL verificytion, windows' OpenSSL is very limited + if (strstr(d->mUrl.c_str(), "https://") != NULL) + { + curl_easy_setopt(d->mCurl, CURLOPT_SSL_VERIFYPEER, 0L); + } if (d->mOptions.memoryWrite != 0U) { curl_easy_setopt(d->mCurl, CURLOPT_FAILONERROR, 1); @@ -331,8 +353,14 @@ int Download::downloadThread(void *ptr) curl_easy_setopt(d->mCurl, CURLOPT_ERRORBUFFER, d->mError); curl_easy_setopt(d->mCurl, CURLOPT_URL, d->mUrl.c_str()); curl_easy_setopt(d->mCurl, CURLOPT_NOPROGRESS, 0); +#if LIBCURL_VERSION_NUM < 0x072000 curl_easy_setopt(d->mCurl, CURLOPT_PROGRESSFUNCTION, - &downloadProgress); + &downloadProgress); +#else + curl_easy_setopt(d->mCurl, CURLOPT_XFERINFOFUNCTION, + &downloadProgress); + +#endif // LIBCURL_VERSION_NUM < 0x072000 curl_easy_setopt(d->mCurl, CURLOPT_PROGRESSDATA, ptr); #if LIBCURL_VERSION_NUM >= 0x070a00 curl_easy_setopt(d->mCurl, CURLOPT_NOSIGNAL, 1); @@ -573,12 +601,18 @@ void Download::secureCurl(CURL *const curl) void Download::secureCurl(CURL *const curl A_UNUSED) #endif // LIBCURL_VERSION_NUM >= 0x070f01 { -#if LIBCURL_VERSION_NUM >= 0x071304 +#if LIBCURL_VERSION_NUM >= 0x071304 && LIBCURL_VERSION_NUM <= 0x075500 curl_easy_setopt(curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); -#endif // LIBCURL_VERSION_NUM >= 0x071304 +#endif // LIBCURL_VERSION_NUM >= 0x071304 && LIBCURL_VERSION_NUM <= 0x075500 +#if LIBCURL_VERSION_NUM >= 0x075500 + curl_easy_setopt(curl, CURLOPT_PROTOCOLS_STR, + "http,https"); + curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS_STR, + "http,https"); +#endif // LIBCURL_VERSION_NUM >= 0x075500 #if LIBCURL_VERSION_NUM >= 0x071500 curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 0); #endif // LIBCURL_VERSION_NUM >= 0x071500 @@ -617,10 +651,8 @@ void Download::addCommonFlags(CURL *const curl) #endif // LIBCURL_VERSION_NUM >= 0x072D00 } -void Download::prepareForm(curl_httppost **form, const std::string &fileName) +void Download::prepareForm(Download *const d, const std::string &fileName) { - curl_httppost *lastPtr = nullptr; - std::ifstream file; file.open(fileName.c_str(), std::ios::in); if (!file.is_open()) @@ -633,10 +665,18 @@ void Download::prepareForm(curl_httppost **form, const std::string &fileName) delete [] line; - curl_formadd(form, &lastPtr, +#if LIBCURL_VERSION_NUM < 0x073800 + curl_httppost *lastPtr = nullptr; + curl_formadd(&d->mFormPost, &lastPtr, CURLFORM_COPYNAME, "f:1", CURLFORM_COPYCONTENTS, str.str().c_str(), CURLFORM_END); +#else + curl_mimepart *part = curl_mime_addpart(d->mMime); + curl_mime_init(d->mCurl); + curl_mime_name(part, "f:1"); + curl_mime_data(part, str.str().c_str(), str.str().length()); +#endif } size_t Download::writeFunction(void *ptr, diff --git a/src/net/download.h b/src/net/download.h index 75dcf9b4b..c838943b7 100644 --- a/src/net/download.h +++ b/src/net/download.h @@ -95,8 +95,7 @@ class Download final static size_t writeFunction(void *ptr, size_t size, size_t nmemb, void *stream); - static void prepareForm(curl_httppost **form, - const std::string &fileName); + static void prepareForm(Download *const d, const std::string &fileName); static unsigned long fadler32(FILE *const file) A_WARN_UNUSED; @@ -135,7 +134,11 @@ class Download final SDL_Thread *mThread; CURL *mCurl; curl_slist *mHeaders; +#if LIBCURL_VERSION_NUM < 0x073800 curl_httppost *mFormPost; +#else + curl_mime *mMime; +#endif char *mError; bool mIgnoreError; bool mUpload; diff --git a/src/net/ea/chatrecv.h b/src/net/ea/chatrecv.h index 5c1bf20e6..ec762bc25 100644 --- a/src/net/ea/chatrecv.h +++ b/src/net/ea/chatrecv.h @@ -26,6 +26,8 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) #if defined(__APPLE__) #include <tr1/cstdint> +#else // defined(__APPLE__) +#include <cstdint> #endif // defined(__APPLE__) #else // defined(__GXX_EXPERIMENTAL_CXX0X__) #include <stdint.h> diff --git a/src/net/ea/traderecv.h b/src/net/ea/traderecv.h index 1b5eb4693..69b96d689 100644 --- a/src/net/ea/traderecv.h +++ b/src/net/ea/traderecv.h @@ -26,6 +26,8 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) #if defined(__APPLE__) #include <tr1/cstdint> +#else // defined(__APPLE__) +#include <cstdint> #endif // defined(__APPLE__) #else // defined(__GXX_EXPERIMENTAL_CXX0X__) #include <stdint.h> diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h index 16a788ab3..f9b3c01a6 100644 --- a/src/net/eathena/beingrecv.h +++ b/src/net/eathena/beingrecv.h @@ -32,7 +32,11 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) #if defined(__APPLE__) #include <tr1/cstdint> +#else // defined(__APPLE__) +#include <cstdint> #endif // defined(__APPLE__) +#else // defined(__GXX_EXPERIMENTAL_CXX0X__) +#include <stdint.h> #endif // defined(__GXX_EXPERIMENTAL_CXX0X__) #include "localconsts.h" diff --git a/src/net/tmwa/beingrecv.h b/src/net/tmwa/beingrecv.h index 91059e50c..89fc75f0f 100644 --- a/src/net/tmwa/beingrecv.h +++ b/src/net/tmwa/beingrecv.h @@ -26,7 +26,11 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) #if defined(__APPLE__) #include <tr1/cstdint> +#else // defined(__APPLE__) +#include <cstdint> #endif // defined(__APPLE__) +#else // defined(__GXX_EXPERIMENTAL_CXX0X__) +#include <stdint.h> #endif // defined(__GXX_EXPERIMENTAL_CXX0X__) #include "localconsts.h" diff --git a/src/net/worldinfo.h b/src/net/worldinfo.h index b9c16f0e4..03063c682 100644 --- a/src/net/worldinfo.h +++ b/src/net/worldinfo.h @@ -28,7 +28,11 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) #if defined(__APPLE__) #include <tr1/cstdint> +#else // defined(__APPLE__) +#include <cstdint> #endif // defined(__APPLE__) +#else // defined(__GXX_EXPERIMENTAL_CXX0X__) +#include <stdint.h> #endif // defined(__GXX_EXPERIMENTAL_CXX0X__) #include <string> |