$(LIBDRM_CFLAGS) \
$(LIBEXIF_CFLAGS) \
$(LIBCURL_CFLAGS) \
- $(LIBCRYPTO_CFLAGS) \
$(TPKP_CURL_CFLAGS) \
$(UTILX_CFLAGS)
$(LIBDRM_LIBS) \
$(LIBEXIF_LIBS) \
$(LIBCURL_LIBS) \
- $(LIBCRYPTO_LIBS) \
$(HARFBUZZ_LIBS) \
$(AUTOFILL_LIBS) \
$(TPKP_CURL_LIBS) \
PKG_CHECK_MODULES(LIBEXIF, libexif)
PKG_CHECK_MODULES(LIBDRM, libdrm)
PKG_CHECK_MODULES(LIBCURL, libcurl)
-PKG_CHECK_MODULES(LIBCRYPTO, libcrypto)
PKG_CHECK_MODULES(HARFBUZZ, harfbuzz)
PKG_CHECK_MODULES(FRIBIDI, fribidi)
PKG_CHECK_MODULES(CAIRO, cairo)
namespace Network
{
-std::mutex* CurlEnvironment::mMutexs = NULL;
-
CurlEnvironment::CurlEnvironment()
{
// Must be called before we attempt any loads. e.g. by using curl_easy_init()
// and before we start any threads.
curl_global_init(CURL_GLOBAL_ALL);
-
- // libcurl with openssl needs locking_function and thread id for threadsafe
- // https://curl.haxx.se/libcurl/c/threadsafe.html
- // https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION
- // SetLockingFunction sets locking_function and get thread id by the guide.
- SetLockingFunction();
}
CurlEnvironment::~CurlEnvironment()
{
- UnsetLockingFunction();
-
curl_global_cleanup();
}
-// libcurl with openssl needs locking_function and thread id for threadsafe
-// https://curl.haxx.se/libcurl/c/threadsafe.html
-// https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION
-void CurlEnvironment::OnOpenSSLLocking( int mode, int n, const char* file, int line )
-{
- if( mode & CRYPTO_LOCK )
- {
- mMutexs[n].lock();
- }
- else
- {
- mMutexs[n].unlock();
- }
-}
-
-void CurlEnvironment::GetThreadId( CRYPTO_THREADID* tid )
-{
- // If dali uses c++ thread, we may replace pthread_self() to this_thread::get_id()
- CRYPTO_THREADID_set_numeric( tid, static_cast< unsigned long > ( pthread_self() ) );
-}
-
-void CurlEnvironment::SetLockingFunction()
-{
- if( mMutexs != NULL )
- {
- return;
- }
-
- mMutexs = new std::mutex[ CRYPTO_num_locks() ];
-
- CRYPTO_THREADID_set_callback( &CurlEnvironment::GetThreadId );
- CRYPTO_set_locking_callback( &CurlEnvironment::OnOpenSSLLocking );
-}
-
-void CurlEnvironment::UnsetLockingFunction()
-{
- if( mMutexs == NULL )
- {
- return;
- }
-
- CRYPTO_THREADID_set_callback( NULL );
- CRYPTO_set_locking_callback( NULL );
- delete [] mMutexs;
- mMutexs = NULL;
-}
-
bool DownloadRemoteFileIntoMemory( const std::string& url,
Dali::Vector<uint8_t>& dataBuffer,
size_t& dataSize,
#include <string>
#include <mutex> //c++11
#include <stdint.h> // uint8
-#include <openssl/crypto.h>
namespace Dali
{
CurlEnvironment& operator=( const CurlEnvironment& ) = delete;
CurlEnvironment( CurlEnvironment&& ) = default;
CurlEnvironment& operator=( CurlEnvironment&& ) = default;
-
- /**
- * Locking function for libcurl with openssl
- */
- static void OnOpenSSLLocking( int mode, int n, const char* file, int line );
-
- /**
- * Gets thread id for libcurl with openssl
- */
- static void GetThreadId( CRYPTO_THREADID* tid );
-
-private:
-
- void SetLockingFunction();
-
- void UnsetLockingFunction();
-
- static std::mutex* mMutexs;
};
// EXTERNAL INCLUDES
#include <dali/integration-api/debug.h>
#include <pthread.h>
-#include <openssl/crypto.h>
#include <cstring>
#include <curl/curl.h>
#include <../ExInclude/InternalFileOperation.h>
namespace Network
{
-std::mutex* CurlEnvironment::mMutexs = NULL;
-
CurlEnvironment::CurlEnvironment()
{
// Must be called before we attempt any loads. e.g. by using curl_easy_init()
// and before we start any threads.
curl_global_init(CURL_GLOBAL_ALL);
-
- // libcurl with openssl needs locking_function and thread id for threadsafe
- // https://curl.haxx.se/libcurl/c/threadsafe.html
- // https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION
- // SetLockingFunction sets locking_function and get thread id by the guide.
- SetLockingFunction();
}
CurlEnvironment::~CurlEnvironment()
{
- UnsetLockingFunction();
-
curl_global_cleanup();
}
-// libcurl with openssl needs locking_function and thread id for threadsafe
-// https://curl.haxx.se/libcurl/c/threadsafe.html
-// https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION
-void CurlEnvironment::OnOpenSSLLocking( int mode, int n, const char* file, int line )
-{
- if( mode & CRYPTO_LOCK )
- {
- mMutexs[n].lock();
- }
- else
- {
- mMutexs[n].unlock();
- }
-}
-
-void CurlEnvironment::SetLockingFunction()
-{
- if( mMutexs != NULL )
- {
- return;
- }
-
- mMutexs = new std::mutex[ CRYPTO_num_locks() ];
-
- CRYPTO_set_id_callback( &CurlEnvironment::GetThreadId );
- CRYPTO_set_locking_callback( &CurlEnvironment::OnOpenSSLLocking );
-}
-
-void CurlEnvironment::UnsetLockingFunction()
-{
- if( mMutexs == NULL )
- {
- return;
- }
-
- CRYPTO_set_id_callback( NULL );
- CRYPTO_set_locking_callback( NULL );
-
- delete [] mMutexs;
- mMutexs = NULL;
-}
-
bool DownloadRemoteFileIntoMemory( const std::string& url,
Dali::Vector<uint8_t>& dataBuffer,
size_t& dataSize,
BuildRequires: pkgconfig(capi-system-info)
BuildRequires: pkgconfig(capi-system-sensor)
-BuildRequires: pkgconfig(libcrypto)
BuildRequires: pkgconfig(cairo)
BuildRequires: pkgconfig(wayland-egl)