}
if (p_output_mail_data->smime_type == EMAIL_SMIME_ENCRYPTED || p_output_mail_data->smime_type == EMAIL_SMIME_SIGNED_AND_ENCRYPTED) {
+ emcore_init_openssl_library();
if (!emcore_smime_get_decrypt_message(p_output_attachment_data[i].attachment_path, p_account_tbl->certificate_path, &decrypt_filepath, &err)) {
EM_DEBUG_EXCEPTION("emcore_smime_get_decrypt_message failed");
+ emcore_clean_openssl_library();
goto FINISH_OFF;
}
+ emcore_clean_openssl_library();
} else if (p_output_mail_data->smime_type == EMAIL_PGP_ENCRYPTED) {
if ((err = emcore_pgp_get_decrypted_message(p_output_attachment_data[i].attachment_path, p_output_mail_data->pgp_password, false, &decrypt_filepath, verify)) != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("emcore_pgp_get_decrypted_message failed : [%d]", err);
}
if (input_mail_data->smime_type == EMAIL_SMIME_ENCRYPTED || input_mail_data->smime_type == EMAIL_SMIME_SIGNED_AND_ENCRYPTED) {
+ emcore_init_openssl_library();
if (!emcore_smime_get_decrypt_message(input_attachment_data[i].attachment_path, p_account_tbl->certificate_path, &decrypt_filepath, &err)) {
EM_DEBUG_EXCEPTION("emcore_smime_get_decrypt_message failed");
+ emcore_clean_openssl_library();
goto FINISH_OFF;
}
+ emcore_clean_openssl_library();
} else if (input_mail_data->smime_type == EMAIL_PGP_ENCRYPTED) {
if ((err = emcore_pgp_get_decrypted_message(input_attachment_data[i].attachment_path, input_mail_data->pgp_password, false, &decrypt_filepath, verify)) != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("emcore_pgp_get_decrypted_message failed : [%d]", err);
}
if (input_mail_data->smime_type == EMAIL_SMIME_SIGNED) {
+ emcore_init_openssl_library();
if (!emcore_verify_signature(input_attachment_data[count].attachment_path, input_mail_data->file_path_mime_entity, verify, &err))
EM_DEBUG_EXCEPTION("emcore_verify_signature failed : [%d]", err);
+ emcore_clean_openssl_library();
} else if (input_mail_data->smime_type == EMAIL_PGP_SIGNED) {
if ((err = emcore_pgp_get_verify_signature(input_attachment_data[count].attachment_path, input_mail_data->file_path_mime_entity, input_mail_data->digest_type, verify)) != EMAIL_ERROR_NONE)
EM_DEBUG_EXCEPTION("emcore_pgp_get_verify_siganture failed : [%d]", err);
#define __FEATURE_BODY_SEARCH__
#define __FEATURE_ACCESS_CONTROL__
#define __FEATURE_UPDATE_DB_TABLE_SCHEMA__
+#define __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
/* #define __FEATURE_COMPARE_DOMAIN__ */
/* #define __FEATURE_FORK_FOR_CURL__ */
/* #define __FEATURE_USE_DRM_API__ */
INCLUDE(FindPkgConfig)
-pkg_check_modules(storage_pkgs REQUIRED glib-2.0 dlog openssl1.1 vconf dbus-1 contacts-service2 libtzplatform-config)
+pkg_check_modules(storage_pkgs REQUIRED glib-2.0 dlog openssl vconf dbus-1 contacts-service2 libtzplatform-config)
set(EXTRA_CFLAGS "")
FOREACH(flag ${storage_pkgs_CFLAGS})
)
INCLUDE(FindPkgConfig)
-pkg_check_modules(network_pkgs REQUIRED glib-2.0 uw-imap-toolkit dbus-1 vconf dlog openssl1.1)
+pkg_check_modules(network_pkgs REQUIRED glib-2.0 uw-imap-toolkit dbus-1 vconf dlog openssl)
FOREACH(flag ${network_pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
INCLUDE(FindPkgConfig)
SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 key-manager tpkp-curl
- uw-imap-toolkit vconf vconf-internal-keys contacts-service2
- openssl1.1 accounts-svc alarm-service notification libcurl libxml-2.0
+ uw-imap-toolkit vconf vconf-internal-keys contacts-service2
+ openssl accounts-svc alarm-service notification libcurl libxml-2.0
cert-svc-vcore badge capi-appfw-application icu-i18n gmime-2.6 storage dpm cryptsvc)
pkg_check_modules(core_pkgs REQUIRED ${PKG_MODULES})
return err;
}
+INTERNAL_FUNC void emcore_init_openssl_library()
+{
+ EM_DEBUG_FUNC_BEGIN();
+ SSL_library_init();
+ ERR_load_crypto_strings();
+ EM_DEBUG_FUNC_END();
+}
+
+INTERNAL_FUNC void emcore_clean_openssl_library()
+{
+ EM_DEBUG_FUNC_BEGIN();
+ ERR_free_strings();
+ EVP_cleanup();
+ EM_DEBUG_FUNC_END();
+}
INTERNAL_FUNC int emcore_convert_mail_data_to_smime_data(char *multi_user_name, emstorage_account_tbl_t *account_tbl_item, email_mail_data_t *input_mail_data, email_attachment_data_t *input_attachment_data_list, int input_attachment_count, email_mail_data_t **output_mail_data, email_attachment_data_t **output_attachment_data_list, int *output_attachment_count);
+INTERNAL_FUNC void emcore_init_openssl_library();
+INTERNAL_FUNC void emcore_clean_openssl_library();
+
#endif /* EM_CORE_SMIME_H_ */
)
INCLUDE(FindPkgConfig)
-SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 uw-imap-toolkit
- vconf vconf-internal-keys contacts-service2 alarm-service
- msg-service libwbxml2 libsmack notification
+SET(PKG_MODULES glib-2.0 dlog dbus-1 gthread-2.0 openssl uw-imap-toolkit
+ vconf vconf-internal-keys contacts-service2 alarm-service
+ msg-service libwbxml2 libsmack notification
capi-network-connection gmime-2.6)
pkg_check_modules(main_pkgs REQUIRED ${PKG_MODULES})
static gpointer partial_body_download_thread(gpointer data);
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+
+#include <openssl/crypto.h>
+
+#define MAX_THREAD_NUMBER 100
+
+static pthread_mutex_t *lock_cs;
+static long *lock_count;
+
+void pthreads_locking_callback(int mode, int type, char *file, int line)
+{
+ if (mode & CRYPTO_LOCK) {
+ pthread_mutex_lock(&(lock_cs[type]));
+ lock_count[type]++;
+ } else {
+ pthread_mutex_unlock(&(lock_cs[type]));
+ }
+}
+
+unsigned long pthreads_thread_id(void)
+{
+ return (unsigned long)pthread_self();
+}
+
+INTERNAL_FUNC void emdaemon_setup_handler_for_open_ssl_multithread(void)
+{
+ EM_DEBUG_FUNC_BEGIN();
+ int i = 0;
+
+ lock_cs = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));
+ lock_count = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(long));
+
+ for (i = 0; i < CRYPTO_num_locks(); i++) {
+ lock_count[i] = 0;
+ pthread_mutex_init(&(lock_cs[i]), NULL);
+ }
+
+ CRYPTO_set_id_callback((unsigned long (*)())pthreads_thread_id);
+ CRYPTO_set_locking_callback((void (*)())pthreads_locking_callback);
+ EM_DEBUG_FUNC_END();
+}
+
+INTERNAL_FUNC void emdaemon_cleanup_handler_for_open_ssl_multithread(void)
+{
+ EM_DEBUG_FUNC_BEGIN();
+ int i = 0;
+
+ CRYPTO_set_locking_callback(NULL);
+ for (i = 0; i < CRYPTO_num_locks(); i++) {
+ pthread_mutex_destroy(&(lock_cs[i]));
+ EM_DEBUG_LOG("%8ld:%s", lock_count[i], CRYPTO_get_lock_name(i));
+ }
+ OPENSSL_free(lock_cs);
+ OPENSSL_free(lock_count);
+
+ EM_DEBUG_FUNC_END();
+}
+
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
/* start api event_data loop */
INTERNAL_FUNC int emdaemon_start_event_loop(int *err_code)
{
if (!emdaemon_core_init(&err))
goto FINISH_OFF;
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+ emdaemon_setup_handler_for_open_ssl_multithread();
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
if (emdaemon_start_event_loop(&err) < 0)
goto FINISH_OFF;
emcore_stop_auto_download_loop(&err);
#endif
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+ emdaemon_cleanup_handler_for_open_ssl_multithread();
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
EM_DEBUG_FUNC_END("err [%d]", err);
return err;
}
goto FINISH_OFF;
}
+ /* Openssl clean up */
+ emcore_clean_openssl_library();
+
ret = true;
FINISH_OFF:
emdaemon_init_alarm_data_list();
+ /* Openssl library init */
+ emcore_init_openssl_library();
+
if (err_code)
*err_code = EMAIL_ERROR_NONE;
INTERNAL_FUNC int emdaemon_start_event_loop_for_sending_mails(int *err_code);
INTERNAL_FUNC int emdaemon_start_thread_for_downloading_partial_body(int *err_code);
+#ifdef __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__
+INTERNAL_FUNC void emdaemon_setup_handler_for_open_ssl_multithread(void);
+INTERNAL_FUNC void emdaemon_cleanup_handler_for_open_ssl_multithread(void);
+#endif /* __FEATURE_OPEN_SSL_MULTIHREAD_HANDLE__ */
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(uw-imap-toolkit)
-BuildRequires: pkgconfig(openssl1.1)
+BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(alarm-service)
BuildRequires: pkgconfig(key-manager)
BuildRequires: pkgconfig(notification)