4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
26 * This file contains the data structures and interfaces needed for application,
27 * to interact with email-service.
28 * @file email-api-mail.c
29 * @brief This file contains the data structures and interfaces of Message related Functionality provided by
37 #include "email-ipc.h"
38 #include "email-api-init.h"
39 #include "email-api-mailbox.h"
40 #include "email-api-private.h"
41 #include "email-convert.h"
42 #include "email-core-tasks.h"
43 #include "email-core-utils.h"
44 #include "email-core-mail.h"
45 #include "email-core-smtp.h"
46 #include "email-core-account.h"
47 #include "email-core-task-manager.h"
48 #include "email-storage.h"
49 #include "email-core-signal.h"
50 #include "email-utilities.h"
51 #include "email-core-smime.h"
53 #define DIR_SEPERATOR_CH '/'
57 #define MAX_SEARCH_LEN 1000
59 EXPORT_API int email_add_mail(email_mail_data_t *input_mail_data, email_attachment_data_t *input_attachment_data_list, int input_attachment_count, email_meeting_request_t* input_meeting_request, int input_from_eas)
61 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
62 EM_DEBUG_API_BEGIN("input_mail_data[%p] input_attachment_data_list[%p] input_attachment_count[%d] input_meeting_request[%p] input_from_eas[%d]", input_mail_data, input_attachment_data_list, input_attachment_count, input_meeting_request, input_from_eas);
64 EM_IF_NULL_RETURN_VALUE(input_mail_data, EMAIL_ERROR_INVALID_PARAM);
65 EM_IF_NULL_RETURN_VALUE(input_mail_data->account_id, EMAIL_ERROR_INVALID_PARAM);
66 EM_IF_NULL_RETURN_VALUE(input_mail_data->mailbox_id, EMAIL_ERROR_INVALID_PARAM);
68 if (input_attachment_count > 0 && !input_attachment_data_list) {
70 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
71 return EMAIL_ERROR_INVALID_PARAM;
75 int err = EMAIL_ERROR_NONE;
76 int *ret_nth_value = NULL;
78 char *rfc822_file = NULL;
79 char *multi_user_name = NULL;
80 char *mail_data_stream = NULL;
81 char *attachment_data_list_stream = NULL;
82 char *meeting_request_stream = NULL;
85 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
87 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
92 if (input_from_eas == 0) { /* native emails */
93 if ((input_mail_data->smime_type != EMAIL_SMIME_NONE) && (input_mail_data->mailbox_type != EMAIL_MAILBOX_TYPE_DRAFT)) {
95 if (!emcore_make_rfc822_file(multi_user_name, input_mail_data, input_attachment_data_list, input_attachment_count, true, &rfc822_file, &err)) {
96 EM_DEBUG_EXCEPTION("emcore_make_rfc822_file failed [%d]", err);
99 input_mail_data->file_path_mime_entity = EM_SAFE_STRDUP(emcore_set_mime_entity(rfc822_file));
101 emstorage_delete_file(rfc822_file, NULL);
102 EM_SAFE_FREE(rfc822_file);
106 hAPI = emipc_create_email_api(_EMAIL_API_ADD_MAIL);
109 /* LCOV_EXCL_START */
110 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
111 err = EMAIL_ERROR_NULL_VALUE;
116 /* email_mail_data_t */
117 mail_data_stream = em_convert_mail_data_to_byte_stream(input_mail_data, &size);
119 if (!mail_data_stream) {
120 /* LCOV_EXCL_START */
121 EM_DEBUG_EXCEPTION("em_convert_mail_data_to_byte_stream failed");
122 err = EMAIL_ERROR_NULL_VALUE;
127 if (!emipc_add_dynamic_parameter(hAPI, ePARAMETER_IN, mail_data_stream, size))
128 /* LCOV_EXCL_START */
129 EM_DEBUG_EXCEPTION("emipc_add_dynamic_parameter failed");
132 /* email_attachment_data_t */
133 attachment_data_list_stream = em_convert_attachment_data_to_byte_stream(input_attachment_data_list, input_attachment_count, &size);
135 if ((size > 0) && !emipc_add_dynamic_parameter(hAPI, ePARAMETER_IN, attachment_data_list_stream, size)) {
136 /* LCOV_EXCL_START */
137 EM_DEBUG_EXCEPTION("emipc_add_dynamic_parameter failed");
138 err = EMAIL_ERROR_OUT_OF_MEMORY;
143 /* email_meeting_request_t */
144 if (input_mail_data->meeting_request_status != EMAIL_MAIL_TYPE_NORMAL) {
145 /* LCOV_EXCL_START */
146 meeting_request_stream = em_convert_meeting_req_to_byte_stream(input_meeting_request, &size);
148 if (!meeting_request_stream) {
149 EM_DEBUG_EXCEPTION("em_convert_meeting_req_to_byte_stream failed");
150 err = EMAIL_ERROR_NULL_VALUE;
153 if (!emipc_add_dynamic_parameter(hAPI, ePARAMETER_IN, meeting_request_stream, size))
154 EM_DEBUG_EXCEPTION("emipc_add_dynamic_parameter failed");
159 if (emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_from_eas, sizeof(int)) == false)
160 /* LCOV_EXCL_START */
161 EM_DEBUG_EXCEPTION("emipc_add_parameter() failed");
165 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
166 /* LCOV_EXCL_START */
167 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
168 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
173 /* get result from service */
174 if ((ret_nth_value = (int*)emipc_get_nth_parameter_data(hAPI, ePARAMETER_OUT, 0))) {
175 err = *ret_nth_value;
177 if (err == EMAIL_ERROR_NONE) {
178 if ((ret_nth_value = (int *)emipc_get_nth_parameter_data(hAPI, ePARAMETER_OUT, 1))) {
179 input_mail_data->mail_id = *ret_nth_value;
181 /* LCOV_EXCL_START */
182 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
187 if ((ret_nth_value = (int *)emipc_get_nth_parameter_data(hAPI, ePARAMETER_OUT, 2))) {
188 input_mail_data->thread_id = *ret_nth_value;
190 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
195 /* LCOV_EXCL_START */
196 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
200 } else { /* take care of mails from eas */
201 /* LCOV_EXCL_START */
202 err = emcore_add_mail(multi_user_name, input_mail_data, input_attachment_data_list, input_attachment_count, input_meeting_request, input_from_eas, false);
203 if (err != EMAIL_ERROR_NONE) {
204 EM_DEBUG_EXCEPTION("emcore_add_mail failed [%d]", err);
209 /* LCOV_EXCL_START */
213 emipc_destroy_email_api(hAPI);
215 EM_SAFE_FREE(multi_user_name);
216 EM_DEBUG_API_END("err[%d]", err);
220 /* LCOV_EXCL_START */
221 EXPORT_API int email_add_read_receipt(int input_read_mail_id, int *output_receipt_mail_id)
223 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
224 EM_DEBUG_API_BEGIN("input_read_mail_id[%d] output_receipt_mail_id[%p]", input_read_mail_id, output_receipt_mail_id);
226 EM_IF_NULL_RETURN_VALUE(output_receipt_mail_id, EMAIL_ERROR_INVALID_PARAM);
228 int err = EMAIL_ERROR_NONE;
229 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_ADD_READ_RECEIPT);
231 EM_IF_NULL_RETURN_VALUE(hAPI, EMAIL_ERROR_NULL_VALUE);
233 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, &input_read_mail_id, sizeof(int))) {
234 EM_DEBUG_EXCEPTION("Add Param mail body Fail");
235 EM_PROXY_IF_NULL_RETURN_VALUE(0, hAPI, EMAIL_ERROR_NULL_VALUE);
239 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
240 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
241 EM_PROXY_IF_NULL_RETURN_VALUE(0, hAPI, EMAIL_ERROR_IPC_SOCKET_FAILURE);
244 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
246 EM_DEBUG_LOG("err [%d]", err);
248 if (err == EMAIL_ERROR_NONE) {
249 /* Get receipt mail id */
250 emipc_get_parameter(hAPI, ePARAMETER_OUT, 1, sizeof(int), output_receipt_mail_id);
251 EM_DEBUG_LOG("output_receipt_mail_id [%d]", *output_receipt_mail_id);
254 emipc_destroy_email_api(hAPI);
258 EM_DEBUG_API_END("err[%d]", err);
263 #define TMP_BODY_PATH "/tmp/UTF-8"
264 EXPORT_API int email_create_db_full()
266 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
267 int mailbox_index, mail_index, mailbox_count, mail_slot_size;
269 emstorage_mail_tbl_t mail_table_data = {0};
270 email_mailbox_t *mailbox_list = NULL;
271 int err = EMAIL_ERROR_NONE;
273 FILE *body_file = NULL;
275 if ((err = email_open_db()) != EMAIL_ERROR_NONE) {
276 EM_DEBUG_EXCEPTION("email_open_db failed [%d]", err);
280 if ((err = emcore_load_default_account_id(NULL, &account_id)) != EMAIL_ERROR_NONE) {
281 EM_DEBUG_EXCEPTION("emcore_load_default_account_id failed : [%d]", err);
285 err = em_fopen(TMP_BODY_PATH, "w", &body_file);
286 if (err != EMAIL_ERROR_NONE) {
287 EM_DEBUG_EXCEPTION("em_fopen failed : [%s][%d]", TMP_BODY_PATH, err);
291 for (i = 0; i < 10; i++)
292 fprintf(body_file, "Dummy test. [line:%d]\n", i);
297 mail_table_data.subject = (char*) em_malloc(50);
298 mail_table_data.full_address_from = strdup("<dummy_from@nowhere.com>");
299 mail_table_data.full_address_to = strdup("<dummy_to@nowhere.com>");
300 mail_table_data.account_id = account_id;
301 mail_table_data.file_path_plain = strdup(TMP_BODY_PATH);
302 mail_table_data.body_download_status = 1;
304 if ((err = email_get_mailbox_list_ex(1, -1, 0, &mailbox_list, &mailbox_count)) < EMAIL_ERROR_NONE) {
305 EM_DEBUG_EXCEPTION("email_get_mailbox_list_ex failed [%d]", err);
308 for (mailbox_index = 0; mailbox_index < mailbox_count; mailbox_index++) {
309 mail_slot_size = mailbox_list[mailbox_index].mail_slot_size;
310 for (mail_index = 0; mail_index < mail_slot_size; mail_index++) {
311 snprintf(mail_table_data.subject, 50,"Subject #%d", mail_index);
312 mail_table_data.mailbox_id = mailbox_list[mailbox_index].mailbox_id;
313 mail_table_data.mailbox_type = mailbox_list[mailbox_index].mailbox_type;
315 if (!emstorage_add_mail(NULL, &mail_table_data, 1, true, &err)) {
316 EM_DEBUG_EXCEPTION("emstorage_add_mail failed [%d]", err);
322 if ((err = email_close_db()) != EMAIL_ERROR_NONE) {
323 EM_DEBUG_EXCEPTION("email_close_db failed [%d]", err);
326 if (body_file) fclose(body_file); /*prevent 39446*/
329 email_free_mailbox(&mailbox_list, mailbox_count);
331 EM_SAFE_FREE(mail_table_data.subject);
332 EM_SAFE_FREE(mail_table_data.full_address_from);
333 EM_SAFE_FREE(mail_table_data.full_address_to);
334 EM_SAFE_FREE(mail_table_data.file_path_plain);
339 EXPORT_API int email_update_mail(email_mail_data_t *input_mail_data, email_attachment_data_t *input_attachment_data_list, int input_attachment_count, email_meeting_request_t* input_meeting_request, int input_from_eas)
341 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
342 EM_DEBUG_API_BEGIN("input_mail_data[%p] input_attachment_data_list[%p] input_attachment_count[%d] input_meeting_request[%p] input_from_eas[%d]", input_mail_data, input_attachment_data_list, input_attachment_count, input_meeting_request, input_from_eas);
344 EM_IF_NULL_RETURN_VALUE(input_mail_data, EMAIL_ERROR_INVALID_PARAM);
345 EM_IF_NULL_RETURN_VALUE(input_mail_data->account_id, EMAIL_ERROR_INVALID_PARAM);
347 if (input_attachment_count > 0 && !input_attachment_data_list) {
348 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
349 return EMAIL_ERROR_INVALID_PARAM;
352 int err = EMAIL_ERROR_NONE;
354 char *mail_data_stream = NULL;
355 char *attachment_data_list_stream = NULL;
356 char *meeting_request_stream = NULL;
358 HIPC_API hAPI = NULL;
360 if (input_from_eas == 0) {
361 hAPI = emipc_create_email_api(_EMAIL_API_UPDATE_MAIL);
364 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
365 err = EMAIL_ERROR_NULL_VALUE;
369 /* email_mail_data_t */
370 mail_data_stream = em_convert_mail_data_to_byte_stream(input_mail_data, &size);
372 if (!mail_data_stream) {
373 EM_DEBUG_EXCEPTION("em_convert_mail_data_to_byte_stream failed");
374 err = EMAIL_ERROR_NULL_VALUE;
378 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, mail_data_stream, size)) {
379 EM_DEBUG_EXCEPTION("emipc_add_parameter for head failed");
380 err = EMAIL_ERROR_OUT_OF_MEMORY;
384 /* email_attachment_data_t */
385 attachment_data_list_stream = em_convert_attachment_data_to_byte_stream(input_attachment_data_list, input_attachment_count, &size);
386 if ((size > 0) && !emipc_add_dynamic_parameter(hAPI, ePARAMETER_IN, attachment_data_list_stream, size)) {
387 EM_DEBUG_EXCEPTION("emipc_add_dynamic_parameter failed");
388 err = EMAIL_ERROR_OUT_OF_MEMORY;
392 /* email_meeting_request_t */
393 if (input_mail_data->meeting_request_status != EMAIL_MAIL_TYPE_NORMAL) {
394 meeting_request_stream = em_convert_meeting_req_to_byte_stream(input_meeting_request, &size);
396 if (!meeting_request_stream) {
397 EM_DEBUG_EXCEPTION("em_convert_meeting_req_to_byte_stream failed");
398 err = EMAIL_ERROR_NULL_VALUE;
402 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, meeting_request_stream, size)) {
403 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
404 err = EMAIL_ERROR_OUT_OF_MEMORY;
410 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_from_eas, sizeof(int))) {
411 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
412 err = EMAIL_ERROR_OUT_OF_MEMORY;
417 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
418 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
419 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
423 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
425 if (err == EMAIL_ERROR_NONE) {
426 emipc_get_parameter(hAPI, ePARAMETER_OUT, 1, sizeof(int), &input_mail_data->mail_id);
427 emipc_get_parameter(hAPI, ePARAMETER_OUT, 2, sizeof(int), &input_mail_data->thread_id);
430 if ((err = emcore_update_mail(NULL, input_mail_data, input_attachment_data_list, input_attachment_count, input_meeting_request, input_from_eas)) != EMAIL_ERROR_NONE) {
431 EM_DEBUG_EXCEPTION("emcore_update_mail failed [%d]", err);
438 emipc_destroy_email_api(hAPI);
440 EM_SAFE_FREE(mail_data_stream);
442 EM_DEBUG_API_END("err[%d]", err);
446 EXPORT_API int email_update_mail_attribute(int input_account_id, int *input_mail_id_array, int input_mail_id_count, email_mail_attribute_type input_attribute_type, email_mail_attribute_value_t input_value)
448 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
449 EM_DEBUG_API_BEGIN("input_account_id[%d] input_mail_id_array[%p] input_mail_id_count[%d] input_attribute_type[%d]", input_account_id, input_mail_id_array, input_mail_id_count, input_attribute_type);
451 int err = EMAIL_ERROR_NONE;
452 task_parameter_EMAIL_SYNC_TASK_UPDATE_ATTRIBUTE task_parameter;
453 email_mail_attribute_value_type value_type;
455 if (input_mail_id_count <= 0 || input_mail_id_array == NULL) {
456 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
457 err = EMAIL_ERROR_INVALID_PARAM;
461 if ((err = emcore_get_mail_attribute_value_type(input_attribute_type, &value_type)) != EMAIL_ERROR_NONE) {
462 EM_DEBUG_EXCEPTION("emcore_get_mail_attribute_value_type failed [%d]", err);
466 task_parameter.account_id = input_account_id;
467 task_parameter.mail_id_count = input_mail_id_count;
468 task_parameter.mail_id_array = input_mail_id_array;
469 task_parameter.attribute_type = input_attribute_type;
470 task_parameter.value = input_value;
472 if (value_type == EMAIL_MAIL_ATTRIBUTE_VALUE_TYPE_STRING)
473 task_parameter.value_length = EM_SAFE_STRLEN(input_value.string_type_value);
475 task_parameter.value_length = 4;
477 if ((err = emipc_execute_proxy_task(EMAIL_SYNC_TASK_UPDATE_ATTRIBUTE, &task_parameter)) != EMAIL_ERROR_NONE) {
478 EM_DEBUG_EXCEPTION("execute_proxy_task failed [%d]", err);
484 EM_DEBUG_API_END("err[%d]", err);
487 EXPORT_API int email_clear_mail_data()
489 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
490 EM_DEBUG_API_BEGIN();
491 int err = EMAIL_ERROR_NONE;
493 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_CLEAR_DATA);
495 EM_IF_NULL_RETURN_VALUE(hAPI, EMAIL_ERROR_NULL_VALUE);
497 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
498 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api Fail");
499 EM_PROXY_IF_NULL_RETURN_VALUE(0, hAPI, EMAIL_ERROR_IPC_SOCKET_FAILURE);
501 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
504 emipc_destroy_email_api(hAPI);
506 EM_DEBUG_API_END("err[%d]", err);
511 EXPORT_API int email_count_mail(email_list_filter_t *input_filter_list, int input_filter_count, int *output_total_mail_count, int *output_unseen_mail_count)
513 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
514 EM_DEBUG_API_BEGIN("input_filter_list[%p] input_filter_count[%d] output_total_mail_count[%p] output_unseen_mail_count[%p]", input_filter_list, input_filter_count, output_total_mail_count, output_unseen_mail_count);
518 int err = EMAIL_ERROR_NONE;
519 char *multi_user_name = NULL;
520 char *conditional_clause_string = NULL;
522 EM_IF_NULL_RETURN_VALUE(input_filter_list, EMAIL_ERROR_INVALID_PARAM);
523 EM_IF_NULL_RETURN_VALUE(input_filter_count, EMAIL_ERROR_INVALID_PARAM);
524 EM_IF_NULL_RETURN_VALUE(output_total_mail_count, EMAIL_ERROR_INVALID_PARAM);
525 EM_IF_NULL_RETURN_VALUE(output_unseen_mail_count, EMAIL_ERROR_INVALID_PARAM);
527 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
528 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
532 if ((err = emstorage_write_conditional_clause_for_getting_mail_list(multi_user_name, input_filter_list, input_filter_count, NULL, 0, -1, -1, &conditional_clause_string)) != EMAIL_ERROR_NONE) {
533 EM_DEBUG_EXCEPTION("emstorage_write_conditional_clause_for_getting_mail_list failed[%d]", err);
537 if ((err = emstorage_query_mail_count(multi_user_name, conditional_clause_string, true, &total_count, &unread)) != EMAIL_ERROR_NONE) {
538 EM_DEBUG_EXCEPTION("emstorage_query_mail_count failed [%d]", err);
542 *output_total_mail_count = total_count;
543 *output_unseen_mail_count = unread;
547 EM_SAFE_FREE(multi_user_name);
548 EM_SAFE_FREE(conditional_clause_string); /* detected by valgrind */
549 EM_DEBUG_API_END("err[%d]", err);
554 EXPORT_API int email_delete_mail(int input_mailbox_id, int *input_mail_ids, int input_num, int input_from_server)
556 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
557 EM_DEBUG_API_BEGIN("input_mailbox_id[%d] input_mail_ids[%p] input_num[%d] input_from_server[%d]", input_mailbox_id, input_mail_ids, input_num, input_from_server);
559 int err = EMAIL_ERROR_NONE;
560 HIPC_API hAPI = NULL;
562 EM_IF_NULL_RETURN_VALUE(input_mail_ids, EMAIL_ERROR_INVALID_PARAM);
564 if (input_mailbox_id <= 0) {
565 EM_DEBUG_EXCEPTION("input_mailbox_id = %d", input_mailbox_id);
566 err = EMAIL_ERROR_INVALID_PARAM;
570 if (input_num <= 0) {
571 EM_DEBUG_EXCEPTION("input_num = %d", input_num);
572 err = EMAIL_ERROR_INVALID_PARAM;
576 hAPI = emipc_create_email_api(_EMAIL_API_DELETE_MAIL);
579 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
580 err = EMAIL_ERROR_NULL_VALUE;
585 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_mailbox_id, sizeof(int))) {
586 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
587 err = EMAIL_ERROR_OUT_OF_MEMORY;
591 /* Number of mail_ids */
592 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_num, sizeof(int))) {
593 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
594 err = EMAIL_ERROR_OUT_OF_MEMORY;
598 /* set of mail_ids */
599 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)input_mail_ids, input_num * sizeof(int))) {
600 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
601 err = EMAIL_ERROR_OUT_OF_MEMORY;
606 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_from_server, sizeof(int))) {
607 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
608 err = EMAIL_ERROR_OUT_OF_MEMORY;
612 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
613 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
614 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
618 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
622 emipc_destroy_email_api(hAPI);
624 EM_DEBUG_API_END("err[%d]", err);
629 EXPORT_API int email_delete_all_mails_in_mailbox(int input_mailbox_id, int input_from_server)
631 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
632 EM_DEBUG_API_BEGIN("input_mailbox_id[%d] input_from_server[%d]", input_mailbox_id, input_from_server);
634 int err = EMAIL_ERROR_NONE;
635 HIPC_API hAPI = NULL;
637 if (input_mailbox_id <= 0) {
638 EM_DEBUG_EXCEPTION("input_mailbox_id = %d", input_mailbox_id);
639 err = EMAIL_ERROR_INVALID_PARAM;
643 hAPI = emipc_create_email_api(_EMAIL_API_DELETE_ALL_MAIL);
646 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
647 err = EMAIL_ERROR_NULL_VALUE;
651 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_mailbox_id, sizeof(int))) {
652 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
653 err = EMAIL_ERROR_OUT_OF_MEMORY;
657 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_from_server, sizeof(int))) {
658 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
659 err = EMAIL_ERROR_OUT_OF_MEMORY;
663 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
664 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
665 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
669 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
674 emipc_destroy_email_api(hAPI);
676 EM_DEBUG_API_END("err[%d]", err);
680 EXPORT_API int email_add_attachment(int mail_id, email_attachment_data_t* attachment)
682 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
683 EM_DEBUG_API_BEGIN("mail_id[%d] attachment[%p]", mail_id, attachment);
684 int err = EMAIL_ERROR_NONE;
685 char *attchment_stream = NULL;
687 HIPC_API hAPI = NULL;
689 EM_IF_NULL_RETURN_VALUE(mail_id, EMAIL_ERROR_INVALID_PARAM);
690 EM_IF_NULL_RETURN_VALUE(attachment, EMAIL_ERROR_INVALID_PARAM);
692 hAPI = emipc_create_email_api(_EMAIL_API_ADD_ATTACHMENT);
695 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
696 err = EMAIL_ERROR_NULL_VALUE;
701 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&mail_id, sizeof(int))) {
702 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
703 err = EMAIL_ERROR_OUT_OF_MEMORY;
708 attchment_stream = em_convert_attachment_data_to_byte_stream(attachment, 1, &size);
710 if (!attchment_stream) {
711 EM_DEBUG_EXCEPTION("em_convert_attachment_data_to_byte_stream failed");
712 err = EMAIL_ERROR_NULL_VALUE;
716 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, attchment_stream, size)) {
717 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
718 err = EMAIL_ERROR_OUT_OF_MEMORY;
723 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
724 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
725 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
729 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
731 if (EMAIL_ERROR_NONE == err) {
732 emipc_get_parameter(hAPI, ePARAMETER_OUT, 1, sizeof(int), &attachment->attachment_id);
736 EM_SAFE_FREE(attchment_stream);
739 emipc_destroy_email_api(hAPI);
741 EM_DEBUG_API_END("err[%d]", err);
746 EXPORT_API int email_delete_attachment(int attachment_id)
748 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
749 EM_DEBUG_API_BEGIN("attachment_id[%d]", attachment_id);
750 int err = EMAIL_ERROR_NONE;
751 HIPC_API hAPI = NULL;
753 EM_IF_NULL_RETURN_VALUE(attachment_id, EMAIL_ERROR_INVALID_PARAM);
755 hAPI = emipc_create_email_api(_EMAIL_API_DELETE_ATTACHMENT);
758 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
759 err = EMAIL_ERROR_NULL_VALUE;
763 /* attachment_index */
764 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&attachment_id, sizeof(int))) {
765 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
766 err = EMAIL_ERROR_OUT_OF_MEMORY;
771 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
772 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
773 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
777 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
781 emipc_destroy_email_api(hAPI);
783 EM_DEBUG_API_END("err[%d]", err);
787 /* -----------------------------------------------------------
789 -----------------------------------------------------------*/
791 EXPORT_API int email_query_mails(char *conditional_clause_string, email_mail_data_t** mail_list, int *result_count)
793 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
794 EM_DEBUG_API_BEGIN("conditional_clause_string[%s] mail_list[%p] result_count[%p]", conditional_clause_string, mail_list, result_count);
796 int err = EMAIL_ERROR_NONE;
797 char *multi_user_name = NULL;
798 emstorage_mail_tbl_t *result_mail_tbl = NULL;
800 EM_IF_NULL_RETURN_VALUE(result_count, EMAIL_ERROR_INVALID_PARAM);
801 EM_IF_NULL_RETURN_VALUE(conditional_clause_string, EMAIL_ERROR_INVALID_PARAM);
803 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
804 EM_DEBUG_EXCEPTION("emipc_get_user_name failed :[%d]", err);
808 if (!emstorage_query_mail_tbl(multi_user_name, conditional_clause_string, true, &result_mail_tbl, result_count, &err)) {
809 EM_DEBUG_EXCEPTION("emstorage_query_mail_list failed [%d]", err);
813 if (!em_convert_mail_tbl_to_mail_data(result_mail_tbl, *result_count, mail_list, &err)) {
814 EM_DEBUG_EXCEPTION("em_convert_mail_tbl_to_mail_data failed [%d]", err);
820 if (result_mail_tbl && !emstorage_free_mail(&result_mail_tbl, *result_count, NULL))
821 EM_DEBUG_EXCEPTION("emstorage_free_mail failed");
823 EM_SAFE_FREE(multi_user_name);
825 EM_DEBUG_API_END("err[%d]", err);
829 EXPORT_API int email_query_mail_list(char *input_conditional_clause_string, email_mail_list_item_t** output_mail_list, int *output_result_count)
831 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
832 EM_DEBUG_API_BEGIN("input_conditional_clause_string[%s] output_mail_list[%p] output_result_count[%p]", input_conditional_clause_string, output_mail_list, output_result_count);
834 int err = EMAIL_ERROR_NONE;
835 char *multi_user_name = NULL;
837 EM_IF_NULL_RETURN_VALUE(input_conditional_clause_string, EMAIL_ERROR_INVALID_PARAM);
838 EM_IF_NULL_RETURN_VALUE(output_result_count, EMAIL_ERROR_INVALID_PARAM);
840 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
841 EM_DEBUG_EXCEPTION("emipc_get_user_name failed :[%d]", err);
845 if (!emstorage_query_mail_list(multi_user_name, input_conditional_clause_string, true, output_mail_list, output_result_count, &err)) {
846 EM_DEBUG_EXCEPTION("emstorage_query_mail_list failed [%d]", err);
852 EM_SAFE_FREE(multi_user_name);
853 EM_DEBUG_API_END("err [%d]", err);
858 /* -----------------------------------------------------------
860 -----------------------------------------------------------*/
861 EXPORT_API int email_get_attachment_data(int attachment_id, email_attachment_data_t** attachment)
863 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
864 EM_DEBUG_API_BEGIN("attachment_id[%d] attachment[%p]", attachment_id, attachment);
866 int err = EMAIL_ERROR_NONE;
868 int attachment_count = 0;
869 char* attchment_stream = NULL;
870 email_attachment_data_t* attachment_data = NULL;
872 EM_IF_NULL_RETURN_VALUE(attachment_id, EMAIL_ERROR_INVALID_PARAM);
873 EM_IF_NULL_RETURN_VALUE(attachment, EMAIL_ERROR_INVALID_PARAM);
876 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_GET_ATTACHMENT);
878 EM_IF_NULL_RETURN_VALUE(hAPI, EMAIL_ERROR_NULL_VALUE);
881 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&attachment_id, sizeof(int))) {
882 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
883 err = EMAIL_ERROR_OUT_OF_MEMORY;
888 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
889 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
890 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
894 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
896 if (EMAIL_ERROR_NONE == err) {
897 nSize = emipc_get_parameter_length(hAPI, ePARAMETER_OUT, 1);
899 attchment_stream = (char*)em_malloc(nSize+1);
901 if (!attchment_stream) {
902 EM_DEBUG_EXCEPTION("em_malloc failed");
903 err = EMAIL_ERROR_OUT_OF_MEMORY;
907 emipc_get_parameter(hAPI, ePARAMETER_OUT, 1, nSize, attchment_stream);
908 em_convert_byte_stream_to_attachment_data(attchment_stream, nSize, &attachment_data, &attachment_count);
911 if (!attachment_data) {
912 EM_DEBUG_EXCEPTION("EMAIL_ERROR_NULL_VALUE");
913 err = EMAIL_ERROR_NULL_VALUE;
917 *attachment = attachment_data;
921 EM_SAFE_FREE(attchment_stream);
924 emipc_destroy_email_api(hAPI);
926 EM_DEBUG_API_END("err[%d]", err);
931 EXPORT_API int email_get_attachment_data_list(int input_mail_id, email_attachment_data_t **output_attachment_data, int *output_attachment_count)
933 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
934 EM_DEBUG_API_BEGIN("input_mail_id[%d] output_attachment_data[%p] output_attachment_count[%p]", input_mail_id, output_attachment_data, output_attachment_count);
935 int err = EMAIL_ERROR_NONE;
936 char *multi_user_name = NULL;
938 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
939 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
943 if ((err = emcore_get_attachment_data_list(multi_user_name, input_mail_id, output_attachment_data, output_attachment_count)) != EMAIL_ERROR_NONE) {
944 EM_DEBUG_EXCEPTION("emcore_get_attachment_data_list failed [%d]", err);
947 EM_SAFE_FREE(multi_user_name);
948 EM_DEBUG_API_END("err[%d]", err);
952 EXPORT_API int email_free_attachment_data(email_attachment_data_t **attachment_data_list, int attachment_data_count)
954 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
955 EM_DEBUG_FUNC_BEGIN("attachment_data_list[%p] attachment_data_count[%d]", attachment_data_list, attachment_data_count);
957 int err = EMAIL_ERROR_NONE;
959 emcore_free_attachment_data(attachment_data_list, attachment_data_count, &err);
961 EM_DEBUG_FUNC_END("err[%d]", err);
965 EXPORT_API int email_get_mail_list_ex(email_list_filter_t *input_filter_list, int input_filter_count, email_list_sorting_rule_t *input_sorting_rule_list, int input_sorting_rule_count, int input_start_index, int input_limit_count, email_mail_list_item_t** output_mail_list, int *output_result_count)
967 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
968 EM_DEBUG_FUNC_BEGIN("input_filter_list[%p] input_filter_count[%d] input_sorting_rule_list[%p] input_sorting_rule_count[%d] input_start_index[%d] input_limit_count[%d] output_mail_list[%p] output_result_count[%p]", input_filter_list, input_filter_count, input_sorting_rule_list, input_sorting_rule_count, input_start_index, input_limit_count, output_mail_list, output_result_count);
970 int err = EMAIL_ERROR_NONE;
971 char *multi_user_name = NULL;
972 char *conditional_clause_string = NULL;
974 EM_IF_NULL_RETURN_VALUE(output_mail_list, EMAIL_ERROR_INVALID_PARAM);
975 EM_IF_NULL_RETURN_VALUE(output_result_count, EMAIL_ERROR_INVALID_PARAM);
977 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
978 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
982 if ((err = emstorage_write_conditional_clause_for_getting_mail_list(multi_user_name, input_filter_list, input_filter_count, input_sorting_rule_list, input_sorting_rule_count, input_start_index, input_limit_count, &conditional_clause_string)) != EMAIL_ERROR_NONE) {
983 EM_DEBUG_EXCEPTION("emstorage_write_conditional_clause_for_getting_mail_list failed[%d]", err);
987 EM_DEBUG_LOG_DEV("conditional_clause_string[%s].", conditional_clause_string);
989 if (!emstorage_query_mail_list(multi_user_name, conditional_clause_string, true, output_mail_list, output_result_count, &err)) {
990 if (err != EMAIL_ERROR_MAIL_NOT_FOUND) /* there is no mail and it is definitely common */
991 EM_DEBUG_EXCEPTION("emstorage_query_mail_list [%d]", err);
997 EM_SAFE_FREE(conditional_clause_string);
998 EM_SAFE_FREE(multi_user_name);
1000 EM_DEBUG_FUNC_END("err[%d]", err);
1004 EXPORT_API int email_free_list_filter(email_list_filter_t **input_filter_list, int input_filter_count)
1006 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1007 EM_DEBUG_FUNC_BEGIN("input_filter_list[%p] input_filter_count[%d]", input_filter_list, input_filter_count);
1008 int err = EMAIL_ERROR_NONE;
1010 EM_IF_NULL_RETURN_VALUE(input_filter_list, EMAIL_ERROR_INVALID_PARAM);
1012 err = emstorage_free_list_filter(input_filter_list, input_filter_count);
1014 EM_DEBUG_FUNC_END("err[%d]", err);
1018 EXPORT_API int email_get_mails(int account_id , int mailbox_id, int thread_id, int start_index, int limit_count, email_sort_type_t sorting, email_mail_data_t** mail_list, int* result_count)
1020 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1021 EM_DEBUG_API_BEGIN("account_id[%d] mailbox_id[%d] thread_id[%d]", account_id, mailbox_id, thread_id);
1023 int err = EMAIL_ERROR_NONE;
1024 char *multi_user_name = NULL;
1025 emstorage_mail_tbl_t *mail_tbl_list = NULL;
1026 EM_IF_NULL_RETURN_VALUE(result_count, EMAIL_ERROR_INVALID_PARAM);
1028 if (account_id < ALL_ACCOUNT) {
1029 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1030 err = EMAIL_ERROR_INVALID_PARAM ;
1034 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1035 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1039 if (!emstorage_get_mails(multi_user_name, account_id, mailbox_id, NULL, thread_id, start_index, limit_count, sorting, true, &mail_tbl_list, result_count, &err)) {
1040 EM_DEBUG_EXCEPTION("emstorage_get_mails failed [%d]", err);
1044 if (!em_convert_mail_tbl_to_mail_data(mail_tbl_list, *result_count, mail_list, &err)) {
1045 EM_DEBUG_EXCEPTION("em_convert_mail_tbl_to_mail_data failed [%d]", err);
1051 if (mail_tbl_list && !emstorage_free_mail(&mail_tbl_list, *result_count, NULL))
1052 EM_DEBUG_EXCEPTION("emstorage_free_mail failed");
1054 EM_SAFE_FREE(multi_user_name);
1056 EM_DEBUG_API_END("err[%d]", err);
1060 EXPORT_API int email_get_mail_list(int account_id , int mailbox_id, int thread_id, int start_index, int limit_count, email_sort_type_t sorting, email_mail_list_item_t** mail_list, int* result_count)
1062 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1063 EM_DEBUG_API_BEGIN("account_id[%d] mailbox_id[%d] thread_id[%d]", account_id, mailbox_id, thread_id);
1065 int err = EMAIL_ERROR_NONE;
1066 char *multi_user_name = NULL;
1068 EM_IF_NULL_RETURN_VALUE(result_count, EMAIL_ERROR_INVALID_PARAM);
1070 if (account_id < ALL_ACCOUNT) {
1071 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1072 return EMAIL_ERROR_INVALID_PARAM;
1075 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1076 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1080 if (!emstorage_get_mail_list(multi_user_name, account_id, mailbox_id, NULL, thread_id, start_index, limit_count, 0, NULL, sorting, true, mail_list, result_count, &err)) {
1081 EM_DEBUG_EXCEPTION("emstorage_get_mail_list failed [%d]", err);
1087 EM_SAFE_FREE(multi_user_name);
1089 EM_DEBUG_API_END("err[%d]", err);
1093 EXPORT_API int email_get_mail_by_address(int account_id , int mailbox_id, email_email_address_list_t* addr_list,
1094 int start_index, int limit_count, int search_type, const char *search_value, email_sort_type_t sorting, email_mail_list_item_t** mail_list, int* result_count)
1096 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1097 EM_DEBUG_API_BEGIN("account_id[%d] mailbox_id[%d]", account_id, mailbox_id);
1098 int err = EMAIL_ERROR_NONE;
1099 char *multi_user_name = NULL;
1100 email_mail_list_item_t* mail_list_item = NULL;
1102 EM_IF_NULL_RETURN_VALUE(mail_list, EMAIL_ERROR_INVALID_PARAM);
1103 EM_IF_NULL_RETURN_VALUE(result_count, EMAIL_ERROR_INVALID_PARAM);
1105 if (account_id < ALL_ACCOUNT) {
1106 EM_DEBUG_EXCEPTION("Invalid account id param");
1107 err = EMAIL_ERROR_INVALID_PARAM ;
1111 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1112 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1116 if (!emstorage_get_mail_list(multi_user_name, account_id, mailbox_id, addr_list, EMAIL_LIST_TYPE_NORMAL, start_index, limit_count, search_type, search_value, sorting, true, &mail_list_item, result_count, &err)) {
1117 EM_DEBUG_EXCEPTION("emstorage_get_mail_list failed [%d]", err);
1121 *mail_list = mail_list_item;
1125 EM_SAFE_FREE(multi_user_name);
1127 EM_DEBUG_API_END("err[%d]", err);
1131 EXPORT_API int email_get_thread_information_by_thread_id(int thread_id, email_mail_data_t** thread_info)
1133 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1134 EM_DEBUG_API_BEGIN("thread_id[%d]", thread_id);
1135 int err = EMAIL_ERROR_NONE;
1136 char *multi_user_name = NULL;
1137 emstorage_mail_tbl_t *mail_table_data = NULL;
1139 EM_IF_NULL_RETURN_VALUE(thread_info, EMAIL_ERROR_INVALID_PARAM);
1141 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1142 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1146 if (!emstorage_get_thread_information(multi_user_name, thread_id, &mail_table_data , true, &err)) {
1147 EM_DEBUG_EXCEPTION("emstorage_get_thread_information failed [%d]", err);
1151 if (!em_convert_mail_tbl_to_mail_data(mail_table_data, 1, thread_info, &err)) {
1152 EM_DEBUG_EXCEPTION("em_convert_mail_tbl_to_mail_data failed [%d]", err);
1158 if (mail_table_data && !emstorage_free_mail(&mail_table_data, 1, NULL))
1159 EM_DEBUG_EXCEPTION("emstorage_free_mail failed");
1161 EM_SAFE_FREE(multi_user_name);
1163 EM_DEBUG_API_END("err[%d]", err);
1167 EXPORT_API int email_get_thread_information_ex(int thread_id, email_mail_list_item_t** thread_info)
1169 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1170 EM_DEBUG_API_BEGIN("thread_id[%d]", thread_id);
1171 int err = EMAIL_ERROR_NONE;
1172 char *multi_user_name = NULL;
1173 emstorage_mail_tbl_t *mail_table_data = NULL;
1174 email_mail_list_item_t *temp_thread_info = NULL;
1176 EM_IF_NULL_RETURN_VALUE(thread_info, EMAIL_ERROR_INVALID_PARAM);
1178 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1179 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1183 if (!emstorage_get_thread_information(multi_user_name, thread_id, &mail_table_data , true, &err)) {
1184 EM_DEBUG_EXCEPTION("emstorage_get_thread_information -- failed [%d]", err);
1188 temp_thread_info = em_malloc(sizeof(email_mail_list_item_t));
1190 if (!temp_thread_info) {
1191 EM_DEBUG_EXCEPTION("em_malloc failed");
1192 err = EMAIL_ERROR_OUT_OF_MEMORY;
1196 EM_SAFE_STRNCPY(temp_thread_info->full_address_from , mail_table_data->full_address_from, STRING_LENGTH_FOR_DISPLAY);
1197 EM_SAFE_STRNCPY(temp_thread_info->email_address_sender , mail_table_data->email_address_sender, MAX_EMAIL_ADDRESS_LENGTH);
1198 EM_SAFE_STRNCPY(temp_thread_info->email_address_recipient , mail_table_data->email_address_recipient, STRING_LENGTH_FOR_DISPLAY);
1199 EM_SAFE_STRNCPY(temp_thread_info->subject , mail_table_data->subject, STRING_LENGTH_FOR_DISPLAY);
1200 EM_SAFE_STRNCPY(temp_thread_info->preview_text , mail_table_data->preview_text, MAX_PREVIEW_TEXT_LENGTH);
1201 temp_thread_info->mail_id = mail_table_data->mail_id;
1202 temp_thread_info->mailbox_id = mail_table_data->mailbox_id;
1203 temp_thread_info->mailbox_type = mail_table_data->mailbox_type;
1204 temp_thread_info->account_id = mail_table_data->account_id;
1205 temp_thread_info->date_time = mail_table_data->date_time;
1206 temp_thread_info->body_download_status = mail_table_data->body_download_status;
1207 temp_thread_info->flags_seen_field = mail_table_data->flags_seen_field;
1208 temp_thread_info->priority = mail_table_data->priority;
1209 temp_thread_info->save_status = mail_table_data->save_status;
1210 temp_thread_info->lock_status = mail_table_data->lock_status;
1211 temp_thread_info->report_status = mail_table_data->report_status;
1212 temp_thread_info->attachment_count = mail_table_data->attachment_count;
1213 temp_thread_info->DRM_status = mail_table_data->DRM_status;
1214 temp_thread_info->thread_id = mail_table_data->thread_id;
1215 temp_thread_info->thread_item_count = mail_table_data->thread_item_count;
1216 temp_thread_info->meeting_request_status = mail_table_data->meeting_request_status;
1218 *thread_info = temp_thread_info;
1222 if (mail_table_data)
1223 emstorage_free_mail(&mail_table_data, 1, NULL);
1225 EM_SAFE_FREE(multi_user_name);
1227 EM_DEBUG_API_END("err[%d]", err);
1231 EXPORT_API int email_get_mail_data(int input_mail_id, email_mail_data_t **output_mail_data)
1233 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1234 EM_DEBUG_API_BEGIN("input_mail_id[%d]", input_mail_id);
1235 int err = EMAIL_ERROR_NONE;
1236 char *multi_user_name = NULL;
1238 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1239 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1243 if (((err = emcore_get_mail_data(multi_user_name, input_mail_id, output_mail_data)) != EMAIL_ERROR_NONE) || !output_mail_data)
1244 EM_DEBUG_EXCEPTION("emcore_get_mail_data failed [%d]", err);
1246 EM_SAFE_FREE(multi_user_name);
1248 EM_DEBUG_API_END("err[%d]", err);
1253 /* -----------------------------------------------------------
1255 -----------------------------------------------------------*/
1257 EXPORT_API int email_modify_seen_flag(int *mail_ids, int num, int seen_flag, int onserver)
1259 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1260 EM_DEBUG_API_BEGIN("mail_ids[%p] num[%d] seen_flag[%d] on_server[%d]", mail_ids, num, seen_flag, onserver);
1261 EM_DEBUG_API_END("EMAIL_ERROR_NOT_IMPLEMENTED");
1262 return EMAIL_ERROR_NOT_IMPLEMENTED;
1265 EXPORT_API int email_set_flags_field(int account_id, int *mail_ids, int num, email_flags_field_type field_type, int value, int onserver)
1267 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1268 EM_DEBUG_API_BEGIN("account_id[%d] mail_ids[%p] num[%d] field_type[%d] seen_flag[%d] on_server[%d]", account_id, mail_ids, num, field_type, value, onserver);
1270 int err = EMAIL_ERROR_NONE;
1273 EM_IF_NULL_RETURN_VALUE(mail_ids, EMAIL_ERROR_INVALID_PARAM);
1274 if (account_id == 0 || num <= 0 || (onserver != 0 && onserver != 1)) {
1275 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1276 return EMAIL_ERROR_INVALID_PARAM;
1279 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_SET_FLAGS_FIELD);
1282 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1283 err = EMAIL_ERROR_NULL_VALUE;
1288 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&account_id, sizeof(int))) {
1289 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1290 err = EMAIL_ERROR_OUT_OF_MEMORY;
1294 /* Number of mail_ids */
1295 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&num, sizeof(int))) {
1296 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1297 err = EMAIL_ERROR_OUT_OF_MEMORY;
1301 /* set of mail_ids */
1302 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)mail_ids, num * sizeof(int))) {
1303 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1304 err = EMAIL_ERROR_OUT_OF_MEMORY;
1309 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&field_type, sizeof(int))) {
1310 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1311 err = EMAIL_ERROR_OUT_OF_MEMORY;
1316 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&value, sizeof(int))) {
1317 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1318 err = EMAIL_ERROR_OUT_OF_MEMORY;
1323 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, &(onserver), sizeof(int))) {
1324 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1325 err = EMAIL_ERROR_OUT_OF_MEMORY;
1330 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1331 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1332 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1336 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1340 emipc_destroy_email_api(hAPI);
1342 EM_DEBUG_API_END("err[%d]", err);
1347 /* -----------------------------------------------------------
1349 -----------------------------------------------------------*/
1350 EXPORT_API int email_move_mail_to_mailbox(int *mail_ids, int num, int input_target_mailbox_id)
1352 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1353 EM_DEBUG_API_BEGIN("mail_ids[%p] num[%d] input_target_mailbox_id[%d]", mail_ids, num, input_target_mailbox_id);
1355 int err = EMAIL_ERROR_NONE;
1356 HIPC_API hAPI = NULL;
1358 if (input_target_mailbox_id <= 0) {
1359 EM_DEBUG_EXCEPTION("input_target_mailbox_id is invalid parameter");
1360 err = EMAIL_ERROR_INVALID_PARAM;
1363 EM_IF_NULL_RETURN_VALUE(mail_ids, EMAIL_ERROR_INVALID_PARAM);
1366 EM_DEBUG_LOG("num = %d", num);
1367 err = EMAIL_ERROR_INVALID_PARAM;
1371 hAPI = emipc_create_email_api(_EMAIL_API_MOVE_MAIL);
1374 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1375 err = EMAIL_ERROR_NULL_VALUE;
1379 /* Number of mail_ids */
1380 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&num, sizeof(int))) {
1381 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1382 err = EMAIL_ERROR_OUT_OF_MEMORY;
1386 /* set of mail_ids */
1387 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)mail_ids, num * sizeof(int))) {
1388 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1389 err = EMAIL_ERROR_OUT_OF_MEMORY;
1393 /* input_target_mailbox_id */
1394 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_target_mailbox_id, sizeof(int))) {
1395 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1396 err = EMAIL_ERROR_OUT_OF_MEMORY;
1401 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1402 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1403 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1407 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1411 emipc_destroy_email_api(hAPI);
1413 EM_DEBUG_API_END("err[%d]", err);
1418 EXPORT_API int email_move_all_mails_to_mailbox(int input_source_mailbox_id, int input_target_mailbox_id)
1420 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1421 EM_DEBUG_API_BEGIN("input_source_mailbox_id[%d] input_target_mailbox_id[%d]", input_source_mailbox_id, input_target_mailbox_id);
1423 int err = EMAIL_ERROR_NONE;
1424 HIPC_API hAPI = NULL;
1426 if (input_source_mailbox_id <= 0 || input_target_mailbox_id <= 0) {
1427 EM_DEBUG_EXCEPTION("mailbox_id is invalid parameter");
1428 err = EMAIL_ERROR_INVALID_PARAM;
1432 hAPI = emipc_create_email_api(_EMAIL_API_MOVE_ALL_MAIL);
1435 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1436 err = EMAIL_ERROR_NULL_VALUE;
1440 /* input_source_mailbox_id */
1441 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_source_mailbox_id, sizeof(int))) {
1442 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1443 err = EMAIL_ERROR_OUT_OF_MEMORY;
1447 /* input_target_mailbox_id */
1448 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_target_mailbox_id, sizeof(int))) {
1449 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1450 err = EMAIL_ERROR_OUT_OF_MEMORY;
1455 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1456 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1457 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1461 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1465 emipc_destroy_email_api(hAPI);
1467 EM_DEBUG_API_END("err[%d]", err);
1471 EXPORT_API int email_move_mails_to_mailbox_of_another_account(int input_source_mailbox_id, int *input_mail_id_array, int input_mail_id_count, int input_target_mailbox_id, int *output_task_id)
1473 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1474 EM_DEBUG_API_BEGIN("input_source_mailbox_id[%d] input_mail_id_array[%p] input_mail_id_count[%d] input_target_mailbox_id[%d] output_task_id[%p]", input_source_mailbox_id, input_mail_id_array, input_mail_id_count, input_target_mailbox_id, output_task_id);
1476 int err = EMAIL_ERROR_NONE;
1477 task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT task_parameter;
1479 if (input_source_mailbox_id <= 0 || input_target_mailbox_id <= 0 || input_mail_id_array == NULL || input_mail_id_count == 0) {
1480 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1481 err = EMAIL_ERROR_INVALID_PARAM;
1485 task_parameter.source_mailbox_id = input_source_mailbox_id;
1486 task_parameter.mail_id_array = input_mail_id_array;
1487 task_parameter.mail_id_count = input_mail_id_count;
1488 task_parameter.target_mailbox_id = input_target_mailbox_id;
1490 if ((err = emipc_execute_proxy_task(EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT, &task_parameter)) != EMAIL_ERROR_NONE) {
1491 EM_DEBUG_EXCEPTION("execute_proxy_task failed [%d]", err);
1497 EM_DEBUG_API_END("err[%d]", err);
1500 /* LCOV_EXCL_STOP */
1501 EXPORT_API int email_free_mail_data(email_mail_data_t** mail_list, int count)
1503 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1504 EM_DEBUG_FUNC_BEGIN("mail_list[%p] count[%d]", mail_list, count);
1505 int err = EMAIL_ERROR_NONE;
1507 EM_IF_NULL_RETURN_VALUE(mail_list, EMAIL_ERROR_INVALID_PARAM);
1509 emcore_free_mail_data_list(mail_list, count);
1510 EM_DEBUG_FUNC_END("err[%d]", err);
1514 /* Convert Modified UTF-7 mailbox name to UTF-8 */
1515 /* returns modified UTF-8 Name if success else NULL */
1516 /* LCOV_EXCL_START */
1517 EXPORT_API int email_cancel_sending_mail(int mail_id)
1519 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1520 EM_DEBUG_API_BEGIN("mail_id[%d]", mail_id);
1521 EM_IF_NULL_RETURN_VALUE(mail_id, EMAIL_ERROR_INVALID_PARAM);
1523 int err = EMAIL_ERROR_NONE;
1525 char *multi_user_name = NULL;
1526 email_mail_data_t* mail_data = NULL;
1527 email_account_server_t account_server_type;
1528 HIPC_API hAPI = NULL;
1530 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1531 EM_DEBUG_EXCEPTION("emipc_get_container_name error : [%d]", err);
1535 if (((err = emcore_get_mail_data(multi_user_name, mail_id, &mail_data)) != EMAIL_ERROR_NONE) || mail_data == NULL) {
1536 EM_DEBUG_EXCEPTION("emcore_get_mail_data failed [%d]", err);
1540 account_id = mail_data->account_id;
1542 /* check account bind type and branch off */
1543 if (em_get_account_server_type_by_account_id(multi_user_name, account_id, &account_server_type, false, &err) == false) {
1544 EM_DEBUG_EXCEPTION("em_get_account_server_type_by_account_id failed[%d]", err);
1545 err = EMAIL_ERROR_ACTIVE_SYNC_NOTI_FAILURE;
1549 if (account_server_type == EMAIL_SERVER_TYPE_ACTIVE_SYNC) {
1551 ASNotiData as_noti_data;
1552 if (em_get_handle_for_activesync(&as_handle, &err) == false) {
1553 EM_DEBUG_EXCEPTION("em_get_handle_for_activesync failed[%d].", err);
1554 err = EMAIL_ERROR_ACTIVE_SYNC_NOTI_FAILURE;
1558 /* noti to active sync */
1559 as_noti_data.cancel_sending_mail.handle = as_handle;
1560 as_noti_data.cancel_sending_mail.mail_id = mail_id;
1561 as_noti_data.cancel_sending_mail.account_id = account_id;
1562 as_noti_data.cancel_sending_mail.multi_user_name = EM_SAFE_STRDUP(multi_user_name);
1564 if (em_send_notification_to_active_sync_engine(ACTIVE_SYNC_NOTI_CANCEL_SENDING_MAIL, &as_noti_data) == false) {
1565 EM_DEBUG_EXCEPTION("em_send_notification_to_active_sync_engine failed.");
1566 err = EMAIL_ERROR_ACTIVE_SYNC_NOTI_FAILURE;
1570 hAPI = emipc_create_email_api(_EMAIL_API_SEND_MAIL_CANCEL_JOB);
1573 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1574 err = EMAIL_ERROR_NULL_VALUE;
1579 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, &account_id, sizeof(int))) {
1580 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1581 err = EMAIL_ERROR_OUT_OF_MEMORY;
1586 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, &(mail_id), sizeof(int))) {
1587 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1588 err = EMAIL_ERROR_OUT_OF_MEMORY;
1593 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1594 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1595 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1599 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1604 emipc_destroy_email_api(hAPI);
1607 emcore_free_mail_data_list(&mail_data, 1);
1609 EM_SAFE_FREE(multi_user_name);
1611 EM_DEBUG_API_END("err[%d]", err);
1616 EXPORT_API int email_retry_sending_mail(int mail_id, int timeout_in_sec)
1618 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1619 EM_DEBUG_API_BEGIN("mail_id[%d]", mail_id);
1621 int err = EMAIL_ERROR_NONE;
1623 EM_IF_NULL_RETURN_VALUE(mail_id, EMAIL_ERROR_INVALID_PARAM);
1624 if (timeout_in_sec < 0) {
1625 EM_DEBUG_EXCEPTION("Invalid timeout_in_sec");
1626 err = EMAIL_ERROR_INVALID_PARAM;
1630 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_SEND_RETRY);
1633 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1634 err = EMAIL_ERROR_NULL_VALUE;
1639 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, &(mail_id), sizeof(int))) {
1640 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1641 err = EMAIL_ERROR_OUT_OF_MEMORY;
1646 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, &(timeout_in_sec), sizeof(int))) {
1647 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1648 err = EMAIL_ERROR_OUT_OF_MEMORY;
1653 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1654 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1655 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1659 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1663 emipc_destroy_email_api(hAPI);
1665 EM_DEBUG_API_END("err[%d]", err);
1670 EXPORT_API int email_get_max_mail_count(int *Count)
1672 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1673 EM_DEBUG_API_BEGIN();
1674 int err = EMAIL_ERROR_NONE;
1675 EM_IF_NULL_RETURN_VALUE(Count, EMAIL_ERROR_INVALID_PARAM);
1676 *Count = emstorage_get_max_mail_count();
1677 EM_DEBUG_API_END("err[%d]", err);
1683 /* for setting application,disk usage of email in KB */
1684 EXPORT_API int email_get_disk_space_usage(unsigned long *total_size)
1686 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1687 EM_DEBUG_API_BEGIN("total_size[%p]", total_size);
1688 int err = EMAIL_ERROR_NONE;
1690 EM_IF_NULL_RETURN_VALUE(total_size, EMAIL_ERROR_INVALID_PARAM);
1692 if (!emstorage_mail_get_total_diskspace_usage(total_size, true, &err)) {
1693 EM_DEBUG_EXCEPTION("emstorage_mail_get_total_diskspace_usage failed [%d]", err);
1700 EM_DEBUG_API_END("err[%d]", err);
1704 EXPORT_API int email_get_address_info_list(int mail_id, email_address_info_list_t** address_info_list)
1706 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1707 EM_DEBUG_FUNC_BEGIN("mail_id[%d] address_info_list[%p]", mail_id, address_info_list);
1709 int err = EMAIL_ERROR_NONE;
1710 char *multi_user_name = NULL;
1712 email_address_info_list_t *temp_address_info_list = NULL;
1714 EM_IF_NULL_RETURN_VALUE(address_info_list, EMAIL_ERROR_INVALID_PARAM);
1716 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1717 err = EMAIL_ERROR_INVALID_PARAM ;
1721 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1722 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1726 if (!emcore_get_mail_address_info_list(multi_user_name, mail_id, &temp_address_info_list, &err)) {
1727 EM_DEBUG_EXCEPTION("emcore_get_mail_address_info_list failed [%d]", err);
1731 if (address_info_list) {
1732 *address_info_list = temp_address_info_list;
1733 temp_address_info_list = NULL;
1738 if (temp_address_info_list)
1739 emstorage_free_address_info_list(&temp_address_info_list);
1741 EM_SAFE_FREE(multi_user_name);
1742 EM_DEBUG_FUNC_END("err[%d]", err);
1746 EXPORT_API int email_free_address_info_list(email_address_info_list_t **address_info_list)
1748 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1749 EM_DEBUG_FUNC_BEGIN("address_info_list[%p]", address_info_list);
1751 int err = EMAIL_ERROR_NONE;
1753 if ((err = emstorage_free_address_info_list(address_info_list)) != EMAIL_ERROR_NONE) {
1754 EM_DEBUG_EXCEPTION("address_info_list[%p] free failed.", address_info_list);
1756 EM_DEBUG_FUNC_END("err[%d]", err);
1760 EXPORT_API int email_query_meeting_request(char *input_conditional_clause_string, email_meeting_request_t **output_meeting_req, int *output_count)
1762 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1763 EM_DEBUG_API_BEGIN("input_conditional_clause_string[%s] output_meeting_req[%p] output_count[%p]", input_conditional_clause_string, output_meeting_req, output_count);
1764 int err = EMAIL_ERROR_NONE;
1765 char *multi_user_name = NULL;
1767 EM_IF_NULL_RETURN_VALUE(input_conditional_clause_string, EMAIL_ERROR_INVALID_PARAM);
1768 EM_IF_NULL_RETURN_VALUE(output_count, EMAIL_ERROR_INVALID_PARAM);
1770 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1771 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1775 if ((err = emstorage_query_meeting_request(multi_user_name, input_conditional_clause_string, output_meeting_req, output_count, true)) != EMAIL_ERROR_NONE) {
1776 EM_DEBUG_EXCEPTION("emstorage_query_meeting_request failed [%d]", err);
1779 EM_SAFE_FREE(multi_user_name);
1781 EM_DEBUG_API_END("err[%d]", err);
1785 EXPORT_API int email_get_meeting_request(int mail_id, email_meeting_request_t **meeting_req)
1787 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1788 EM_DEBUG_API_BEGIN("mail_id[%d] meeting_req[%p]", mail_id, meeting_req);
1790 int err = EMAIL_ERROR_NONE;
1791 char *multi_user_name = NULL;
1792 email_meeting_request_t *temp_meeting_req = NULL;
1794 EM_IF_NULL_RETURN_VALUE(meeting_req, EMAIL_ERROR_INVALID_PARAM);
1796 EM_DEBUG_EXCEPTION(" Invalid Mail Id Param ");
1797 err = EMAIL_ERROR_INVALID_PARAM ;
1801 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
1802 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
1806 if (!emstorage_get_meeting_request(multi_user_name, mail_id, &temp_meeting_req, 1, &err)) {
1807 EM_DEBUG_EXCEPTION("emstorage_get_meeting_request failed[%d]", err);
1812 *meeting_req = temp_meeting_req;
1816 EM_SAFE_FREE(multi_user_name);
1818 EM_DEBUG_API_END("err[%d]", err);
1822 EXPORT_API int email_free_meeting_request(email_meeting_request_t** meeting_req, int count)
1824 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1825 EM_DEBUG_FUNC_BEGIN("meeting_req[%p] count[%d]", meeting_req, count);
1826 if (!meeting_req || !*meeting_req) {
1827 EM_DEBUG_EXCEPTION("NULL PARAM");
1828 return EMAIL_ERROR_INVALID_PARAM;
1832 email_meeting_request_t *cur = *meeting_req;
1833 for (; i < count ; i++)
1834 emstorage_free_meeting_request(cur + i);
1836 EM_SAFE_FREE(*meeting_req);
1838 EM_DEBUG_FUNC_END();
1839 return EMAIL_ERROR_NONE;
1842 EXPORT_API int email_move_thread_to_mailbox(int thread_id, int target_mailbox_id, int move_always_flag)
1844 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1845 EM_DEBUG_API_BEGIN("thread_id[%d] target_mailbox_id[%d] move_always_flag[%d]", thread_id, target_mailbox_id, move_always_flag);
1846 int err = EMAIL_ERROR_NONE;
1848 EM_IF_NULL_RETURN_VALUE(target_mailbox_id, EMAIL_ERROR_INVALID_PARAM);
1850 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_MOVE_THREAD_TO_MAILBOX);
1853 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1854 err = EMAIL_ERROR_NULL_VALUE;
1859 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&thread_id, sizeof(int))) {
1860 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1861 err = EMAIL_ERROR_OUT_OF_MEMORY;
1865 /* target mailbox information */
1866 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&target_mailbox_id, sizeof(int))) {
1867 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1868 err = EMAIL_ERROR_OUT_OF_MEMORY;
1872 /* move_always_flag */
1873 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&move_always_flag, sizeof(int))) {
1874 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1875 err = EMAIL_ERROR_OUT_OF_MEMORY;
1880 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1881 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1882 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1886 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1890 emipc_destroy_email_api(hAPI);
1892 EM_DEBUG_API_END("err[%d]", err);
1896 EXPORT_API int email_delete_thread(int thread_id, int delete_always_flag)
1898 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1899 EM_DEBUG_API_BEGIN("thread_id[%d] delete_always_flag[%d]", thread_id, delete_always_flag);
1900 int err = EMAIL_ERROR_NONE;
1902 if (thread_id <= 0) {
1903 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1904 err = EMAIL_ERROR_INVALID_PARAM;
1908 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_DELETE_THREAD);
1911 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1912 err = EMAIL_ERROR_NULL_VALUE;
1917 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&thread_id, sizeof(int))) {
1918 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1919 err = EMAIL_ERROR_OUT_OF_MEMORY;
1923 /* delete_always_flag */
1924 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&delete_always_flag, sizeof(int))) {
1925 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1926 err = EMAIL_ERROR_OUT_OF_MEMORY;
1931 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1932 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1933 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1937 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
1942 emipc_destroy_email_api(hAPI);
1944 EM_DEBUG_API_END("err[%d]", err);
1948 EXPORT_API int email_modify_seen_flag_of_thread(int thread_id, int seen_flag, int on_server)
1950 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
1951 EM_DEBUG_API_BEGIN("thread_id[%d] seen_flag[%d] on_server[%d]", thread_id, seen_flag, on_server);
1952 int err = EMAIL_ERROR_NONE;
1954 if (thread_id <= 0) {
1955 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
1956 err = EMAIL_ERROR_INVALID_PARAM;
1960 HIPC_API hAPI = emipc_create_email_api(_EMAIL_API_MODIFY_SEEN_FLAG_OF_THREAD);
1963 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
1964 err = EMAIL_ERROR_NULL_VALUE;
1969 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&thread_id, sizeof(int))) {
1970 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1971 err = EMAIL_ERROR_OUT_OF_MEMORY;
1976 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&seen_flag, sizeof(int))) {
1977 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1978 err = EMAIL_ERROR_OUT_OF_MEMORY;
1983 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&on_server, sizeof(int))) {
1984 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
1985 err = EMAIL_ERROR_OUT_OF_MEMORY;
1990 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
1991 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
1992 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
1996 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
2000 emipc_destroy_email_api(hAPI);
2001 EM_DEBUG_API_END("err[%d]", err);
2005 EXPORT_API int email_expunge_mails_deleted_flagged(int input_mailbox_id, int input_on_server, int *output_handle)
2007 CHECK_EMAILS_SUPPORTED(EMAIL_FEATURE);
2008 EM_DEBUG_API_BEGIN("input_mailbox_id[%d] input_on_server[%d] output_handle[%p]", input_mailbox_id, input_on_server, output_handle);
2009 int err = EMAIL_ERROR_NONE;
2010 int return_value = 0;
2011 char *multi_user_name = NULL;
2012 HIPC_API hAPI = NULL;
2013 emstorage_mailbox_tbl_t *mailbox_tbl_data = NULL;
2015 if ((err = emipc_get_user_name(&multi_user_name)) != EMAIL_ERROR_NONE) {
2016 EM_DEBUG_EXCEPTION("emipc_get_user_name failed : [%d]", err);
2020 if ((err = emstorage_get_mailbox_by_id(multi_user_name, input_mailbox_id, &mailbox_tbl_data)) != EMAIL_ERROR_NONE) {
2021 EM_DEBUG_EXCEPTION("emstorage_get_mailbox_by_id failed[%d]", err);
2025 email_account_server_t account_server_type = EMAIL_SERVER_TYPE_NONE;
2026 ASNotiData as_noti_data;
2028 memset(&as_noti_data, 0, sizeof(ASNotiData)); /* initialization of union members */
2030 if (em_get_account_server_type_by_account_id(multi_user_name, mailbox_tbl_data->account_id, &account_server_type, true, &err) == false) {
2031 EM_DEBUG_EXCEPTION("em_get_account_server_type_by_account_id failed[%d]", err);
2035 if (account_server_type == EMAIL_SERVER_TYPE_ACTIVE_SYNC && input_on_server == true) {
2038 if (em_get_handle_for_activesync(&as_handle, &err) == false) {
2039 EM_DEBUG_EXCEPTION("em_get_handle_for_activesync failed[%d].", err);
2043 /* noti to active sync */
2044 as_noti_data.expunge_mails_deleted_flagged.handle = as_handle;
2045 as_noti_data.expunge_mails_deleted_flagged.account_id = mailbox_tbl_data->account_id;
2046 as_noti_data.expunge_mails_deleted_flagged.mailbox_id = input_mailbox_id;
2047 as_noti_data.expunge_mails_deleted_flagged.on_server = input_on_server;
2048 as_noti_data.expunge_mails_deleted_flagged.multi_user_name = multi_user_name;
2050 return_value = em_send_notification_to_active_sync_engine(ACTIVE_SYNC_NOTI_EXPUNGE_MAILS_DELETED_FLAGGED, &as_noti_data);
2052 if (return_value == false) {
2053 EM_DEBUG_EXCEPTION("em_send_notification_to_active_sync_engine failed.");
2054 err = EMAIL_ERROR_ACTIVE_SYNC_NOTI_FAILURE;
2059 *output_handle = as_handle;
2062 hAPI = emipc_create_email_api(_EMAIL_API_EXPUNGE_MAILS_DELETED_FLAGGED);
2065 EM_DEBUG_EXCEPTION("emipc_create_email_api failed");
2066 err = EMAIL_ERROR_NULL_VALUE;
2070 /* input_mailbox_id */
2071 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_mailbox_id, sizeof(int))) {
2072 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
2073 err = EMAIL_ERROR_OUT_OF_MEMORY;
2077 /* input_on_server */
2078 if (!emipc_add_parameter(hAPI, ePARAMETER_IN, (char*)&input_on_server, sizeof(int))) {
2079 EM_DEBUG_EXCEPTION("emipc_add_parameter failed");
2080 err = EMAIL_ERROR_OUT_OF_MEMORY;
2085 if (emipc_execute_proxy_api(hAPI) != EMAIL_ERROR_NONE) {
2086 EM_DEBUG_EXCEPTION("emipc_execute_proxy_api failed");
2087 err = EMAIL_ERROR_IPC_SOCKET_FAILURE;
2091 emipc_get_parameter(hAPI, ePARAMETER_OUT, 0, sizeof(int), &err);
2092 if (err == EMAIL_ERROR_NONE) {
2094 emipc_get_parameter(hAPI, ePARAMETER_OUT, 1, sizeof(int), output_handle);
2101 emipc_destroy_email_api(hAPI);
2103 if (mailbox_tbl_data) {
2104 emstorage_free_mailbox(&mailbox_tbl_data, 1, NULL);
2107 EM_SAFE_FREE(multi_user_name);
2108 EM_DEBUG_API_END("err[%d]", err);
2111 /* LCOV_EXCL_STOP */