4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
\r
6 * Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
\r
8 * Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * you may not use this file except in compliance with the License.
\r
10 * You may obtain a copy of the License at
\r
12 * http://www.apache.org/licenses/LICENSE-2.0
\r
14 * Unless required by applicable law or agreed to in writing, software
\r
15 * distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * See the License for the specific language governing permissions and
\r
18 * limitations under the License.
\r
24 * Created on: 2012. 11. 5.
\r
25 * Author: kyuho.jo@samsung.com
\r
32 #include "email-debug-log.h"
\r
33 #include "email-utilities.h"
\r
34 #include "email-internal-types.h"
\r
35 #include "email-core-tasks.h"
\r
36 #include "email-core-task-manager.h"
\r
37 #include "email-core-mail.h"
\r
38 #include "email-core-mailbox-sync.h"
\r
39 #include "email-core-signal.h"
\r
42 /*-------------------------------------------------------------------------------------------*/
\r
43 /* to handle EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT */
\r
44 #define task_parameter_format_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT "iiiB"
\r
46 INTERNAL_FUNC int email_encode_task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT(void *input_task_parameter_struct, char **output_byte_stream, int *output_stream_size)
\r
48 EM_DEBUG_FUNC_BEGIN("input_task_parameter_struct [%p] output_byte_stream [%p] output_stream_size [%p]", input_task_parameter_struct, output_byte_stream, output_stream_size);
\r
50 int err = EMAIL_ERROR_NONE;
\r
51 task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT *task_parameter = input_task_parameter_struct;
\r
53 tpl_node *tn = NULL;
\r
54 void *result_data = NULL;
\r
55 size_t result_data_length = 0;
\r
57 if (task_parameter == NULL || output_byte_stream == NULL || output_stream_size == NULL) {
\r
58 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
\r
59 err = EMAIL_ERROR_INVALID_PARAM;
\r
63 tn = tpl_map(task_parameter_format_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT
\r
64 , &task_parameter->source_mailbox_id
\r
65 , &task_parameter->target_mailbox_id
\r
66 , &task_parameter->mail_id_count
\r
68 tb.sz = sizeof(int) * task_parameter->mail_id_count;
\r
69 tb.addr = task_parameter->mail_id_array;
\r
71 tpl_dump(tn, TPL_MEM, &result_data, &result_data_length);
\r
74 *output_byte_stream = result_data;
\r
75 *output_stream_size = result_data_length;
\r
79 EM_DEBUG_FUNC_END("err [%d]", err);
\r
80 return EMAIL_ERROR_NONE;
\r
83 INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT(char *input_byte_stream, int input_stream_size, void **output_task_parameter_struct)
\r
85 EM_DEBUG_FUNC_BEGIN("input_byte_stream [%p] input_stream_size [%d] output_task_parameter_struct [%p]", input_byte_stream, input_stream_size, output_task_parameter_struct);
\r
86 int err = EMAIL_ERROR_NONE;
\r
88 tpl_node *tn = NULL;
\r
89 task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT *task_parameter = NULL;
\r
91 if (input_byte_stream == NULL || input_stream_size == 0 || output_task_parameter_struct == NULL) {
\r
92 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
\r
93 err = EMAIL_ERROR_INVALID_PARAM;
\r
97 task_parameter = em_malloc(sizeof(task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT));
\r
99 if(task_parameter == NULL) {
\r
100 EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");
\r
101 err = EMAIL_ERROR_OUT_OF_MEMORY;
\r
105 tn = tpl_map(task_parameter_format_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT
\r
106 , &task_parameter->source_mailbox_id
\r
107 , &task_parameter->target_mailbox_id
\r
108 , &task_parameter->mail_id_count
\r
110 tpl_load(tn, TPL_MEM, input_byte_stream, input_stream_size);
\r
112 if(task_parameter->mail_id_count <= 0 || tb.addr == NULL) {
\r
113 EM_DEBUG_LOG("No mail id list. mail_id_count[%d] addr[%p]", task_parameter->mail_id_count, tb.addr);
\r
116 task_parameter->mail_id_array = tb.addr;
\r
119 *output_task_parameter_struct = task_parameter;
\r
126 EM_DEBUG_FUNC_END("err [%d]", err);
\r
127 return EMAIL_ERROR_NONE;
\r
130 INTERNAL_FUNC void* task_handler_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT(void *input_param)
\r
132 EM_DEBUG_FUNC_BEGIN("input_param [%p]", input_param);
\r
133 int err = EMAIL_ERROR_NONE;
\r
134 int err_for_signal = EMAIL_ERROR_NONE;
\r
136 int task_id = THREAD_SELF();
\r
137 task_parameter_EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT *task_param = input_param;
\r
139 for(i = 0; i < task_param->mail_id_count; i++) {
\r
140 if((err = emcore_move_mail_to_another_account(task_param->mail_id_array[i], task_param->source_mailbox_id, task_param->target_mailbox_id, task_id)) != EMAIL_ERROR_NONE) {
\r
141 EM_DEBUG_EXCEPTION("emcore_move_mail_to_another_account failed [%d]", err);
\r
145 /* Send progress signal */
\r
146 if((err_for_signal = emcore_send_task_status_signal(EMAIL_ASYNC_TASK_MOVE_MAILS_TO_MAILBOX_OF_ANOTHER_ACCOUNT, task_id, EMAIL_TASK_STATUS_IN_PROGRESS, i, task_param->mail_id_count)) != EMAIL_ERROR_NONE)
\r
147 EM_DEBUG_LOG("emcore_send_task_status_signal failed [%d]", err_for_signal);
\r
151 /* Free task parameter */
\r
152 EM_SAFE_FREE(task_param->mail_id_array);
\r
153 EM_SAFE_FREE(task_param);
\r
155 EM_DEBUG_FUNC_END("err [%d]", err);
\r
158 /*-------------------------------------------------------------------------------------------*/
\r
159 /* to handle EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX */
\r
160 #define task_parameter_format_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX "iiBi"
\r
162 INTERNAL_FUNC int email_encode_task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX(void *input_task_parameter_struct, char **output_byte_stream, int *output_stream_size)
\r
164 EM_DEBUG_FUNC_BEGIN("input_task_parameter_struct [%p] output_byte_stream [%p] output_stream_size [%p]", input_task_parameter_struct, output_byte_stream, output_stream_size);
\r
166 int err = EMAIL_ERROR_NONE;
\r
167 task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX *task_parameter = input_task_parameter_struct;
\r
169 tpl_node *tn = NULL;
\r
170 void *result_data = NULL;
\r
171 size_t result_data_length = 0;
\r
173 if (task_parameter == NULL || output_byte_stream == NULL || output_stream_size == NULL) {
\r
174 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
\r
175 err = EMAIL_ERROR_INVALID_PARAM;
\r
179 tn = tpl_map(task_parameter_format_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX
\r
180 , &task_parameter->account_id
\r
181 , &task_parameter->mailbox_id_count
\r
183 , &task_parameter->on_server);
\r
184 tb.sz = sizeof(int) * task_parameter->mailbox_id_count;
\r
185 tb.addr = task_parameter->mailbox_id_array;
\r
187 tpl_dump(tn, TPL_MEM, &result_data, &result_data_length);
\r
190 *output_byte_stream = result_data;
\r
191 *output_stream_size = result_data_length;
\r
195 EM_DEBUG_FUNC_END("err [%d]", err);
\r
196 return EMAIL_ERROR_NONE;
\r
199 INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX(char *input_byte_stream, int input_stream_size, void **output_task_parameter_struct)
\r
201 EM_DEBUG_FUNC_BEGIN("input_byte_stream [%p] input_stream_size [%d] output_task_parameter_struct [%p]", input_byte_stream, input_stream_size, output_task_parameter_struct);
\r
202 int err = EMAIL_ERROR_NONE;
\r
204 tpl_node *tn = NULL;
\r
205 task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX *task_parameter = NULL;
\r
207 if (input_byte_stream == NULL || input_stream_size == 0 || output_task_parameter_struct == NULL) {
\r
208 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
\r
209 err = EMAIL_ERROR_INVALID_PARAM;
\r
213 task_parameter = em_malloc(sizeof(task_parameter_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX));
\r
215 if(task_parameter == NULL) {
\r
216 EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");
\r
217 err = EMAIL_ERROR_OUT_OF_MEMORY;
\r
221 tn = tpl_map(task_parameter_format_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX
\r
222 , &task_parameter->account_id
\r
223 , &task_parameter->mailbox_id_count
\r
225 , &task_parameter->on_server);
\r
226 tpl_load(tn, TPL_MEM, input_byte_stream, input_stream_size);
\r
228 if(task_parameter->mailbox_id_count <= 0 || tb.addr == NULL) {
\r
229 EM_DEBUG_LOG("No mail id list. mail_id_count[%d] addr[%p]", task_parameter->mailbox_id_count, tb.addr);
\r
232 task_parameter->mailbox_id_array = tb.addr;
\r
235 *output_task_parameter_struct = task_parameter;
\r
242 EM_DEBUG_FUNC_END("err [%d]", err);
\r
243 return EMAIL_ERROR_NONE;
\r
246 INTERNAL_FUNC void* task_handler_EMAIL_ASYNC_TASK_DELETE_MAILBOX_EX(void *input_param)
\r
250 /*-------------------------------------------------------------------------------------------*/
\r
251 /* to handle EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL */
\r
252 #define task_parameter_format_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL "i"
\r
254 INTERNAL_FUNC int email_encode_task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL(void *input_task_parameter_struct, char **output_byte_stream, int *output_stream_size)
\r
256 EM_DEBUG_FUNC_BEGIN("input_task_parameter_struct [%p] output_byte_stream [%p] output_stream_size [%p]", input_task_parameter_struct, output_byte_stream, output_stream_size);
\r
258 int err = EMAIL_ERROR_NONE;
\r
259 task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL *task_parameter = input_task_parameter_struct;
\r
260 tpl_node *tn = NULL;
\r
261 void *result_data = NULL;
\r
262 size_t result_data_length = 0;
\r
264 if (task_parameter == NULL || output_byte_stream == NULL || output_stream_size == NULL) {
\r
265 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
\r
266 err = EMAIL_ERROR_INVALID_PARAM;
\r
270 tn = tpl_map(task_parameter_format_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL
\r
271 , &task_parameter->mail_id);
\r
273 tpl_dump(tn, TPL_MEM, &result_data, &result_data_length);
\r
276 *output_byte_stream = result_data;
\r
277 *output_stream_size = result_data_length;
\r
281 EM_DEBUG_FUNC_END("err [%d]", err);
\r
282 return EMAIL_ERROR_NONE;
\r
285 INTERNAL_FUNC int email_decode_task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL(char *input_byte_stream, int input_stream_size, void **output_task_parameter_struct)
\r
287 EM_DEBUG_FUNC_BEGIN("input_byte_stream [%p] input_stream_size [%d] output_task_parameter_struct [%p]", input_byte_stream, input_stream_size, output_task_parameter_struct);
\r
288 int err = EMAIL_ERROR_NONE;
\r
289 tpl_node *tn = NULL;
\r
290 task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL *task_parameter = NULL;
\r
292 if (input_byte_stream == NULL || input_stream_size == 0 || output_task_parameter_struct == NULL) {
\r
293 EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
\r
294 err = EMAIL_ERROR_INVALID_PARAM;
\r
298 task_parameter = em_malloc(sizeof(task_parameter_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL));
\r
300 if(task_parameter == NULL) {
\r
301 EM_DEBUG_EXCEPTION("EMAIL_ERROR_OUT_OF_MEMORY");
\r
302 err = EMAIL_ERROR_OUT_OF_MEMORY;
\r
306 tn = tpl_map(task_parameter_format_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL
\r
307 , &task_parameter->mail_id);
\r
308 tpl_load(tn, TPL_MEM, input_byte_stream, input_stream_size);
\r
311 *output_task_parameter_struct = task_parameter;
\r
318 EM_DEBUG_FUNC_END("err [%d]", err);
\r
319 return EMAIL_ERROR_NONE;
\r
322 INTERNAL_FUNC void* task_handler_EMAIL_ASYNC_TASK_SEND_MAIL_WITH_DOWNLOADING_ATTACHMENT_OF_ORIGINAL_MAIL(void *input_param)
\r
326 /*-------------------------------------------------------------------------------------------*/
\r