Add support for libcurl before version 7.28.0
Support older versions might be useful for older linux distributions and could be used as a possible fallback to macOS URLSession implementation on macOS 10.7 and 10.8.
This commit is contained in:
@@ -32,6 +32,12 @@
|
|||||||
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
|
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CURL_AT_LEAST_VERSION(7, 28, 0)
|
||||||
|
#define wxCURL_HAVE_MULTI_WAIT 1
|
||||||
|
#else
|
||||||
|
#define wxCURL_HAVE_MULTI_WAIT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// wxWebResponseCURL
|
// wxWebResponseCURL
|
||||||
//
|
//
|
||||||
@@ -384,6 +390,46 @@ wxWebRequest* wxWebSessionCURL::CreateRequest(const wxString& url, int id)
|
|||||||
return new wxWebRequestCURL(*this, id, url);
|
return new wxWebRequestCURL(*this, id, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CURLMcode wx_curl_multi_wait(CURLM *multi_handle, int timeout_ms,
|
||||||
|
int *ret)
|
||||||
|
{
|
||||||
|
// since libcurl 7.28.0 the curl_multi_wait method is more convient than
|
||||||
|
// calling multiple curl_multi_... methods.
|
||||||
|
// When support for older libcurl versions is dropped this wrapper can be
|
||||||
|
// removed.
|
||||||
|
#if wxCURL_HAVE_MULTI_WAIT
|
||||||
|
return curl_multi_wait(multi_handle, NULL, 0, timeout_ms, ret);
|
||||||
|
#else
|
||||||
|
wxASSERT(ret != NULL);
|
||||||
|
|
||||||
|
fd_set fdread;
|
||||||
|
fd_set fdwrite;
|
||||||
|
fd_set fdexcep;
|
||||||
|
timeval timeout;
|
||||||
|
|
||||||
|
long curl_timeo;
|
||||||
|
|
||||||
|
curl_multi_timeout(multi_handle, &curl_timeo);
|
||||||
|
if ( curl_timeo < 0 )
|
||||||
|
curl_timeo = timeout_ms;
|
||||||
|
|
||||||
|
timeout.tv_sec = curl_timeo / 1000;
|
||||||
|
timeout.tv_usec = (curl_timeo % 1000) * 1000;
|
||||||
|
|
||||||
|
FD_ZERO(&fdread);
|
||||||
|
FD_ZERO(&fdwrite);
|
||||||
|
FD_ZERO(&fdexcep);
|
||||||
|
|
||||||
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, ret);
|
||||||
|
if ( *ret == -1 )
|
||||||
|
return CURLM_OK;
|
||||||
|
else if ( select(*ret + 1, &fdread, &fdwrite, &fdexcep, &timeout) == -1 )
|
||||||
|
return CURLM_BAD_SOCKET;
|
||||||
|
else
|
||||||
|
return CURLM_OK;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
wxThread::ExitCode wxWebSessionCURL::Entry()
|
wxThread::ExitCode wxWebSessionCURL::Entry()
|
||||||
{
|
{
|
||||||
m_mutex.Lock();
|
m_mutex.Lock();
|
||||||
@@ -425,7 +471,7 @@ wxThread::ExitCode wxWebSessionCURL::Entry()
|
|||||||
{
|
{
|
||||||
// Wait for CURL work to finish
|
// Wait for CURL work to finish
|
||||||
int numfds;
|
int numfds;
|
||||||
curl_multi_wait(m_handle, NULL, 0, 500, &numfds);
|
wx_curl_multi_wait(m_handle, 500, &numfds);
|
||||||
|
|
||||||
if ( !numfds )
|
if ( !numfds )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user