Merged the tizen 2.4 and fixed the bug 14/47214/1 accepted/tizen/mobile/20150901.083859 accepted/tizen/tv/20150901.083919 accepted/tizen/wearable/20150901.083928 submit/tizen/20150901.080107
authorSunghyun Kwon <sh0701.kwon@samsung.com>
Tue, 1 Sep 2015 04:53:30 +0000 (13:53 +0900)
committerSunghyun Kwon <sh0701.kwon@samsung.com>
Tue, 1 Sep 2015 04:53:30 +0000 (13:53 +0900)
Change-Id: Ia9211d7b9eac9b9a1885d38a8c3edc28310ba455

33 files changed:
email-api/email-api-mailbox.c
email-api/include/email-api-smime.h
email-common-use/email-convert.c
email-common-use/email-utilities.c
email-common-use/include/email-errors.h
email-common-use/include/email-internal-types.h
email-common-use/include/email-types.h
email-core/email-core-account.c
email-core/email-core-auto-download.c
email-core/email-core-event.c
email-core/email-core-gmime.c
email-core/email-core-imap-idle.c
email-core/email-core-key-manager.c
email-core/email-core-mail.c
email-core/email-core-mailbox-sync.c
email-core/email-core-mailbox.c
email-core/email-core-mime.c
email-core/email-core-smime.c
email-core/email-core-smtp.c
email-core/email-core-task-manager.c
email-core/email-core-tasks.c
email-core/email-core-utils.c
email-core/email-storage/email-storage.c
email-core/include/email-core-mail.h
email-core/include/email-core-utils.h
email-daemon/email-daemon-account.c
email-daemon/email-daemon-event.c
email-daemon/email-daemon-init.c
email-daemon/email-daemon-mail.c
email-daemon/main.c
email-ipc/email-ipc-api.c
email-ipc/email-proxy/email-proxy-socket.c
utilities/test-application/testapp-mail.c

index a520f4b..a463b25 100755 (executable)
@@ -34,6 +34,7 @@
 #include "email-convert.h"
 #include "email-storage.h"
 #include "email-core-utils.h"
+#include "email-core-gmime.h"
 #include "email-core-signal.h"
 #include "email-utilities.h"
 #include "email-ipc.h"
@@ -713,12 +714,16 @@ EXPORT_API int email_get_mailbox_list_ex(int account_id, int mailbox_sync_type,
         goto FINISH_OFF;
     }
 
-       if (!emstorage_get_mailbox_list_ex(multi_user_name, account_id, mailbox_sync_type, with_count, &mailbox_count, &mailbox_tbl_list, true, &err))  {       
+       emcore_gmime_init();
+       if (!emstorage_get_mailbox_list_ex(multi_user_name, account_id, mailbox_sync_type, with_count, &mailbox_count, &mailbox_tbl_list, true, &err))  {
+               emcore_gmime_shutdown();
                EM_DEBUG_EXCEPTION("emstorage_get_mailbox_list_ex failed [%d]", err);
                goto FINISH_OFF;
        } else
                err = EMAIL_ERROR_NONE;
-       
+
+       emcore_gmime_shutdown();
+
        if (mailbox_count > 0)  {
                if (!(*mailbox_list = em_malloc(sizeof(email_mailbox_t) * mailbox_count)))  {
                        EM_DEBUG_EXCEPTION("malloc failed for mailbox_list");
@@ -726,7 +731,7 @@ EXPORT_API int email_get_mailbox_list_ex(int account_id, int mailbox_sync_type,
                        goto FINISH_OFF;
                }
 
-               for (i = 0; i < mailbox_count; i++)
+               for (i = 0; i < mailbox_count; i++) 
                        em_convert_mailbox_tbl_to_mailbox(mailbox_tbl_list + i, (*mailbox_list) + i);
        }
        else
index 4019d90..6517e2a 100755 (executable)
@@ -63,7 +63,7 @@ extern "C" {
  * @return  #EMAIL_ERROR_NONE on success,
  *          otherwise an error code (see #EMAIL_ERROR_XXX) on failure
  */
-EXPORT_API int email_add_certificate(char *certificate_path, char *email_address);
+EXPORT_API int email_add_certificate(char *certificate_path, char *email_address) DEPRECATED;
 
 /**
  * @brief Deletes a public certificate information from the database.
@@ -73,7 +73,7 @@ EXPORT_API int email_add_certificate(char *certificate_path, char *email_address
  * @return  #EMAIL_ERROR_NONE on success, 
  *          otherwise an error code (see #EMAIL_ERROR_XXX) on failure
  */
-EXPORT_API int email_delete_certificate(char *email_address);
+EXPORT_API int email_delete_certificate(char *email_address) DEPRECATED;
 
 /**
  * @brief Gets the the public certificate information from the database.
@@ -88,7 +88,7 @@ EXPORT_API int email_delete_certificate(char *email_address);
  * @return  #EMAIL_ERROR_NONE on success, 
  *          otherwise an error code (see #EMAIL_ERROR_XXX) on failure
  */
-EXPORT_API int email_get_certificate(char *email_address, email_certificate_t **certificate);
+EXPORT_API int email_get_certificate(char *email_address, email_certificate_t **certificate) DEPRECATED;
 
 /**
  * @brief Gets a decrypted message.
@@ -179,7 +179,7 @@ EXPORT_API int email_verify_signature_ex(email_mail_data_t *input_mail_data, ema
  * @return  #EMAIL_ERROR_NONE on success,
  *          otherwise an error code (see #EMAIL_ERROR_XXX) on failure
  */
-EXPORT_API int email_verify_certificate(char *certificate_path, int *verify);
+EXPORT_API int email_verify_certificate(char *certificate_path, int *verify) DEPRECATED;
 
 /**
  * @brief Gets the certificate from the server (using exchange server).
index 8832ef1..e48c02f 100755 (executable)
@@ -683,6 +683,85 @@ static int fetch_string_from_stream(char *input_stream, int *input_output_stream
 #define EMAIL_ACCOUNT_FMT   "S(" "isiii" "isii" ")" "B" "S(" "issss"  "isiss" "iiiii" "iiiii" "isiss" "iii"\
                                  "$(" "iiiii" "iisii" "iisi" "iiiis" ")" "iiiiiisiis" ")"
 
+/* For converting fmt : to distinguish between 64bit or 32bit */
+static char *convert_format(char *fmt)
+{
+       EM_DEBUG_FUNC_BEGIN();
+
+       if (fmt == NULL) {
+               EM_DEBUG_EXCEPTION("Invalid parameter");
+               return NULL;
+       }
+
+       int size = 0;
+       int string_size = 0;
+       int ret = false;
+       char *c = NULL;
+       char *converted_fmt = NULL;
+
+       string_size = strlen(fmt);
+       converted_fmt = em_malloc(string_size);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("em_malloc failed");
+               return NULL;
+       }
+
+       c = fmt;
+    while (*c != '\0') {
+        switch (*c) {
+            case 'c':
+            case 'i':
+            case 'u':
+            case 'j':
+            case 'v':
+            case 'I':
+            case 'U':
+            case 'f':
+            case 's':
+            case '#':
+            case 'B':
+            case 'A':
+            case 'S':
+            case '$': /* nested structure */
+            case ')':
+            case '(':
+                               strncat(converted_fmt, c, 1);
+                               break;
+                       case 't': /* special charater for time_t */
+                       case 'T':
+                               size = sizeof(time_t);
+                               if (size == 4) {
+                                       /* 32bit */
+                                       strncat(converted_fmt, "i", 1);
+                               } else if (size == 8) {
+                                       /* 64bit */
+                                       strncat(converted_fmt, "I", 1);
+                               } else {
+                                       EM_DEBUG_LOG("size : [%d]", size);
+                               }
+                               
+                               break;
+            default:
+                EM_DEBUG_EXCEPTION("unsupported option %c\n", *c);
+                               goto FINISH_OFF;
+        }
+        c++;
+    }
+
+       EM_DEBUG_LOG("original fmt : [%s]", fmt);
+       EM_DEBUG_LOG("converted_fmt : [%s]", converted_fmt);
+
+       ret = true;
+
+FINISH_OFF:
+
+       if (ret == false) {
+               EM_SAFE_FREE(converted_fmt);
+       }
+
+       EM_DEBUG_FUNC_END();
+       return converted_fmt;
+}
 
 INTERNAL_FUNC char* em_convert_account_to_byte_stream(email_account_t* account, int *stream_len)
 {
@@ -691,12 +770,22 @@ INTERNAL_FUNC char* em_convert_account_to_byte_stream(email_account_t* account,
 
        tpl_node *tn = NULL;
        tpl_bin tb;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_ACCOUNT_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
 
        tn = tpl_map(EMAIL_ACCOUNT_FMT, account, &tb, &(account->user_data_length));
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
+
        tb.sz = account->user_data_length;
        tb.addr = account->user_data;
        tpl_pack(tn, 0);
@@ -708,6 +797,7 @@ INTERNAL_FUNC char* em_convert_account_to_byte_stream(email_account_t* account,
        tpl_free(tn);
 
        *stream_len = len;
+
        EM_DEBUG_FUNC_END();
        return (char*) buf;
 }
@@ -721,12 +811,21 @@ INTERNAL_FUNC void em_convert_byte_stream_to_account(char *stream, int stream_le
 
        tpl_node *tn = NULL;
        tpl_bin tb;
+       char *converted_fmt = NULL;
 
-       tn = tpl_map(EMAIL_ACCOUNT_FMT, account, &tb, &(account->user_data_length));
+       converted_fmt = convert_format(EMAIL_ACCOUNT_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return;
+       }
+
+       tn = tpl_map(converted_fmt, account, &tb, &(account->user_data_length));
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
+       EM_SAFE_FREE(converted_fmt);
 
        tpl_load(tn, TPL_MEM, stream, stream_len);
        tpl_unpack(tn, 0);
@@ -738,8 +837,8 @@ INTERNAL_FUNC void em_convert_byte_stream_to_account(char *stream, int stream_le
        EM_DEBUG_FUNC_END();
 }
 
-#define EMAIL_MAIL_DATA_FMT  "S(" "iiiis" "iisss" "issss" "sssss" "sisss"\
-                            "icccc" "cccii" "iiiii" "iisii" "iiiii" "iisss" "si" ")B"
+#define EMAIL_MAIL_DATA_FMT  "S(" "iiiis" "tisss" "issss" "sssss" "sisss"\
+                            "icccc" "cccii" "iiiii" "iisii" "iitii" "ttsss" "si" ")B"
 
 INTERNAL_FUNC char* em_convert_mail_data_to_byte_stream(email_mail_data_t *mail_data, int *stream_len)
 {
@@ -749,14 +848,23 @@ INTERNAL_FUNC char* em_convert_mail_data_to_byte_stream(email_mail_data_t *mail_
 
        tpl_node *tn = NULL;
        tpl_bin tb;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_MAIL_DATA_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
 
        EM_DEBUG_LOG("eas_data_length[%d]", mail_data->eas_data_length); /*prevent 44369*/
 
-       tn = tpl_map(EMAIL_MAIL_DATA_FMT, mail_data, &tb);
+       tn = tpl_map(converted_fmt, mail_data, &tb);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
        tb.sz   = mail_data->eas_data_length;
        tb.addr = mail_data->eas_data;
        tpl_pack(tn, 0);
@@ -768,6 +876,7 @@ INTERNAL_FUNC char* em_convert_mail_data_to_byte_stream(email_mail_data_t *mail_
        tpl_free(tn);
 
        *stream_len = len;
+
        EM_DEBUG_FUNC_END();
        return (char*) buf;
 }
@@ -780,12 +889,21 @@ INTERNAL_FUNC void em_convert_byte_stream_to_mail_data(char *stream, int stream_
 
        tpl_node *tn = NULL;
        tpl_bin tb;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_MAIL_DATA_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return;
+       }
 
-       tn = tpl_map(EMAIL_MAIL_DATA_FMT, mail_data, &tb);
+       tn = tpl_map(converted_fmt, mail_data, &tb);
        if(!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
+       EM_SAFE_FREE(converted_fmt);
 
        tpl_load(tn, TPL_MEM, stream, stream_len);
        tpl_unpack(tn, 0);
@@ -814,14 +932,23 @@ INTERNAL_FUNC char* em_convert_attachment_data_to_byte_stream(email_attachment_d
 
        email_attachment_data_t cur = {0};
        tpl_node *tn = NULL;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_ATTACHMENT_DATA_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("convertinf failed");
+               return NULL;
+       }
 
        /* tpl_map adds value at 2nd param addr to packing buffer iterately */
        /* 2nd param value (not addr via pointer) should be modified at each iteration */
-       tn = tpl_map(EMAIL_ATTACHMENT_DATA_FMT, &cur);
+       tn = tpl_map(converted_fmt, &cur);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
        
        /* if attachment_count is zero, for loop is skipped */
        int i=0;
@@ -854,11 +981,21 @@ INTERNAL_FUNC void em_convert_byte_stream_to_attachment_data(char *stream, int s
 
        email_attachment_data_t cur = {0};
        tpl_node *tn = NULL;
-       tn = tpl_map(EMAIL_ATTACHMENT_DATA_FMT, &cur);
+       char *converted_fmt = NULL;
+       
+       converted_fmt = convert_format(EMAIL_ATTACHMENT_DATA_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return;
+       }
+
+       tn = tpl_map(converted_fmt, &cur);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
+       EM_SAFE_FREE(converted_fmt);
        tpl_load(tn, TPL_MEM, stream, stream_len);
 
        /* tpl does not return the size of variable-length array, but we need variable-length array */
@@ -890,11 +1027,12 @@ INTERNAL_FUNC void em_convert_byte_stream_to_attachment_data(char *stream, int s
 
        *attachment_count = num_element;
        *attachment_data = attached;
+
        EM_DEBUG_FUNC_END();
 }
 
 
-#define EMAIL_MAILBOX_FMT  "S(" "isisi" "iiiii" "iiii" ")B"
+#define EMAIL_MAILBOX_FMT  "S(" "isisi" "iiiii" "itii" ")B"
 
 INTERNAL_FUNC char* em_convert_mailbox_to_byte_stream(email_mailbox_t *mailbox_data, int *stream_len)
 {
@@ -904,14 +1042,23 @@ INTERNAL_FUNC char* em_convert_mailbox_to_byte_stream(email_mailbox_t *mailbox_d
 
        tpl_node *tn = NULL;
        tpl_bin tb;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_MAILBOX_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
 
        EM_DEBUG_LOG("eas_data_length[%d]", mailbox_data->eas_data_length);
 
-       tn = tpl_map(EMAIL_MAILBOX_FMT, mailbox_data, &tb);
+       tn = tpl_map(converted_fmt, mailbox_data, &tb);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
        tb.sz   = mailbox_data->eas_data_length;
        tb.addr = mailbox_data->eas_data;
        tpl_pack(tn, 0);
@@ -925,6 +1072,7 @@ INTERNAL_FUNC char* em_convert_mailbox_to_byte_stream(email_mailbox_t *mailbox_d
                tpl_free(tn);
 
        *stream_len = len;
+
        EM_DEBUG_FUNC_END("serialized len: %d", len);
        return (char*) buf;
 }
@@ -938,12 +1086,21 @@ INTERNAL_FUNC void em_convert_byte_stream_to_mailbox(char *stream, int stream_le
 
        tpl_node *tn = NULL;
        tpl_bin tb;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_MAILBOX_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return;
+       }
 
-       tn = tpl_map(EMAIL_MAILBOX_FMT, mailbox_data, &tb);
+       tn = tpl_map(converted_fmt, mailbox_data, &tb);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
+       EM_SAFE_FREE(converted_fmt);
        tpl_load(tn, TPL_MEM, stream, stream_len);
        tpl_unpack(tn, 0);
 
@@ -970,12 +1127,21 @@ INTERNAL_FUNC char* em_convert_option_to_byte_stream(email_option_t* option, int
        EM_IF_NULL_RETURN_VALUE(stream_len, NULL);
 
        tpl_node *tn = NULL;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_OPTION_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
 
-       tn = tpl_map(EMAIL_OPTION_FMT, option);
+       tn = tpl_map(converted_fmt, option);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
        tpl_pack(tn, 0);
 
        /* write account to buffer */
@@ -985,6 +1151,7 @@ INTERNAL_FUNC char* em_convert_option_to_byte_stream(email_option_t* option, int
        tpl_free(tn);
 
        *stream_len = len;
+
        EM_DEBUG_FUNC_END("serialized len: %d", len);
        return (char*) buf;
 }
@@ -996,12 +1163,21 @@ INTERNAL_FUNC void em_convert_byte_stream_to_option(char *stream, int stream_len
        EM_NULL_CHECK_FOR_VOID(option);
 
        tpl_node *tn = NULL;
+       char *converted_fmt = NULL;
 
-       tn = tpl_map(EMAIL_OPTION_FMT, option);
+       converted_fmt = convert_format(EMAIL_OPTION_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return;
+       }
+
+       tn = tpl_map(converted_fmt, option);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
+       EM_SAFE_FREE(converted_fmt);
        tpl_load(tn, TPL_MEM, stream, stream_len);
        tpl_unpack(tn, 0);
        tpl_free(tn);
@@ -1019,12 +1195,21 @@ INTERNAL_FUNC char* em_convert_rule_to_byte_stream(email_rule_t *rule, int *stre
        EM_IF_NULL_RETURN_VALUE(stream_len, NULL);
 
        tpl_node *tn = NULL;
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_RULE_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
 
-       tn = tpl_map(EMAIL_RULE_FMT, rule);
+       tn = tpl_map(converted_fmt, rule);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
        tpl_pack(tn, 0);
 
        /* write account to buffer */
@@ -1034,6 +1219,7 @@ INTERNAL_FUNC char* em_convert_rule_to_byte_stream(email_rule_t *rule, int *stre
        tpl_free(tn);
 
        *stream_len = len;
+
        EM_DEBUG_FUNC_END("serialized len: %d", len);
        return (char*) buf;
 }
@@ -1045,12 +1231,21 @@ INTERNAL_FUNC void em_convert_byte_stream_to_rule(char *stream, int stream_len,
        EM_NULL_CHECK_FOR_VOID(rule);
 
        tpl_node *tn = NULL;
+       char *converted_fmt = NULL;
 
-       tn = tpl_map(EMAIL_RULE_FMT, rule);
+       converted_fmt = convert_format(EMAIL_RULE_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
+
+       tn = tpl_map(converted_fmt, rule);
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
+       EM_SAFE_FREE(converted_fmt);
        tpl_load(tn, TPL_MEM, stream, stream_len);
        tpl_unpack(tn, 0);
        tpl_free(tn);
@@ -1068,8 +1263,15 @@ INTERNAL_FUNC char* em_convert_meeting_req_to_byte_stream(email_meeting_request_
 
        tpl_node *tn = NULL;
        tpl_bin tb[4];
+       char *converted_fmt = NULL;
 
-       tn = tpl_map(EMAIL_MEETING_REQUEST_FMT,
+       converted_fmt = convert_format(EMAIL_MEETING_REQUEST_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
+
+       tn = tpl_map(converted_fmt,
                                                &meeting_req->mail_id,
                                                &meeting_req->meeting_response,
                                                &tb[0],
@@ -1085,16 +1287,17 @@ INTERNAL_FUNC char* em_convert_meeting_req_to_byte_stream(email_meeting_request_
                                                &meeting_req->time_zone.daylight_bias
                                );
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return NULL;
        }
+       EM_SAFE_FREE(converted_fmt);
        tb[0].sz = tb[1].sz = tb[2].sz = tb[3].sz = sizeof(struct tm);
        tb[0].addr = &meeting_req->start_time;
        tb[1].addr = &meeting_req->end_time;
        tb[2].addr = &meeting_req->time_zone.standard_time_start_date;
        tb[3].addr = &meeting_req->time_zone.daylight_time_start_date;
 
-
        tpl_pack(tn, 0);
 
        /* write account to buffer */
@@ -1104,6 +1307,7 @@ INTERNAL_FUNC char* em_convert_meeting_req_to_byte_stream(email_meeting_request_
        tpl_free(tn);
 
        *stream_len = len;
+
        EM_DEBUG_FUNC_END();
        return (char*) buf;
 }
@@ -1117,8 +1321,15 @@ INTERNAL_FUNC void em_convert_byte_stream_to_meeting_req(char *stream, int strea
 
        tpl_node *tn = NULL;
        tpl_bin tb[4];
+       char *converted_fmt = NULL;
+
+       converted_fmt = convert_format(EMAIL_MEETING_REQUEST_FMT);
+       if (converted_fmt == NULL) {
+               EM_DEBUG_EXCEPTION("converting failed");
+               return NULL;
+       }
 
-       tn = tpl_map(EMAIL_MEETING_REQUEST_FMT,
+       tn = tpl_map(converted_fmt,
                                                &meeting_req->mail_id,
                                                &meeting_req->meeting_response,
                                                &tb[0],
@@ -1134,12 +1345,14 @@ INTERNAL_FUNC void em_convert_byte_stream_to_meeting_req(char *stream, int strea
                                                &meeting_req->time_zone.daylight_bias
                                );
        if (!tn) {
+               EM_SAFE_FREE(converted_fmt);
                EM_DEBUG_EXCEPTION("tpl_map failed");
                return;
        }
        tpl_load(tn, TPL_MEM, stream, stream_len);
        tpl_unpack(tn, 0);
        tpl_free(tn);
+       EM_SAFE_FREE(converted_fmt);
 
        /* tb will be destroyed at end of func, but tb.addr remains */
        memcpy(&meeting_req->start_time, tb[0].addr, sizeof(struct tm));
index bef3010..770aa85 100755 (executable)
@@ -425,62 +425,6 @@ FINISH_OFF:
        return err;
 }
 
-
-/* Memory clean up */
-#include <sys/mman.h>
-
-/* #define GETSP()                             ({ unsigned int sp; asm volatile ("mov %0, sp " : "=r"(sp)); sp;}) */
-#define BUF_SIZE                               256
-#define PAGE_SIZE                          (1 << 12)
-#define _ALIGN_UP(addr, size)   (((addr)+((size)-1))&(~((size)-1)))
-#define _ALIGN_DOWN(addr, size) ((addr)&(~((size)-1)))
-#define PAGE_ALIGN(addr)        _ALIGN_DOWN(addr, PAGE_SIZE)
-
-int stack_trim(void)
-{
-       /*
-       char buf[BUF_SIZE];
-       FILE *file;
-       unsigned int stacktop;
-       int found = 0;
-       unsigned int sp;
-
-       asm volatile ("mov %0, sp " : "=r"(sp));
-
-       sprintf(buf, "/proc/%d/maps", getpid());
-       file = fopen(buf, "r");
-       while (fgets(buf, BUF_SIZE, file) != NULL) {
-               if (strstr(buf, "[stack]")) {
-                       found = 1;
-                       break;
-               }
-       }
-
-       fclose(file);
-
-       if (found) {
-               sscanf(buf, "%x-", &stacktop);
-               if (madvise((void *)PAGE_ALIGN(stacktop), PAGE_ALIGN(sp)-stacktop, MADV_DONTNEED) < 0)
-                       perror("stack madvise fail");
-       }
-       */
-       return 1;
-}
-
-INTERNAL_FUNC void em_flush_memory()
-{
-       EM_DEBUG_FUNC_BEGIN();
-       /*  flush memory in heap */
-       malloc_trim(0);
-
-       /*  flush memory in stack */
-       stack_trim();
-
-       /*  flush memory for sqlite */
-       emstorage_flush_db_cache();
-       EM_DEBUG_FUNC_END();
-}
-
 INTERNAL_FUNC int em_get_file_name_from_file_path(char *input_source_file_path, char **output_file_name)
 {
        EM_DEBUG_FUNC_BEGIN_SEC("input_source_file_path[%s], output_file_name [%p]", input_source_file_path, output_file_name);
@@ -1086,17 +1030,17 @@ INTERNAL_FUNC int em_find_pos_stripped_subject_for_thread_view(char *subject, ch
 
 
 
-       while ((result = strstr(curpos, "RE:")) != NULL) {
+       while ((result = g_strrstr(curpos, "RE:")) != NULL) {
                curpos = result + 3;
                EM_DEBUG_LOG_SEC("RE result : %s", curpos);
        }
 
-       while ((result = strstr(curpos, "FWD:")) != NULL) {
+       while ((result = g_strrstr(curpos, "FWD:")) != NULL) {
                curpos = result + 4;
                EM_DEBUG_LOG_SEC("FWD result : %s", curpos);
        }
 
-       while ((result = strstr(curpos, "FW:")) != NULL) {
+       while ((result = g_strrstr(curpos, "FW:")) != NULL) {
                curpos = result + 3;
                EM_DEBUG_LOG_SEC("FW result : %s", curpos);
        }
index f21da9a..12ca356 100755 (executable)
@@ -81,6 +81,7 @@
 #define EMAIL_ERROR_SECURED_STORAGE_FAILURE             -2100    /**<  Error from secured storage */
 #define EMAIL_ERROR_GCONF_FAILURE                       -1058    /**<  The error occurred on accessing Gconf */
 #define EMAIL_ERROR_FILE                                -1059    /**<  File related error */
+#define EMAIL_ERROR_SERVER_STORAGE_FULL                 -2101    /**<  There is no more storage in server */
 
 /* Error codes for network */
 #define EMAIL_ERROR_SOCKET_FAILURE                      -1031    /**<  Socket operation failed */
@@ -96,7 +97,6 @@
 #define EMAIL_ERROR_TLS_NOT_SUPPORTED                   -1040    /**<  The server doesn't support TLS */
 #define EMAIL_ERROR_TLS_SSL_FAILURE                     -1041    /**<  The agent failed TLS/SSL */
 #define EMAIL_ERROR_CANNOT_NEGOTIATE_TLS                -1400    /**<  "Cannot negotiate TLS" */
-
 #define EMAIL_ERROR_NO_RESPONSE                         -1036    /**<  There is no server response */
 
 /* Error codes for authentication */
index fd3fa44..44d0fba 100755 (executable)
@@ -65,7 +65,7 @@ extern "C"
 #define __FEATURE_SUPPORT_REPORT_MAIL__
 #define __FEATURE_SUPPORT_IMAP_ID__
 /* #define __FEATURE_SUPPORT_SYNC_STATE_ON_NOTI_BAR__ */
-#define __FEATURE_SUPPORT_VALIDATION_SYSTEM__
+/* #define __FEATURE_SUPPORT_VALIDATION_SYSTEM__ */
 #define __FEATURE_PROGRESS_IN_OUTBOX__
 
 /*  #define __FEATURE_USE_SHARED_MUTEX_FOR_PROTECTED_FUNC_CALL__ */
@@ -243,6 +243,8 @@ typedef pthread_t thread_t;
 #define EMAIL_LAUNCHED_BY_UNKNOWN_METHOD  0
 #define EMAIL_LAUNCHED_BY_DBUS_ACTIVATION 1
 
+#define EML_FOLDER 20 /*  save eml content to temporary folder */
+
 /* __FEATURE_LOCAL_ACTIVITY__ supported
 #define BULK_OPERATION_COUNT              50
 #define ALL_ACTIVITIES                    0
@@ -548,8 +550,6 @@ enum {
     _EMAIL_API_VERIFY_CERTIFICATE                        = 0x01600003,    /**< IPC API ID for email_verify_certificate */
 };
 
-
-
 #ifdef __cplusplus
 }
 #endif /*  __cplusplus */
index b64f9a9..3add43d 100755 (executable)
@@ -703,7 +703,7 @@ typedef enum
     EMAIL_SET_SLOT_SIZE_START,                     /**< Task started  */
     EMAIL_SET_SLOT_SIZE_FINISH,                    /**< Task finished */
     EMAIL_SET_SLOT_SIZE_FAIL,                      /**< Task failed */
-}email_set_slot_size_status_e;
+} email_set_slot_size_status_e;
 
 /**
 * @brief Enumeration for the status of expunging mails.
@@ -716,7 +716,7 @@ typedef enum
     EMAIL_EXPUNGE_MAILS_DELETED_FLAGGED_START,               /**< Task started  */
     EMAIL_EXPUNGE_MAILS_DELETED_FLAGGED_FINISH,              /**< Task finished */
     EMAIL_EXPUNGE_MAILS_DELETED_FLAGGED_FAIL,                /**< Task failed */
-}email_expunge_mails_deleted_flagged_status_e;
+} email_expunge_mails_deleted_flagged_status_e;
 
 /**
 * @brief Enumeration for the status of searching mails on server.
@@ -729,7 +729,7 @@ typedef enum
     EMAIL_SEARCH_ON_SERVER_START,               /**< Task started  */
     EMAIL_SEARCH_ON_SERVER_FINISH,              /**< Task finished */
     EMAIL_SEARCH_ON_SERVER_FAIL,                /**< Task failed */
-}email_search_on_server_status_e;
+} email_search_on_server_status_e;
 
 /**
 * @brief Enumeration for the status of moving mails.
@@ -742,7 +742,7 @@ typedef enum
     EMAIL_MOVE_MAILBOX_ON_IMAP_SERVER_START,             /**< Task started  */
     EMAIL_MOVE_MAILBOX_ON_IMAP_SERVER_FINISH,            /**< Task finished */
     EMAIL_MOVE_MAILBOX_ON_IMAP_SERVER_FAIL,              /**< Task failed */
-}email_move_mailbox_status_e;
+} email_move_mailbox_status_e;
 
 /**
 * @brief Enumeration for the status of updating mails.
@@ -755,7 +755,7 @@ typedef enum
     EMAIL_UPDATE_MAIL_START,               /**< Task started  */
     EMAIL_UPDATE_MAIL_FINISH,              /**< Task finished */
     EMAIL_UPDATE_MAIL_FAIL,                /**< Task failed */
-}email_update_mail_status_e;
+} email_update_mail_status_e;
 
 /**
 * @brief Enumeration for the mailbox type.
@@ -774,7 +774,7 @@ typedef enum
     EMAIL_MAILBOX_TYPE_SEARCH_RESULT = 8,         /**< Specified mailbox type for result of search on server */
     EMAIL_MAILBOX_TYPE_FLAGGED       = 9,         /**< Specified flagged mailbox type on gmail */
     EMAIL_MAILBOX_TYPE_USER_DEFINED  = 0xFF,      /**< Specified mailbox type for all other mailboxes */
-}email_mailbox_type_e;
+} email_mailbox_type_e;
 
 
 /** @brief Enumeration for the sync order.
index 0944488..4e2debc 100755 (executable)
@@ -1523,8 +1523,7 @@ INTERNAL_FUNC int emcore_refresh_xoauth2_access_token(char *multi_user_name, int
        email_account_t *ref_account = NULL;
 
 
-       ref_account = emcore_get_account_reference(multi_user_name, input_account_id, false);
-
+       ref_account = emcore_get_account_reference(multi_user_name, input_account_id, true);
        if(ref_account == NULL) {
                EM_DEBUG_EXCEPTION("emcore_get_account_reference() failed");
                err = EMAIL_ERROR_INVALID_ACCOUNT;
index 5e4d1d3..7fa8a08 100755 (executable)
@@ -643,8 +643,6 @@ POP_HEAD:
                                emcore_free_account(account_ref);
                                EM_SAFE_FREE(account_ref);
                        }
-
-                       em_flush_memory();
                }
        }
 
index ed2f2e5..8192aca 100755 (executable)
@@ -1069,7 +1069,7 @@ INTERNAL_FUNC int emcore_cancel_all_thread(int *err_code)
 
                }
                else {
-                       pop_elm->status = EMAIL_EVENT_STATUS_CANCELED;
+                       if (pop_elm) pop_elm->status = EMAIL_EVENT_STATUS_CANCELED;
                }
        }
        LEAVE_RECURSIVE_CRITICAL_SECTION(_event_queue_lock);
@@ -1324,7 +1324,7 @@ INTERNAL_FUNC int emcore_cancel_all_send_mail_thread(int *err_code)
                                q_length = g_queue_get_length(g_send_event_que);
 
                } else {
-                       pop_elm->status = EMAIL_EVENT_STATUS_CANCELED;
+                       if (pop_elm) pop_elm->status = EMAIL_EVENT_STATUS_CANCELED;
                }
        }
        LEAVE_RECURSIVE_CRITICAL_SECTION(_send_event_queue_lock);
index 0cb95a4..14ee7d6 100755 (executable)
@@ -64,7 +64,7 @@ INTERNAL_FUNC void emcore_gmime_init(void)
        g_mime_init(0);
 
 #ifdef __FEATURE_SECURE_PGP__
-       setenv("GNUPGHOME", "/opt/usr/apps/com.samsung.email/data/.gnupg", 1);
+       setenv("GNUPGHOME", "/opt/usr/apps/org.tizen.email/data/.gnupg", 1);
 #endif
 
        EM_DEBUG_FUNC_END();
@@ -492,44 +492,20 @@ static void emcore_gmime_pop3_parse_foreach_cb(GMimeObject *parent, GMimeObject
 
                /*Figure out TEXT or ATTACHMENT(INLINE) ?*/
                int result = false;
-               if (disposition_str && g_ascii_strcasecmp(disposition_str, GMIME_DISPOSITION_ATTACHMENT) == 0) {
+               if (content_id && (emcore_search_string_from_file(cnt_info->text.html, content_id, NULL, &result) == EMAIL_ERROR_NONE && result)) {
+                       content_disposition_type = INLINE_ATTACHMENT;
+                       EM_DEBUG_LOG("INLINE_ATTACHMENT");
+               } else if ((disposition_str && g_ascii_strcasecmp(disposition_str, GMIME_DISPOSITION_ATTACHMENT) == 0) || disposition_filename || ctype_name) {
+                       content_disposition_type = ATTACHMENT;
+                       EM_DEBUG_LOG("ATTACHMENT");
+               } else if (ctype_subtype && g_ascii_strcasecmp(ctype_subtype, "delivery-status") == 0) {
+                       content_disposition_type = ATTACHMENT;
+                       EM_DEBUG_LOG("ATTACHMENT");
+               } else if (ctype_subtype && g_ascii_strcasecmp(ctype_subtype, "calendar") == 0) {
                        content_disposition_type = ATTACHMENT;
                        EM_DEBUG_LOG("ATTACHMENT");
-               } else if ((content_id || content_location) && (ctype_name || disposition_filename)) {
-                       if (cnt_info->attachment_only) {
-                               content_disposition_type = ATTACHMENT;
-                               EM_DEBUG_LOG("ATTACHMENT");
-                       } else {
-                               content_disposition_type = INLINE_ATTACHMENT;
-                               EM_DEBUG_LOG("INLINE_ATTACHMENT");
-                       }
                } else {
-                       if (content_id &&
-                                       (emcore_search_string_from_file(cnt_info->text.html, content_id, NULL, &result) == EMAIL_ERROR_NONE && result)) {
-                               content_disposition_type = INLINE_ATTACHMENT;
-                               EM_DEBUG_LOG("INLINE_ATTACHMENT");
-                       } else if (content_id || content_location) {
-                               if (g_ascii_strcasecmp(ctype_type, "text") == 0 &&
-                                               (g_ascii_strcasecmp(ctype_subtype, "plain") == 0 || g_ascii_strcasecmp(ctype_subtype, "html") == 0)) {
-                                       EM_DEBUG_LOG("TEXT");
-                               } else {
-                                       if (cnt_info->attachment_only) {
-                                               content_disposition_type = ATTACHMENT;
-                                               EM_DEBUG_LOG("ATTACHMENT");
-                                       } else {
-                                               content_disposition_type = INLINE_ATTACHMENT;
-                                               EM_DEBUG_LOG("INLINE_ATTACHMENT");
-                                       }
-                               }
-                       } else {
-                               if (g_ascii_strcasecmp(ctype_type, "text") == 0 &&
-                                               (g_ascii_strcasecmp(ctype_subtype, "plain") == 0 || g_ascii_strcasecmp(ctype_subtype, "html") == 0)) {
-                                       EM_DEBUG_LOG("TEXT");
-                               } else {
-                                       content_disposition_type = ATTACHMENT;
-                                       EM_DEBUG_LOG("ATTACHMENT");
-                               }
-                       }
+                       EM_DEBUG_LOG("Not INLINE or ATTACHMENT");
                }
 
                if (content_disposition_type != ATTACHMENT && content_disposition_type != INLINE_ATTACHMENT) {
@@ -2580,21 +2556,10 @@ INTERNAL_FUNC void emcore_gmime_get_body_sections_foreach_cb(GMimeObject *parent
                EM_DEBUG_LOG("Multi Part Signed");
                snprintf(sections, sizeof(sections), "BODY.PEEK[1.mime] BODY.PEEK[1]");
 
-               if (cnt_info->sections) {
-                       char *tmp_str = NULL;
-                       tmp_str = g_strconcat(cnt_info->sections, " ", sections, NULL);
-
-                       if (tmp_str) {
-                               EM_SAFE_FREE(cnt_info->sections);
-                               cnt_info->sections = tmp_str;
-                       }
-               }
-               else {
-                       cnt_info->sections = EM_SAFE_STRDUP(sections);
-               }
+               cnt_info->content_type = 1;
+               cnt_info->sections = EM_SAFE_STRDUP(sections);
 
                EM_DEBUG_LOG("sections <%s>", cnt_info->sections);
-
        } else if (GMIME_IS_MULTIPART(part)) {
                EM_DEBUG_LOG("Multi Part");
        } else if (GMIME_IS_PART(part)) {
@@ -2699,10 +2664,9 @@ INTERNAL_FUNC void emcore_gmime_get_body_sections_foreach_cb(GMimeObject *parent
                        snprintf(sections, sizeof(sections), "BODY.PEEK[%s.MIME] BODY.PEEK[%s]", ctype_section, ctype_section);
                        
                        if (cnt_info->sections) {
-
-                               if (strcasestr(cnt_info->sections, "BODY.PEEK[1.MIME] BODY.PEEK[1]")) {
-                                       if (strcasestr(sections, "1."))
-                                               goto FINISH_OFF;
+                               /* Signed message : Did not need sections */
+                               if (cnt_info->content_type == 1) {
+                                       goto FINISH_OFF;
                                }
 
                                char *tmp_str = NULL;
@@ -3230,8 +3194,8 @@ INTERNAL_FUNC void emcore_gmime_construct_part (GMimePart *part,
        ctype_subtype = (char *)g_mime_content_type_get_media_subtype(ctype);
 
        /* Type-Subtype */
-       if (g_strcmp0(ctype_type, "text") == 0 && g_strcmp0(ctype_subtype, "plain") == 0 &&
-                       body->type >= (unsigned int)0 && body->subtype) {
+       if (g_strcmp0(ctype_type, "text") == 0 && g_strcmp0(ctype_subtype, "plain") == 0 
+                       && body->subtype) {
                GMimeContentType *content_type = NULL;
                char *type = g_ascii_strdown(body_types[body->type], -1);
                char *subtype = g_ascii_strdown(body->subtype, -1);
@@ -3343,18 +3307,20 @@ INTERNAL_FUNC void emcore_gmime_construct_part (GMimePart *part,
                EM_DEBUG_LOG("Content-ID: %s", body->id);
                int i = 0;
                char *cid = EM_SAFE_STRDUP(body->id);
-               if (cid) g_strstrip(cid);
+               if (cid) {
+                       g_strstrip(cid);
 
-               while (strlen(cid) > 0 && cid[i] != '\0') {
-                       if (cid[i] == '<' || cid[i] == '>')
-                               cid[i] = ' ';
-                       i++;
-               }
+                       while (strlen(cid) > 0 && cid[i] != '\0') {
+                               if (cid[i] == '<' || cid[i] == '>')
+                                       cid[i] = ' ';
+                               i++;
+                       }
 
-               g_strstrip(cid);
-               EM_DEBUG_LOG_DEV("Content-ID stripped: %s", cid);
-               g_mime_object_set_content_id(part_object, cid);
-               EM_SAFE_FREE(cid);
+                       g_strstrip(cid);
+                       EM_DEBUG_LOG_DEV("Content-ID stripped: %s", cid);
+                       g_mime_object_set_content_id(part_object, cid);
+                       free(cid);
+               }
        }
 
        EM_DEBUG_FUNC_END();
@@ -4968,12 +4934,12 @@ INTERNAL_FUNC char *emcore_gmime_get_mime_entity_signed_message(GMimeObject *mul
        EM_DEBUG_FUNC_BEGIN();
        
        int entity_fd = 0;
-       int real_size = 0;
        int error = EMAIL_ERROR_NONE;
        char *mime_entity_path = NULL;
 
        GMimeObject *mime_entity = NULL;
-       GMimeStream *out_stream = NULL;
+       GMimeStream *out_stream = NULL, *filtered = NULL, *stream = NULL;
+       GMimeFilter *filter = NULL;
 
        if (!GMIME_IS_MULTIPART_SIGNED(multipart)) {
                EM_DEBUG_EXCEPTION("Invalid param");
@@ -4993,21 +4959,28 @@ INTERNAL_FUNC char *emcore_gmime_get_mime_entity_signed_message(GMimeObject *mul
                goto FINISH_OFF;
        }
 
-       mime_entity = g_mime_multipart_get_part((GMimeMultipart *)multipart, 0);
-       out_stream = g_mime_stream_fs_new(entity_fd);
-       real_size = g_mime_object_write_to_stream(mime_entity, out_stream);
-       if (out_stream) g_object_unref(out_stream);
+       mime_entity = g_mime_multipart_get_part(GMIME_MULTIPART(multipart), GMIME_MULTIPART_SIGNED_CONTENT);
+       stream = g_mime_stream_mem_new();
+       g_mime_object_write_to_stream(mime_entity, stream);
+       g_mime_stream_reset(stream);
 
-       if (real_size <= 0) {
-               EM_DEBUG_EXCEPTION("g_mime_object_write_to_stream failed");
-               error = EMAIL_ERROR_FILE;
-               goto FINISH_OFF;
-       }
+       filtered = g_mime_stream_filter_new(stream);
+       filter = g_mime_filter_crlf_new(TRUE, FALSE);
+       g_mime_stream_filter_add(GMIME_STREAM_FILTER(filtered), filter);
 
-FINISH_OFF:
+       if (filter) g_object_unref(filter);
+       if (stream) g_object_unref(stream);
+       if (filtered) g_mime_stream_reset(filtered);
+
+       out_stream = g_mime_stream_fs_new(entity_fd);
+       g_mime_stream_write_to_stream(filtered, out_stream);
+       g_mime_stream_flush(out_stream);
 
+       if (filtered) g_object_unref(filtered);
        if (out_stream) g_object_unref(out_stream);
 
+FINISH_OFF:
+
        if (error != EMAIL_ERROR_NONE) {
                EM_SAFE_FREE(mime_entity_path);
                return NULL;
index a79bc02..7f5e4f2 100755 (executable)
@@ -136,7 +136,9 @@ static int emcore_clear_old_connections(int input_epoll_fd, GList **input_imap_i
                }
 
                /* Close connection */
-               connection_info->mail_stream = mail_close(connection_info->mail_stream);
+               if (connection_info->mail_stream)
+                       connection_info->mail_stream = mail_close(connection_info->mail_stream);
+
                EM_SAFE_FREE(connection_info->multi_user_name);
                EM_SAFE_FREE(connection_info);
 
@@ -411,7 +413,7 @@ static int emcore_refresh_alarm_for_imap_idle(char *multi_user_name)
                }
        }
 
-       if(account_ref_list)
+       if (account_ref_list)
                emcore_free_account_list(&account_ref_list, account_count, NULL);
 
        if (auto_sync_account_count) {
index be032b4..aed326b 100644 (file)
@@ -72,7 +72,7 @@ INTERNAL_FUNC int emcore_add_password_in_key_manager(char *data_name, char *stor
        email_policy.password = NULL;
        email_policy.extractable = true;
 
-       EM_DEBUG_LOG("stored_data : [%s]", stored_data);
+//     EM_DEBUG_LOG("stored_data : [%s]", stored_data);
 
        email_data.data = (unsigned char *)stored_data;
        email_data.size = strlen(stored_data);
@@ -118,13 +118,14 @@ INTERNAL_FUNC int emcore_get_password_in_key_manager(char *data_name, char **sto
                goto FINISH_OFF;
        }
 
-       EM_DEBUG_LOG("stored_data : [%s]", email_data->data);
-       EM_DEBUG_LOG("stored_data length : [%d]", email_data->size);
+//     EM_DEBUG_LOG("stored_data : [%s]", email_data->data);
+//     EM_DEBUG_LOG("stored_data length : [%d]", email_data->size);
 
 FINISH_OFF:
 
-       if (stored_data)
-               *stored_data = g_strndup(email_data->data, email_data->size);
+       if (stored_data) {
+               if (email_data) *stored_data = g_strndup(email_data->data, email_data->size);
+       }
 
        if (email_data)
                ckmc_buffer_free(email_data);
index 05269e4..15eb117 100755 (executable)
@@ -332,7 +332,17 @@ static void emcore_mail_copyuid_ex(MAILSTREAM *stream, char *mailbox, unsigned l
 
        EM_DEBUG_LOG("Count of mails copied [%d]", count);
        old_server_uid = em_malloc(count * sizeof(unsigned long));
+       if (old_server_uid == NULL) {
+               EM_DEBUG_EXCEPTION("em_malloc failed : EMAIL_ERROR_OUT_OF_MEMORY");
+               return;
+       }
+
        new_server_uid = em_malloc(count * sizeof(unsigned long));
+       if (new_server_uid == NULL) {
+               EM_DEBUG_EXCEPTION("em_malloc failed : EMAIL_ERROR_OUT_OF_MEMORY");
+               EM_SAFE_FREE(old_server_uid);
+               return;
+       }
 
        /* While loop below will collect all old server uid from sourceset into old_server_uid array */
        while (sourceset) {
@@ -2722,7 +2732,7 @@ INTERNAL_FUNC int emcore_gmime_download_body_sections(char *multi_user_name,
                        goto FINISH_OFF;
                }
 
-               while(emcore_mime_get_line_from_sock((void *)stream, sock_buf, 1024, &err)) {
+               while (emcore_mime_get_line_from_sock((void *)stream, sock_buf, 1024, &err)) {
                        if (write(fd, sock_buf, EM_SAFE_STRLEN(sock_buf)) != EM_SAFE_STRLEN(sock_buf)) {
                                EM_DEBUG_EXCEPTION("write failed");
                        }
@@ -2811,7 +2821,8 @@ INTERNAL_FUNC int emcore_gmime_download_body_sections(char *multi_user_name,
                g_mime_message_foreach(message1, emcore_gmime_imap_parse_full_foreach_cb, (gpointer)cnt_info);
 
                /* Get mime entity */
-               g_mime_message_foreach(message1, emcore_gmime_get_mime_entity_cb, (gpointer)cnt_info);
+               if (cnt_info->content_type == 1)
+                       g_mime_message_foreach(message1, emcore_gmime_get_mime_entity_cb, (gpointer)cnt_info);
 
                /* free resources */
                if (message1) {
@@ -6604,6 +6615,8 @@ INTERNAL_FUNC int emcore_sync_flags_field_with_server(char *multi_user_name, int
 
 FINISH_OFF:
 
+       EM_SAFE_FREE(id_set);
+
 #ifdef __FEATURE_LOCAL_ACTIVITY__
        if (ret) {
                emstorage_activity_tbl_t new_activity;
@@ -6640,6 +6653,7 @@ FINISH_OFF:
 
        if (err_code != NULL)
                *err_code = err;
+
        EM_DEBUG_FUNC_END();
        return ret;
 }
@@ -7921,7 +7935,7 @@ INTERNAL_FUNC int emcore_search_on_server(char *multi_user_name, int account_id,
        emstorage_mailbox_tbl_t *search_mailbox = NULL;
        emstorage_mail_tbl_t *new_mail_tbl_data = NULL;
 
-       SEARCHPGM *search_program = NULL;
+//     SEARCHPGM *search_program = NULL;
        MAILSTREAM *stream = NULL;
        //MESSAGECACHE *mail_cache_element = NULL;
        ENVELOPE *env = NULL;
@@ -8058,10 +8072,10 @@ FINISH_OFF:
 
        if (uid_list)
                emcore_free_uids(uid_list, NULL);
-
+/*
        if (search_program)
                mail_free_searchpgm(&search_program);
-
+*/
        if (search_mailbox != NULL)
                emstorage_free_mailbox(&search_mailbox, 1, NULL);
 
index 43d602b..662c955 100755 (executable)
@@ -446,6 +446,7 @@ int imap4_mailbox_get_uids(MAILSTREAM *stream, char *input_target_uid_string, em
                char *p_date = NULL;
                char *s = NULL;
                int seen = 0;
+               int answered = 0;
                int forwarded = 0;
                int draft = 0;
                int flagged = 0;
@@ -478,6 +479,7 @@ int imap4_mailbox_get_uids(MAILSTREAM *stream, char *input_target_uid_string, em
                                seen = strstr(p, "\\Seen") ? 1  :  0;
                                draft = strstr(p, "\\Draft") ? 1  :  0;
                                flagged = strstr(p, "\\Flagged") ? 1  :  0;
+                               answered = strstr(p, "\\Answered") ? 1 : 0;
                                forwarded = strstr(p, "$Forwarded") ? 1  :  0;
 
                                if ((p = strstr(p, "UID "))) {
@@ -511,8 +513,9 @@ int imap4_mailbox_get_uids(MAILSTREAM *stream, char *input_target_uid_string, em
                                        uid_elem->uid = EM_SAFE_STRDUP(p + strlen("UID "));
                                        uid_elem->flag.seen = seen;
                                        uid_elem->flag.draft = draft;
-                                       uid_elem->flag.forwarded = forwarded;
                                        uid_elem->flag.flagged = flagged;
+                                       uid_elem->flag.answered = answered;
+                                       uid_elem->flag.forwarded = forwarded;
                                        uid_elem->internaldate = EM_SAFE_STRDUP(internaldate);
                                        if (*uid_list  != NULL)
                                                uid_elem->next = *uid_list;             /*  prepend new data to list */
@@ -753,6 +756,11 @@ int imap4_mailbox_get_uids_by_timestamp(MAILSTREAM *stream, emcore_uid_list** ui
 
        /* Reading the current timeinfo */
        timeinfo = localtime (&week_before_RawTime);
+       if (timeinfo == NULL) {
+               EM_DEBUG_EXCEPTION("localtime failed");
+               err = EMAIL_ERROR_SYSTEM_FAILURE;
+               goto FINISH_OFF;
+       }
 
        EM_DEBUG_LOG(">>>>>Mobile Date a Week before %d %d %d %d %d %d", 1900 + timeinfo->tm_year, timeinfo->tm_mon+1, timeinfo->tm_mday);
 
@@ -1211,8 +1219,11 @@ static int emcore_get_uids_to_download(char *multi_user_name, MAILSTREAM *stream
        }
 
        if (!emstorage_get_downloaded_list(multi_user_name, input_mailbox_tbl->account_id,
-               (account->incoming_server_type == EMAIL_SERVER_TYPE_POP3) ? 0 : input_mailbox_tbl->mailbox_id,
-               &downloaded_uids, &downloaded_uid_count, true, &err)) {
+                                                                       (account->incoming_server_type == EMAIL_SERVER_TYPE_POP3) ? 0 : input_mailbox_tbl->mailbox_id,
+                                                                       &downloaded_uids, 
+                                                                       &downloaded_uid_count, 
+                                                                       true, 
+                                                                       &err)) {
                EM_DEBUG_EXCEPTION("emstorage_get_downloaded_list failed [%d]", err);
                goto FINISH_OFF;
        }
@@ -1272,25 +1283,24 @@ static int emcore_get_uids_to_download(char *multi_user_name, MAILSTREAM *stream
                else {
                        int to_be_downloaded = 1;
 
-                       if (limit_count > 0 && uid_count >= limit_count){
+                       if (limit_count > 0 && uid_count >= limit_count) {
                                /* EM_DEBUG_LOG("hit the limit[%d] for [%s]", limit_count, uid_elem->uid); */
                                to_be_downloaded = 0;
-                       }
-                       else{
+                       } else {
                                for (i = downloaded_uid_count; i > 0; i--) {
                                        if (downloaded_uids[i - 1].sync_status == EMAIL_SYNC_STATUS_NOT_EXIST_ON_SERVER
                                                        && !EM_SAFE_STRCMP(uid_elem->uid, downloaded_uids[i - 1].server_uid)) {
                                                if (downloaded_uids[i - 1].mailbox_id != input_mailbox_tbl->mailbox_id) {
                                                        uid_count--;
-                                               }
-                                               else {
+                                               } else {
                                                        /* The mail exists on server and local storage, so it should not be downloaded, just check seen flag */
-                                                       if(downloaded_uids[i - 1].flags_seen_field != uid_elem->flag.seen ||
+                                                       if (downloaded_uids[i - 1].flags_seen_field != uid_elem->flag.seen ||
                                                                        downloaded_uids[i - 1].flags_flagged_field != uid_elem->flag.flagged) {
                                                                if(downloaded_uids[i - 1].flags_seen_field != uid_elem->flag.seen) {
                                                                        downloaded_uids[i - 1].sync_status = EMAIL_SYNC_STATUS_FLAG_CHANGED;
                                                                        downloaded_uids[i - 1].flags_seen_field = uid_elem->flag.seen;
                                                                }
+
                                                                if (downloaded_uids[i - 1].flags_flagged_field != uid_elem->flag.flagged) {
                                                                        downloaded_uids[i - 1].sync_status = EMAIL_SYNC_STATUS_FLAG_CHANGED;
                                                                        downloaded_uids[i - 1].flags_flagged_field = uid_elem->flag.flagged;
@@ -1298,7 +1308,44 @@ static int emcore_get_uids_to_download(char *multi_user_name, MAILSTREAM *stream
                                                        } else {
                                                                downloaded_uids[i - 1].sync_status = EMAIL_SYNC_STATUS_EXIST_ON_SERVER;
                                                        }
+
+                                                       if (!emstorage_get_mail_by_id(multi_user_name, 
+                                                                                                                       downloaded_uids[i-1].local_uid, 
+                                                                                                                       &mail,
+                                                                                                                       false,
+                                                                                                                       &err)) {
+                                                               EM_DEBUG_EXCEPTION("emstorage_get_mail_by_id failed : [%d]", err);
+                                                               continue;
+                                                       }
+
+                                                       if (mail->flags_answered_field != uid_elem->flag.answered) {
+                                                               if (!emcore_set_flags_field(multi_user_name,
+                                                                                                                       downloaded_uids[i-1].account_id,
+                                                                                                                       &(downloaded_uids[i-1].local_uid),
+                                                                                                                       1,
+                                                                                                                       EMAIL_FLAGS_ANSWERED_FIELD,
+                                                                                                                       uid_elem->flag.answered,
+                                                                                                                       &err)) {
+                                                                       EM_DEBUG_EXCEPTION("emcore_set_flags_field failed : [%d]", err);
+                                                               }
+                                                       }
+
+                                                       if (mail->flags_forwarded_field != uid_elem->flag.forwarded) {
+                                                               if (!emcore_set_flags_field(multi_user_name,
+                                                                                                                       downloaded_uids[i-1].account_id,
+                                                                                                                       &(downloaded_uids[i-1].local_uid),
+                                                                                                                       1,
+                                                                                                                       EMAIL_FLAGS_FORWARDED_FIELD,
+                                                                                                                       uid_elem->flag.forwarded,
+                                                                                                                       &err)) {
+                                                                       EM_DEBUG_EXCEPTION("emcore_set_flags_field failed : [%d]", err);
+                                                               }
+                                                       }
+
+                                                       emstorage_free_mail(&mail, 1, NULL);
+                                                       mail = NULL;
                                                }
+
                                                to_be_downloaded = 0;
                                                break;
                                        }
@@ -1362,7 +1409,12 @@ static int emcore_get_uids_to_download(char *multi_user_name, MAILSTREAM *stream
                                }
                        }
 
-                       if (!emstorage_remove_downloaded_mail(multi_user_name, input_mailbox_tbl->account_id, input_mailbox_tbl->mailbox_name, downloaded_uids[i].server_uid, true, &err)) {   /*  remove uid from uid list */
+                       if (!emstorage_remove_downloaded_mail(multi_user_name, 
+                                                                                               input_mailbox_tbl->account_id, 
+                                                                                               input_mailbox_tbl->mailbox_name, 
+                                                                                               downloaded_uids[i].server_uid, 
+                                                                                               true, 
+                                                                                               &err)) {   /*  remove uid from uid list */
                                EM_DEBUG_EXCEPTION("emstorage_remove_downloaded_mail failed - %d", err);
                                /* goto FINISH_OFF; */
                        }
@@ -1371,19 +1423,30 @@ static int emcore_get_uids_to_download(char *multi_user_name, MAILSTREAM *stream
                else if (account->incoming_server_type == EMAIL_SERVER_TYPE_IMAP4) {
                        /* set seen flag of downloaded mail */
                        if (downloaded_uids[i].sync_status == EMAIL_SYNC_STATUS_FLAG_CHANGED) {
-                               if (!emcore_set_flags_field(multi_user_name, downloaded_uids[i].account_id, &(downloaded_uids[i].local_uid), 1, EMAIL_FLAGS_FLAGGED_FIELD, downloaded_uids[i].flags_flagged_field, &err)) {
+                               if (!emcore_set_flags_field(multi_user_name, 
+                                                                                       downloaded_uids[i].account_id, 
+                                                                                       &(downloaded_uids[i].local_uid), 
+                                                                                       1, 
+                                                                                       EMAIL_FLAGS_FLAGGED_FIELD, 
+                                                                                       downloaded_uids[i].flags_flagged_field, 
+                                                                                       &err)) {
                                        EM_DEBUG_EXCEPTION("emcore_set_flags_field failed [%d]", err);
                                }
 
-                               if (!emcore_set_flags_field(multi_user_name, downloaded_uids[i].account_id, &(downloaded_uids[i].local_uid), 1, EMAIL_FLAGS_SEEN_FIELD, downloaded_uids[i].flags_seen_field, &err)) {
+                               if (!emcore_set_flags_field(multi_user_name, 
+                                                                                       downloaded_uids[i].account_id, 
+                                                                                       &(downloaded_uids[i].local_uid), 
+                                                                                       1, 
+                                                                                       EMAIL_FLAGS_SEEN_FIELD, 
+                                                                                       downloaded_uids[i].flags_seen_field, 
+                                                                                       &err)) {
                                        EM_DEBUG_EXCEPTION("emcore_set_flags_field failed [%d]", err);
                                }
                                else
                                        emcore_display_unread_in_badge(multi_user_name);
                        }
-
-
                }
+
                if (mail != NULL)
                        emstorage_free_mail(&mail, 1, NULL);
                mail = NULL;
@@ -1845,8 +1908,6 @@ INTERNAL_FUNC int emcore_make_mail_tbl_data_from_envelope(char *multi_user_name,
                        EM_DEBUG_EXCEPTION("emcore_get_utf8_address failed [%d]", err);
                        goto FINISH_OFF;
                }
-
-
        }
 
        if (input_envelope->to) {
@@ -1854,8 +1915,6 @@ INTERNAL_FUNC int emcore_make_mail_tbl_data_from_envelope(char *multi_user_name,
                        EM_DEBUG_EXCEPTION("emcore_get_utf8_address failed [%d]", err);
                        goto FINISH_OFF;
                }
-
-
        }
 
        if (input_envelope->cc) {
@@ -1921,12 +1980,12 @@ INTERNAL_FUNC int emcore_make_mail_tbl_data_from_envelope(char *multi_user_name,
        temp_mail_tbl_data->server_mail_id        = EM_SAFE_STRDUP(input_uid_elem->uid);
        temp_mail_tbl_data->mail_size             = mail_cache_element->rfc822_size;
        temp_mail_tbl_data->flags_seen_field      = input_uid_elem->flag.seen;
+       temp_mail_tbl_data->flags_draft_field     = input_uid_elem->flag.draft;
+       temp_mail_tbl_data->flags_flagged_field   = input_uid_elem->flag.flagged;
+       temp_mail_tbl_data->flags_answered_field  = input_uid_elem->flag.answered;
+       temp_mail_tbl_data->flags_forwarded_field = input_uid_elem->flag.forwarded;
        temp_mail_tbl_data->flags_deleted_field   = mail_cache_element->deleted;
-       temp_mail_tbl_data->flags_flagged_field   = mail_cache_element->flagged;
-       temp_mail_tbl_data->flags_answered_field  = mail_cache_element->answered;
        temp_mail_tbl_data->flags_recent_field    = mail_cache_element->recent;
-       temp_mail_tbl_data->flags_draft_field     = mail_cache_element->draft;
-       temp_mail_tbl_data->flags_forwarded_field = input_uid_elem->flag.forwarded;
        temp_mail_tbl_data->priority              = priority;
        temp_mail_tbl_data->report_status         = (req_read_receipt ? EMAIL_MAIL_REQUEST_MDN :  0);
        temp_mail_tbl_data->attachment_count      = 0;
@@ -2190,7 +2249,14 @@ INTERNAL_FUNC int emcore_sync_header (char *multi_user_name,
                                                                                                input_mailbox_tbl->mailbox_name, searched_mail_id, 
                                                                                                new_mail_tbl_data->server_mail_id, new_mail_tbl_data->mail_size, 
                                                                                                0, &err)) {
-                                               EM_DEBUG_EXCEPTION("emcore_add_read_mail_uid failed");
+                                               EM_DEBUG_EXCEPTION("emcore_add_read_mail_uid failed : [%d]", err);
+                                               goto CONTINUE_NEXT;
+                                       }
+                               
+                                       if (!emstorage_change_mail_field(multi_user_name, searched_mail_id, UPDATE_DATETIME, 
+                                                                                                       new_mail_tbl_data, true, &err)) {
+                                               EM_DEBUG_EXCEPTION("emstorage_change_mail_field failed : [%d]", err);
+                                               goto CONTINUE_NEXT;
                                        }
 
                                        goto CONTINUE_NEXT;
@@ -2200,7 +2266,7 @@ INTERNAL_FUNC int emcore_sync_header (char *multi_user_name,
                                        EM_DEBUG_EXCEPTION("emcore_check_rule failed [%d]", err);
                                }
 
-                               if(destination_mailbox) /* cleanup before reusing */
+                               if (destination_mailbox) /* cleanup before reusing */
                                        emstorage_free_mailbox(&destination_mailbox, 1, NULL);
 
                                if (priority_sender) {
@@ -3706,6 +3772,11 @@ static int emcore_gmime_download_imap_partial_mail_body(MAILSTREAM *stream, int
                message1 = g_mime_parser_construct_message(parser1);
                if (parser1) g_object_unref(parser1);
 
+               if (message1 == NULL) {
+                       EM_DEBUG_LOG("message1 is NULL");
+                       continue;
+               }
+
                /* message1 is multipart? */
                if (GMIME_IS_MULTIPART (message1->mime_part)) {
 
index 154d029..b9d22d9 100755 (executable)
@@ -509,6 +509,9 @@ INTERNAL_FUNC int emcore_create_mailbox(char *multi_user_name, email_mailbox_t *
                }
                EM_SAFE_FREE(new_mailbox->mailbox_name);
                new_mailbox->mailbox_name = enc_mailbox_name;
+
+               EM_SAFE_FREE(new_mailbox->alias);
+               new_mailbox->alias = emcore_get_alias_of_mailbox((const char *)new_mailbox->mailbox_name);
        }
 
        if (on_server) {
@@ -771,7 +774,7 @@ INTERNAL_FUNC int emcore_rename_mailbox(char *multi_user_name,
                                                                                                                target_mailbox->account_id, 
                                                                                                                target_mailbox->mailbox_id, 
                                                                                                                target_mailbox->mailbox_name, 
-                                                                                                               input_new_mailbox_name, 
+                                                                                                               new_mailbox_name, 
                                                                                                                handle_to_be_published)) != EMAIL_ERROR_NONE) {
                        EM_DEBUG_EXCEPTION("emcore_rename_mailbox_on_imap_server failed [%d]", err);
                        goto FINISH_OFF;
@@ -820,10 +823,10 @@ INTERNAL_FUNC int emcore_rename_mailbox(char *multi_user_name,
                        }
                }
 
-               if(input_mailbox_id == target_mailbox_array[i].mailbox_id) {
+               if (input_mailbox_id == target_mailbox_array[i].mailbox_id) {
                        if ((err = emstorage_rename_mailbox(multi_user_name, 
                                                                                                target_mailbox_array[i].mailbox_id, 
-                                                                                               input_new_mailbox_name, 
+                                                                                               new_mailbox_name, 
                                                                                                input_new_mailbox_alias, 
                                                                                                input_eas_data, 
                                                                                                input_eas_data_length, 
@@ -833,8 +836,15 @@ INTERNAL_FUNC int emcore_rename_mailbox(char *multi_user_name,
                        }
                }
                else {
-                       EM_DEBUG_LOG_SEC("target_mailbox_array[i].mailbox_name[%s] old_mailbox_name[%s] input_new_mailbox_name [%s]", target_mailbox_array[i].mailbox_name, old_mailbox_name, input_new_mailbox_name);
-                       renamed_mailbox_name = em_replace_string(target_mailbox_array[i].mailbox_name, old_mailbox_name, input_new_mailbox_name);
+                       EM_DEBUG_LOG_SEC("target_mailbox_array[i].mailbox_name[%s] "
+                                                        "old_mailbox_name[%s] "
+                                                        "new_mailbox_name [%s]", 
+                                                        target_mailbox_array[i].mailbox_name, 
+                                                        old_mailbox_name, 
+                                                        new_mailbox_name);
+                       renamed_mailbox_name = em_replace_string(target_mailbox_array[i].mailbox_name, 
+                                                                                                       old_mailbox_name, 
+                                                                                                       new_mailbox_name);
                        EM_DEBUG_LOG_SEC("renamed_mailbox_name[%s]", renamed_mailbox_name);
 
                        if ((err = emstorage_rename_mailbox(multi_user_name, 
index ff1d2c3..b86a4fd 100755 (executable)
@@ -98,9 +98,6 @@
 #define SAVE_TYPE_BUFFER     2 /*  save content to buffe */
 #define SAVE_TYPE_FILE       3 /*  save content to temporary fil */
 
-#define EML_FOLDER           20 /*  save eml content to temporary folder */
-
-
 /* ---------------------------------------------------------------------- */
 /*  Global variable */
 static int  eml_data_count = 0;
@@ -183,11 +180,17 @@ char *em_split_file_path(char *str)
        char *temp_cid_data = NULL;
        char *temp_cid = NULL;
 
-       temp_str = EM_SAFE_STRDUP(str);
+       if (str == NULL) {
+               EM_DEBUG_EXCEPTION("Invalid parameter");
+               return NULL;
+       }
+
+       temp_str = g_strdup(str);
        buf_length = EM_SAFE_STRLEN(str) + 1024;
        buf = em_malloc(buf_length);
        if (buf == NULL) {
                EM_DEBUG_EXCEPTION("em_malloc failed");
+               EM_SAFE_FREE(temp_str);
                return NULL;
        }
 
@@ -202,6 +205,7 @@ char *em_split_file_path(char *str)
        temp_cid_data = em_malloc((temp_cid-temp_str)+1);
        if (temp_cid_data == NULL) {
                EM_DEBUG_EXCEPTION("em_malloc failed");
+               EM_SAFE_FREE(buf);
                return temp_str;
        }
 
@@ -930,17 +934,16 @@ int emcore_set_fetch_part_section(BODY *body, char *section_pfx, int section_sub
        EM_DEBUG_FUNC_END();
        return SUCCESS;
 }
-
 static int emcore_make_mail_data_from_m_mesg(email_mail_data_t *dst_mail_data, struct _m_mesg *mmsg)
 {
-        EM_DEBUG_FUNC_BEGIN();
-        int err = EMAIL_ERROR_NONE;
+       EM_DEBUG_FUNC_BEGIN();
+       int err = EMAIL_ERROR_NONE;
 
-        if (!mmsg || !dst_mail_data) {
-                EM_DEBUG_EXCEPTION("Invalid parameter");
-                err = EMAIL_ERROR_INVALID_PARAM;
-                return err;
-        }
+       if (!mmsg || !dst_mail_data) {
+                       EM_DEBUG_EXCEPTION("Invalid parameter");
+                       err = EMAIL_ERROR_INVALID_PARAM;
+                       return err;
+       }
 
        char *encoded_subject = NULL;
        char *first_address = NULL;
@@ -1030,87 +1033,85 @@ static int emcore_make_mail_data_from_m_mesg(email_mail_data_t *dst_mail_data, s
        }
 
        if (!mmsg->rfc822header) {
-                EM_DEBUG_LOG("This mail did not have envelop");
-                return err;
-        }
+               EM_DEBUG_LOG("This mail did not have envelop");
+               return err;
+       }
 
        /* Set the date */
-        if (mmsg->rfc822header->date) {
-                EM_DEBUG_LOG("date : [%s]", mmsg->rfc822header->date);
-                mail_parse_date(&mail_cache_element, (unsigned char *)mmsg->rfc822header->date);
-        }
+       if (mmsg->rfc822header->date) {
+                       EM_DEBUG_LOG("date : [%s]", mmsg->rfc822header->date);
+                       mail_parse_date(&mail_cache_element, (unsigned char *)mmsg->rfc822header->date);
+       }
 
-        temp_time_info.tm_sec = mail_cache_element.seconds;
-        temp_time_info.tm_min = mail_cache_element.minutes - mail_cache_element.zminutes;
-        temp_time_info.tm_hour = mail_cache_element.hours - mail_cache_element.zhours;
+       temp_time_info.tm_sec = mail_cache_element.seconds;
+       temp_time_info.tm_min = mail_cache_element.minutes - mail_cache_element.zminutes;
+       temp_time_info.tm_hour = mail_cache_element.hours - mail_cache_element.zhours;
 
-        if (mail_cache_element.hours - mail_cache_element.zhours < 0) {
-                temp_time_info.tm_mday = mail_cache_element.day - 1;
-                temp_time_info.tm_hour += 24;
-        } else
-                temp_time_info.tm_mday = mail_cache_element.day;
+       if (mail_cache_element.hours - mail_cache_element.zhours < 0) {
+               temp_time_info.tm_mday = mail_cache_element.day - 1;
+               temp_time_info.tm_hour += 24;
+       } else
+               temp_time_info.tm_mday = mail_cache_element.day;
 
-        temp_time_info.tm_mon = mail_cache_element.month - 1;
-        temp_time_info.tm_year = mail_cache_element.year + 70;
+       temp_time_info.tm_mon = mail_cache_element.month - 1;
+       temp_time_info.tm_year = mail_cache_element.year + 70;
 
-        dst_mail_data->date_time                   = timegm(&temp_time_info);
+       dst_mail_data->date_time                   = timegm(&temp_time_info);
 
 
        /* Set the subject */
-        encoded_subject = emcore_gmime_get_decoding_text(mmsg->rfc822header->subject);
-        dst_mail_data->subject                     = EM_SAFE_STRDUP(encoded_subject);
+       dst_mail_data->subject = EM_SAFE_STRDUP(mmsg->rfc822header->subject);
 
        /* Set the email address(from, to, cc, bcc, received ...) */
-        dst_mail_data->email_address_recipient     = EM_SAFE_STRDUP(mmsg->rfc822header->received);
-
-        if (mmsg->rfc822header->from) {
-                rfc822_parse_adrlist(&from, mmsg->rfc822header->from, NULL);
-                if (!emcore_get_utf8_address(&dst_mail_data->full_address_from, from, &err)) {
-                        EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->from);
-                }
-        }
-
-        if (mmsg->rfc822header->to) {
-                rfc822_parse_adrlist(&to, mmsg->rfc822header->to, NULL);
-                if (!emcore_get_utf8_address(&dst_mail_data->full_address_to, to, &err)) {
-                        EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->to);
-                }
-        }
-
-        if (mmsg->rfc822header->cc) {
-                rfc822_parse_adrlist(&cc, mmsg->rfc822header->cc, NULL);
-                if (!emcore_get_utf8_address(&dst_mail_data->full_address_cc, cc, &err)) {
-                        EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->cc);
-                }
-        }
-
-        if (mmsg->rfc822header->bcc) {
-                rfc822_parse_adrlist(&bcc, mmsg->rfc822header->bcc, NULL);
-                if (!emcore_get_utf8_address(&dst_mail_data->full_address_bcc, bcc, &err)) {
-                        EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->bcc);
-                }
-        }
-
-        if (mmsg->rfc822header->return_path) {
-                rfc822_parse_adrlist(&return_path, mmsg->rfc822header->return_path, NULL);
-                if (!emcore_get_utf8_address(&dst_mail_data->full_address_return, return_path, &err)) {
-                        EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->return_path);
-                }
-        }
-
-        if (mmsg->rfc822header->reply_to) {
-                rfc822_parse_adrlist(&reply_to, mmsg->rfc822header->reply_to, NULL);
-                if (!emcore_get_utf8_address(&dst_mail_data->full_address_reply, reply_to, &err)) {
-                        EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->reply_to);
-                }
-        }
+       dst_mail_data->email_address_recipient     = EM_SAFE_STRDUP(mmsg->rfc822header->received);
+
+       if (mmsg->rfc822header->from) {
+               rfc822_parse_adrlist(&from, mmsg->rfc822header->from, NULL);
+               if (!emcore_get_utf8_address(&dst_mail_data->full_address_from, from, &err)) {
+                       EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->from);
+               }
+       }
+
+       if (mmsg->rfc822header->to) {
+               rfc822_parse_adrlist(&to, mmsg->rfc822header->to, NULL);
+               if (!emcore_get_utf8_address(&dst_mail_data->full_address_to, to, &err)) {
+                       EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->to);
+               }
+       }
+
+       if (mmsg->rfc822header->cc) {
+               rfc822_parse_adrlist(&cc, mmsg->rfc822header->cc, NULL);
+               if (!emcore_get_utf8_address(&dst_mail_data->full_address_cc, cc, &err)) {
+                       EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->cc);
+               }
+       }
+
+       if (mmsg->rfc822header->bcc) {
+               rfc822_parse_adrlist(&bcc, mmsg->rfc822header->bcc, NULL);
+               if (!emcore_get_utf8_address(&dst_mail_data->full_address_bcc, bcc, &err)) {
+                       EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->bcc);
+               }
+       }
+
+       if (mmsg->rfc822header->return_path) {
+               rfc822_parse_adrlist(&return_path, mmsg->rfc822header->return_path, NULL);
+               if (!emcore_get_utf8_address(&dst_mail_data->full_address_return, return_path, &err)) {
+                       EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->return_path);
+               }
+       }
+
+       if (mmsg->rfc822header->reply_to) {
+               rfc822_parse_adrlist(&reply_to, mmsg->rfc822header->reply_to, NULL);
+               if (!emcore_get_utf8_address(&dst_mail_data->full_address_reply, reply_to, &err)) {
+                       EM_DEBUG_EXCEPTION_SEC("emcore_get_utf8_address failed : [%d], [%s]", err, mmsg->rfc822header->reply_to);
+               }
+       }
 
        if (emcore_get_first_address(dst_mail_data->full_address_from, &first_alias, &first_address) == true) {
                dst_mail_data->alias_sender = EM_SAFE_STRDUP(first_alias);
                dst_mail_data->email_address_sender = EM_SAFE_STRDUP(first_address);
        }
 
-
        EM_SAFE_FREE(encoded_subject);
        EM_SAFE_FREE(first_alias);
        EM_SAFE_FREE(first_address);
@@ -1504,12 +1505,11 @@ INTERNAL_FUNC int emcore_parse_mime_file_to_mail(char *eml_file_path,
 
        emcore_gmime_init();
        if (!emcore_gmime_eml_parse_mime(eml_file_path, mmsg->rfc822header, cnt_info, &err)) {
+               emcore_gmime_shutdown();
                EM_DEBUG_EXCEPTION("emcore_gmime_parse_mime failed : [%d]", err);
                err = EMAIL_ERROR_INVALID_DATA;
-               emcore_gmime_shutdown();
                goto FINISH_OFF;
        }
-       emcore_gmime_shutdown();
 
        if (!emcore_make_mail_data_from_mime_data(mmsg, 
                                                                                        cnt_info, 
@@ -1517,10 +1517,12 @@ INTERNAL_FUNC int emcore_parse_mime_file_to_mail(char *eml_file_path,
                                                                                        output_attachment_data, 
                                                                                        output_attachment_count, 
                                                                                        &err)) {
+               emcore_gmime_shutdown();
                EM_DEBUG_EXCEPTION("emcore_make_mail_tbl_data_from_mime failed : [%d]", err);
                goto FINISH_OFF;
 
        }
+       emcore_gmime_shutdown();
 
        ret = true;
 
index fb48e01..b7e651d 100755 (executable)
@@ -190,8 +190,8 @@ static int get_x509_stack_of_recipient_certs(char *multi_user_name,
                
                SNPRINTF(file_name, sizeof(file_name), "%s", cert->filepath);
                EM_DEBUG_LOG_SEC("file_name : [%s]", file_name);
-               err = cert_svc_load_file_to_context(context, file_name);
-               if (err != CERT_SVC_ERR_NO_ERROR) {
+               int cert_err = cert_svc_load_file_to_context(context, file_name);
+               if (cert_err != CERT_SVC_ERR_NO_ERROR) {
                        EM_DEBUG_EXCEPTION("cert_svc_load_file_to_context failed : [%d]", err);
                        err = EMAIL_ERROR_SYSTEM_FAILURE;
                        goto FINISH_OFF;
@@ -251,7 +251,7 @@ FINISH_OFF:
        if (err_code)
                *err_code = err;
 
-       EM_DEBUG_FUNC_END();
+       EM_DEBUG_FUNC_END("err : [%d]", err);
        return ret;
 }
 
index 66385c3..91f9d23 100755 (executable)
@@ -1661,7 +1661,6 @@ INTERNAL_FUNC int emcore_send_mail(char *multi_user_name, int mail_id, int *err_
        int ret = false;
        int err = EMAIL_ERROR_NONE, err2 = EMAIL_ERROR_NONE;
        int attachment_tbl_count = 0;
-       int i = 0;
        int account_id = 0;
        SENDSTREAM** send_stream = NULL;
        ENVELOPE *envelope = NULL;
@@ -1730,6 +1729,7 @@ INTERNAL_FUNC int emcore_send_mail(char *multi_user_name, int mail_id, int *err_
        opt = &(ref_account->options);
 
 #ifdef __FEATURE_SUPPORT_VALIDATION_SYSTEM__
+       int i = 0;
        EM_VALIDATION_SYSTEM_LOG("INFO", mail_id, "Email Send Start, %s -> %s, success", mail_tbl_data->full_address_from, mail_tbl_data->full_address_to);
        for (i = 0; i < attachment_tbl_count; i++) {
                if(attachment_tbl_data)
@@ -3774,7 +3774,8 @@ INTERNAL_FUNC int emcore_make_rfc822_file_from_mail(char *multi_user_name, emsto
 
                        if (input_mail_tbl_data->file_path_html && EM_SAFE_STRLEN(input_mail_tbl_data->file_path_html) > 0) {
                                EM_DEBUG_LOG_SEC("file_path_html[%s]", input_mail_tbl_data->file_path_html);
-                               if (input_mail_tbl_data->inline_content_count > 0 && (strcasecmp(root_body->subtype, "RELATED") != 0)) {
+                               if (input_mail_tbl_data->inline_content_count > 0 && 
+                                               (root_body->subtype && (strcasecmp(root_body->subtype, "RELATED") != 0))) {
                                        part_for_related = attach_multipart_with_sub_type(root_body, "RELATED", &error);
                                        if (!part_for_related) {
                                                EM_DEBUG_EXCEPTION("attach_multipart_with_sub_type [related] failed [%d]", error);
index 1c4a8f0..776ce33 100755 (executable)
@@ -352,7 +352,9 @@ INTERNAL_FUNC int  emcore_decode_task_parameter(email_task_type_t input_task_typ
 \r
        task_parameter_decoder = task_handler->task_parameter_decoder;\r
 \r
-       if ((err = task_parameter_decoder(input_byte_stream, input_stream_size, output_task_parameter_struct)) != EMAIL_ERROR_NONE) {\r
+       if ((err = task_parameter_decoder(input_byte_stream, 
+                                                                       input_stream_size, 
+                                                                       output_task_parameter_struct)) != EMAIL_ERROR_NONE) {
                EM_DEBUG_EXCEPTION("task_parameter_decoder failed [%d]", err);\r
                goto FINISH_OFF;\r
        }\r
@@ -368,7 +370,11 @@ int emcore_fetch_task_from_task_pool(email_task_t **output_task)
        int err = EMAIL_ERROR_NONE;\r
        int output_task_count;\r
 \r
-       if((err = emstorage_query_task(NULL, "WHERE task_status == 1", " ORDER BY date_time ASC, task_priority ASC LIMIT 0, 1", output_task, &output_task_count)) != EMAIL_ERROR_NONE) {\r
+       if ((err = emstorage_query_task(NULL, 
+                                                                       "WHERE task_status == 1", 
+                                                                       "ORDER BY date_time ASC, task_priority ASC LIMIT 0, 1", 
+                                                                       output_task, 
+                                                                       &output_task_count)) != EMAIL_ERROR_NONE) {
                EM_DEBUG_EXCEPTION("emstorage_query_task failed [%d]", err);\r
                goto FINISH_OFF;\r
        }\r
@@ -516,8 +522,8 @@ void* thread_func_task_manager_loop(void *arg)
                        EM_DEBUG_LOG("pthread_create returns [%d]", thread_error);\r
 \r
                        /* new_task and task_parameter will be free in task handler. */\r
-                        EM_SAFE_FREE(new_task->task_parameter);\r
-                        EM_SAFE_FREE(new_task);\r
+                       EM_SAFE_FREE(new_task->task_parameter);
+                       EM_SAFE_FREE(new_task);
                }\r
                else {\r
                        /* If there is no task or no available slot, sleep until someone wake you up. */\r
index 7266cc0..2f6f209 100755 (executable)
@@ -67,6 +67,12 @@ INTERNAL_FUNC int email_encode_task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAI
                        , &task_parameter->target_mailbox_id\r
                        , &task_parameter->mail_id_count\r
                        , &tb);\r
+       if (tn == NULL) {
+               EM_DEBUG_EXCEPTION("tpl_map failed");
+               err = EMAIL_ERROR_SYSTEM_FAILURE;
+               goto FINISH_OFF;
+       }
+
        tb.sz   = sizeof(int) * task_parameter->mail_id_count;\r
        tb.addr = task_parameter->mail_id_array;\r
        tpl_pack(tn, 0);\r
@@ -97,8 +103,7 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAI
        }\r
 \r
        task_parameter = em_malloc(sizeof(task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT));\r
-\r
-       if(task_parameter == NULL) {\r
+       if (task_parameter == NULL) {
                EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");\r
                err = EMAIL_ERROR_OUT_OF_MEMORY;\r
                goto FINISH_OFF;\r
@@ -111,6 +116,7 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAI
                                , &tb);\r
        if (tn == NULL) {
                EM_DEBUG_EXCEPTION("tpl_map failed");
+               EM_SAFE_FREE(task_parameter);
                err = EMAIL_ERROR_SYSTEM_FAILURE;
                goto FINISH_OFF;
        }
@@ -225,7 +231,6 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX
        }\r
 \r
        task_parameter = em_malloc(sizeof(task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX));\r
-\r
        if(task_parameter == NULL) {\r
                EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");\r
                err = EMAIL_ERROR_OUT_OF_MEMORY;\r
@@ -239,6 +244,7 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX
                                , &task_parameter->on_server);\r
        if (tn == NULL) {
                EM_DEBUG_EXCEPTION("tpl_map failed");
+               EM_SAFE_FREE(task_parameter);
                err = EMAIL_ERROR_SYSTEM_FAILURE;
                goto FINISH_OFF;
        }
@@ -322,7 +328,6 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DO
        }\r
 \r
        task_parameter = em_malloc(sizeof(task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL));\r
-\r
        if (task_parameter == NULL) {
                EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");\r
                err = EMAIL_ERROR_OUT_OF_MEMORY;\r
@@ -333,6 +338,7 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DO
                                , &task_parameter->mail_id);\r
        if (tn == NULL) {
                EM_DEBUG_EXCEPTION("tpl_map failed");
+               EM_SAFE_FREE(task_parameter);
                err = EMAIL_ERROR_SYSTEM_FAILURE;
                goto FINISH_OFF;
        }
@@ -410,7 +416,6 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_SYNC_TASK_SCHEDULE_SENDING_M
        }\r
 \r
        task_parameter = em_malloc(sizeof(task_parameter_EMAIL_SYNC_TASK_SCHEDULE_SENDING_MAIL));\r
-\r
        if(task_parameter == NULL) {\r
                EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");\r
                err = EMAIL_ERROR_OUT_OF_MEMORY;\r
@@ -421,6 +426,7 @@ INTERNAL_FUNC int email_decode_task_parameter_EMAIL_SYNC_TASK_SCHEDULE_SENDING_M
                                , &task_parameter->mail_id, &task_parameter->scheduled_time);\r
        if (tn == NULL) {
                EM_DEBUG_EXCEPTION("tpl_map failed");
+               EM_SAFE_FREE(task_parameter);
                err = EMAIL_ERROR_SYSTEM_FAILURE;
                goto FINISH_OFF;
        }
index 45b277f..e58f53f 100755 (executable)
@@ -74,6 +74,7 @@
 #include "email-core-account.h"
 #include "email-core-mailbox-sync.h"
 #include "email-core-mime.h"
+#include "email-core-gmime.h"
 #include "email-core-signal.h"
 #include "email-daemon.h"
 #include "email-utilities.h"
@@ -127,7 +128,6 @@ struct emcore_account_list_t {
 
 #include <gmime/gmime.h>
 
-
 INTERNAL_FUNC char *emcore_convert_mutf7_to_utf8(char *mailbox_name)
 {
        EM_DEBUG_FUNC_BEGIN("mailbox_name[%p]", mailbox_name);
@@ -151,7 +151,7 @@ INTERNAL_FUNC char *emcore_convert_mutf7_to_utf8(char *mailbox_name)
                EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");
                return NULL;
        }
-
+       
        for (; *cursor; ++cursor)
                switch (*cursor) {
                        case '+':
@@ -1050,7 +1050,7 @@ static int emcore_layout_multi_noti(notification_h noti, int unread_mail, char *
                goto FINISH_OFF;
        }
 
-       noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, "New email", dgettext(NATIVE_EMAIL_DOMAIN,"IDS_EMAIL_TPOP_NEW_EMAIL_RECEIVED_ABB"), NOTIFICATION_VARIABLE_TYPE_NONE);
+       noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, "New emails", dgettext(NATIVE_EMAIL_DOMAIN,"IDS_EMAIL_MBODY_NEW_EMAILS_ABB"), NOTIFICATION_VARIABLE_TYPE_NONE);
        if (noti_err != NOTIFICATION_ERROR_NONE) {
                EM_DEBUG_EXCEPTION("notification_set_text TEXT_TYPE_TITLE failed");
                goto FINISH_OFF;
@@ -1247,6 +1247,7 @@ static int emcore_get_alert_type(int vibrate_status)
        }
 
 FINISH_OFF:
+
        EM_DEBUG_FUNC_END("alert_type [%d]", alert_type);
        return alert_type;
 }
@@ -1291,7 +1292,7 @@ INTERNAL_FUNC int emcore_show_toast_popup(char *input_popup_string)
                goto FINISH_OFF;
        }
 
-       ret = app_control_set_app_id(svc_handle, "com.samsung.email-tts-play");
+       ret = app_control_set_app_id(svc_handle, "org.tizen.email-tts-play");
        if (ret != APP_CONTROL_ERROR_NONE) {
                EM_DEBUG_LOG("app_control_set_app_id() failed! ret:[%d]", ret);
                err = EMAIL_ERROR_SYSTEM_FAILURE;
@@ -1466,7 +1467,7 @@ INTERNAL_FUNC int emcore_add_notification(char *multi_user_name, int account_id,
                goto FINISH_OFF;
        }
 
-       if ((noti_err = notification_set_text_domain(noti, NATIVE_EMAIL_DOMAIN, "/usr/apps/com.samsung.email/res/locale")) != NOTIFICATION_ERROR_NONE) {
+       if ((noti_err = notification_set_text_domain(noti, NATIVE_EMAIL_DOMAIN, "/usr/apps/org.tizen.email/res/locale")) != NOTIFICATION_ERROR_NONE) {
                EM_DEBUG_EXCEPTION("notification_set_text_domain failed [%d]", noti_err);
                err = EMAIL_ERROR_SYSTEM_FAILURE;
                goto FINISH_OFF;
@@ -1637,6 +1638,7 @@ INTERNAL_FUNC int emcore_add_notification_for_send(char *multi_user_name, int ac
        int private_id = 0;
        void *join_zone = NULL;
        char *mailbox_name = NULL;
+       char *dgettext_string = NULL;
        char vconf_private_id[MAX_PATH] = {0, };
        notification_h noti = NULL;
        notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
@@ -1725,130 +1727,134 @@ INTERNAL_FUNC int emcore_add_notification_for_send(char *multi_user_name, int ac
 
        switch (action) {
        case EMAIL_ACTION_SEND_MAIL :
-
+/*
                setlocale(LC_MESSAGES, vconf_get_str(VCONFKEY_LANGSET));
                bindtextdomain("sys_string", "/usr/share/locale");
                textdomain("sys_string");
+*/
+               setlocale(LC_MESSAGES, vconf_get_str(VCONFKEY_LANGSET));
+               bindtextdomain(NATIVE_EMAIL_DOMAIN, "/usr/apps/org.tizen.email/res/locale");
+               textdomain(NATIVE_EMAIL_DOMAIN);
 
-               if (sending_error == EMAIL_ERROR_NONE) {
-                       /*if ((noti_err = emcore_layout_single_noti(noti, account_tbl->account_name, 1, "IDS_COM_POP_SENT", p_mail_data->date_time, p_mail_data->subject)) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_layout_single_noti failed [%d]", err);
-                               err = EMAIL_ERROR_SYSTEM_FAILURE;
-                               goto FINISH_OFF;
-                       }*/
+               switch(sending_error) {
+               case EMAIL_ERROR_NONE:
+                       dgettext_string = dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_EMAIL_SENT");
+                       break;
+               case EMAIL_ERROR_FLIGHT_MODE_ENABLE:
+                       dgettext_string = dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_FAILED_TO_CONNECT_TO_NETWORK");
+                       break;
+               case EMAIL_ERROR_NETWORK_NOT_AVAILABLE:
+               case EMAIL_ERROR_NO_SIM_INSERTED:
+                       dgettext_string = dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_NETWORK_NOT_AVAILABLE_EMAIL_WILL_BE_SENT_WHEN_CONNECTED_TO_NETWORK");
+                       break;
+               case EMAIL_ERROR_SERVER_STORAGE_FULL:
+                       dgettext_string = dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_SENDING_FAILED_SERVER_STORAGE_FULL_ABB");
+                       break;
+               default:
+                       dgettext_string = dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_SENDING_FAILED");
+                       break;
+               }
 
-                       if ((noti_err = notification_status_message_post(dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_EMAIL_SENT"))) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_status_message_post failed [%d]", noti_err);
-                               err = EMAIL_ERROR_NOTI;
-                               goto FINISH_OFF;
-                       }
+               if ((noti_err = notification_set_layout(noti, 
+                                                                                               NOTIFICATION_LY_NOTI_EVENT_SINGLE)) != NOTIFICATION_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("notification_set_layout failed [%d]", noti_err);
+                       err = EMAIL_ERROR_NOTI;
+                       goto FINISH_OFF;
+               }
 
-               } else {
-                       /*if ((noti_err = emcore_layout_single_noti(noti, account_tbl->account_name, 1, "IDS_COM_POP_SENDING_FAILED", p_mail_data->date_time, p_mail_data->subject)) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_layout_single_noti failed [%d]", err);
-                               err = EMAIL_ERROR_SYSTEM_FAILURE;
-                               goto FINISH_OFF;
-                       }*/
-
-                       switch(sending_error) {
-                       case EMAIL_ERROR_FLIGHT_MODE_ENABLE:
-                               EM_DEBUG_LOG("Flight mode enable");
-                               if ((noti_err = notification_status_message_post(dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_FAILED_TO_CONNECT_TO_NETWORK"))) != NOTIFICATION_ERROR_NONE)
-                               {
-                                       EM_DEBUG_EXCEPTION("notification_status_message_post failed [%d]", noti_err);
-                                       err = EMAIL_ERROR_NOTI;
-                                       goto FINISH_OFF;
-                               }
-                               break;
+               if ((noti_err = notification_set_image(noti, 
+                                                                                               NOTIFICATION_IMAGE_TYPE_ICON, 
+                                                                                               EMAIL_NOTI_ICON_PATH)) != NOTIFICATION_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("notification_set_image failed [%d]", noti_err);
+                       err = EMAIL_ERROR_NOTI;
+                       goto FINISH_OFF;
+               }
 
-                       case EMAIL_ERROR_NETWORK_NOT_AVAILABLE:
-                       case EMAIL_ERROR_NO_SIM_INSERTED:
-                               if ((noti_err = notification_status_message_post(dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_NETWORK_NOT_AVAILABLE_EMAIL_WILL_BE_SENT_WHEN_CONNECTED_TO_NETWORK"))) != NOTIFICATION_ERROR_NONE)
-                               {
-                                       EM_DEBUG_EXCEPTION("notification_status_message_post failed [%d]", noti_err);
-                                       err = EMAIL_ERROR_NOTI;
-                                       goto FINISH_OFF;
-                               }
-                               break;
-                       default:
-                               if ((noti_err = notification_status_message_post(dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_SENDING_FAILED"))) != NOTIFICATION_ERROR_NONE) {
-                                       EM_DEBUG_EXCEPTION("notification_status_message_post failed [%d]", noti_err);
-                                       err = EMAIL_ERROR_NOTI;
-                                       goto FINISH_OFF;
-                               }
-                       }
-                       if ((noti_err = notification_set_layout(noti, NOTIFICATION_LY_NOTI_EVENT_SINGLE)) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_set_layout failed [%d]", noti_err);
-                               err = EMAIL_ERROR_NOTI;
-                               goto FINISH_OFF;
-                       }
+               if ((noti_err = notification_set_text(noti, 
+                                                                                       NOTIFICATION_TEXT_TYPE_TITLE,
+                                                                                       p_mail_data->alias_recipient,           
+                                                                                       NULL, 
+                                                                                       NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("notification_set_text failed [%d]", noti_err);
+                       err = EMAIL_ERROR_NOTI;
+                       goto FINISH_OFF;
+               }
 
-                       if ((noti_err = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, EMAIL_NOTI_ICON_PATH)) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_set_image failed [%d]", noti_err);
+               switch (sending_error) {
+               case EMAIL_ERROR_NONE:
+                       if ((noti_err = notification_set_text(noti,
+                                                                                               NOTIFICATION_TEXT_TYPE_CONTENT,
+                                                                                               "Email Sent",
+                                                                                               dgettext_string,
+                                                                                               NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
+                               EM_DEBUG_EXCEPTION("notification_set_text failed [%d]", noti_err);
                                err = EMAIL_ERROR_NOTI;
                                goto FINISH_OFF;
                        }
-
-                       if ((noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, "Sending failed", dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_TPOP_SENDING_FAILED"), NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
+                       break;
+               case EMAIL_ERROR_SERVER_STORAGE_FULL:
+                       if ((noti_err = notification_set_text(noti,
+                                                                                               NOTIFICATION_TEXT_TYPE_CONTENT,
+                                                                                               "Sending failed. Server storage full.",
+                                                                                               dgettext_string,
+                                                                                               NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
                                EM_DEBUG_EXCEPTION("notification_set_text failed [%d]", noti_err);
                                err = EMAIL_ERROR_NOTI;
                                goto FINISH_OFF;
                        }
-
-                       if (p_mail_data->subject) {
-                               if ((noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, p_mail_data->subject, NULL, NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
-                                       EM_DEBUG_EXCEPTION("notification_set_text failed [%d]", noti_err);
-                                       err = EMAIL_ERROR_NOTI;
-                                       goto FINISH_OFF;
-                               }
-                       } else {
-                               if ((noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, "No subject", NULL, NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
-                                       EM_DEBUG_EXCEPTION("notification_set_text failed [%d]", noti_err);
-                                       err = EMAIL_ERROR_NOTI;
-                                       goto FINISH_OFF;
-                               }
-                       }
-
-                       if (sending_error == EMAIL_ERROR_SMTP_SEND_FAILURE_BY_OVERSIZE) {
-                               setlocale(LC_MESSAGES, vconf_get_str(VCONFKEY_LANGSET));
-                               bindtextdomain(NATIVE_EMAIL_DOMAIN, "/usr/apps/com.samsung.email/res/locale");
-                               textdomain(NATIVE_EMAIL_DOMAIN);
-                               if ((noti_err = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_INFO_1, dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_POP_THE_EMAIL_IS_TOO_LARGE"), NULL, NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
-                                       EM_DEBUG_EXCEPTION("notification_set_text TEXT_TYPE_INFO_1 failed");
-                                       err = EMAIL_ERROR_NOTI;
-                                       goto FINISH_OFF;
-                               }
-                       }
-
-                       /*notification_set_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, NULL, NULL, args);*/
-
-                       if ((noti_err = notification_set_display_applist(noti, NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY)) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_insert failed [%d]", noti_err);
+                       break;
+               default:
+                       if ((noti_err = notification_set_text(noti, 
+                                                                                               NOTIFICATION_TEXT_TYPE_CONTENT, 
+                                                                                               "Sending failed", 
+                                                                                               dgettext_string,
+                                                                                               NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
+                               EM_DEBUG_EXCEPTION("notification_set_text failed [%d]", noti_err);
                                err = EMAIL_ERROR_NOTI;
                                goto FINISH_OFF;
                        }
+                       break;
+               }
 
-                       if ((noti_err = notification_insert(noti, &private_id)) != NOTIFICATION_ERROR_NONE) {
-                               EM_DEBUG_EXCEPTION("notification_insert failed [%d]", noti_err);
+               if (sending_error == EMAIL_ERROR_SMTP_SEND_FAILURE_BY_OVERSIZE) {
+                       if ((noti_err = notification_set_text(noti, 
+                                                                                               NOTIFICATION_TEXT_TYPE_INFO_1, 
+                                                                                               dgettext(NATIVE_EMAIL_DOMAIN, "IDS_EMAIL_POP_THE_EMAIL_IS_TOO_LARGE"), 
+                                                                                               NULL, 
+                                                                                               NOTIFICATION_VARIABLE_TYPE_NONE)) != NOTIFICATION_ERROR_NONE) {
+                               EM_DEBUG_EXCEPTION("notification_set_text TEXT_TYPE_INFO_1 failed");
                                err = EMAIL_ERROR_NOTI;
                                goto FINISH_OFF;
                        }
+               }
 
-                       EM_DEBUG_LOG("Private_id = [%d]", private_id);
+               if ((noti_err = notification_set_display_applist(noti, 
+                                                                                               NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY | NOTIFICATION_DISPLAY_APP_TICKER)) != NOTIFICATION_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("notification_insert failed [%d]", noti_err);
+                       err = EMAIL_ERROR_NOTI;
+                       goto FINISH_OFF;
+               }
 
-                       SNPRINTF(vconf_private_id, sizeof(vconf_private_id), "%s/%d", VCONF_KEY_NOTI_PRIVATE_ID, account_id);
-                       if (vconf_set_int(vconf_private_id, private_id) != 0) {
-                               EM_DEBUG_EXCEPTION("vconf_set_int failed");
-                               err = EMAIL_ERROR_GCONF_FAILURE;
-                               goto FINISH_OFF;
-                       }
+               if ((noti_err = notification_insert(noti, &private_id)) != NOTIFICATION_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("notification_insert failed [%d]", noti_err);
+                       err = EMAIL_ERROR_NOTI;
+                       goto FINISH_OFF;
+               }
+
+               EM_DEBUG_LOG("Private_id = [%d]", private_id);
+
+               SNPRINTF(vconf_private_id, sizeof(vconf_private_id), "%s/%d", VCONF_KEY_NOTI_PRIVATE_ID, account_id);
+               if (vconf_set_int(vconf_private_id, private_id) != 0) {
+                       EM_DEBUG_EXCEPTION("vconf_set_int failed");
+                       err = EMAIL_ERROR_GCONF_FAILURE;
+                       goto FINISH_OFF;
                }
 
                break;
 
        case EMAIL_ACTION_SENDING_MAIL :
 
-               if ((noti_err = notification_set_text_domain(noti, NATIVE_EMAIL_DOMAIN, "/usr/apps/com.samsung.email/res/locale")) != NOTIFICATION_ERROR_NONE) {
+               if ((noti_err = notification_set_text_domain(noti, NATIVE_EMAIL_DOMAIN, "/usr/apps/org.tizen.email/res/locale")) != NOTIFICATION_ERROR_NONE) {
                        EM_DEBUG_EXCEPTION("notification_set_text_domain failed [%d]", noti_err);
                        err = EMAIL_ERROR_NOTI;
                        goto FINISH_OFF;
@@ -1896,8 +1902,8 @@ INTERNAL_FUNC int emcore_add_notification_for_send(char *multi_user_name, int ac
                EM_DEBUG_LOG("Private_id = [%d]", private_id);
 
                SNPRINTF(vconf_private_id, sizeof(vconf_private_id), "%s/%d", VCONF_KEY_NOTI_PRIVATE_ID, account_id);
-               if ((err = vconf_set_int (vconf_private_id, private_id)) != 0) {
-                       EM_DEBUG_EXCEPTION("vconf_set_int failed [%d]", err);
+               if (vconf_set_int (vconf_private_id, private_id) != 0) {
+                       EM_DEBUG_EXCEPTION("vconf_set_int failed");
                        err = EMAIL_ERROR_GCONF_FAILURE;
                        goto FINISH_OFF;
                }
@@ -1909,6 +1915,7 @@ INTERNAL_FUNC int emcore_add_notification_for_send(char *multi_user_name, int ac
                        EM_DEBUG_EXCEPTION ("notification_free error [%d]", noti_err);
                        err = EMAIL_ERROR_NOTI;
                }
+
                break;
        }
 
@@ -1918,10 +1925,18 @@ FINISH_OFF:
                app_control_destroy(service);
 
     if ((action == EMAIL_ACTION_SEND_MAIL) && noti) {
-        if( (noti_err = notification_free(noti)) != NOTIFICATION_ERROR_NONE)
+        if ((noti_err = notification_free(noti)) != NOTIFICATION_ERROR_NONE) {
             err = EMAIL_ERROR_NOTI;
+               }
     }
 
+       if ((action != EMAIL_ACTION_SEND_MAIL) && (err != EMAIL_ERROR_NONE)) {
+               if (noti) {
+                       notification_free(noti);
+                       g_sending_noti_handle = NULL;
+               }
+       }
+
        if (join_zone)
                emcore_unset_join_zone(join_zone);
 
@@ -2947,41 +2962,46 @@ FINISH_OFF:
 }
 
 
-INTERNAL_FUNC int reg_replace_new (char **input_source_text, char *input_old_pattern_string, char *input_new_string)
+INTERNAL_FUNC char *reg_replace_new(char *input_source_text, char *input_old_pattern_string, char *input_new_string)
 {
        char *replaced_str = NULL;
-       int error_code = EMAIL_ERROR_NONE;
        GRegex *regex = NULL;
        GError *error = NULL;
 
-       if (input_source_text == NULL || *input_source_text == NULL) {
-               return EMAIL_ERROR_INVALID_PARAM;
+       if (input_source_text == NULL) {
+               EM_DEBUG_EXCEPTION("Invalid parameter");
+               return NULL;
        }
 
        regex = g_regex_new(input_old_pattern_string, G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &error);
-
        if (!regex) {
                EM_DEBUG_LOG("g_regex_new failed");
-               error_code = EMAIL_ERROR_SYSTEM_FAILURE;
                goto FINISH_OFF;
        }
 
-       replaced_str = g_regex_replace_literal(regex, *input_source_text, EM_SAFE_STRLEN(*input_source_text), 0, input_new_string, 0, &error);
-
-       EM_SAFE_FREE(*input_source_text);
-
-       *input_source_text = replaced_str;
+       replaced_str = g_regex_replace_literal(regex, 
+                                                                                       input_source_text, 
+                                                                                       strlen(input_source_text), 
+                                                                                       0, 
+                                                                                       input_new_string, 
+                                                                                       0, 
+                                                                                       &error);
+       if (replaced_str == NULL) {
+               EM_DEBUG_EXCEPTION("g_regex_replace_literal failed : [%s][%d]", error->message, error->code);
+               goto FINISH_OFF;
+       }
 
 FINISH_OFF:
+       
+       if (regex) g_regex_unref(regex);
 
-       g_regex_unref(regex);
-       return error_code;
+       return replaced_str;
 }
 
 
 #include <libxml/HTMLparser.h>
 
-static void emcore_get_content_string(xmlNode *input_node, char *input_result_buffer, int input_result_buffer_legnth, int *input_exit_flag)
+static void emcore_get_content_string(xmlNode *input_node, char *input_result_buffer, int input_result_buffer_length, int *input_exit_flag)
 {
     xmlNode *cur_node = NULL;
     char    *temp_content_string = NULL;
@@ -2995,41 +3015,60 @@ static void emcore_get_content_string(xmlNode *input_node, char *input_result_bu
                if (cur_node->name && (strcasecmp((const char *)cur_node->name, "head") == 0 || strcasecmp((const char *)cur_node->name, "title") == 0))
                        continue;
 
+               if (cur_node->name && (strcasecmp((const char *)cur_node->name, "BR") == 0)) {
+                       if (EM_SAFE_STRLEN(input_result_buffer) + 1 >= input_result_buffer_length) {
+                               *input_exit_flag = 1;
+                               break;
+                       } else {
+                               EM_SAFE_STRCAT(input_result_buffer, " ");
+                               continue;
+                       }
+               }
+
                if (cur_node->type == XML_TEXT_NODE && cur_node->content) {
-                       if ((EM_SAFE_STRLEN(cur_node->content) + EM_SAFE_STRLEN(input_result_buffer)) >= input_result_buffer_legnth) {
+                       if ((EM_SAFE_STRLEN(cur_node->content) + EM_SAFE_STRLEN(input_result_buffer)) >= input_result_buffer_length) {
                                int len1 = EM_SAFE_STRLEN(input_result_buffer);
 
-                               if (len1 >= 0 && len1 < input_result_buffer_legnth) {
-                                       int remain_size = input_result_buffer_legnth - len1 - 2;
-                                       char *remain_str = em_malloc(remain_size);
-                                       if (remain_str && cur_node->content) {
-                                               snprintf(remain_str, remain_size, "%s", (char*)(cur_node->content));
-                                       }
+                               if (len1 >= 0 && len1 < input_result_buffer_length) {
+                                       int remain_size = input_result_buffer_length - len1 - 2;
+                                       EM_DEBUG_LOG("remain_size : [%d], len1 : [%d]", remain_size, len1);
+                                       char *remain_str = NULL;
 
-                                       if (remain_str)
-                                               EM_SAFE_STRCAT(input_result_buffer, remain_str);
+                                       if (remain_size > 0)
+                                               remain_str = g_strndup((char *)(cur_node->content), remain_size);
 
-                                       EM_SAFE_FREE(remain_str);
+                                       if (remain_str) {
+                                               char *replaced_string = NULL;
+                                               replaced_string = reg_replace_new(remain_str, "[ \t\r\n\v\f]+", " ");
+                                               EM_SAFE_STRCAT(input_result_buffer, replaced_string);
+                                               EM_SAFE_FREE(replaced_string);
+                                               free(remain_str);
+                                       }
                                }
 
                                *input_exit_flag = 1;
                                break;
                        }
+
                        temp_content_string = EM_SAFE_STRDUP((const char *)cur_node->content);
                        if (temp_content_string) {
-                               reg_replace_new(&temp_content_string, "[ \t\r\n\v\f]+", " ");
-                               EM_SAFE_STRCAT(input_result_buffer, temp_content_string);
-                               EM_SAFE_FREE(temp_content_string);
+                               char *replaced_string = NULL;
+                               replaced_string = reg_replace_new(temp_content_string, "[ \t\r\n\v\f]+", " ");
+                               EM_SAFE_STRCAT(input_result_buffer, replaced_string);
+                               EM_SAFE_FREE(replaced_string);
+                               free(temp_content_string);
                        }
                }
 
                if (cur_node->children)
-                       emcore_get_content_string(cur_node->children, input_result_buffer, input_result_buffer_legnth, input_exit_flag);
+                       emcore_get_content_string(cur_node->children, input_result_buffer, input_result_buffer_length, input_exit_flag);
 
                if (*input_exit_flag == 1)
                        break;
     }
+
 FINISH_OFF:
+
        return;
 }
 
@@ -3056,7 +3095,6 @@ int emcore_strip_HTML_tag(const char *input_html_file_path, char *input_encoding
        }
 
        result_string = em_malloc(sizeof(char) * input_result_buffer_legnth);
-
        if (result_string == NULL) {
                EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");
                err = EMAIL_ERROR_OUT_OF_MEMORY;
@@ -3085,11 +3123,11 @@ int emcore_strip_HTML_tag(const char *input_html_file_path, char *input_encoding
 
        root_element = xmlDocGetRootElement(result_html_document);
 
-
        emcore_get_content_string(root_element, result_string, input_result_buffer_legnth, &exit_flag);
-       reg_replace_new(&result_string, "[ \t\r\n\v\f]+", " ");
-       EM_SAFE_STRCPY(output_result_buffer, result_string);
-       // em_trim_left(output_result_buffer);
+       char *replaced_string = reg_replace_new(result_string, "[ \t\r\n\v\f]+", " ");
+       EM_SAFE_STRCPY(output_result_buffer, replaced_string);
+       EM_SAFE_FREE(replaced_string);
+       em_trim_left(output_result_buffer);
 
 FINISH_OFF:
        if (result_html_document) {
@@ -5016,7 +5054,6 @@ INTERNAL_FUNC int emcore_check_blocking_mode_internal (char *multi_user_name, ch
 {
        EM_DEBUG_FUNC_BEGIN();
        int err = EMAIL_ERROR_NONE;
-
        int contact_error = 0;
        int person_id = 0;
        int allowed_contact_type = 0; /* 0 : NONE, 1 : All contacts, 2 : Favorites, 3 : Custom */
index 5c0e2b6..c2ce544 100755 (executable)
@@ -1636,14 +1636,44 @@ FINISH_OFF:
 
  /*  pData : a parameter which is registered when busy handler is registerd */
  /*  count : retry count */
-#define EMAIL_STORAGE_MAX_RETRY_COUNT  20
-static int _callback_sqlite_busy_handler(void *pData, int count)
+#define EMAIL_STORAGE_MAX_RETRY_COUNT 20
+
+static int _callback_sqlite_busy_handler(void *pData, int retry)
 {
-       EM_DEBUG_LOG("Busy Handler Called!!: [%d]", count);
-       usleep(200000);   /*   sleep time when SQLITE_LOCK */
+       if (retry < EMAIL_STORAGE_MAX_RETRY_COUNT) {
+               EM_DEBUG_LOG("Busy handler called!!: [%d]", retry);
+               sqlite3_sleep(200);
+               return 1;
+       }
 
-       /*  retry will be stopped if  busy handler return 0 */
-       return EMAIL_STORAGE_MAX_RETRY_COUNT - count;
+       EM_DEBUG_EXCEPTION("Invalid Busy handler called:: [%d]", retry);
+       return 0;
+}
+
+static int _callback_collation_utf7_sort(void *data, int length_text_a, const void *text_a,
+                                                                                                        int length_text_b, const void *text_b)
+{
+    EM_DEBUG_FUNC_BEGIN();
+    int result = 0;
+    char *converted_string_a = NULL;
+    char *converted_string_b = NULL;
+
+       EM_DEBUG_LOG_DEV("text_a : [%s]", text_a);
+       converted_string_a = emcore_convert_mutf7_to_utf8((char *)text_a);
+       EM_DEBUG_LOG_DEV("Converted text_a : [%s]", converted_string_a);
+
+       EM_DEBUG_LOG_DEV("text_b : [%s]", text_b);
+       converted_string_b = emcore_convert_mutf7_to_utf8((char *)text_b);
+       EM_DEBUG_LOG_DEV("Converted text_b : [%s]", converted_string_b);
+
+       if (converted_string_a && converted_string_b)
+               result = strcmp(converted_string_a, converted_string_b);
+
+       EM_SAFE_FREE(converted_string_a);
+       EM_SAFE_FREE(converted_string_b);
+
+       EM_DEBUG_FUNC_END();
+       return result;
 }
 
 static int _delete_all_files_and_directories(char *db_file_path, int *err_code)
@@ -1813,6 +1843,16 @@ INTERNAL_FUNC int em_db_open(char *db_file_path, sqlite3 **sqlite_handle, int *e
                goto FINISH_OFF;
        }
 
+       /* Register collation callback function */
+       rc = sqlite3_create_collation(*sqlite_handle, "CONVERTUTF8", SQLITE_UTF8, NULL, _callback_collation_utf7_sort);
+       if (SQLITE_OK != rc) {
+               EM_DEBUG_EXCEPTION("sqlite3_create_collation failed : [%d][%s]", rc, sqlite3_errmsg(*sqlite_handle));
+               error = EMAIL_ERROR_DB_FAILURE;
+               sqlite3_close(*sqlite_handle);
+               *sqlite_handle = NULL;
+               goto FINISH_OFF;
+       }
+
        ret = true;
 
 FINISH_OFF:
@@ -2500,11 +2540,11 @@ INTERNAL_FUNC int emstorage_create_table(char *multi_user_name, emstorage_create
                EM_DEBUG_LOG("CREATE TABLE mail_text_tbl");
 
                EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_TEXT_TBL], sizeof(sql_query_string)-1); /*prevent 21984 */
-                error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
-                if (error != EMAIL_ERROR_NONE) {
-                        EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
-                        goto FINISH_OFF;
-                }
+               error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+               if (error != EMAIL_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+                       goto FINISH_OFF;
+               }
 
                EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
        } /*  mail_text_tbl */
@@ -2531,11 +2571,11 @@ INTERNAL_FUNC int emstorage_create_table(char *multi_user_name, emstorage_create
                EM_DEBUG_LOG("CREATE TABLE mail_auto_download_activity_tbl");
 
                EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_AUTO_DOWNLOAD_ACTIVITY_TBL], sizeof(sql_query_string)-1);
-                error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
-                if (error != EMAIL_ERROR_NONE) {
-                        EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
-                        goto FINISH_OFF;
-                }
+               error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+               if (error != EMAIL_ERROR_NONE) {
+                       EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+                       goto FINISH_OFF;
+               }
 
                EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
        } /*  mail_auto_download_activity_tbl */
@@ -2896,7 +2936,7 @@ FINISH_OFF:
 
        EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
 
-       sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
        EM_SAFE_FREE(sql_query_string);
        EM_SAFE_FREE(date_time_string);
@@ -3028,7 +3068,7 @@ FINISH_OFF:
 
        EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
 
-       sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
        if (err_code != NULL)
                *err_code = error;
@@ -3107,7 +3147,7 @@ FINISH_OFF:
 
        EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
 
-       sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
        if (err_code != NULL)
                *err_code = error;
@@ -3145,13 +3185,13 @@ INTERNAL_FUNC int emstorage_query_mailbox_tbl(char *multi_user_name, const char
                SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT %s, total, read  FROM mail_box_tbl AS MBT LEFT OUTER JOIN (SELECT mailbox_id, count(mail_id) AS total, SUM(flags_seen_field) AS read FROM mail_tbl WHERE flags_deleted_field = 0 GROUP BY mailbox_id) AS MT ON MBT.mailbox_id = MT.mailbox_id %s %s", fields, input_conditional_clause, input_ordering_clause);
        }
 
-       EM_DEBUG_LOG_DEV ("query[%s]", sql_query_string);
+       EM_DEBUG_LOG_DEV("query[%s]", sql_query_string);
 
        EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
        EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE;sqlite3_free_table(result);goto FINISH_OFF; },
                ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string))
 
-       EM_DEBUG_LOG_DEV ("result count [%d]", count);
+       EM_DEBUG_LOG_DEV("result count [%d]", count);
 
        if(count == 0) {
                EM_DEBUG_LOG_SEC ("Can't find mailbox query[%s]", sql_query_string);
@@ -3203,7 +3243,7 @@ FINISH_OFF:
 
        EMSTORAGE_FINISH_READ_TRANSACTION(input_transaction);
 
-       sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
        EM_DEBUG_FUNC_END("error [%d]", error);
        return error;
@@ -5247,7 +5287,10 @@ INTERNAL_FUNC int emstorage_get_mailbox_list_ex(char *multi_user_name, int accou
                        SNPRINTF(conditional_clause_string + EM_SAFE_STRLEN(conditional_clause_string), sizeof(conditional_clause_string)-(EM_SAFE_STRLEN(conditional_clause_string)+1), " AND account_id = %d ", account_id);
        }
 
-       SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY MBT.mailbox_name ");
+       SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY CASE WHEN MBT.mailbox_name"
+                                                                                                " GLOB \'[][~`!@#$%%^&*()_-+=|\\{}:;<>,.?/ ]*\'"
+                                                                                                " THEN 2 ELSE 1 END ASC,"
+                                                                                                " MBT.mailbox_name COLLATE CONVERTUTF8 ASC ");
        EM_DEBUG_LOG("conditional_clause_string[%s]", conditional_clause_string);
        EM_DEBUG_LOG("ordering_clause_string[%s]", ordering_clause_string);
 
@@ -9222,13 +9265,11 @@ INTERNAL_FUNC int emstorage_change_mail_field(char *multi_user_name, int mail_id
                        break;
 
                case UPDATE_DATETIME:  {
-                       time_t now = time(NULL);
-
                        SNPRINTF(sql_query_string, sizeof(sql_query_string),
                                "UPDATE mail_tbl SET"
-                               " date_time = '%d'"
+                               " date_time = '%ld'"
                                " WHERE mail_id = %d AND account_id != 0"
-                               , (int)now
+                               , mail->date_time
                                , mail_id);
 
                        EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
@@ -11361,6 +11402,7 @@ INTERNAL_FUNC int emstorage_clear_mail_data(char *multi_user_name, int transacti
 
        mkdir(MAILHOME, DIRECTORY_PERMISSION);
        mkdir(MAILTEMP, DIRECTORY_PERMISSION);
+       chmod(MAILTEMP, 0777);
 
        /*  first clear index. */
        while (indexes->object_name)  {
@@ -11615,6 +11657,10 @@ INTERNAL_FUNC int emstorage_create_dir(char *multi_user_name, int account_id, in
                                        error = EMAIL_ERROR_OUT_OF_MEMORY;
                                goto FINISH_OFF;
                        }
+
+                       if (account_id == EML_FOLDER) {
+                               chmod(buf, 0777);
+                       }
                }
        }
 
@@ -11638,7 +11684,6 @@ INTERNAL_FUNC int emstorage_create_dir(char *multi_user_name, int account_id, in
                if (stat(buf, &sbuf) == 0) {
                        if ((sbuf.st_mode & S_IFMT) != S_IFDIR)  {
                                EM_DEBUG_EXCEPTION(" a object which isn't directory aleady exists");
-
                                error = EMAIL_ERROR_SYSTEM_FAILURE;
                                goto FINISH_OFF;
                        }
@@ -11652,6 +11697,10 @@ INTERNAL_FUNC int emstorage_create_dir(char *multi_user_name, int account_id, in
                                        error = EMAIL_ERROR_OUT_OF_MEMORY;
                                goto FINISH_OFF;
                        }
+
+                       if (account_id == EML_FOLDER) {
+                               chmod(buf, 0777);
+                       }
                }
        }
 
@@ -11681,6 +11730,10 @@ INTERNAL_FUNC int emstorage_create_dir(char *multi_user_name, int account_id, in
                                        error = EMAIL_ERROR_OUT_OF_MEMORY;
                                goto FINISH_OFF;
                        }
+
+                       if (account_id == EML_FOLDER) {
+                               chmod(buf, 0777);
+                       }
                }
        }
 
@@ -11802,6 +11855,7 @@ INTERNAL_FUNC void emstorage_create_dir_if_delete()
        mkdir(EMAILPATH, DIRECTORY_PERMISSION);
        mkdir(MAILHOME, DIRECTORY_PERMISSION);
        mkdir(MAILTEMP, DIRECTORY_PERMISSION);
+       chmod(MAILTEMP, 0777);
 
        EM_DEBUG_FUNC_END();
 }
@@ -12394,8 +12448,7 @@ FINISH_OFF:
 
        EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
 
-       sqlite3_db_release_memory(local_db_handle);
-
+//     sqlite3_db_release_memory(local_db_handle);
 
        if (ret == true) {
                if (mail_ids != NULL)
@@ -12741,7 +12794,7 @@ INTERNAL_FUNC int emstorage_get_thread_id_of_thread_mails(char *multi_user_name,
 
        EM_DEBUG_LOG_SEC("stripped_subject: [%s]", stripped_subject);
 
-       if (EM_SAFE_STRLEN(stripped_subject) < 2) {
+       if (EM_SAFE_STRLEN(stripped_subject) == 0) {
                result_thread_id = -1;
                goto FINISH_OFF;
        }
@@ -12851,7 +12904,7 @@ INTERNAL_FUNC int emstorage_get_thread_id_from_mailbox(char *multi_user_name, in
                goto FINISH_OFF;
        }
 
-       if (EM_SAFE_STRLEN(stripped_subject) < 2) {
+       if (EM_SAFE_STRLEN(stripped_subject) == 0) {
                result_thread_id = -1;
                goto FINISH_OFF;
        }
@@ -14602,8 +14655,7 @@ FINISH_OFF:
 
        EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
 
-       if (local_db_handle)
-               sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
        EM_DEBUG_FUNC_END("err [%d]", err);
        return err;
@@ -15117,12 +15169,6 @@ FINISH_OFF:
        return ret;
 }
 
-
-INTERNAL_FUNC void emstorage_flush_db_cache()
-{
-       /* sqlite3_release_memory(-1); */
-}
-
 #ifdef __FEATURE_LOCAL_ACTIVITY__
 /**
   *    emstorage_add_activity - Add Email Local activity during OFFLINE mode
@@ -15810,6 +15856,7 @@ static int _make_filter_rule_string(email_list_filter_rule_t *input_list_filter_
                mod_field_name_string = em_malloc(sizeof(char) * length_field_name);
                if (mod_field_name_string == NULL) {
                        EM_DEBUG_EXCEPTION("em_malloc failed");
+                       EM_SAFE_FREE(temp_field_name_string);
                        ret = EMAIL_ERROR_OUT_OF_MEMORY;
                        goto FINISH_OFF;
                }
@@ -15817,6 +15864,7 @@ static int _make_filter_rule_string(email_list_filter_rule_t *input_list_filter_
                mod_value_string = em_malloc(sizeof(char) * length_value);
                if (mod_value_string == NULL) {
                        EM_DEBUG_EXCEPTION("em_malloc failed");
+                       EM_SAFE_FREE(temp_field_name_string);
                        ret = EMAIL_ERROR_OUT_OF_MEMORY;
                        goto FINISH_OFF;
                }
@@ -15952,7 +16000,7 @@ static int _make_filter_attach_rule_string(char *multi_user_name, email_list_fil
        sqlite3_free_table(result);
        EMSTORAGE_FINISH_READ_TRANSACTION(true);
 
-       sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
 
        query_size = (10 * count) + strlen("mail_id IN ( )  ");
@@ -16057,7 +16105,7 @@ static int _make_filter_fts_rule_string(char *multi_user_name, email_list_filter
        sqlite3_free_table(result);
        EMSTORAGE_FINISH_READ_TRANSACTION(true);
 
-       sqlite3_db_release_memory(local_db_handle);
+//     sqlite3_db_release_memory(local_db_handle);
 
 
        query_size = (10 * count) + strlen("mail_id IN ( )  ");
@@ -17183,9 +17231,15 @@ FINISH_OFF:
        return err;
 }
 
-INTERNAL_FUNC int emstorage_query_task(char *multi_user_name, const char *input_conditional_clause, const char *input_ordering_clause, email_task_t **output_task_list, int *output_task_count)
+INTERNAL_FUNC int emstorage_query_task(char *multi_user_name, 
+                                                                       const char *input_conditional_clause, 
+                                                                       const char *input_ordering_clause, 
+                                                                       email_task_t **output_task_list, 
+                                                                       int *output_task_count)
 {
-       EM_DEBUG_FUNC_BEGIN("input_conditional_clause[%p], input_ordering_clause [%p], output_task_list[%p], output_task_count[%d]", input_conditional_clause, input_ordering_clause, output_task_list, output_task_count);
+       EM_DEBUG_FUNC_BEGIN("input_conditional_clause[%p], input_ordering_clause [%p], "
+                                               "output_task_list[%p], output_task_count[%d]", 
+                                               input_conditional_clause, input_ordering_clause, output_task_list, output_task_count);
        int i = 0, count = 0, rc = -1;
        int cur_query = 0;
        int field_index = 0;
@@ -17202,7 +17256,8 @@ INTERNAL_FUNC int emstorage_query_task(char *multi_user_name, const char *input_
 
        local_db_handle = emstorage_get_db_connection(multi_user_name);
 
-       SNPRINTF_OFFSET(sql_query_string, cur_query, QUERY_SIZE, "SELECT COUNT(*) FROM mail_task_tbl %s", input_conditional_clause);
+       SNPRINTF_OFFSET(sql_query_string, cur_query, QUERY_SIZE, 
+                                       "SELECT COUNT(*) FROM mail_task_tbl %s", input_conditional_clause);
        EM_DEBUG_LOG_SEC("emstorage_query_mail_list : query[%s].", sql_query_string);
 
        EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
@@ -17220,7 +17275,8 @@ INTERNAL_FUNC int emstorage_query_task(char *multi_user_name, const char *input_
                goto FINISH_OFF;
        }
 
-       SNPRINTF_OFFSET(sql_query_string, cur_query, QUERY_SIZE, "SELECT %s FROM mail_task_tbl %s %s", field_list, input_conditional_clause, input_ordering_clause);
+       SNPRINTF_OFFSET(sql_query_string, cur_query, QUERY_SIZE, 
+                                       "SELECT %s FROM mail_task_tbl %s %s", field_list, input_conditional_clause, input_ordering_clause);
        EM_DEBUG_LOG_SEC("emstorage_query_mail_list : query[%s].", sql_query_string);
 
        EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
@@ -17233,7 +17289,7 @@ INTERNAL_FUNC int emstorage_query_task(char *multi_user_name, const char *input_
        EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {err = EMAIL_ERROR_DB_FAILURE;goto FINISH_OFF; },
                ("sqlite3_step fail:%d", rc));
 
-       if (rc == SQLITE_DONE)  {
+       if (rc == SQLITE_DONE) {
                EM_DEBUG_EXCEPTION("no task found...");
                err = EMAIL_ERROR_TASK_NOT_FOUND;
                count = 0;
@@ -17264,16 +17320,18 @@ INTERNAL_FUNC int emstorage_query_task(char *multi_user_name, const char *input_
        }
 
 FINISH_OFF:
+
        if (err == EMAIL_ERROR_NONE)  {
                if (output_task_list)
                        *output_task_list = task_item_from_tbl;
                *output_task_count = count;
+       } else {
+               for (i = 0; i < count; i++) {
+                       EM_SAFE_FREE(task_item_from_tbl[i].task_parameter);
+               }
+               EM_SAFE_FREE(task_item_from_tbl);
        }
-       else {
-                for (i = 0; i < count; i++) {
-                       EM_SAFE_FREE(task_item_from_tbl[i].task_parameter);
-                }
-        }
+
        if (hStmt != NULL)  {
                rc = sqlite3_finalize(hStmt);
                hStmt = NULL;
@@ -17283,7 +17341,6 @@ FINISH_OFF:
                }
        }
 
-
        EM_DEBUG_FUNC_END("err [%d]", err);
        return err;
 }
index 0e72485..52b41d1 100755 (executable)
@@ -217,6 +217,7 @@ struct _m_content_info
        int total_body_size;
        int total_attachment_size;
        int attachment_only;
+       int content_type; /* 1 : signed */
        char *sections;
 
        struct text_data 
@@ -339,7 +340,6 @@ INTERNAL_FUNC int   emcore_sync_flag_with_server(char *multi_user_name, int mail
 INTERNAL_FUNC int   emcore_sync_seen_flag_with_server(char *multi_user_name, int mail_ids[], int num, int event_handle, int *err_code);
 
 INTERNAL_FUNC int   emcore_set_flags_field(char *multi_user_name, int account_id, int mail_ids[], int num, email_flags_field_type field_type, int value, int *err_code);
-INTERNAL_FUNC char* emcore_convert_mutf7_to_utf8(char *mailbox_name); 
 INTERNAL_FUNC int   emcore_convert_string_to_structure(const char *encoded_string, void **struct_var, email_convert_struct_type_e type);
 INTERNAL_FUNC int   emcore_save_mail_file(char *multi_user_name, int account_id, int mail_id, int attachment_id, char *src_file_path, char *file_name, char *full_path, char *virtual_path, int *err_code);
 
index 18a1bce..3a6573f 100755 (executable)
@@ -76,7 +76,7 @@ INTERNAL_FUNC int emcore_get_first_address(const char *full_address, char **alia
 
 
 INTERNAL_FUNC int reg_replace (char *input_source_text, char *input_old_pattern_string, char *input_new_string);
-INTERNAL_FUNC int reg_replace_new (char **input_source_text, char *input_old_pattern_string, char *input_new_string);
+INTERNAL_FUNC char *reg_replace_new (char *input_source_text, char *input_old_pattern_string, char *input_new_string);
 int   emcore_strip_HTML_tag(const char *input_html_file_path, char *encoding_type, char *output_result_buffer, int input_result_buffer_legnth);
 int   emcore_send_noti_for_new_mail(int account_id, char *mailbox_name, char *subject, char *from, char *uid, char *datetime);
 int   emcore_make_attachment_file_name_with_extension(char *source_file_name, char *sub_type, char *result_file_name, int result_file_name_buffer_length, int *err_code);
index 326fd7e..742e918 100755 (executable)
@@ -851,11 +851,17 @@ INTERNAL_FUNC int emdaemon_query_smtp_mail_size_limit(char *multi_user_name, int
        }
 
        event_data = em_malloc(sizeof(email_event_t));
+       if (event_data == NULL) {
+               EM_DEBUG_EXCEPTION("em_malloc failed");
+               err = EMAIL_ERROR_OUT_OF_MEMORY;
+               goto FINISH_OFF;
+       }
+
        event_data->type = EMAIL_EVENT_QUERY_SMTP_MAIL_SIZE_LIMIT;
        event_data->event_param_data_1 = NULL;
        event_data->event_param_data_3 = NULL;
        event_data->account_id = account_id;
-   event_data->multi_user_name = EM_SAFE_STRDUP(multi_user_name);
+       event_data->multi_user_name = EM_SAFE_STRDUP(multi_user_name);
 
        if (!emcore_insert_event(event_data, (int*)handle, &err)) {
                EM_DEBUG_EXCEPTION(" emcore_insert_event falied [%d]", err);
index 67f3d97..51d0f00 100755 (executable)
@@ -542,7 +542,6 @@ static void* worker_event_queue(void *arg)
                                emcore_return_handle(started_event->handle);
                                EM_SAFE_FREE(started_event);
                        }
-                       em_flush_memory();
                }
        }
 
index 4f9f1a4..3352949 100755 (executable)
@@ -4,7 +4,7 @@
 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
 *
 * Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
-* 
+*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
@@ -728,8 +728,8 @@ INTERNAL_FUNC int emdaemon_core_init(int *err_code)
 
        emdaemon_init_alarm_data_list();
 
-        /* Openssl library init */
-        emcore_init_openssl_library();
+       /* Openssl library init */
+       emcore_init_openssl_library();
 
        if (err_code)
                *err_code = EMAIL_ERROR_NONE;
@@ -783,7 +783,7 @@ static int default_alarm_callback(int input_timer_id, void *user_parameter)
        int err = EMAIL_ERROR_NONE;
        email_alarm_data_t *alarm_data = NULL;
 
-       EM_DEBUG_ALARM_LOG("default_alarm_callback input_timer_id[%d]", input_timer_id);
+//     EM_DEBUG_ALARM_LOG("default_alarm_callback input_timer_id[%d]", input_timer_id);
 
        emdevice_set_sleep_on_off(STAY_AWAKE_FLAG_FOR_ALARM_CALLBACK, false, NULL);
 
index f39457e..aa2d318 100755 (executable)
@@ -1347,6 +1347,7 @@ INTERNAL_FUNC int emdaemon_send_mail_retry(char *multi_user_name, int mail_id, i
                if (retry_info == NULL) {
                        EM_DEBUG_EXCEPTION("em_malloc failed");
                        err = EMAIL_ERROR_OUT_OF_MEMORY;
+                       goto FINISH_OFF;
                }
 
                retry_info->mail_id = mail_id;
@@ -1567,11 +1568,13 @@ INTERNAL_FUNC int emdaemon_modify_seen_flag_of_thread(char *multi_user_name, int
        ret = true;
 
 FINISH_OFF:
+
        EM_SAFE_FREE(mail_list);
        EM_SAFE_FREE(mail_id_list);
 
        if (err_code)
                *err_code = err;
+
        EM_DEBUG_FUNC_END();
        return ret;
 }
index 95ec925..783d05a 100755 (executable)
@@ -1185,8 +1185,10 @@ FINISH_OFF:
                EM_DEBUG_EXCEPTION("emipc_execute_stub_api failed");
        }
 
-       if (rule)
+       if (rule) {
                emcore_free_rule(rule);
+               free(rule);
+       }
 
        EM_SAFE_FREE(local_rule_stream);        
     EM_SAFE_FREE(multi_user_name);
@@ -1383,14 +1385,13 @@ void stb_move_all_mails(HIPC_API a_hAPI)
 
        if(emdaemon_move_mail_all_mails(multi_user_name, src_mailbox_id, dst_mailbox_id, &err))
                EM_DEBUG_LOG("emdaemon_move_mail_all_mails:Success");
+
        if(!emipc_add_parameter(a_hAPI, ePARAMETER_OUT, &err, sizeof(int))) {
                EM_DEBUG_EXCEPTION("emipc_add_parameter failed ");
-               return;
        }
 
        if (!emipc_execute_stub_api(a_hAPI)) {
                EM_DEBUG_EXCEPTION("emipc_execute_stub_api failed");
-               return;
        }
 
     EM_SAFE_FREE(multi_user_name);
@@ -1637,8 +1638,6 @@ FINISH_OFF:
 
        emstorage_free_meeting_request(&result_meeting_request);
 
-       em_flush_memory();
-
     EM_SAFE_FREE(multi_user_name);
        EM_DEBUG_FUNC_END();
 }
@@ -1811,8 +1810,6 @@ FINISH_OFF:
 
        emstorage_free_meeting_request(&result_meeting_request);
 
-       em_flush_memory();
-
     EM_SAFE_FREE(multi_user_name);
        EM_DEBUG_FUNC_END();
 }
@@ -1958,7 +1955,7 @@ void stb_expunge_mails_deleted_flagged(HIPC_API a_hAPI)
 
     if ((err = emcore_get_user_name(nAPPID, &multi_user_name)) != EMAIL_ERROR_NONE) {
         EM_DEBUG_EXCEPTION("emcore_get_user_info failed : [%d]", err);
-        multi_user_name = NULL;
+               multi_user_name = NULL;
     }
 
        emipc_get_parameter(a_hAPI, ePARAMETER_IN, 0, sizeof(int), (void*)&mailbox_id);
@@ -1972,17 +1969,14 @@ void stb_expunge_mails_deleted_flagged(HIPC_API a_hAPI)
 
        if(!emipc_add_parameter(a_hAPI, ePARAMETER_OUT, &err, sizeof(int))) {
                EM_DEBUG_EXCEPTION("emipc_add_parameter fail");
-               return;
        }
 
        if(!emipc_add_parameter(a_hAPI, ePARAMETER_OUT, &handle, sizeof(int))) {
                EM_DEBUG_LOG("ipcAPI_AddParameter local_result failed ");
-               return;
        }
 
        if (!emipc_execute_stub_api(a_hAPI)) {
                EM_DEBUG_EXCEPTION("emipc_execute_stub_api fail");
-               return;
        }
 
     EM_SAFE_FREE(multi_user_name);
@@ -2641,13 +2635,13 @@ void stb_add_account_with_validation(HIPC_API a_hAPI)
        /* get account info */
        buffer_size = emipc_get_nth_parameter_length(a_hAPI, ePARAMETER_IN, 0);
        EM_DEBUG_LOG("size [%d]", buffer_size);
-       if (buffer_size <= 0) {
+       if(buffer_size <= 0) {
                err = EMAIL_ERROR_INVALID_PARAM;
                goto FINISH_OFF;
        }
 
-       stream = (char *)emipc_get_nth_parameter_data(a_hAPI, ePARAMETER_IN, 0);
-       if (!stream) {
+       stream =(char*) emipc_get_nth_parameter_data(a_hAPI, ePARAMETER_IN, 0);
+       if(!stream) {
                err = EMAIL_ERROR_INVALID_PARAM;
                goto FINISH_OFF;
        }
@@ -3407,7 +3401,6 @@ FINISH_OFF:
        if (!emipc_execute_stub_api(a_hAPI))
                EM_DEBUG_EXCEPTION("emipc_execute_stub_api failed");
 
-       em_flush_memory();
        EM_DEBUG_FUNC_END("err [%d]", err);
 }
 
@@ -3817,7 +3810,7 @@ void stb_get_user_name(HIPC_API a_hAPI)
         EM_DEBUG_LOG("Domain name : [%s]", user_name);
 
         if (!emipc_add_parameter(a_hAPI, ePARAMETER_OUT, &err, sizeof(int))) 
-                       EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
+                EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
 
                if (user_name) {
                        if (!emipc_add_parameter(a_hAPI, ePARAMETER_OUT, user_name, EM_SAFE_STRLEN(user_name) + 1)) 
index c4532f7..184930d 100755 (executable)
@@ -252,7 +252,10 @@ EXPORT_API int emipc_execute_proxy_task(email_task_type_t input_task_type, void
        emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
 
 FINISH_OFF:
-       if(hAPI)
+
+       EM_SAFE_FREE(task_parameter_stream);
+
+       if (hAPI)
                emipc_destroy_email_api(hAPI);
 
        EM_DEBUG_FUNC_END("err [%d]", err);
index 23d68bc..584fdff 100755 (executable)
@@ -35,6 +35,7 @@
 #include <glib.h>
 #include <pthread.h>
 #include <sys/types.h>
+#include <sys/epoll.h>
 #include <unistd.h>
 
 typedef struct {
@@ -90,16 +91,16 @@ EXPORT_API bool emipc_end_proxy_socket()
 
        ENTER_CRITICAL_SECTION(proxy_mutex);
        GList *cur = socket_head;
-       while( cur ) {
+       while (cur) {
                thread_socket_t* cur_socket = g_list_nth_data(cur,0);
 
                /* close the socket of current thread */
-               if( tid == cur_socket->tid ) {
+               if (tid == cur_socket->tid) {
                        emipc_close_email_socket(&cur_socket->socket_fd);
                        EM_SAFE_FREE(cur_socket);
                        GList *del = cur;
                        cur = g_list_next(cur);
-                       socket_head = g_list_remove_link(socket_head, del);
+                       socket_head = g_list_delete_link(socket_head, del);
                        break;
                }
 
@@ -128,12 +129,14 @@ EXPORT_API bool emipc_end_all_proxy_sockets()
                        EM_SAFE_FREE(cur_socket);
                        GList *del = cur;
                        cur = g_list_next(cur);
-                       socket_head = g_list_remove_link(socket_head, del);
+                       socket_head = g_list_delete_link(socket_head, del);
                        continue;
                }
 
                cur = g_list_next(cur);
        }
+       g_list_free(socket_head);
+       socket_head = NULL;
        LEAVE_CRITICAL_SECTION(proxy_mutex);
 
        return true;
@@ -190,16 +193,19 @@ EXPORT_API int emipc_get_proxy_socket_id()
 /* return true, when event occurred
  * false, when select error
  */
+
+#define MAX_PROXY_EPOLL_EVENT 100
+
 static bool wait_for_reply (int fd)
 {
-       int err = -1;
-       fd_set fds;
-       struct timeval tv;
-
        if (fd < 0) {
                EM_DEBUG_EXCEPTION("Invalid file description : [%d]", fd);
                return false;
        }
+#if 0
+       int err = -1;
+       fd_set fds;
+       struct timeval tv;
 
        FD_ZERO(&fds);
        FD_SET(fd, &fds);
@@ -219,8 +225,54 @@ static bool wait_for_reply (int fd)
        }
 
        if (FD_ISSET(fd, &fds)) return true;
+#endif
+
+       int i = 0;
+       int ret = false;
+       int proxy_epfd = -1;
+       int event_num = 0;
+       int timeout = 20000; /* 20 seconds */
+       char errno_buf[ERRNO_BUF_SIZE] = {0};
+       struct epoll_event proxy_ev = {0};
+       struct epoll_event proxy_ev_events[MAX_PROXY_EPOLL_EVENT] = {{0}, };
+
+       proxy_epfd = epoll_create(MAX_PROXY_EPOLL_EVENT);
+       if (proxy_epfd < 0) {
+               EM_DEBUG_EXCEPTION("epoll_create failed : [%d][%s]", errno, EM_STRERROR(errno_buf));
+               goto FINISH_OFF;
+       }
+
+       proxy_ev.data.fd = fd;
+       proxy_ev.events = EPOLLIN | EPOLLONESHOT;
+
+       if (epoll_ctl(proxy_epfd, EPOLL_CTL_ADD, fd, &proxy_ev) == -1) {
+               EM_DEBUG_EXCEPTION("epoll_ctl wait : [%d][%s]", errno, EM_STRERROR(errno_buf));
+               goto FINISH_OFF;
+       }
+
+       EM_DEBUG_LOG("Wait for response poll_fd:[%d], proxy_fd:[%d]", proxy_epfd, fd);
+       event_num = epoll_wait(proxy_epfd, proxy_ev_events, MAX_PROXY_EPOLL_EVENT, timeout);
+       if (event_num == -1) {
+               EM_DEBUG_EXCEPTION("epoll_wait failed : [%d][%s]", errno, EM_STRERROR(errno_buf));
+               goto FINISH_OFF;
+       } else if (event_num == 0) {
+               EM_DEBUG_EXCEPTION("Occured timeout proxy_fd[%d]", fd);
+               goto FINISH_OFF;
+       } else {
+               for (i = 0; i < event_num; i++) {
+                       if (proxy_ev_events[i].events & EPOLLIN) {
+                               EM_DEBUG_LOG("Received event to stub");
+                               ret = true;
+                       } 
+               }
+       }
+
+FINISH_OFF:
+
+       if (proxy_epfd >= 0)
+               close(proxy_epfd);
 
-       return false;
+       return ret;
 }
 
 
@@ -235,7 +287,7 @@ EXPORT_API int emipc_recv_proxy_socket(char **data)
                return EMAIL_ERROR_IPC_SOCKET_FAILURE;
        }
 
-       if( !wait_for_reply(socket_fd) ) {
+       if (!wait_for_reply(socket_fd)) {
                return EMAIL_ERROR_IPC_SOCKET_FAILURE;
        }
 
index 32219c3..af15c2a 100755 (executable)
@@ -45,8 +45,8 @@
 #include "email-core-utils.h"
 #include "email-core-mime.h"
 
-#define MAIL_TEMP_BODY "/tmp/utf8"
-#define HTML_TEMP_BODY "/tmp/utf8.htm"
+#define MAIL_TEMP_BODY "/tmp/utf-8"
+#define HTML_TEMP_BODY "/tmp/utf-8.htm"
 
 /*
 static void testapp_test_print_sorting_menu()